mwgencode 1.4.1__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.
Files changed (84) hide show
  1. gencode/__init__.py +140 -0
  2. gencode/dd_models.py +256 -0
  3. gencode/ext.py +19 -0
  4. gencode/gen_code.py +343 -0
  5. gencode/gencode/__init__.py +0 -0
  6. gencode/gencode/export_class2swgclass.py +206 -0
  7. gencode/gencode/gen_bo_models_code.py +719 -0
  8. gencode/gencode/gen_state_code.py +171 -0
  9. gencode/gencode/gen_swagger_code.py +94 -0
  10. gencode/gencode/gen_tests_code.py +113 -0
  11. gencode/gencode/sample/__init__.py +2 -0
  12. gencode/gencode/sample/babel.cfg +3 -0
  13. gencode/gencode/sample/config-sample.ini +9 -0
  14. gencode/gencode/sample/config.ini +14 -0
  15. gencode/gencode/sample/create_new_table_run.pys +19 -0
  16. gencode/gencode/sample/dockerignore.dock +57 -0
  17. gencode/gencode/sample/file_utils.pys +396 -0
  18. gencode/gencode/sample/gencode.xmi +33 -0
  19. gencode/gencode/sample/gitignore.git +14 -0
  20. gencode/gencode/sample/migrate_run.bat +5 -0
  21. gencode/gencode/sample/migrate_run.pys +9 -0
  22. gencode/gencode/sample/requirements.txt +17 -0
  23. gencode/gencode/sample/run.sh +27 -0
  24. gencode/gencode/sample/seeds/__init__.py +0 -0
  25. gencode/gencode/sample/seeds/models_rm.pys +187 -0
  26. gencode/gencode/sample/seeds/seed_dev_data.pys +21 -0
  27. gencode/gencode/sample/seeds/seed_init.pys +17 -0
  28. gencode/gencode/sample/seeds/seed_rm.pys +39 -0
  29. gencode/gencode/sample/seeds/seed_run.pys +13 -0
  30. gencode/gencode/sample/seeds/seed_utils.pys +23 -0
  31. gencode/gencode/sample/test__init__.pys +6 -0
  32. gencode/gencode/sample/test_run.pys +4 -0
  33. gencode/gencode/sample/utils.pys +92 -0
  34. gencode/gencode/template/Dockerfile.tmp +55 -0
  35. gencode/gencode/template/README.md +91 -0
  36. gencode/gencode/template/__init__.py +0 -0
  37. gencode/gencode/template/__init__.pys +99 -0
  38. gencode/gencode/template/config.pys +134 -0
  39. gencode/gencode/template/default.conf +21 -0
  40. gencode/gencode/template/docker-compose-dev.yaml +52 -0
  41. gencode/gencode/template/docker-compose.yaml +55 -0
  42. gencode/gencode/template/drone.tmp +45 -0
  43. gencode/gencode/template/flask_models.pys +107 -0
  44. gencode/gencode/template/flask_models_base.pys +159 -0
  45. gencode/gencode/template/gen_code_flask.yaml +21 -0
  46. gencode/gencode/template/gen_code_run.pys +28 -0
  47. gencode/gencode/template/k8s-tmp.yml +141 -0
  48. gencode/gencode/template/run.pys +52 -0
  49. gencode/gencode/template/sample.mdj +1193 -0
  50. gencode/gencode/template/setup.tmp +48 -0
  51. gencode/gencode/template/supervisord.conf +21 -0
  52. gencode/gencode/template/swagger_file.yaml +195 -0
  53. gencode/gencode/template/swg_class.tmp +41 -0
  54. gencode/gencode/template/swg_ctrl_code.pys +130 -0
  55. gencode/gencode/template/swg_package_mng.tmp +4423 -0
  56. gencode/gencode/template/test_test_base.tmp +34 -0
  57. gencode/gencode/template/tests/__init__.py +0 -0
  58. gencode/gencode/template/tests/__init__.pys +5 -0
  59. gencode/gencode/template/tests/init_test_data.pys +80 -0
  60. gencode/gencode/template/tests/run.pys +4 -0
  61. gencode/gencode/template/tests/test_base.pys +87 -0
  62. gencode/gencode/template/tests/test_classmng.pys +58 -0
  63. gencode/gencode/template/uwsgi.ini +20 -0
  64. gencode/gencode/template/uwsgi_run.pys +44 -0
  65. gencode/importmdj/__init__.py +0 -0
  66. gencode/importmdj/import_dd_classes.py +369 -0
  67. gencode/importmdj/import_swagger2_class.py +371 -0
  68. gencode/importmdj/import_uml_models.py +466 -0
  69. gencode/importxmi/__init__.py +1 -0
  70. gencode/importxmi/import_classes.py +342 -0
  71. gencode/importxmi/import_sequences.py +291 -0
  72. gencode/importxmi/import_states.py +150 -0
  73. gencode/importxmi/import_swagger.py +151 -0
  74. gencode/swg2_class_models.py +179 -0
  75. gencode/uml_class_models.py +295 -0
  76. gencode/upgrade.py +113 -0
  77. gencode/utils.py +225 -0
  78. manage.py +194 -0
  79. mwgencode-1.4.1.dist-info/METADATA +325 -0
  80. mwgencode-1.4.1.dist-info/RECORD +84 -0
  81. mwgencode-1.4.1.dist-info/WHEEL +5 -0
  82. mwgencode-1.4.1.dist-info/entry_points.txt +2 -0
  83. mwgencode-1.4.1.dist-info/licenses/LICENSE.txt +19 -0
  84. mwgencode-1.4.1.dist-info/top_level.txt +2 -0
