nsj-rest-lib2 0.0.35__py3-none-any.whl → 0.0.37__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,34 @@
1
1
  import datetime
2
2
  import json
3
+ import os
3
4
  import re
4
5
  import sys
5
6
  import threading
6
7
  import types
8
+ from typing import Any
7
9
 
8
10
  from nsj_rest_lib.settings import get_logger
9
11
 
12
+ import yaml
13
+
14
+ from nsj_rest_lib2.compiler.compiler import EDLCompiler
15
+ from nsj_rest_lib2.compiler.edl_model.entity_model import EntityModel
16
+ from nsj_rest_lib2.compiler.edl_model.entity_model_base import EntityModelBase
17
+ from nsj_rest_lib2.compiler.edl_model.entity_model_root import EntityModelRoot
10
18
  from nsj_rest_lib2.compiler.edl_model.primitives import REGEX_EXTERNAL_REF
11
- from nsj_rest_lib2.compiler.model import RelationDependency
12
- from nsj_rest_lib2.compiler.util.type_naming_util import compile_namespace_keys
19
+ from nsj_rest_lib2.compiler.model import CompilerResult, RelationDependency
20
+ from nsj_rest_lib2.compiler.util.type_naming_util import (
21
+ build_entity_hash as build_entity_hash_util,
22
+ compile_namespace_keys,
23
+ resolve_namespace_key as resolve_namespace_key_util,
24
+ )
25
+ from nsj_rest_lib2.dto.escopo_dto import EscopoDTO
13
26
  from nsj_rest_lib2.exception import MissingEntityConfigException
14
- from nsj_rest_lib2.redis_config import get_redis
15
- from nsj_rest_lib2.settings import ESCOPO_RESTLIB2, MIN_TIME_SOURCE_REFRESH
27
+ from nsj_rest_lib2.settings import (
28
+ EDLS_FROM_REDIS,
29
+ ESCOPO_RESTLIB2,
30
+ MIN_TIME_SOURCE_REFRESH,
31
+ )
16
32
 
17
33
 
18
34
  class LoadedEntity:
@@ -24,6 +40,7 @@ class LoadedEntity:
24
40
  self.api_expose: bool = False
25
41
  self.api_verbs: list[str] = []
26
42
  self.relations_dependencies: list[RelationDependency] = []
43
+ self.never_expire: bool = False
27
44
  self.service_account: str | None = None
28
45
  self.insert_function_class_name: str | None = None
29
46
  self.update_function_class_name: str | None = None
@@ -35,6 +52,18 @@ class LoadedEntity:
35
52
  self.get_function_type_class_name: str | None = None
36
53
  self.list_function_type_class_name: str | None = None
37
54
  self.delete_function_type_class_name: str | None = None
55
+ self.retrieve_after_insert: bool = False
56
+ self.retrieve_after_update: bool = False
57
+ self.retrieve_after_partial_update: bool = False
58
+ self.post_response_dto_class_name: str | None = None
59
+ self.put_response_dto_class_name: str | None = None
60
+ self.patch_response_dto_class_name: str | None = None
61
+ self.custom_json_post_response: bool = False
62
+ self.custom_json_put_response: bool = False
63
+ self.custom_json_patch_response: bool = False
64
+ self.custom_json_get_response: bool = False
65
+ self.custom_json_list_response: bool = False
66
+ self.custom_json_delete_response: bool = False
38
67
 
39
68
 
40
69
  class Namespace:
@@ -49,8 +78,10 @@ namespaces_dict: dict[str, Namespace] = {}
49
78
 
50
79
 
51
80
  class EntityLoader:
52
- def __init__(self) -> types.NoneType:
81
+ def __init__(self, edls_path: str | None = None) -> types.NoneType:
53
82
  self._lock = threading.Lock()
83
+ if edls_path:
84
+ self._load_edls_from_disk(edls_path)
54
85
 
