Skip to content

Commit

Permalink
Merge pull request #98 from PnX-SI/develop
Browse files Browse the repository at this point in the history
Develop > Master / 1.3.4
  • Loading branch information
camillemonchicourt authored Feb 28, 2024
2 parents e7b116f + 3332bf0 commit 3b61463
Show file tree
Hide file tree
Showing 35 changed files with 216 additions and 82 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.3.3
1.3.4
4 changes: 1 addition & 3 deletions backend/gn_modulator/imports/mixins/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ def pretty_errors_txt(self):
key_txt = (
f"'{relation_key}.{key}' : "
if key and relation_key
else f"'{key}' : "
if key
else ""
else f"'{key}' : " if key else ""
)
txt = f"- {key_txt}{error['error_msg']}\n"
for info in error.get("error_infos", []):
Expand Down
44 changes: 23 additions & 21 deletions backend/gn_modulator/imports/mixins/process.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,25 +64,27 @@ def sql_process_import_view(self, from_table, dest_table, relation_key=None):
columns = (
[relation_key]
if relation_key and self.Model().is_relation_n_n(relation_key)
else list(
filter(
lambda x: (
self.Model().is_column(x)
and x.startswith(f"{relation_key}.")
and not x == self.Model().pk_field_name()
),
from_table_columns,
else (
list(
filter(
lambda x: (
self.Model().is_column(x)
and x.startswith(f"{relation_key}.")
and not x == self.Model().pk_field_name()
),
from_table_columns,
)
)
)
if relation_key and self.Model().is_relation_1_n(relation_key)
else list(
filter(
lambda x: (
self.Model().is_column(x)
and "." not in x
and not x == self.Model().pk_field_name()
),
from_table_columns,
if relation_key and self.Model().is_relation_1_n(relation_key)
else list(
filter(
lambda x: (
self.Model().is_column(x)
and "." not in x
and not x == self.Model().pk_field_name()
),
from_table_columns,
)
)
)
)
Expand Down Expand Up @@ -271,9 +273,9 @@ def resolve_key(
v_join += v_join_inter

# clarifier link oin
link_joins[
k_unique
] = f"{alias_join}_{index_unique}.{SchemaMethods(rel_schema_code).Model().pk_field_name()}"
link_joins[k_unique] = (
f"{alias_join}_{index_unique}.{SchemaMethods(rel_schema_code).Model().pk_field_name()}"
)

# conditions de jointures
v_join_on = []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Create Date: 2023-03-03 14:31:35.339631
"""

from alembic import op
import sqlalchemy as sa

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Create Date: 2023-12-15 14:20:55.639520
"""

from alembic import op
import sqlalchemy as sa

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Create Date: 2023-10-09 15:55:41.769219
"""

from alembic import op
import sqlalchemy as sa

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Create Date: 2023-06-20 15:19:21.097194
"""

from alembic import op
import sqlalchemy as sa
from gn_modulator import MODULE_CODE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
Revises:
Create Date: 2021-09-15 11:49:24.512562
"""

from alembic import op
from sqlalchemy.sql import text
import pkg_resources
Expand Down
9 changes: 7 additions & 2 deletions backend/gn_modulator/module/breadcrumbs.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from geonature.utils.env import db
from sqlalchemy.orm.exc import NoResultFound
from gn_modulator.schema import SchemaMethods
from gn_modulator.utils.commons import getAttr
from gn_modulator import MODULE_CODE
Expand Down Expand Up @@ -39,7 +39,12 @@ def breadcrumbs(cls, module_code, page_code, data):
q = sm.get_row(
data[sm.Model().pk_field_name()], module_code=module_code, params={}
)
m = q.one()
# patch apres delete...
try:
m = q.one()
except NoResultFound:
return parent_breadcrumbs

data_label = sm.serialize(m, fields=[sm.label_field_name()])
# label_page = f"{sm.label()} {data_label[sm.label_field_name()]}"
label_page = f"{sm.label()} {getAttr(data_label, sm.label_field_name())}"
Expand Down
1 change: 1 addition & 0 deletions backend/gn_modulator/query/filters.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
repositories - filters
"""

import unidecode
import sqlalchemy as sa
from geonature.utils.env import db
Expand Down
8 changes: 5 additions & 3 deletions backend/gn_modulator/query/getattr.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,11 @@ def getModelAttr(Model, query, field_name, only_fields="", index=0, condition=No
current_Model = (
get_query_cache(query, current_relation_cache_key)["relation_alias"]
if query is not None and current_relation_cache_key
else Model.relation_Model(current_relation_cache_key)
if current_relation_cache_key
else Model
else (
Model.relation_Model(current_relation_cache_key)
if current_relation_cache_key
else Model
)
)

res = {"val": getattr(current_Model, current_field)}
Expand Down
34 changes: 26 additions & 8 deletions backend/gn_modulator/routes/utils/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ def get_list_rest(module_code, object_code, additional_params={}):
schema_code = ModuleMethods.schema_code(module_code, object_code)
sm = SchemaMethods(schema_code)

id_role = g.current_user.id_role

# on peut redéfinir le module_code pour le choix des droits
permission_module_code = object_definition.get("module_code", module_code)
params = {**parse_request_args(object_definition), **additional_params}
Expand All @@ -22,7 +24,11 @@ def get_list_rest(module_code, object_code, additional_params={}):
{}
if params.get("no_info")
else sm.get_query_infos(
module_code=permission_module_code, action=action, params=params, url=request.url
module_code=permission_module_code,
action=action,
params=params,
url=request.url,
id_role=id_role,
)
)

Expand All @@ -32,11 +38,12 @@ def get_list_rest(module_code, object_code, additional_params={}):
action=action,
params=params,
query_type="select",
id_role=id_role,
)

if params.get("sql"):
# test si droit admin
if not has_any_permissions("R", g.current_user.id_role, "MODULATOR", "ADMIN"):
if not has_any_permissions("R", id_role, "MODULATOR", "ADMIN"):
return (
"Vous n'avez pas les droit pour effectuer des actions d'admin pour le module MODULATOR",
403,
Expand Down Expand Up @@ -70,7 +77,7 @@ def get_one_rest(module_code, object_code, value):
object_definition = ModuleMethods.object_config(module_code, object_code)
schema_code = ModuleMethods.schema_code(module_code, object_code)
sm = SchemaMethods(schema_code)

id_role = g.current_user.id_role
params = parse_request_args(object_definition)

permission_module_code = object_definition.get("module_code", module_code)
Expand All @@ -82,6 +89,7 @@ def get_one_rest(module_code, object_code, value):
module_code=permission_module_code,
action="R",
params=params,
id_role=id_role,
)

m = q.one()
Expand Down Expand Up @@ -119,6 +127,7 @@ def patch_rest(module_code, object_code, value):
object_definition = ModuleMethods.object_config(module_code, object_code)
schema_code = ModuleMethods.schema_code(module_code, object_code)
sm = SchemaMethods(schema_code)
id_role = g.current_user.id_role

permission_module_code = object_definition.get("module_code", module_code)

Expand All @@ -136,6 +145,7 @@ def patch_rest(module_code, object_code, value):
params=params,
authorized_write_fields=authorized_write_fields,
commit=True,
id_role=id_role,
)

except sm.errors.SchemaUnsufficientCruvedRigth as e:
Expand All @@ -150,6 +160,8 @@ def delete_rest(module_code, object_code, value):
object_definition = ModuleMethods.object_config(module_code, object_code)
schema_code = ModuleMethods.schema_code(module_code, object_code)
sm = SchemaMethods(schema_code)
id_role = g.current_user.id_role

permission_module_code = object_definition.get("module_code", module_code)

params = parse_request_args(object_definition)
Expand All @@ -164,27 +176,33 @@ def delete_rest(module_code, object_code, value):

try:
sm.delete_row(
value, module_code=module_code, field_name=params.get("field_name"), commit=True
value,
module_code=module_code,
field_name=params.get("field_name"),
commit=True,
id_role=id_role,
)

except sm.errors.SchemaUnsufficientCruvedRigth as e:
return f"Erreur Cruved : {str(e)}", 403

return dict_out

pass


def get_page_number_and_list(module_code, object_code, value):
object_definition = ModuleMethods.object_config(module_code, object_code)
schema_code = ModuleMethods.schema_code(module_code, object_code)
sm = SchemaMethods(schema_code)

id_role = g.current_user.id_role
permission_module_code = object_definition.get("module_code", module_code)

params = parse_request_args(object_definition)
page_number = sm.get_page_number(
value, permission_module_code, params.get("action") or "R", params
value,
permission_module_code,
params.get("action") or "R",
params,
id_role=id_role,
)

return get_list_rest(module_code, object_code, additional_params={"page": page_number})
5 changes: 2 additions & 3 deletions backend/gn_modulator/schema/auto.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
AutoSchemas
"""

from sqlalchemy.inspection import inspect
from sqlalchemy.orm.properties import ColumnProperty
from geonature.utils.env import db
Expand Down Expand Up @@ -148,9 +149,7 @@ def process_relation_auto(self, relation_key, relation, Model, properties):
"relation_type": (
"n-1"
if relation.direction.name == "MANYTOONE"
else "1-n"
if relation.direction.name == "ONETOMANY"
else "n-n"
else "1-n" if relation.direction.name == "ONETOMANY" else "n-n"
),
"schema_code": schema_code,
# "title": relation_key,
Expand Down
22 changes: 14 additions & 8 deletions backend/gn_modulator/schema/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,11 +225,15 @@ def relation_type(self, relation_def):
relation_type = (
"n-1"
if relation_def.get("local_key") and not relation_def.get("foreign_key")
else "1-n"
if relation_def.get("foreign_key") and not relation_def.get("local_key")
else "n-n"
if relation_def.get("foreign_key") and relation_def.get("local_key")
else None
else (
"1-n"
if relation_def.get("foreign_key") and not relation_def.get("local_key")
else (
"n-n"
if relation_def.get("foreign_key") and relation_def.get("local_key")
else None
)
)
)

if relation_type is None:
Expand Down Expand Up @@ -290,9 +294,11 @@ def remove_field(self, field_name, schema):

def process_csv_keys(self, keys):
return [
self.property(key.split(".")[0]).get("title", key)
if self.has_property(key.split(".")[0])
else key
(
self.property(key.split(".")[0]).get("title", key)
if self.has_property(key.split(".")[0])
else key
)
for key in keys
]

Expand Down
16 changes: 7 additions & 9 deletions backend/gn_modulator/schema/config/grammar.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,11 @@ def new(self, object_definition={}):
return (
"nouvelle"
if self.genre(object_definition) == "F"
else "nouvel"
if self.is_first_letter_vowel(self.label(object_definition))
else "nouveau"
else (
"nouvel"
if self.is_first_letter_vowel(self.label(object_definition))
else "nouveau"
)
)

def news(self, object_definition={}):
Expand Down Expand Up @@ -90,9 +92,7 @@ def article_def(self, object_definition={}):
return (
"l'"
if self.is_first_letter_vowel(self.label(object_definition))
else "la "
if self.genre(object_definition) == "F"
else "le "
else "la " if self.genre(object_definition) == "F" else "le "
)

def article_undef(self, object_definition={}):
Expand All @@ -111,9 +111,7 @@ def preposition(self, object_definition={}, check_voyel=True):
return (
"de l'"
if self.is_first_letter_vowel(self.label(object_definition)) and check_voyel
else "de la "
if self.genre(object_definition) == "F"
else "du "
else "de la " if self.genre(object_definition) == "F" else "du "
)

def le_label(self, object_definition={}):
Expand Down
8 changes: 5 additions & 3 deletions backend/gn_modulator/schema/doc.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@ def doc_import_key(self, key, unique=False, relation_key=None):
type = (
"clé simple"
if property_def.get("schema_code")
else "liste de clés séparées par une virgule"
if property_def.get("relation_type") == "n-n"
else property_def["type"]
else (
"liste de clés séparées par une virgule"
if property_def.get("relation_type") == "n-n"
else property_def["type"]
)
)

column_default = self.property(key).get("default") or (
Expand Down
8 changes: 5 additions & 3 deletions backend/gn_modulator/schema/features/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,11 @@ def get_data_item(cls, data_item, file_path=None):
items = (
data_item["items"]
if "items" in data_item
else cls.get_data_items_from_file(Path(file_path).parent / data_item["file"])
if "file" in data_item
else []
else (
cls.get_data_items_from_file(Path(file_path).parent / data_item["file"])
if "file" in data_item
else []
)
)

if data_item.get("keys"):
Expand Down
Loading

0 comments on commit 3b61463

Please sign in to comment.