@@ -0,0 +1,466 @@
1
+ from gencode.uml_class_models import *
2
+ import json
3
+ import codecs
4
+ from gencode.ext import engine,Session,Base
5
+ import logging
6
+ from mwutils.cache import Cached
7
+ from enum import Enum
8
+ from collections import namedtuple
9
+
10
+ logger = logging.getLogger('gencode.import_model')
11
+
12
+ uml_contain = ['UMLModel','UMLSubsystem','UMLPackage']
13
+ classs_uml = ['UMLClass','UMLSignal','UMLPrimitiveType','UMLDataType']
14
+
15
+ support_uml_type =('Project','UMLModel','UMLSubsystem','UMLPackage',
16
+ 'UMLClassDiagram','UMLAttribute','UMLClass',
17
+ 'UMLAssociation','UMLAssociationEnd','UMLSignal',
18
+ 'UMLPrimitiveType','UMLDataType','UMLAssociationClassLink')
19
+
20
+ class Tag_type(Enum):
21
+ boclass = 'boclass'
22
+ swagger = 'swagger'
23
+
24
+ Tag = namedtuple('Tag',['type','value','ref_id'])
25
+
26
+ class Import_base():
27
+ def _create_obj(self, cls, js):
28
+ # 把所有UML class的 id 栏位增加flag
29
+ js['id'] = self._get_id(js['id'])
30
+ obj = cls(**js)
31
+ self.session.add(obj)
32
+ self.session.commit()
33
+ return obj
34
+
35
+ def __init__(self,session,project):
36
+ if session is None:
37
+ session = Session()
38
+ self.session = session
39
+ self.project = project
40
+
41
+ def _get_id(self, _id):
42
+ return '%s_%s'%(self.project.flag,_id)
43
+
44
+ def import_elm(self,parent,elements):
45
+ pass
46
+
47
+ @property
48
+ def importer(self):
49
+ return Importer(self.project)
50
+
51
+ class Import_package(Import_base):
52
+ def import_elm(self, parent, elements):
53
+ assert elements['_type'] in uml_contain
54
+ packege_js = {"id": elements['_id'],
55
+ "name": elements['name'],
56
+ "stereotype": elements.get('stereotype',''),
57
+ "doc": elements.get("documentation",''),
58
+ "type": elements['_type'],
59
+ "parentid":parent.id,
60
+ "projectid": self.project.id,
61
+ "isswagger": parent.isswagger or elements['name'].lower()=='swagger'
62
+ }
63
+ return self._create_obj(Package, packege_js)
64
+
65
+ class Import_diagram(Import_base):
66
+ def import_elm(self, parent, elements):
67
+ assert elements['_type'] == 'UMLClassDiagram'
68
+ obj_js = {"id": elements['_id'],
69
+ "name": elements['name'],
70
+ "isdefault": elements.get('defaultDiagram'),
71
+ "type": elements['_type'],
72
+ "parentid": parent.id,
73
+ "isswagger": parent.isswagger
74
+ }
75
+ return self._create_obj(Diagram, obj_js)
76
+
77
+ class Import_property(Import_base):
78
+ def import_elm(self, parent, elements):
79
+ assert elements['_type'] == 'UMLAttribute'
80
+ try:
81
+ obj_js = {"id": elements['_id'],
82
+ "name": elements['name'],
83
+ "stereotype": elements.get('stereotype', ''),
84
+ "doc": elements.get("documentation", ''),
85
+ "type": elements.get('type','string') if not isinstance(elements.get('type','string'), dict) else 'object',
86
+ "multiplicity": elements.get('multiplicity', ''),
87
+ "isreadonly": elements.get('isReadOnly', False),
88
+ "isordered": elements.get('isOrdered', False),
89
+ "isunique": elements.get('isUnique', False),
90
+ "defaultvalue": elements.get('defaultValue', ''),
91
+ "isid": elements.get('isID', False),
92
+ "parentid": parent.id,
93
+ "isswagger": parent.isswagger,
94
+ "objectid": self._get_id(elements['type']['$ref']) if isinstance(elements.get('type','string'), dict) else '',
95
+ }
96
+ except Exception as e:
97
+ raise Exception('%s.elements have a error:%s,elements:%s'%(parent.name,e,elements))
98
+
99
+ return self._create_obj(Property, obj_js)
100
+
101
+ class Import_association(Import_base):
102
+ def __init__(self, session,project):
103
+ super().__init__(session,project)
104
+ # self.import_assoc_end = Import_assoc_end(session,project)
105
+
106
+ def import_elm(self, parent, elements):
107
+ assert elements['_type'] == 'UMLAssociation'
108
+ obj_js = {"id":elements['_id'],
109
+ "name":elements.get('name',''),
110
+ "stereotype":elements.get('stereotype',''),
111
+ "doc":elements.get('documentation',''),
112
+ "parentid":parent.id,
113
+ "end1id":self._get_id(elements.get('end1',{}).get('_id')),
114
+ "end2id":self._get_id(elements.get('end2',{}).get('_id')),
115
+ "projectid":self.project.id,
116
+ "isswagger": parent.isswagger
117
+ }
118
+ assoc = self._create_obj(Association, obj_js)
119
+ end1 = self.importer.import_elm(assoc,elements['end1'])
120
+ end2 = self.importer.import_elm(assoc,elements['end2'])
121
+ return assoc
122
+
123
+ class Import_assoc_end(Import_base):
124
+ def import_elm(self, parent, elements):
125
+ assert elements['_type'] == 'UMLAssociationEnd'
126
+ obj_js = {"id":elements['_id'],
127
+ "name":elements.get('name',''),
128
+ "stereotype":elements.get('stereotype',''),
129
+ # todo 3.22
130
+ "navigable":elements.get('navigable',True),
131
+ "aggregation":elements.get('aggregation',''),
132
+ "multiplicity":elements.get('multiplicity',''),
133
+ "referenceid":self._get_id(elements['reference']["$ref"]),
134
+ "isswagger": parent.isswagger,
135
+ "isderived":elements.get('isDerived',False)
136
+ }
137
+ return self._create_obj(Assoc_end, obj_js)
138
+
139
+ class Import_operation(Import_base):
140
+ def __init__(self, session,project):
141
+ super().__init__(session,project)
142
+
143
+ def _import_paramer(self,cls,elements):
144
+ for elem in elements:
145
+ self.importer.import_elm(cls, elem)
146
+
147
+ def import_elm(self, parent, elements):
148
+ # starUML 2.8 有 derection,3.2.2有name
149
+ param_is_type = lambda elm,type:('direction' in elm.keys() and elm['direction']==type) \
150
+ or ('direction' not in elm.keys() and type=='in')
151
+ def get_paramer_id(elms,type='in'):
152
+ for elm in elms:
153
+ if param_is_type(elm,type):
154
+ return self._get_id(elm['_id'])
155
+ return ''
156
+
157
+ def get_py_paramers(elms):
158
+ result = []
159
+ for elm in elms or []:
160
+ if param_is_type(elm,'in'):
161
+ def_value = elm.get('defaultValue','')
162
+ result.append(elm['name']+ ' = %s'%def_value if def_value else elm['name'])
163
+ return ','.join(result)
164
+
165
+ assert elements['_type'] == 'UMLOperation'
166
+ obj_js = {"id":elements['_id'],
167
+ "name":elements.get('name',''),
168
+ "stereotype":elements.get('stereotype',''),
169
+ "doc":elements.get('documentation',''),
170
+ "parentid":parent.id,
171
+ "in_param_id":get_paramer_id(elements.get('parameters',[]),'in'),
172
+ "return_param_id":get_paramer_id(elements.get('parameters',[]),'return'),
173
+ "isswagger": parent.isswagger,
174
+ "py_params":get_py_paramers(elements.get('parameters')),
175
+ "isstatic":elements.get('isStatic',False),
176
+ "isquery":elements.get('isQuery',False),
177
+ "isabstract":elements.get('isAbstract',False),
178
+ "specification":elements.get('specification','')
179
+ }
180
+ operation = self._create_obj(Operation, obj_js)
181
+ self._import_paramer(operation,elements.get('parameters',[]))
182
+ return operation
183
+
184
+ class Import_paramer(Import_base):
185
+ def import_elm(self, parent, elements):
186
+ assert elements['_type'] == 'UMLParameter'
187
+ obj_js = {"id":elements['_id'],
188
+ "name":elements.get('name',''),
189
+ "stereotype":elements.get('stereotype',''),
190
+ "multiplicity":elements.get('multiplicity',''),
191
+ "type":elements['type'] if not isinstance(elements['type'],dict) else 'object',
192
+ "object_type_id":self._get_id(elements['type']['$ref']) if isinstance(elements['type'],dict) else '',
193
+ "isswagger": parent.isswagger,
194
+ }
195
+ return self._create_obj(Parameter, obj_js)
196
+
197
+ class Import_enumeration(Import_base):
198
+ def import_eitem(self,parent,literals):
199
+ for li in literals:
200
+ self.importer.import_elm(parent,li)
201
+
202
+ def import_elm(self, parent, elements):
203
+ assert elements['_type'] == 'UMLEnumeration'
204
+ obj_js = {"id":elements['_id'],
205
+ "name":elements.get('name',''),
206
+ "stereotype":elements.get('stereotype',''),
207
+ "doc":elements.get('documentation',''),
208
+ "packageid":parent.id,
209
+ "isswagger": parent.isswagger,
210
+ "projectid":self.project.id
211
+ }
212
+
213
+ enumera = self._create_obj(Enumeration, obj_js)
214
+ self.import_eitem(enumera,elements['literals'])
215
+
216
+ class Import_enumeitem(Import_base):
217
+ def import_elm(self, parent, elements):
218
+ assert elements['_type'] == 'UMLEnumerationLiteral'
219
+ obj_js = {"id":elements['_id'],
220
+ "name":elements.get('name',''),
221
+ "stereotype":elements.get('stereotype',''),
222
+ "doc":elements.get('documentation',''),
223
+ "enumerationid":parent.id,
224
+ "isswagger": parent.isswagger,
225
+ }
226
+ return self._create_obj(Enumeitem, obj_js)
227
+
228
+ class Import_umlgeneralization(Import_base):
229
+ def import_elm(self, parent, elements):
230
+ assert elements['_type'] == 'UMLGeneralization'
231
+ obj_js = {"id":elements['_id'],
232
+ "stereotype":elements.get('stereotype',''),
233
+ # "doc":elements.get('documentation',''),
234
+ "parentid":self._get_id(elements['source']['$ref']),
235
+ "sourceid":self._get_id(elements['source']['$ref']),
236
+ "targetid":self._get_id(elements['target']['$ref']),
237
+ "isswagger": parent.isswagger,
238
+ "discriminator":elements.get('discriminator','')
239
+ }
240
+ return self._create_obj(Umlgeneralization, obj_js)
241
+
242
+ class Import_class(Import_base):
243
+ def __init__(self, session,project):
244
+ super().__init__(session,project)
245
+
246
+
247
+ def _import_attrs(self,cls,attributes):
248
+ for attr in attributes:
249
+ self.importer.import_elm(cls,attr)
250
+
251
+ def _import_assocs(self,cls,assoc):
252
+ self.importer.import_elm(cls, assoc)
253
+
254
+ def _import_operation(self,cls,ops):
255
+ for op in ops:
256
+ self.importer.import_elm(cls,op)
257
+
258
+ def _import_assoc_link(self,elem):
259
+ ass = self.session.query(Association).filter(Association.id == self._get_id(elem['associationSide']['$ref'])).first()
260
+ ass.is_assoc_class = True
261
+ cls = self.session.query(Class).filter(Class.id==self._get_id(elem['classSide']['$ref'])).first()
262
+ cls.is_assoc_class = True
263
+ cls.assoc_id= ass.id
264
+ ass.assoc_class_id=cls.id
265
+ self.session.add(ass)
266
+ self.session.add(cls)
267
+ self.session.commit()
268
+
269
+ def _import_elements(self,cls,elements):
270
+ try:
271
+ for elem in elements:
272
+ if elem['_type'] == 'UMLAssociation':
273
+ self._import_assocs(cls, elem)
274
+ elif elem['_type'] == 'UMLAssociationClassLink':
275
+ self._import_assoc_link(elem)
276
+ elif elem['_type'] in ('UMLClass','UMLGeneralization'): #汇入关联类
277
+ self.importer.import_elm(cls,elem)
278
+ else:
279
+ logger.warning('the uml type(%s) is not support in class(%s)' % (
280
+ elem['_type'], elem.get('name')))
281
+ except Exception as e:
282
+ logger.error('import %s class " elements raise exception,error:%s'%(cls.name,str(e)))
283
+ raise
284
+
285
+ def import_elm(self, parent, elements):
286
+ assert elements['_type'] in classs_uml,'not support the class(%s)'%elements['_type']
287
+ obj_js = {"id": elements['_id'],
288
+ "name": elements['name'],
289
+ "stereotype": elements.get('stereotype',''),
290
+ "type": elements['_type'],
291
+ "parentid": parent.id,
292
+ "doc":elements.get("documentation",''),
293
+ "isabstract":elements.get('isAbstract',False),
294
+ "isswagger": parent.isswagger,
295
+ "projectid":self.project.id
296
+ }
297
+ cls = self._create_obj(Class, obj_js)
298
+ self._import_attrs(cls,elements.get('attributes',[]))
299
+ self._import_elements(cls,elements.get('ownedElements',[]))
300
+ self._import_operation(cls,elements.get('operations',[]))
301
+ return cls
302
+
303
+ class Importer(metaclass=Cached):
304
+ def _reg_importor(self,types,importor):
305
+ if isinstance(types,list):
306
+ for tp in types:
307
+ self._importor[tp] = importor
308
+ else:
309
+ self._importor[types] =importor
310
+
311
+ def _init_importor(self):
312
+ # self._reg_importor("Project", Import_project(self.session,self.project))
313
+ self._reg_importor(uml_contain, Import_package(self.session,self.project))
314
+ self._reg_importor('UMLClassDiagram', Import_diagram(self.session,self.project))
315
+ self._reg_importor(classs_uml, Import_class(self.session,self.project))
316
+ self._reg_importor("UMLAttribute",Import_property(self.session,self.project))
317
+ self._reg_importor("UMLAssociation",Import_association(self.session,self.project))
318
+ self._reg_importor("UMLAssociationEnd",Import_assoc_end(self.session,self.project))
319
+ self._reg_importor("UMLOperation",Import_operation(self.session,self.project))
320
+ self._reg_importor("UMLParameter",Import_paramer(self.session,self.project))
321
+ self._reg_importor("UMLEnumeration",Import_enumeration(self.session,self.project))
322
+ self._reg_importor("UMLEnumerationLiteral",Import_enumeitem(self.session,self.project))
323
+ self._reg_importor("UMLGeneralization", Import_umlgeneralization(self.session, self.project))
324
+
325
+ def __init__(self,project):
326
+ self.session = Session()
327
+ self.project = project
328
+ self._importor = {}
329
+ self._init_importor()
330
+
331
+ def import_elm(self, parent, elements):
332
+ importor = self._importor.get(elements['_type'])
333
+ if importor is None:
334
+ logger.warning('the type(%s) is not support,will be ignore' % (
335
+ elements['_type']))
336
+ return None
337
+ return importor.import_elm(parent,elements)
338
+
339
+ class Import_uml_models():
340
+ def _load_models(self,file):
341
+ with codecs.open(file, encoding='utf8') as f:
342
+ js = f.read()
343
+ return json.loads(js)
344
+
345
+ def _init_database(self):
346
+ try:
347
+ Base.metadata.drop_all(engine,checkfirst=False)
348
+ except Exception as e:
349
+ pass
350
+ Base.metadata.create_all(engine) # 创建资料库结构
351
+
352
+ def __init__(self,file):
353
+ self.file_name = file
354
+ self._model_js = self._load_models(file)
355
+ self._init_database()
356
+ self._session = Session()
357
+ self._importer = None
358
+
359
+ def _import_package_elements(self, package, elements):
360
+ for elm in elements:
361
+ if elm["_type"] in uml_contain:
362
+ pkg_elm = self._importer.import_elm(package, elm)
363
+ self._import_package_elements(pkg_elm, elm.get('ownedElements',[]))
364
+ continue
365
+ self._importer.import_elm(package, elm)
366
+
367
+ def _import_project_elements(self,project,elements,tag=None):
368
+ def set_tag(package):
369
+ if not tag:
370
+ return
371
+ pkg_js ={}
372
+ if tag.type==Tag_type.swagger.value:
373
+ pkg['isswagger'] = True
374
+ # 指定为swagger的package需要把名称改为'swagger',后面加载swagger时要用到
375
+ if package.id=='%s_%s'%(project.flag,tag.ref_id):
376
+ if package.name !='swagger':
377
+ pkg_js['name']='swagger'
378
+ try:
379
+ pkg_js['stereotype'] ='%s/%s/%s/%s'%(tag.value['name'],tag.value['ver'],tag.value.get('auth','jwt'),tag.value.get('format','json'))
380
+ except Exception as e:
381
+ raise Exception('tag.value 不符合要求,正确格式: {"name":"service_name","ver":"v1.0","auth":"jwt","ext":"xml/html/json"}')
382
+ self._session.query(Package).filter(Package.id==package.id).update(pkg_js)
383
+ for pkg in elements:
384
+ # 只有容器类才需要汇入
385
+ if pkg['_type'] not in uml_contain:
386
+ logger.warning('the pkg(%s) is not support type(%s),will be ignore'%(
387
+ pkg['name'],pkg['_type']
388
+ ))
389
+ continue
390
+ package = self._importer.import_elm(project, pkg)
391
+ set_tag(package)
392
+ # if tag.type==Tag_type.swagger.value:
393
+ # package.isswagger = True
394
+ # # 指定为swagger的package需要把名称改为'swagger',后面加载swagger时要用到
395
+ # if package.id=='%s_%s'%(project.flag,tag.ref_id):
396
+ # if package.name !='swagger':
397
+ # package.name='swagger'
398
+ # try:
399
+ # package.stereotype ='%s/%s'%(tag.value['name'],tag.value['ver'])
400
+ # except Exception as e:
401
+ # raise Exception('tag.value 不符合要求,正确格式: {"name":"service_name","ver":"v1.0"}')
402
+ # self._session.add(package)
403
+ # self._session.commit()
404
+ # 汇入package的元素
405
+ self._import_package_elements(package, pkg.get('ownedElements',[]))
406
+
407
+ def __import_project(self,project_js):
408
+ import random
409
+ flag = str(random.randint(1,10000))+project_js['name']
410
+ project = Project(**{'id': '%s_%s'%(flag,project_js['_id']),
411
+ 'name': project_js['name'],
412
+ 'author': project_js.get('author','cxh'),
413
+ 'version': project_js.get('version','v1.0'),
414
+ 'doc': project_js.get('documentation',''),
415
+ 'flag': flag,
416
+ 'file_name':self.file_name
417
+ }
418
+ )
419
+ self._session.add(project)
420
+ self._session.commit()
421
+ return project
422
+
423
+ def __handle_tags(self,project,tags,elments):
424
+ def get_package(id,elments):
425
+ for el in elments:
426
+ if el['_id']==id:
427
+ return el
428
+ return None
429
+ if not tags:
430
+ return False
431
+ for tag in tags:
432
+ ref_id = tag.get('reference',{}).get('$ref','')
433
+ if not ref_id:
434
+ raise Exception('名为(%s)的tag没有指定 referenc,请指定!'%tag['name'])
435
+ pkg_ref = get_package(ref_id,elments)
436
+ if tag['name'].lower()=='boclass':
437
+ tag = Tag(type=Tag_type.boclass.value,value={},ref_id=ref_id)
438
+ self._import_project_elements(project, [pkg_ref],tag)
439
+ elif tag['name'].lower()=='swagger':
440
+ try:
441
+ tag = Tag(type=Tag_type.swagger.value,
442
+ value=json.loads(tag.get('value','{}').replace('\'','"')),
443
+ ref_id = ref_id)
444
+ except Exception as e:
445
+ raise Exception('tag.value格式错误:%s,\n正确格式如:{"name":"service_name","ver":"v1.0"},\n error:%s'%(tag.get('value','{}'),e))
446
+ self._import_project_elements(project, [pkg_ref],tag)
447
+ else:
448
+ logger.warning('不支持名为(%s)的tag,只支持[%s,%s]'%(tag['name'],
449
+ 'boclass','swagger'))
450
+ return True
451
+
452
+ def import_model(self):
453
+ session = self._session
454
+ project = session.query(Project).filter(Project.file_name==self.file_name).first()
455
+ # 不允许同一project导入两次
456
+ if project:
457
+ return project
458
+ project = self.__import_project(self._model_js)
459
+ self._importer = Importer(project)
460
+ if not self.__handle_tags(project,self._model_js.get('tags',[]),self._model_js['ownedElements']):
461
+ self._import_project_elements(project, self._model_js['ownedElements'])
462
+ return project
463
+
464
+
465
+
466
+
@@ -0,0 +1 @@
1
+ from .import_classes import ImportModels