55
86
  def load_entity_source(
56
87
  self,
@@ -75,6 +106,19 @@ class EntityLoader:
75
106
  str | None,
76
107
  str | None,
77
108
  str | None,
109
+ str | None,
110
+ bool,
111
+ bool,
112
+ bool,
113
+ str | None,
114
+ str | None,
115
+ str | None,
116
+ bool,
117
+ bool,
118
+ bool,
119
+ bool,
120
+ bool,
121
+ bool,
78
122
  ]:
79
123
  # Assumind o escopo default se necessário
80
124
  if not escopo:
@@ -122,6 +166,37 @@ class EntityLoader:
122
166
  loaded_entity.delete_function_type_class_name
123
167
  )
124
168
 
169
+ cached_result = (
170
+ dto_class_name,
171
+ entity_class_name,
172
+ entities_dict,
173
+ api_expose,
174
+ api_verbs,
175
+ service_account,
176
+ insert_function_class_name,
177
+ update_function_class_name,
178
+ insert_function_name,
179
+ update_function_name,
180
+ get_function_name,
181
+ list_function_name,
182
+ delete_function_name,
183
+ get_function_type_class_name,
184
+ list_function_type_class_name,
185
+ delete_function_type_class_name,
186
+ loaded_entity.retrieve_after_insert,
187
+ loaded_entity.retrieve_after_update,
188
+ loaded_entity.retrieve_after_partial_update,
189
+ loaded_entity.post_response_dto_class_name,
190
+ loaded_entity.put_response_dto_class_name,
191
+ loaded_entity.patch_response_dto_class_name,
192
+ loaded_entity.custom_json_post_response,
193
+ loaded_entity.custom_json_put_response,
194
+ loaded_entity.custom_json_patch_response,
195
+ loaded_entity.custom_json_get_response,
196
+ loaded_entity.custom_json_list_response,
197
+ loaded_entity.custom_json_delete_response,
198
+ )
199
+
125
200
  # Verificando se alguma de suas dependências precisariam ser recarregadas
126
201
  for rd in relations_dependencies:
127
202
  if rd.entity_resource is None or rd.entity_scope is None:
@@ -137,6 +212,9 @@ class EntityLoader:
137
212
  force_reload=force_reload,
138
213
  )
139
214
 
215
+ if loaded_entity.never_expire or not EDLS_FROM_REDIS:
216
+ return cached_result
217
+
140
218
  # Se o tempo entre o carregamento e agora for maior do que MIN_TIME_SOURCE_REFRESH minutos,
141
219
  # verifica se precisa de refresh
142
220
  time_diff = datetime.datetime.now() - loaded_entity.loaded_at
@@ -160,24 +238,7 @@ class EntityLoader:
160
238
 
161
239
  # Se não achar no redis, usa o que estava em memória
162
240
  if not loaded_config:
163
- return (
164
- dto_class_name,
165
- entity_class_name,
166
- entities_dict,
167
- api_expose,
168
- api_verbs,
169
- service_account,
170
- insert_function_class_name,
171
- update_function_class_name,
172
- insert_function_name,
173
- update_function_name,
174
- get_function_name,
175
- list_function_name,
176
- delete_function_name,
177
- get_function_type_class_name,
178
- list_function_type_class_name,
179
- delete_function_type_class_name,
180
- )
241
+ return cached_result
181
242
 
182
243
  # Desempacotando resultado
183
244
  entity_config_key, entity_config_str = loaded_config
@@ -192,24 +253,7 @@ class EntityLoader:
192
253
 
193
254
  # Se não carregou novo código, usa o que estava em memória
194
255
  if result_execute is None:
195
- return (
196
- dto_class_name,
197
- entity_class_name,
198
- entities_dict,
199
- api_expose,
200
- api_verbs,
201
- service_account,
202
- insert_function_class_name,
203
- update_function_class_name,
204
- insert_function_name,
205
- update_function_name,
206
- get_function_name,
207
- list_function_name,
208
- delete_function_name,
209
- get_function_type_class_name,
210
- list_function_type_class_name,
211
- delete_function_type_class_name,
212
- )
256
+ return cached_result
213
257
  else:
214
258
  (
215
259
  dto_class_name,
@@ -228,6 +272,18 @@ class EntityLoader:
228
272
  get_function_type_class_name,
229
273
  list_function_type_class_name,
230
274
  delete_function_type_class_name,
275
+ retrieve_after_insert,
276
+ retrieve_after_update,
277
+ retrieve_after_partial_update,
278
+ post_response_dto_class_name,
279
+ put_response_dto_class_name,
280
+ patch_response_dto_class_name,
281
+ custom_json_post_response,
282
+ custom_json_put_response,
283
+ custom_json_patch_response,
284
+ custom_json_get_response,
285
+ custom_json_list_response,
286
+ custom_json_delete_response,
231
287
  ) = result_execute
232
288
  return (
233
289
  dto_class_name,
@@ -246,27 +302,25 @@ class EntityLoader:
246
302
  get_function_type_class_name,
247
303
  list_function_type_class_name,
248
304
  delete_function_type_class_name,
305
+ retrieve_after_insert,
306
+ retrieve_after_update,
307
+ retrieve_after_partial_update,
308
+ post_response_dto_class_name,
309
+ put_response_dto_class_name,
310
+ patch_response_dto_class_name,
311
+ custom_json_post_response,
312
+ custom_json_put_response,
313
+ custom_json_patch_response,
314
+ custom_json_get_response,
315
+ custom_json_list_response,
316
+ custom_json_delete_response,
249
317
  )
250
318
  else:
251
319
  # Se não deu o intervalo de verificação do refresh, retorna o que está em memória
252
- return (
253
- dto_class_name,
254
- entity_class_name,
255
- entities_dict,
256
- api_expose,
257
- api_verbs,
258
- service_account,
259
- insert_function_class_name,
260
- update_function_class_name,
261
- insert_function_name,
262
- update_function_name,
263
- get_function_name,
264
- list_function_name,
265
- delete_function_name,
266
- get_function_type_class_name,
267
- list_function_type_class_name,
268
- delete_function_type_class_name,
269
- )
320
+ return cached_result
321
+
322
+ if not EDLS_FROM_REDIS:
323
+ raise MissingEntityConfigException()
270
324
 
271
325
  # Se não conseguir recuperar a entidade, procura no redis:
272
326
  loaded_config = self._load_entity_config_from_redis(
@@ -311,6 +365,18 @@ class EntityLoader:
311
365
  get_function_type_class_name,
312
366
  list_function_type_class_name,
313
367
  delete_function_type_class_name,
368
+ retrieve_after_insert,
369
+ retrieve_after_update,
370
+ retrieve_after_partial_update,
371
+ post_response_dto_class_name,
372
+ put_response_dto_class_name,
373
+ patch_response_dto_class_name,
374
+ custom_json_post_response,
375
+ custom_json_put_response,
376
+ custom_json_patch_response,
377
+ custom_json_get_response,
378
+ custom_json_list_response,
379
+ custom_json_delete_response,
314
380
  ) = result_execute
315
381
 
316
382
  return (
@@ -330,6 +396,18 @@ class EntityLoader:
330
396
  get_function_type_class_name,
331
397
  list_function_type_class_name,
332
398
  delete_function_type_class_name,
399
+ retrieve_after_insert,
400
+ retrieve_after_update,
401
+ retrieve_after_partial_update,
402
+ post_response_dto_class_name,
403
+ put_response_dto_class_name,
404
+ patch_response_dto_class_name,
405
+ custom_json_post_response,
406
+ custom_json_put_response,
407
+ custom_json_patch_response,
408
+ custom_json_get_response,
409
+ custom_json_list_response,
410
+ custom_json_delete_response,
333
411
  )
334
412
 
335
413
  def clear_namespaces(self):
@@ -342,6 +420,178 @@ class EntityLoader:
342
420
  with self._lock:
343
421
  namespaces_dict.clear()
344
422
 
