nsj-rest-lib2 0.0.1__tar.gz → 0.0.2__tar.gz

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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nsj_rest_lib2
3
- Version: 0.0.1
3
+ Version: 0.0.2
4
4
  Summary: Biblioteca para permitir a distribuição de rotas dinâmicas numa API, configuradas por meio de EDLs declarativos (em formato JSON).
5
5
  Home-page: https://github.com/Nasajon/nsj_rest_lib2
6
6
  Author: Nasajon Sistemas
@@ -0,0 +1,331 @@
1
+ import json
2
+
3
+ from typing import Any
4
+
5
+ from flask import Flask, request
6
+
7
+ from nsj_rest_lib.settings import APP_NAME
8
+
9
+ from nsj_gcf_utils.rest_error_util import format_json_error
10
+
11
+ from nsj_multi_database_lib.decorator.multi_database import multi_database
12
+
13
+ from nsj_rest_lib.controller.controller_util import DEFAULT_RESP_HEADERS
14
+ from nsj_rest_lib.controller.list_route import ListRoute
15
+ from nsj_rest_lib.controller.get_route import GetRoute
16
+ from nsj_rest_lib.controller.post_route import PostRoute
17
+ from nsj_rest_lib.controller.put_route import PutRoute
18
+ from nsj_rest_lib.controller.patch_route import PatchRoute
19
+ from nsj_rest_lib.controller.delete_route import DeleteRoute
20
+
21
+ from nsj_rest_lib2.exception import MissingEntityConfigException
22
+ from nsj_rest_lib2.service.entity_loader import EntityLoader
23
+
24
+
25
+ def _get_tenant_grupo() -> tuple[str, str]:
26
+ # Tentando ler do query args
27
+ query_args = request.args
28
+ tenant = query_args.get("tenant")
29
+ grupo_empresarial = query_args.get("grupo_empresarial")
30
+
31
+ # Tentando ler do corpo da requisição
32
+ try:
33
+ body_str = request.data.decode("utf-8")
34
+ body_json = json.loads(body_str)
35
+
36
+ if not tenant:
37
+ tenant = body_json.get("tenant")
38
+ if not grupo_empresarial:
39
+ grupo_empresarial = body_json.get("grupo_empresarial")
40
+ except:
41
+ pass
42
+
43
+ return (str(tenant), str(grupo_empresarial))
44
+
45
+
46
+ def _endpoint_name(func: Any, multidb: bool, root: str) -> str:
47
+ suffix = "_mb" if multidb else ""
48
+ return f"{root}_{func.__name__}{suffix}"
49
+
50
+
51
+ def setup_dynamic_routes(
52
+ flask_app: Flask,
53
+ multidb: bool = True,
54
+ dynamic_root_path: str = "edl1",
55
+ injector_factory: Any = None,
56
+ ) -> None:
57
+
58
+ COLLECTION_DYNAMIC_ROUTE = f"/{APP_NAME}/{dynamic_root_path}/<entity_id>"
59
+ ONE_DYNAMIC_ROUTE = f"/{APP_NAME}/{dynamic_root_path}/<entity_id>/<id>"
60
+
61
+ def list_dynamic_wrapper(injector_factory: Any, *args: Any, **kwargs: Any) -> Any:
62
+
63
+ def list_dynamic(*args: Any, **kwargs: Any):
64
+ # Recuperando o identificador da entidade
65
+ if "entity_id" not in kwargs:
66
+ msg = "Faltando parâmetro identificador da entidade na URL."
67
+ return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
68
+ entity_id = kwargs.pop("entity_id")
69
+
70
+ # Lendo tenant e grupo_empresarial
71
+ tenant, grupo_empresarial = _get_tenant_grupo()
72
+
73
+ try:
74
+ # Recuperando o código do DTO e Entity correspondente
75
+ entity_loader = EntityLoader()
76
+ dto_class_name, entity_class_name, etities_dict = (
77
+ entity_loader.load_entity_source(
78
+ entity_id, tenant, grupo_empresarial
79
+ )
80
+ )
81
+
82
+ # Executando o list pelo RestLib
83
+ route = ListRoute(
84
+ url=COLLECTION_DYNAMIC_ROUTE,
85
+ http_method="GET",
86
+ dto_class=etities_dict[dto_class_name],
87
+ entity_class=etities_dict[entity_class_name],
88
+ injector_factory=injector_factory,
89
+ )
90
+
91
+ return route.handle_request(*args, **kwargs)
92
+ except MissingEntityConfigException:
93
+ msg = f"Entity configuration for {entity_id} not found."
94
+ return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
95
+
96
+ return list_dynamic
97
+
98
+ def get_dynamic_wrapper(injector_factory: Any, *args: Any, **kwargs: Any) -> Any:
99
+
100
+ def get_dynamic(*args: Any, **kwargs: Any):
101
+ # Recuperando o identificador da entidade
102
+ if "entity_id" not in kwargs:
103
+ msg = "Faltando parâmetro identificador da entidade na URL."
104
+ return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
105
+ entity_id = kwargs.pop("entity_id")
106
+
107
+ # Lendo tenant e grupo_empresarial
108
+ tenant, grupo_empresarial = _get_tenant_grupo()
109
+
110
+ try:
111
+ # Recuperando o código do DTO e Entity correspondente
112
+ entity_loader = EntityLoader()
113
+ dto_class_name, entity_class_name, etities_dict = (
114
+ entity_loader.load_entity_source(
115
+ entity_id, tenant, grupo_empresarial
116
+ )
117
+ )
118
+
119
+ # Executando o list pelo RestLib
120
+ route = GetRoute(
121
+ url=ONE_DYNAMIC_ROUTE,
122
+ http_method="GET",
123
+ dto_class=etities_dict[dto_class_name],
124
+ entity_class=etities_dict[entity_class_name],
125
+ injector_factory=injector_factory,
126
+ )
127
+
128
+ return route.handle_request(*args, **kwargs)
129
+ except MissingEntityConfigException:
130
+ msg = f"Entity configuration for {entity_id} not found."
131
+ return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
132
+
133
+ return get_dynamic
134
+
135
+ def post_dynamic_wrapper(injector_factory: Any, *args: Any, **kwargs: Any) -> Any:
136
+ def post_dynamic(*args: Any, **kwargs: Any):
137
+ # Recuperando o identificador da entidade
138
+ if "entity_id" not in kwargs:
139
+ msg = "Faltando parâmetro identificador da entidade na URL."
140
+ return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
141
+ entity_id = kwargs.pop("entity_id")
142
+
143
+ # Lendo tenant e grupo_empresarial
144
+ tenant, grupo_empresarial = _get_tenant_grupo()
145
+
146
+ try:
147
+ # Recuperando o código do DTO e Entity correspondente
148
+ entity_loader = EntityLoader()
149
+ dto_class_name, entity_class_name, etities_dict = (
150
+ entity_loader.load_entity_source(
151
+ entity_id, tenant, grupo_empresarial
152
+ )
153
+ )
154
+
155
+ # Executando o list pelo RestLib
156
+ route = PostRoute(
157
+ url=COLLECTION_DYNAMIC_ROUTE,
158
+ http_method="POST",
159
+ dto_class=etities_dict[dto_class_name],
160
+ entity_class=etities_dict[entity_class_name],
161
+ injector_factory=injector_factory,
162
+ )
163
+
164
+ return route.handle_request(*args, **kwargs)
165
+ except MissingEntityConfigException:
166
+ msg = f"Entity configuration for {entity_id} not found."
167
+ return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
168
+
169
+ return post_dynamic
170
+
171
+ def put_dynamic_wrapper(injector_factory: Any, *args: Any, **kwargs: Any) -> Any:
172
+ def put_dynamic(*args: Any, **kwargs: Any):
173
+ # Recuperando o identificador da entidade
174
+ if "entity_id" not in kwargs:
175
+ msg = "Faltando parâmetro identificador da entidade na URL."
176
+ return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
177
+ entity_id = kwargs.pop("entity_id")
178
+
179
+ # Lendo tenant e grupo_empresarial
180
+ tenant, grupo_empresarial = _get_tenant_grupo()
181
+
182
+ try:
183
+ # Recuperando o código do DTO e Entity correspondente
184
+ entity_loader = EntityLoader()
185
+ dto_class_name, entity_class_name, etities_dict = (
186
+ entity_loader.load_entity_source(
187
+ entity_id, tenant, grupo_empresarial
188
+ )
189
+ )
190
+
191
+ # Executando o list pelo RestLib
192
+ route = PutRoute(
193
+ url=ONE_DYNAMIC_ROUTE,
194
+ http_method="PUT",
195
+ dto_class=etities_dict[dto_class_name],
196
+ entity_class=etities_dict[entity_class_name],
197
+ injector_factory=injector_factory,
198
+ )
199
+
200
+ return route.handle_request(*args, **kwargs)
201
+ except MissingEntityConfigException:
202
+ msg = f"Entity configuration for {entity_id} not found."
203
+ return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
204
+
205
+ return put_dynamic
206
+
207
+ def patch_dynamic_wrapper(injector_factory: Any, *args: Any, **kwargs: Any) -> Any:
208
+ def patch_dynamic(*args: Any, **kwargs: Any):
209
+ # Recuperando o identificador da entidade
210
+ if "entity_id" not in kwargs:
211
+ msg = "Faltando parâmetro identificador da entidade na URL."
212
+ return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
213
+ entity_id = kwargs.pop("entity_id")
214
+
215
+ # Lendo tenant e grupo_empresarial
216
+ tenant, grupo_empresarial = _get_tenant_grupo()
217
+
218
+ try:
219
+ # Recuperando o código do DTO e Entity correspondente
220
+ entity_loader = EntityLoader()
221
+ dto_class_name, entity_class_name, etities_dict = (
222
+ entity_loader.load_entity_source(
223
+ entity_id, tenant, grupo_empresarial
224
+ )
225
+ )
226
+
227
+ # Executando o list pelo RestLib
228
+ route = PatchRoute(
229
+ url=ONE_DYNAMIC_ROUTE,
230
+ http_method="PATCH",
231
+ dto_class=etities_dict[dto_class_name],
232
+ entity_class=etities_dict[entity_class_name],
233
+ injector_factory=injector_factory,
234
+ )
235
+
236
+ return route.handle_request(*args, **kwargs)
237
+ except MissingEntityConfigException:
238
+ msg = f"Entity configuration for {entity_id} not found."
239
+ return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
240
+
241
+ return patch_dynamic
242
+
243
+ def delete_dynamic_wrapper(injector_factory: Any, *args: Any, **kwargs: Any) -> Any:
244
+ def delete_dynamic(*args: Any, **kwargs: Any):
245
+ # Recuperando o identificador da entidade
246
+ if "entity_id" not in kwargs:
247
+ msg = "Faltando parâmetro identificador da entidade na URL."
248
+ return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
249
+ entity_id = kwargs.pop("entity_id")
250
+
251
+ # Lendo tenant e grupo_empresarial
252
+ tenant, grupo_empresarial = _get_tenant_grupo()
253
+
254
+ try:
255
+ # Recuperando o código do DTO e Entity correspondente
256
+ entity_loader = EntityLoader()
257
+ dto_class_name, entity_class_name, etities_dict = (
258
+ entity_loader.load_entity_source(
259
+ entity_id, tenant, grupo_empresarial
260
+ )
261
+ )
262
+
263
+ # Executando o list pelo RestLib
264
+ route = DeleteRoute(
265
+ url=ONE_DYNAMIC_ROUTE,
266
+ http_method="DELETE",
267
+ dto_class=etities_dict[dto_class_name],
268
+ entity_class=etities_dict[entity_class_name],
269
+ injector_factory=injector_factory,
270
+ )
271
+
272
+ return route.handle_request(*args, **kwargs)
273
+ except MissingEntityConfigException:
274
+ msg = f"Entity configuration for {entity_id} not found."
275
+ return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
276
+
277
+ return delete_dynamic
278
+
279
+ # Ajustando para o padrão com multi database (se necessário)
280
+ if multidb:
281
+ list_dynamic = multi_database()(list_dynamic_wrapper(injector_factory))
282
+ get_dynamic = multi_database()(get_dynamic_wrapper(injector_factory))
283
+ post_dynamic = multi_database()(post_dynamic_wrapper(injector_factory))
284
+ put_dynamic = multi_database()(put_dynamic_wrapper(injector_factory))
285
+ patch_dynamic = multi_database()(patch_dynamic_wrapper(injector_factory))
286
+ delete_dynamic = multi_database()(delete_dynamic_wrapper(injector_factory))
287
+ else:
288
+ list_dynamic = list_dynamic_wrapper(injector_factory)
289
+ get_dynamic = get_dynamic_wrapper(injector_factory)
290
+ post_dynamic = post_dynamic_wrapper(injector_factory)
291
+ put_dynamic = put_dynamic_wrapper(injector_factory)
292
+ patch_dynamic = patch_dynamic_wrapper(injector_factory)
293
+ delete_dynamic = delete_dynamic_wrapper(injector_factory)
294
+
295
+ # Registrando as rotas no flask
296
+ flask_app.add_url_rule(
297
+ COLLECTION_DYNAMIC_ROUTE,
298
+ endpoint=_endpoint_name(list_dynamic, multidb, dynamic_root_path),
299
+ view_func=list_dynamic,
300
+ methods=["GET"],
301
+ )
302
+ flask_app.add_url_rule(
303
+ ONE_DYNAMIC_ROUTE,
304
+ endpoint=_endpoint_name(get_dynamic, multidb, dynamic_root_path),
305
+ view_func=get_dynamic,
306
+ methods=["GET"],
307
+ )
308
+ flask_app.add_url_rule(
309
+ COLLECTION_DYNAMIC_ROUTE,
310
+ endpoint=_endpoint_name(post_dynamic, multidb, dynamic_root_path),
311
+ view_func=post_dynamic,
312
+ methods=["POST"],
313
+ )
314
+ flask_app.add_url_rule(
315
+ ONE_DYNAMIC_ROUTE,
316
+ endpoint=_endpoint_name(put_dynamic, multidb, dynamic_root_path),
317
+ view_func=put_dynamic,
318
+ methods=["PUT"],
319
+ )
320
+ flask_app.add_url_rule(
321
+ ONE_DYNAMIC_ROUTE,
322
+ endpoint=_endpoint_name(patch_dynamic, multidb, dynamic_root_path),
323
+ view_func=patch_dynamic,
324
+ methods=["PATCH"],
325
+ )
326
+ flask_app.add_url_rule(
327
+ ONE_DYNAMIC_ROUTE,
328
+ endpoint=_endpoint_name(delete_dynamic, multidb, dynamic_root_path),
329
+ view_func=delete_dynamic,
330
+ methods=["DELETE"],
331
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nsj_rest_lib2
3
- Version: 0.0.1
3
+ Version: 0.0.2
4
4
  Summary: Biblioteca para permitir a distribuição de rotas dinâmicas numa API, configuradas por meio de EDLs declarativos (em formato JSON).
5
5
  Home-page: https://github.com/Nasajon/nsj_rest_lib2
6
6
  Author: Nasajon Sistemas
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = nsj_rest_lib2
3
- version = 0.0.1
3
+ version = 0.0.2
4
4
  author = Nasajon Sistemas
5
5
  author_email = contact.dev@nasajon.com.br
6
6
  description = Biblioteca para permitir a distribuição de rotas dinâmicas numa API, configuradas por meio de EDLs declarativos (em formato JSON).
@@ -1,300 +0,0 @@
1
- import json
2
-
3
- from typing import Any
4
-
5
- from flask import Flask, request
6
-
7
- from nsj_rest_lib.settings import APP_NAME
8
-
9
- from nsj_gcf_utils.rest_error_util import format_json_error
10
-
11
- from nsj_multi_database_lib.decorator.multi_database import multi_database
12
-
13
- from nsj_rest_lib.controller.controller_util import DEFAULT_RESP_HEADERS
14
- from nsj_rest_lib.controller.list_route import ListRoute
15
- from nsj_rest_lib.controller.get_route import GetRoute
16
- from nsj_rest_lib.controller.post_route import PostRoute
17
- from nsj_rest_lib.controller.put_route import PutRoute
18
- from nsj_rest_lib.controller.patch_route import PatchRoute
19
- from nsj_rest_lib.controller.delete_route import DeleteRoute
20
-
21
- from nsj_rest_lib2.exception import MissingEntityConfigException
22
- from nsj_rest_lib2.service.entity_loader import EntityLoader
23
-
24
-
25
- def _get_tenant_grupo() -> tuple[str, str]:
26
- # Tentando ler do query args
27
- query_args = request.args
28
- tenant = query_args.get("tenant")
29
- grupo_empresarial = query_args.get("grupo_empresarial")
30
-
31
- # Tentando ler do corpo da requisição
32
- try:
33
- body_str = request.data.decode("utf-8")
34
- body_json = json.loads(body_str)
35
-
36
- if not tenant:
37
- tenant = body_json.get("tenant")
38
- if not grupo_empresarial:
39
- grupo_empresarial = body_json.get("grupo_empresarial")
40
- except:
41
- pass
42
-
43
- return (str(tenant), str(grupo_empresarial))
44
-
45
-
46
- def _endpoint_name(func: Any, multidb: bool, root: str) -> str:
47
- suffix = "_mb" if multidb else ""
48
- return f"{root}_{func.__name__}{suffix}"
49
-
50
-
51
- def setup_dynamic_routes(
52
- flask_app: Flask,
53
- multidb: bool = True,
54
- dynamic_root_path: str = "edl1",
55
- injector_factory: Any = None,
56
- ) -> None:
57
-
58
- COLLECTION_DYNAMIC_ROUTE = f"/{APP_NAME}/{dynamic_root_path}/<entity_id>"
59
- ONE_DYNAMIC_ROUTE = f"/{APP_NAME}/{dynamic_root_path}/<entity_id>/<id>"
60
-
61
- def list_dynamic_wrapper(injector_factory: Any, *args: Any, **kwargs: Any) -> Any:
62
-
63
- def list_dynamic(*args: Any, **kwargs: Any):
64
- # Recuperando o identificador da entidade
65
- if "entity_id" not in kwargs:
66
- msg = "Faltando parâmetro identificador da entidade na URL."
67
- return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
68
- entity_id = kwargs.pop("entity_id")
69
-
70
- # Lendo tenant e grupo_empresarial
71
- tenant, grupo_empresarial = _get_tenant_grupo()
72
-
73
- try:
74
- # Recuperando o código do DTO e Entity correspondente
75
- entity_loader = EntityLoader()
76
- dto_class_name, entity_class_name, etities_dict = (
77
- entity_loader.load_entity_source(
78
- entity_id, tenant, grupo_empresarial
79
- )
80
- )
81
-
82
- # Executando o list pelo RestLib
83
- route = ListRoute(
84
- url=COLLECTION_DYNAMIC_ROUTE,
85
- http_method="GET",
86
- dto_class=etities_dict[dto_class_name],
87
- entity_class=etities_dict[entity_class_name],
88
- injector_factory=injector_factory,
89
- )
90
-
91
- return route.handle_request(*args, **kwargs)
92
- except MissingEntityConfigException:
93
- msg = f"Entity configuration for {entity_id} not found."
94
- return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
95
-
96
- return list_dynamic
97
-
98
- def get_dynamic(*args: Any, **kwargs: Any):
99
- # Recuperando o identificador da entidade
100
- if "entity_id" not in kwargs:
101
- msg = "Faltando parâmetro identificador da entidade na URL."
102
- return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
103
- entity_id = kwargs.pop("entity_id")
104
-
105
- # Lendo tenant e grupo_empresarial
106
- tenant, grupo_empresarial = _get_tenant_grupo()
107
-
108
- try:
109
- # Recuperando o código do DTO e Entity correspondente
110
- entity_loader = EntityLoader()
111
- dto_class_name, entity_class_name, etities_dict = (
112
- entity_loader.load_entity_source(entity_id, tenant, grupo_empresarial)
113
- )
114
-
115
- # Executando o list pelo RestLib
116
- route = GetRoute(
117
- url=ONE_DYNAMIC_ROUTE,
118
- http_method="GET",
119
- dto_class=etities_dict[dto_class_name],
120
- entity_class=etities_dict[entity_class_name],
121
- )
122
-
123
- return route.handle_request(*args, **kwargs)
124
- except MissingEntityConfigException:
125
- msg = f"Entity configuration for {entity_id} not found."
126
- return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
127
-
128
- def post_dynamic(*args: Any, **kwargs: Any):
129
- # Recuperando o identificador da entidade
130
- if "entity_id" not in kwargs:
131
- msg = "Faltando parâmetro identificador da entidade na URL."
132
- return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
133
- entity_id = kwargs.pop("entity_id")
134
-
135
- # Lendo tenant e grupo_empresarial
136
- tenant, grupo_empresarial = _get_tenant_grupo()
137
-
138
- try:
139
- # Recuperando o código do DTO e Entity correspondente
140
- entity_loader = EntityLoader()
141
- dto_class_name, entity_class_name, etities_dict = (
142
- entity_loader.load_entity_source(entity_id, tenant, grupo_empresarial)
143
- )
144
-
145
- # Executando o list pelo RestLib
146
- route = PostRoute(
147
- url=COLLECTION_DYNAMIC_ROUTE,
148
- http_method="POST",
149
- dto_class=etities_dict[dto_class_name],
150
- entity_class=etities_dict[entity_class_name],
151
- )
152
-
153
- return route.handle_request(*args, **kwargs)
154
- except MissingEntityConfigException:
155
- msg = f"Entity configuration for {entity_id} not found."
156
- return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
157
-
158
- def put_dynamic(*args: Any, **kwargs: Any):
159
- # Recuperando o identificador da entidade
160
- if "entity_id" not in kwargs:
161
- msg = "Faltando parâmetro identificador da entidade na URL."
162
- return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
163
- entity_id = kwargs.pop("entity_id")
164
-
165
- # Lendo tenant e grupo_empresarial
166
- tenant, grupo_empresarial = _get_tenant_grupo()
167
-
168
- try:
169
- # Recuperando o código do DTO e Entity correspondente
170
- entity_loader = EntityLoader()
171
- dto_class_name, entity_class_name, etities_dict = (
172
- entity_loader.load_entity_source(entity_id, tenant, grupo_empresarial)
173
- )
174
-
175
- # Executando o list pelo RestLib
176
- route = PutRoute(
177
- url=ONE_DYNAMIC_ROUTE,
178
- http_method="PUT",
179
- dto_class=etities_dict[dto_class_name],
180
- entity_class=etities_dict[entity_class_name],
181
- )
182
-
183
- return route.handle_request(*args, **kwargs)
184
- except MissingEntityConfigException:
185
- msg = f"Entity configuration for {entity_id} not found."
186
- return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
187
-
188
- def patch_dynamic(*args: Any, **kwargs: Any):
189
- # Recuperando o identificador da entidade
190
- if "entity_id" not in kwargs:
191
- msg = "Faltando parâmetro identificador da entidade na URL."
192
- return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
193
- entity_id = kwargs.pop("entity_id")
194
-
195
- # Lendo tenant e grupo_empresarial
196
- tenant, grupo_empresarial = _get_tenant_grupo()
197
-
198
- try:
199
- # Recuperando o código do DTO e Entity correspondente
200
- entity_loader = EntityLoader()
201
- dto_class_name, entity_class_name, etities_dict = (
202
- entity_loader.load_entity_source(entity_id, tenant, grupo_empresarial)
203
- )
204
-
205
- # Executando o list pelo RestLib
206
- route = PatchRoute(
207
- url=ONE_DYNAMIC_ROUTE,
208
- http_method="PATCH",
209
- dto_class=etities_dict[dto_class_name],
210
- entity_class=etities_dict[entity_class_name],
211
- )
212
-
213
- return route.handle_request(*args, **kwargs)
214
- except MissingEntityConfigException:
215
- msg = f"Entity configuration for {entity_id} not found."
216
- return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
217
-
218
- def delete_dynamic(*args: Any, **kwargs: Any):
219
- # Recuperando o identificador da entidade
220
- if "entity_id" not in kwargs:
221
- msg = "Faltando parâmetro identificador da entidade na URL."
222
- return (format_json_error(msg), 400, {**DEFAULT_RESP_HEADERS})
223
- entity_id = kwargs.pop("entity_id")
224
-
225
- # Lendo tenant e grupo_empresarial
226
- tenant, grupo_empresarial = _get_tenant_grupo()
227
-
228
- try:
229
- # Recuperando o código do DTO e Entity correspondente
230
- entity_loader = EntityLoader()
231
- dto_class_name, entity_class_name, etities_dict = (
232
- entity_loader.load_entity_source(entity_id, tenant, grupo_empresarial)
233
- )
234
-
235
- # Executando o list pelo RestLib
236
- route = DeleteRoute(
237
- url=ONE_DYNAMIC_ROUTE,
238
- http_method="DELETE",
239
- dto_class=etities_dict[dto_class_name],
240
- entity_class=etities_dict[entity_class_name],
241
- )
242
-
243
- return route.handle_request(*args, **kwargs)
244
- except MissingEntityConfigException:
245
- msg = f"Entity configuration for {entity_id} not found."
246
- return (format_json_error(msg), 412, {**DEFAULT_RESP_HEADERS})
247
-
248
- # Ajustando para o padrão com multi database (se necessário)
249
- if multidb:
250
- list_dynamic = multi_database()(list_dynamic_wrapper(injector_factory))
251
- get_dynamic = multi_database()(get_dynamic)
252
- post_dynamic = multi_database()(post_dynamic)
253
- put_dynamic = multi_database()(put_dynamic)
254
- patch_dynamic = multi_database()(patch_dynamic)
255
- delete_dynamic = multi_database()(delete_dynamic)
256
- else:
257
- list_dynamic = list_dynamic_wrapper(injector_factory)
258
- get_dynamic = get_dynamic
259
- post_dynamic = post_dynamic
260
- put_dynamic = put_dynamic
261
- patch_dynamic = patch_dynamic
262
- delete_dynamic = delete_dynamic
263
-
264
- # Registrando as rotas no flask
265
- flask_app.add_url_rule(
266
- COLLECTION_DYNAMIC_ROUTE,
267
- endpoint=_endpoint_name(list_dynamic, multidb, dynamic_root_path),
268
- view_func=list_dynamic,
269
- methods=["GET"],
270
- )
271
- flask_app.add_url_rule(
272
- ONE_DYNAMIC_ROUTE,
273
- endpoint=_endpoint_name(get_dynamic, multidb, dynamic_root_path),
274
- view_func=get_dynamic,
275
- methods=["GET"],
276
- )
277
- flask_app.add_url_rule(
278
- COLLECTION_DYNAMIC_ROUTE,
279
- endpoint=_endpoint_name(post_dynamic, multidb, dynamic_root_path),
280
- view_func=post_dynamic,
281
- methods=["POST"],
282
- )
283
- flask_app.add_url_rule(
284
- ONE_DYNAMIC_ROUTE,
285
- endpoint=_endpoint_name(put_dynamic, multidb, dynamic_root_path),
286
- view_func=put_dynamic,
287
- methods=["PUT"],
288
- )
289
- flask_app.add_url_rule(
290
- ONE_DYNAMIC_ROUTE,
291
- endpoint=_endpoint_name(patch_dynamic, multidb, dynamic_root_path),
292
- view_func=patch_dynamic,
293
- methods=["PATCH"],
294
- )
295
- flask_app.add_url_rule(
296
- ONE_DYNAMIC_ROUTE,
297
- endpoint=_endpoint_name(delete_dynamic, multidb, dynamic_root_path),
298
- view_func=delete_dynamic,
299
- methods=["DELETE"],
300
- )
File without changes