nsj-rest-lib2 0.0.15__py3-none-any.whl → 0.0.17__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.
@@ -9,7 +9,7 @@ from nsj_rest_lib2.compiler.compiler_structures import (
9
9
  )
10
10
  from nsj_rest_lib2.compiler.dto_compiler import DTOCompiler
11
11
  from nsj_rest_lib2.compiler.edl_model.entity_model_base import EntityModelBase
12
- from nsj_rest_lib2.compiler.edl_model.entity_model_mixin import EntityModelMixin
12
+ from nsj_rest_lib2.compiler.edl_model.entity_model_root import EntityModelRoot
13
13
  from nsj_rest_lib2.compiler.edl_model.primitives import REGEX_EXTERNAL_REF
14
14
  from nsj_rest_lib2.compiler.entity_compiler import EntityCompiler
15
15
  from nsj_rest_lib2.compiler.model import CompilerResult
@@ -19,6 +19,7 @@ from nsj_rest_lib2.compiler.edl_model.entity_model import EntityModel
19
19
 
20
20
  from nsj_rest_lib2.settings import get_logger
21
21
 
22
+ # TODO GET e POST de relacionamentos 1X1
22
23
  # TODO Revisar compilação de valores default (sensível a tipos)
23
24
  # TODO Implementar suporte a conjuntos
24
25
  # TODO Autenticação nas rotas
@@ -60,7 +61,7 @@ class EDLCompiler:
60
61
  entity_models = []
61
62
  for dependency_edl in dependencies_edls:
62
63
  if "mixin" in dependency_edl and dependency_edl["mixin"]:
63
- dependency_entity_model = EntityModelMixin(**dependency_edl)
64
+ dependency_entity_model = EntityModelRoot(**dependency_edl)
64
65
  else:
65
66
  dependency_entity_model = EntityModel(**dependency_edl)
66
67
  entity_models.append(dependency_entity_model)
@@ -220,6 +221,16 @@ class EDLCompiler:
220
221
  if not entity_model:
221
222
  return
222
223
 
224
+ # Populando com os components da superclasse (extends)
225
+ if entity_model.extends:
226
+ super_model = entity_models[entity_model.extends]
227
+
228
+ self._make_components_structures(
229
+ components_structure,
230
+ super_model,
231
+ entity_models,
232
+ )
233
+
223
234
  # Populando com os components do trait
224
235
  if entity_model.trait_from:
225
236
  trait_model = entity_models[entity_model.trait_from]
@@ -243,6 +254,29 @@ class EDLCompiler:
243
254
  if not entity_model:
244
255
  return
245
256
 
257
+ # Populando com as propriedades dos mixins
258
+ if entity_model.mixins:
259
+ for mixin_id in entity_model.mixins:
260
+ if mixin_id not in entity_models:
261
+ raise Exception(f"Mixin '{mixin_id}' não encontrado.")
262
+
263
+ mixin_model = entity_models[mixin_id]
264
+ self._make_properties_structures(
265
+ properties_structure,
266
+ mixin_model,
267
+ entity_models,
268
+ )
269
+
270
+ # Populando com as propriedades da superclasse (extends)
271
+ if entity_model.extends:
272
+ super_model = entity_models[entity_model.extends]
273
+
274
+ self._make_properties_structures(
275
+ properties_structure,
276
+ super_model,
277
+ entity_models,
278
+ )
279
+
246
280
  # Populando com as propriedades do trait
247
281
  if entity_model.trait_from:
248
282
  trait_model = entity_models[entity_model.trait_from]
@@ -271,24 +305,16 @@ class EDLCompiler:
271
305
  if entity_model.trait_properties:
272
306
  properties_structure.trait_properties.update(entity_model.trait_properties)
273
307
 
308
+ if entity_model.extends_properties:
309
+ properties_structure.extends_properties.update(
310
+ entity_model.extends_properties
311
+ )
312
+
274
313
  if entity_model.repository.properties:
275
314
  properties_structure.entity_properties.update(
276
315
  entity_model.repository.properties
277
316
  )
278
317
 
279
- # Populando com as propriedades dos mixins
280
- if entity_model.mixins:
281
- for mixin_id in entity_model.mixins:
282
- if mixin_id not in entity_models:
283
- raise Exception(f"Mixin '{mixin_id}' não encontrado.")
284
-
285
- mixin_model = entity_models[mixin_id]
286
- self._make_properties_structures(
287
- properties_structure,
288
- mixin_model,
289
- entity_models,
290
- )
291
-
292
318
  def _make_unique_map_by_property(
293
319
  self,
294
320
  map_indexes_by_property: dict[str, list[IndexCompilerStructure]],
@@ -301,6 +327,30 @@ class EDLCompiler:
301
327
  if not entity_model:
302
328
  return
303
329
 
330
+ # Populando com as uniques da superclasse (extends)
331
+ if entity_model.extends:
332
+ super_model = entity_models[entity_model.extends]
333
+
334
+ self._make_unique_map_by_property(
335
+ map_indexes_by_property,
336
+ map_unique_by_property,
337
+ super_model,
338
+ entity_models,
339
+ deep=deep + 1,
340
+ )
341
+
342
+ # Populando com as uniques do trait
343
+ if entity_model.trait_from:
344
+ trait_model = entity_models[entity_model.trait_from]
345
+
346
+ self._make_unique_map_by_property(
347
+ map_indexes_by_property,
348
+ map_unique_by_property,
349
+ trait_model,
350
+ entity_models,
351
+ deep=deep + 1,
352
+ )
353
+
304
354
  # Varrendo e organizando os índices
305
355
  if entity_model.repository.indexes:
306
356
  for index in entity_model.repository.indexes:
@@ -324,23 +374,11 @@ class EDLCompiler:
324
374
  list_index = map_indexes_by_property.setdefault(pkey, [])
325
375
  list_index.append(IndexCompilerStructure(index, deep > 1))
326
376
 
327
- # Populando com as propriedades do trait
328
- if entity_model.trait_from:
329
- trait_model = entity_models[entity_model.trait_from]
330
-
331
- self._make_unique_map_by_property(
332
- map_indexes_by_property,
333
- map_unique_by_property,
334
- trait_model,
335
- entity_models,
336
- deep=deep + 1,
337
- )
338
-
339
377
  def list_dependencies(
340
378
  self, edl_json: dict[str, Any]
341
379
  ) -> tuple[list[str], EntityModelBase]:
342
380
  if edl_json.get("mixin", False):
343
- entity_model = EntityModelMixin(**edl_json)
381
+ entity_model = EntityModelRoot(**edl_json)
344
382
  else:
345
383
  entity_model = EntityModel(**edl_json)
346
384
 
@@ -349,16 +387,30 @@ class EDLCompiler:
349
387
  def _list_dependencies(self, entity_model: EntityModelBase) -> list[str]:
350
388
  entities: list[str] = []
351
389
 
352
- # Adicionando dependências por traits
353
- if entity_model.trait_from:
354
- entities.append(entity_model.trait_from)
355
-
356
390
  # Adicionando dependências por mixins
357
391
  if entity_model.mixins:
358
392
  entities.extend(entity_model.mixins)
359
393
 
394
+ # Adicionando dependências por traits
395
+ if entity_model.extends:
396
+ entities.append(entity_model.extends)
397
+
398
+ # Adicionando dependências por traits
399
+ if entity_model.trait_from:
400
+ entities.append(entity_model.trait_from)
401
+
360
402
  # Populando com as dependências de propriedades de relacionamento
361
403
  relations = self._list_dependencies_relations(entity_model)
404
+
405
+ components_dependency_list = []
406
+ if entity_model.components is not None:
407
+ for component in entity_model.components:
408
+ components_dependency_list.extend(
409
+ self._list_dependencies(entity_model.components[component])
410
+ )
411
+
412
+ relations.extend(components_dependency_list)
413
+
362
414
  entities.extend(relations)
363
415
 
364
416
  return entities
@@ -419,7 +471,7 @@ if __name__ == "__main__":
419
471
  # e já realizando as validações básicas de tipo e estrutura.
420
472
  print(f"Validando arquivo: {file}")
421
473
  if edl.get("mixin", False):
422
- entity_model = EntityModelMixin(**edl)
474
+ entity_model = EntityModelRoot(**edl)
423
475
  else:
424
476
  entity_model = EntityModel(**edl)
425
477
 
@@ -3,6 +3,7 @@ from nsj_rest_lib2.compiler.edl_model.entity_model_base import EntityModelBase
3
3
  from nsj_rest_lib2.compiler.edl_model.index_model import IndexModel
4
4
  from nsj_rest_lib2.compiler.edl_model.property_meta_model import PropertyMetaModel
5
5
  from nsj_rest_lib2.compiler.edl_model.trait_property_meta_model import (
6
+ ExtendsPropertyMetaModel,
6
7
  TraitPropertyMetaModel,
7
8
  )
8
9
 
@@ -23,6 +24,7 @@ class PropertiesCompilerStructure:
23
24
  self.metric_label: list[str] = []
24
25
  self.entity_properties: dict[str, ColumnMetaModel] = {}
25
26
  self.trait_properties: dict[str, TraitPropertyMetaModel] = {}
27
+ self.extends_properties: dict[str, ExtendsPropertyMetaModel] = {}
26
28
 
27
29
 
28
30
  class ComponentsCompilerStructure:
@@ -4,10 +4,10 @@ from pydantic import Field
4
4
  from typing import Optional
5
5
 
6
6
  from nsj_rest_lib2.compiler.edl_model.api_model import APIModel
7
- from nsj_rest_lib2.compiler.edl_model.entity_model_mixin import EntityModelMixin
7
+ from nsj_rest_lib2.compiler.edl_model.entity_model_root import EntityModelRoot
8
8
 
9
9
 
10
- class EntityModel(EntityModelMixin):
10
+ class EntityModel(EntityModelRoot):
11
11
  edl_version: Optional[str] = Field(default="1.0", description="Versão do EDL")
12
12
  version: Optional[str] = Field(
13
13
  default="1.0", description="Versão da entidade (padrão: 1.0)."
@@ -8,6 +8,7 @@ from typing import Dict, List, Optional
8
8
  from nsj_rest_lib2.compiler.edl_model.property_meta_model import PropertyMetaModel
9
9
  from nsj_rest_lib2.compiler.edl_model.repository_model import RepositoryModel
10
10
  from nsj_rest_lib2.compiler.edl_model.trait_property_meta_model import (
11
+ ExtendsPropertyMetaModel,
11
12
  TraitPropertyMetaModel,
12
13
  )
13
14
 
@@ -18,6 +19,13 @@ class EntityModelBase(BaseModel):
18
19
  ...,
19
20
  description="Identificador único da entidade, dentro de um determinado escopo (podendo ser sobreescrito para um tenant ou grupo _empresarial).",
20
21
  )
22
+ mixin: Optional[bool] = Field(
23
+ False,
24
+ description="Indica se o modelo é um mixin (bloco reutilizável, que não gera contém tabela própria no banco).",
25
+ )
26
+ extends: Optional[str] = Field(
27
+ None, description="Identificador da entidade estendida por esta."
28
+ )
21
29
  trait_from: Optional[str] = Field(
22
30
  None, description="Identificador da entidade que a trait estende."
23
31
  )
@@ -28,10 +36,6 @@ class EntityModelBase(BaseModel):
28
36
  required: Optional[List[str]] = Field(
29
37
  None, description="Lista de campos obrigatórios no modelo."
30
38
  )
31
- mixin: Optional[bool] = Field(
32
- False,
33
- description="Indica se o modelo é um mixin (bloco reutilizável, que não gera contém tabela própria no banco).",
34
- )
35
39
  partition_data: Optional[List[str]] = Field(
36
40
  None,
37
41
  description="Lista de propriedades da entidade, que serã usadas para particionamento dos dados no banco (sendo obrigatórias em todas as chamadas, inclusive como um tipo de filtro obrigatório).",
@@ -52,6 +56,10 @@ class EntityModelBase(BaseModel):
52
56
  None,
53
57
  description="Dicionário de propriedades condicionais da trait (isso é, especifica propriedades, e seus valores fixos, que serão usados como um tipo de filtro fixo usado como condição para que a propridade principal assum o papel daquele tipo de trait).",
54
58
  )
59
+ extends_properties: Optional[Dict[str, ExtendsPropertyMetaModel]] = Field(
60
+ None,
61
+ description="Dicionário de propriedades condicionais associadas ao uso de extends (especifica propriedades e seus valores fixos, usados como filtros quando a entidade é uma especialização via extends).",
62
+ )
55
63
  properties: Dict[str, PropertyMetaModel] = Field(
56
64
  ..., description="Dicionário de propriedades do modelo."
57
65
  )
@@ -3,5 +3,5 @@ from pydantic import Field
3
3
  from nsj_rest_lib2.compiler.edl_model.entity_model_base import EntityModelBase
4
4
 
5
5
 
6
- class EntityModelMixin(EntityModelBase):
6
+ class EntityModelRoot(EntityModelBase):
7
7
  escopo: str = Field(..., description="Escopo do EDL (define a aplicação).")
@@ -26,7 +26,6 @@ class PropertyMetaModel(BaseModel):
26
26
  key_alternative: Optional[bool] = Field(
27
27
  default=False,
28
28
  description="Indica se a propriedade é parte de uma chave alternativa (chave natural).",
29
- alias="keyAlternative",
30
29
  )
31
30
  cardinality: Optional[CardinalityTypes] = Field(
32
31
  None,
@@ -39,7 +38,7 @@ class PropertyMetaModel(BaseModel):
39
38
 
40
39
  ## TODO Sugestões de validação
41
40
  min_length: Optional[int] = Field(
42
- None, description="Comprimento mínimo (para strings).", alias="minLength"
41
+ None, description="Comprimento mínimo (para strings)."
43
42
  )
44
43
  pattern: Optional[str] = Field(
45
44
  None,
@@ -14,3 +14,6 @@ class TraitPropertyMetaModel(BaseModel):
14
14
  None,
15
15
  description="Lista de valores permitidos.",
16
16
  )
17
+
18
+
19
+ ExtendsPropertyMetaModel = TraitPropertyMetaModel
@@ -50,6 +50,15 @@ class EntityCompiler:
50
50
  )
51
51
 
52
52
  default_order_props = []
53
+
54
+ key_field = props_pk[0]
55
+ if entity_model.repository.properties:
56
+ if (
57
+ key_field in entity_model.repository.properties
58
+ and entity_model.repository.properties[key_field].column
59
+ ):
60
+ key_field = entity_model.repository.properties[props_pk[0]].column
61
+
53
62
  if (
54
63
  isinstance(entity_model, EntityModel)
55
64
  and entity_model.api
@@ -69,8 +78,8 @@ class EntityCompiler:
69
78
 
70
79
  default_order_fields.append(CompilerStrUtil.to_snake_case(field))
71
80
 
72
- if CompilerStrUtil.to_snake_case(props_pk[0]) not in default_order_fields:
73
- default_order_fields.append(CompilerStrUtil.to_snake_case(props_pk[0]))
81
+ if CompilerStrUtil.to_snake_case(key_field) not in default_order_fields:
82
+ default_order_fields.append(CompilerStrUtil.to_snake_case(key_field))
74
83
 
75
84
  class_name = compile_entity_class_name(entity_model.id, prefix_class_name)
76
85
  ast_class = ast.ClassDef(
@@ -89,7 +98,7 @@ class EntityCompiler:
89
98
  ast.keyword(
90
99
  arg="pk_field",
91
100
  value=ast.Constant(
92
- value=CompilerStrUtil.to_snake_case(props_pk[0])
101
+ value=CompilerStrUtil.to_snake_case(key_field)
93
102
  ),
94
103
  ),
95
104
  ast.keyword(
@@ -153,7 +153,24 @@ class EDLPropertyCompiler:
153
153
  for pkey in properties_structure.trait_properties:
154
154
  prop = properties_structure.trait_properties[pkey]
155
155
 
156
- self._compile_trait_property(
156
+ self._compile_trait_extends_property(
157
+ properties_structure,
158
+ map_unique_by_property,
159
+ pkey,
160
+ prop,
161
+ ast_dto_attributes,
162
+ ast_entity_attributes,
163
+ fixed_filters,
164
+ escopo,
165
+ entity_model,
166
+ enum_classes,
167
+ prefx_class_name,
168
+ )
169
+
170
+ for pkey in properties_structure.extends_properties:
171
+ prop = properties_structure.extends_properties[pkey]
172
+
173
+ self._compile_trait_extends_property(
157
174
  properties_structure,
158
175
  map_unique_by_property,
159
176
  pkey,
@@ -177,7 +194,7 @@ class EDLPropertyCompiler:
177
194
  fixed_filters,
178
195
  )
179
196
 
180
- def _compile_trait_property(
197
+ def _compile_trait_extends_property(
181
198
  self,
182
199
  properties_structure: PropertiesCompilerStructure,
183
200
  map_unique_by_property: dict[str, IndexCompilerStructure],
@@ -665,9 +682,19 @@ class EDLPropertyCompiler:
665
682
  )
666
683
  )
667
684
  else:
685
+ dto_property_name = f"relation_1_1_self_column_{relation_column}"
668
686
  # Adicionando propriedade, para o campo de relação, no DTO (quando for o dono da relação)
669
687
  ast_dto_attributes.append(
670
- self._build_dto_property_ast(relation_column, PrimitiveTypes.UUID)
688
+ self._build_dto_property_ast(
689
+ dto_property_name,
690
+ PrimitiveTypes.UUID,
691
+ keywords=[
692
+ ast.keyword(
693
+ arg="entity_field",
694
+ value=ast.Constant(value=relation_column),
695
+ ),
696
+ ],
697
+ )
671
698
  )
672
699
 
673
700
  # Adicionando propriedade, para o campo de relação, no Entity (quando for o dono da relação)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nsj_rest_lib2
3
- Version: 0.0.15
3
+ Version: 0.0.17
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
@@ -23,8 +23,14 @@ Requires-Dist: pyyaml<7.0.0,>=6.0.3
23
23
 
24
24
  Biblioteca para permitir a distribuição de rotas dinâmicas numa API, configuradas por meio de EDLs declarativos (em formato JSON).
25
25
 
26
+ [ESPECIFICAÇÃO DO MODELO DE ENTIDADES](docs/especificacao.md)
27
+
26
28
  ## TODO
27
- * Colocar tempo para recarregamento das entidades (para checar, no redis, se mudou o hash.)
28
29
  * Unificar o arquivo redis_config.py
29
30
  * Usar pydantic, ou similar, para transformar a configuração das entidades, no redis, num objeto
30
31
  * Rever modo de usar o InjectFactory (talvez dando ciência, ao RestLib, do padrão multibanco)
32
+ * Implementar e documentar campos join
33
+ * Implementar e documentar conjuntos
34
+ * Dar erro ao haver conflito de nomes das propriedades (por qualquer tipo de herança)
35
+ * Rotas para o inline
36
+ * inline será para composição (arquivo externo é agregação)
@@ -4,24 +4,24 @@ nsj_rest_lib2/redis_config.py,sha256=4KLcvYS3nJO7PMQgF6F9_j6r-TyqcS7TBbd3LEQuKDU
4
4
  nsj_rest_lib2/settings.py,sha256=Hn_o1HZmievnYb8D1kNT2Nq-OEjxbyNjOiOpbnFsMwE,367
5
5
  nsj_rest_lib2/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  nsj_rest_lib2/compiler/ai_compiler.py,sha256=shAtN4T0ai_52qh15L3mK1QbeC6glHOR6C3J3gj14II,9029
7
- nsj_rest_lib2/compiler/compiler.py,sha256=HiBlaC_SDFFVE77UbwcWzXdcuF8G5Xaz4tzdpkHbIo4,16766
8
- nsj_rest_lib2/compiler/compiler_structures.py,sha256=ZUeWnO-23f3JHq4bOfTcqszMDDXwuFEtMRhqMN7GeWQ,1214
7
+ nsj_rest_lib2/compiler/compiler.py,sha256=J5ggkuYi-wQDra8t2R9riP3rqaKl2AQgnRqXZMX1QXE,18470
8
+ nsj_rest_lib2/compiler/compiler_structures.py,sha256=2rLC21vMsLWURlRlQP4XGW51TRajmYY_guE6OBcoGBA,1318
9
9
  nsj_rest_lib2/compiler/dto_compiler.py,sha256=KDdfzoghbsO0RpWAhuhZ4gsb11aoxgci-93dwxWNMuY,5400
10
- nsj_rest_lib2/compiler/entity_compiler.py,sha256=7LypMMlgXnUIkpO7rEYtc2V1sKi9Nv1IxlXkgObX25s,4453
10
+ nsj_rest_lib2/compiler/entity_compiler.py,sha256=A0fiLFF7dGXM2uH5cknmAX-cQ-9nu4Ubujp-m5NmgYE,4780
11
11
  nsj_rest_lib2/compiler/model.py,sha256=QDBoM26qoZdiNcykl1nvXCrFDhg-6Q__QzVq6uY1QzE,1460
12
- nsj_rest_lib2/compiler/property_compiler.py,sha256=AL0QW2-IqlCKJ7X4QFPEaafZ2MfNBElGF-e6KFPHPaA,35787
12
+ nsj_rest_lib2/compiler/property_compiler.py,sha256=OOXEXGxXsEkvGcE_QKcasCoAkQ7qRUkWvPhd0c7yFuA,36717
13
13
  nsj_rest_lib2/compiler/edl_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  nsj_rest_lib2/compiler/edl_model/ai_entity_edl.py,sha256=664QBDcOgVnyfwtUOXO1W7AKaZhueBG335x5DuogruY,7644
15
15
  nsj_rest_lib2/compiler/edl_model/api_model.py,sha256=pH0Uiq_64AGvkHqwY44TrulWWZXbi6M0EKJWUhSqKj0,837
16
16
  nsj_rest_lib2/compiler/edl_model/column_meta_model.py,sha256=s0sEVkoW1hV2_hto1mws4XhzKGH_b4NzhaOiwFH25Ks,694
17
- nsj_rest_lib2/compiler/edl_model/entity_model.py,sha256=-y_b9ZFZvdYiB_oxX64BdKyS9qDVHzknWd5R6muTEO8,857
18
- nsj_rest_lib2/compiler/edl_model/entity_model_base.py,sha256=pkWBfrtz3ZTG1qvZwDUwJHE9qTkcqmOgesq3vgQKxBo,3472
19
- nsj_rest_lib2/compiler/edl_model/entity_model_mixin.py,sha256=vGUYwMXcf24T4oF7Ie-cTzCvZLEa_bxCA-euBz8S7_Q,232
17
+ nsj_rest_lib2/compiler/edl_model/entity_model.py,sha256=Yc6wvjsiwacmz796mZIU-i9hxzNV9yuLPdULGKYHNbM,854
18
+ nsj_rest_lib2/compiler/edl_model/entity_model_base.py,sha256=ICZ0m3t-_Wv8Di5Grb5UJIN7-3belcBf4IUYsceWX1I,3933
19
+ nsj_rest_lib2/compiler/edl_model/entity_model_root.py,sha256=VinsxFlNyCaKKk37ZzcbmWaWgoUP2-dZBG61Ke7NvVs,231
20
20
  nsj_rest_lib2/compiler/edl_model/index_model.py,sha256=cXWlu0hxtro5vvYoirkDW4R3PCnBW5oCCWjRJ6AX5zE,508
21
21
  nsj_rest_lib2/compiler/edl_model/primitives.py,sha256=GTo8e1mf9munvl_J1-fmaXgSJ8yQvGX56f2rwS85M1Y,1459
22
- nsj_rest_lib2/compiler/edl_model/property_meta_model.py,sha256=x2SApvI-5MZTErAHeOXnR6qfjflhSs8r6Y9KMtCykV0,3960
22
+ nsj_rest_lib2/compiler/edl_model/property_meta_model.py,sha256=ie3roNZAqYTwz7q0TTdceMjY5khnBiED2yp0XBqqk7E,3909
23
23
  nsj_rest_lib2/compiler/edl_model/repository_model.py,sha256=Vt1HxlaoifP4w5ij1laKDkD1-COBihE8EX1HkdEDUSo,977
24
- nsj_rest_lib2/compiler/edl_model/trait_property_meta_model.py,sha256=SBSfiu4v0PMsWRsGDySR3P2tkabLbDZxx_FFy_3rGXA,605
24
+ nsj_rest_lib2/compiler/edl_model/trait_property_meta_model.py,sha256=NtMVZeOPu3LJwXI-8tCOLVuQiGua_0t7kL1h9gL7HuM,657
25
25
  nsj_rest_lib2/compiler/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  nsj_rest_lib2/compiler/util/str_util.py,sha256=lVP1yHhj1pOd6ULtTnkcfX6Gqrpe4yCBratHUhBNGcI,843
27
27
  nsj_rest_lib2/compiler/util/type_naming_util.py,sha256=wTfxPCezCTt-ltSg_hkaYNH7Z05k-mlJKZd-9AMA9ac,768
@@ -30,7 +30,7 @@ nsj_rest_lib2/controller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
30
30
  nsj_rest_lib2/controller/dynamic_controller.py,sha256=XMqxe1NW-NE5XwomXb4pSNdALQHpP74Hc26R4fnmXqg,15194
31
31
  nsj_rest_lib2/service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  nsj_rest_lib2/service/entity_loader.py,sha256=uB0xXih9Px2jSTMdZNIu6_3dngE37K7adKX03cYSRug,15660
33
- nsj_rest_lib2-0.0.15.dist-info/METADATA,sha256=ULdAQGwg_pghhmixzJCCPI9Qg0L-xuVonJqBkx5Rt3Y,1361
34
- nsj_rest_lib2-0.0.15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
35
- nsj_rest_lib2-0.0.15.dist-info/top_level.txt,sha256=L6zh0EfH8_rur7OJ8_V-El-XEMf4qg3bkF8ADgqLVIA,14
36
- nsj_rest_lib2-0.0.15.dist-info/RECORD,,
33
+ nsj_rest_lib2-0.0.17.dist-info/METADATA,sha256=cesW5YRcvKWDcfyVo9yIzPnYL7sAG_0-BF57Ww_LMEs,1585
34
+ nsj_rest_lib2-0.0.17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
35
+ nsj_rest_lib2-0.0.17.dist-info/top_level.txt,sha256=L6zh0EfH8_rur7OJ8_V-El-XEMf4qg3bkF8ADgqLVIA,14
36
+ nsj_rest_lib2-0.0.17.dist-info/RECORD,,