423
+ def _load_edls_from_disk(self, edls_path: str) -> None:
424
+ if namespaces_dict:
425
+ return
426
+
427
+ resolved_path = self._resolve_edls_path(edls_path)
428
+ if not resolved_path:
429
+ return
430
+
431
+ if os.path.isdir(resolved_path):
432
+ edl_files = self._list_edl_files(resolved_path)
433
+ elif os.path.isfile(resolved_path) and self._is_edl_file(resolved_path):
434
+ edl_files = [resolved_path]
435
+ else:
436
+ return
437
+
438
+ if not edl_files:
439
+ return
440
+
441
+ entities: dict[str, EntityModelBase] = {}
442
+ for file_path in edl_files:
443
+ edl_json = self._read_edl_file(file_path)
444
+ if not isinstance(edl_json, dict):
445
+ continue
446
+
447
+ if edl_json.get("mixin", False):
448
+ entity_model = EntityModelRoot(**edl_json)
449
+ else:
450
+ entity_model = EntityModel(**edl_json)
451
+
452
+ complete_entity_id = f"{entity_model.escopo}/{entity_model.id}"
453
+ entities[complete_entity_id] = entity_model
454
+
455
+ if not entities:
456
+ return
457
+
458
+ escopos: dict[str, EscopoDTO] = {}
459
+ for entity_model in entities.values():
460
+ if entity_model.escopo not in escopos:
461
+ escopos[entity_model.escopo] = EscopoDTO(
462
+ codigo=entity_model.escopo,
463
+ service_account=None,
464
+ )
465
+
466
+ compiler = EDLCompiler()
467
+ dependencies = list(entities.items())
468
+
469
+ for entity_model in entities.values():
470
+ escopo_dto = escopos.get(entity_model.escopo)
471
+ if escopo_dto is None:
472
+ continue
473
+
474
+ compiler_result = compiler.compile_model(
475
+ entity_model,
476
+ dependencies,
477
+ escopo=escopo_dto,
478
+ )
479
+ if not compiler_result:
480
+ continue
481
+
482
+ entity_config = self._build_entity_payload(
483
+ entity_model,
484
+ compiler_result,
485
+ )
486
+ entity_resource = entity_config.get("api_resource")
487
+ if not entity_resource:
488
+ continue
489
+
490
+ entity_config_key = self._resolve_namespace_key(entity_model)
491
+ self._execute_entity_source(
492
+ json.dumps(entity_config, ensure_ascii=False),
493
+ entity_config_key,
494
+ entity_resource,
495
+ from_disk=True,
496
+ skip_dependency_load=not EDLS_FROM_REDIS,
497
+ )
498
+
499
+ def _resolve_edls_path(self, edls_path: str) -> str | None:
500
+ edls_path = edls_path.strip()
501
+ if not edls_path:
502
+ return None
503
+ if os.path.isabs(edls_path):
504
+ return edls_path
505
+ return os.path.join(os.getcwd(), edls_path)
506
+
507
+ def _is_edl_file(self, file_path: str) -> bool:
508
+ lower_name = file_path.lower()
509
+ return lower_name.endswith(".json") or lower_name.endswith(
510
+ ".yml"
511
+ ) or lower_name.endswith(".yaml")
512
+
513
+ def _list_edl_files(self, root_path: str) -> list[str]:
514
+ edl_files: list[str] = []
515
+ for current_root, _, files in os.walk(root_path):
516
+ for file_name in files:
517
+ file_path = os.path.join(current_root, file_name)
518
+ if self._is_edl_file(file_path):
519
+ edl_files.append(file_path)
520
+ edl_files.sort()
521
+ return edl_files
522
+
523
+ def _read_edl_file(self, file_path: str) -> dict[str, Any] | None:
524
+ with open(file_path, "r", encoding="utf-8") as file_handler:
525
+ if file_path.lower().endswith(".json"):
526
+ return json.load(file_handler)
527
+ return yaml.safe_load(file_handler)
528
+
529
+ def _resolve_namespace_key(self, entity_model: EntityModelBase) -> str:
530
+ tenant = getattr(entity_model, "tenant", None)
531
+ grupo_empresarial = getattr(entity_model, "grupo_empresarial", None)
532
+
533
+ return resolve_namespace_key_util(tenant, grupo_empresarial)
534
+
535
+ def _build_entity_payload(
536
+ self,
537
+ entity_model: EntityModelBase,
538
+ compiler_result: CompilerResult,
539
+ ) -> dict[str, Any]:
540
+ api_resource = compiler_result.api_resource
541
+ if not api_resource:
542
+ if isinstance(entity_model, EntityModel) and entity_model.api:
543
+ api_resource = entity_model.api.resource
544
+ if not api_resource:
545
+ raise ValueError("api.resource é obrigatório para carregar EDLs.")
546
+
547
+ relations = [
548
+ rd.to_dict()
549
+ for rd in (compiler_result.relations_dependencies or [])
550
+ ]
551
+
552
+ return {
553
+ "dto_class_name": compiler_result.dto_class_name,
554
+ "entity_class_name": compiler_result.entity_class_name,
555
+ "service_account": compiler_result.service_account,
556
+ "insert_function_class_name": compiler_result.insert_function_class_name,
557
+ "insert_function_name": compiler_result.insert_function_name,
558
+ "source_insert_function": compiler_result.source_insert_function,
559
+ "update_function_class_name": compiler_result.update_function_class_name,
560
+ "update_function_name": compiler_result.update_function_name,
561
+ "source_update_function": compiler_result.source_update_function,
562
+ "get_function_name": compiler_result.get_function_name,
563
+ "list_function_name": compiler_result.list_function_name,
564
+ "delete_function_name": compiler_result.delete_function_name,
565
+ "get_function_type_class_name": compiler_result.get_function_type_class_name,
566
+ "list_function_type_class_name": compiler_result.list_function_type_class_name,
567
+ "delete_function_type_class_name": compiler_result.delete_function_type_class_name,
568
+ "source_get_function_type": compiler_result.source_get_function_type,
569
+ "source_list_function_type": compiler_result.source_list_function_type,
570
+ "source_delete_function_type": compiler_result.source_delete_function_type,
571
+ "retrieve_after_insert": compiler_result.retrieve_after_insert,
572
+ "retrieve_after_update": compiler_result.retrieve_after_update,
573
+ "retrieve_after_partial_update": compiler_result.retrieve_after_partial_update,
574
+ "post_response_dto_class_name": compiler_result.post_response_dto_class_name,
575
+ "put_response_dto_class_name": compiler_result.put_response_dto_class_name,
576
+ "patch_response_dto_class_name": compiler_result.patch_response_dto_class_name,
577
+ "custom_json_post_response": compiler_result.custom_json_post_response,
578
+ "custom_json_put_response": compiler_result.custom_json_put_response,
579
+ "custom_json_patch_response": compiler_result.custom_json_patch_response,
580
+ "custom_json_get_response": compiler_result.custom_json_get_response,
581
+ "custom_json_list_response": compiler_result.custom_json_list_response,
582
+ "custom_json_delete_response": compiler_result.custom_json_delete_response,
583
+ "source_dto": compiler_result.dto_code,
584
+ "source_entity": compiler_result.entity_code,
585
+ "entity_hash": self._build_entity_hash(compiler_result),
586
+ "api_expose": compiler_result.api_expose,
587
+ "api_resource": api_resource,
588
+ "api_verbs": compiler_result.api_verbs or [],
589
+ "relations_dependencies": relations,
590
+ }
591
+
592
+ def _build_entity_hash(self, compiler_result: CompilerResult) -> str:
593
+ return build_entity_hash_util(compiler_result)
594
+
345
595
  def _ensure_dynamic_package(self):
346
596
  """
347
597
  Garante que exista um pacote 'dynamic' em sys.modules.
@@ -360,6 +610,8 @@ class EntityLoader:
360
610
  entity_config_key: str,
361
611
  entity_resource: str,
362
612
  check_refresh: bool = False,
613
+ from_disk: bool = False,
614
+ skip_dependency_load: bool = False,
363
615
  ) -> tuple[
364
616
  str,
365
617
  str,
@@ -377,6 +629,18 @@ class EntityLoader:
377
629
  str | None,
378
630
  str | None,
379
631
  str | None,
632
+ bool,
633
+ bool,
634
+ bool,
635
+ str | None,
636
+ str | None,
637
+ str | None,
638
+ bool,
639
+ bool,
640
+ bool,
641
+ bool,
642
+ bool,
643
+ bool,
380
644
  ] | None:
381
645
  # Interpretando o json de configuração da entidade
382
646
  try:
@@ -414,6 +678,42 @@ class EntityLoader:
414
678
  delete_function_type_class_name = entity_config.get(
415
679
  "delete_function_type_class_name"
416
680
  )
681
+ retrieve_after_insert = entity_config.get(
682
+ "retrieve_after_insert", False
683
+ )
684
+ retrieve_after_update = entity_config.get(
685
+ "retrieve_after_update", False
686
+ )
687
+ retrieve_after_partial_update = entity_config.get(
688
+ "retrieve_after_partial_update", False
689
+ )
690
+ post_response_dto_class_name = entity_config.get(
691
+ "post_response_dto_class_name"
692
+ )
693
+ put_response_dto_class_name = entity_config.get(
694
+ "put_response_dto_class_name"
695
+ )
696
+ patch_response_dto_class_name = entity_config.get(
697
+ "patch_response_dto_class_name"
698
+ )
699
+ custom_json_post_response = entity_config.get(
700
+ "custom_json_post_response", False
701
+ )
702
+ custom_json_put_response = entity_config.get(
703
+ "custom_json_put_response", False
704
+ )
705
+ custom_json_patch_response = entity_config.get(
706
+ "custom_json_patch_response", False
707
+ )
708
+ custom_json_get_response = entity_config.get(
709
+ "custom_json_get_response", False
710
+ )
711
+ custom_json_list_response = entity_config.get(
712
+ "custom_json_list_response", False
713
+ )
714
+ custom_json_delete_response = entity_config.get(
715
+ "custom_json_delete_response", False
716
+ )
417
717
  get_function_code = entity_config.get("source_get_function_type")
418
718
  list_function_code = entity_config.get("source_list_function_type")
419
719
  delete_function_code = entity_config.get("source_delete_function_type")
@@ -433,18 +733,19 @@ class EntityLoader:
433
733
  return None
434
734
 
435
735
  # Verificando se alguma de suas dependências precisariam ser carregadas (ou recarregadas)
436
- for rd in relations_dependencies:
437
- if rd.entity_resource is None or rd.entity_scope is None:
438
- raise RuntimeError(
439
- f"Erro: Dependência de entidade mal formada na entidade {entity_resource}."
440
- )
736
+ if not skip_dependency_load:
737
+ for rd in relations_dependencies:
738
+ if rd.entity_resource is None or rd.entity_scope is None:
739
+ raise RuntimeError(
740
+ f"Erro: Dependência de entidade mal formada na entidade {entity_resource}."
741
+ )
441
742
 
442
- self.load_entity_source(
443
- rd.entity_resource,
444
- str(rd.tenant),
445
- str(rd.grupo_empresarial),
446
- rd.entity_scope,
447
- )
743
+ self.load_entity_source(
744
+ rd.entity_resource,
745
+ str(rd.tenant),
746
+ str(rd.grupo_empresarial),
747
+ rd.entity_scope,
748
+ )
448
749
 
449
750
  # Verificando se a entidade precisa ou não de refresh
450
751
  if check_refresh:
@@ -546,6 +847,7 @@ class EntityLoader:
546
847
  loaded_entity.api_verbs = api_verbs
547
848
  loaded_entity.service_account = service_account
548
849
  loaded_entity.relations_dependencies = relations_dependencies
850
+ loaded_entity.never_expire = from_disk
549
851
  loaded_entity.insert_function_class_name = insert_function_class_name
550
852
  loaded_entity.update_function_class_name = update_function_class_name
551
853
  loaded_entity.insert_function_name = insert_function_name
@@ -562,6 +864,38 @@ class EntityLoader:
562
864
  loaded_entity.delete_function_type_class_name = (
563
865
  delete_function_type_class_name
564
866
  )
867
+ loaded_entity.retrieve_after_insert = bool(retrieve_after_insert)
868
+ loaded_entity.retrieve_after_update = bool(retrieve_after_update)
869
+ loaded_entity.retrieve_after_partial_update = bool(
870
+ retrieve_after_partial_update
871
+ )
872
+ loaded_entity.post_response_dto_class_name = (
873
+ post_response_dto_class_name
874
+ )
875
+ loaded_entity.put_response_dto_class_name = (
876
+ put_response_dto_class_name
877
+ )
878
+ loaded_entity.patch_response_dto_class_name = (
879
+ patch_response_dto_class_name
880
+ )
881
+ loaded_entity.custom_json_post_response = bool(
882
+ custom_json_post_response
883
+ )
884
+ loaded_entity.custom_json_put_response = bool(
885
+ custom_json_put_response
886
+ )
887
+ loaded_entity.custom_json_patch_response = bool(
888
+ custom_json_patch_response
889
+ )
890
+ loaded_entity.custom_json_get_response = bool(
891
+ custom_json_get_response
892
+ )
893
+ loaded_entity.custom_json_list_response = bool(
894
+ custom_json_list_response
895
+ )
896
+ loaded_entity.custom_json_delete_response = bool(
897
+ custom_json_delete_response
898
+ )
565
899
 
566
900
  namespace.loaded_entities[entity_resource] = loaded_entity
567
901
 
@@ -582,6 +916,18 @@ class EntityLoader:
582
916
  get_function_type_class_name,
583
917
  list_function_type_class_name,
584
918
  delete_function_type_class_name,
919
+ bool(retrieve_after_insert),
920
+ bool(retrieve_after_update),
921
+ bool(retrieve_after_partial_update),
922
+ post_response_dto_class_name,
923
+ put_response_dto_class_name,
924
+ patch_response_dto_class_name,
925
+ bool(custom_json_post_response),
926
+ bool(custom_json_put_response),
927
+ bool(custom_json_patch_response),
928
+ bool(custom_json_get_response),
929
+ bool(custom_json_list_response),
930
+ bool(custom_json_delete_response),
585
931
  )
586
932
 
587
933
  def _safe_exec(self, source_code, context, description):
@@ -600,6 +946,11 @@ class EntityLoader:
600
946
  entity_config_key: str | None,
601
947
  escopo: str,
602
948
  ) -> tuple[str, str] | None:
949
+ if not EDLS_FROM_REDIS:
950
+ return None
951
+
952
+ from nsj_rest_lib2.redis_config import get_redis
953
+
603
954
  get_logger().debug(
604
955
  f"Procurando a configuração da entidade {entity_resource} no redis. Tenant key: {tenant_key} e Grupo key: {grupo_key}"
605
956
  )
nsj_rest_lib2/settings.py CHANGED
@@ -12,5 +12,15 @@ else:
12
12
  MIN_TIME_SOURCE_REFRESH = int(os.getenv("MIN_TIME_SOURCE_REFRESH", "15"))
13
13
 
14
14
 
15
+ def _get_env_bool(name: str, default: bool) -> bool:
16
+ value = os.getenv(name)
17
+ if value is None:
18
+ return default
19
+ return value.strip().lower() in ("1", "true", "t", "yes", "y", "on")
20
+
21
+
22
+ EDLS_FROM_REDIS = _get_env_bool("EDLS_FROM_REDIS", True)
23
+
24
+
15
25
  def get_logger():
16
26
  return logging.getLogger(APP_NAME)