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.
- gencode/__init__.py +140 -0
- gencode/dd_models.py +256 -0
- gencode/ext.py +19 -0
- gencode/gen_code.py +343 -0
- gencode/gencode/__init__.py +0 -0
- gencode/gencode/export_class2swgclass.py +206 -0
- gencode/gencode/gen_bo_models_code.py +719 -0
- gencode/gencode/gen_state_code.py +171 -0
- gencode/gencode/gen_swagger_code.py +94 -0
- gencode/gencode/gen_tests_code.py +113 -0
- gencode/gencode/sample/__init__.py +2 -0
- gencode/gencode/sample/babel.cfg +3 -0
- gencode/gencode/sample/config-sample.ini +9 -0
- gencode/gencode/sample/config.ini +14 -0
- gencode/gencode/sample/create_new_table_run.pys +19 -0
- gencode/gencode/sample/dockerignore.dock +57 -0
- gencode/gencode/sample/file_utils.pys +396 -0
- gencode/gencode/sample/gencode.xmi +33 -0
- gencode/gencode/sample/gitignore.git +14 -0
- gencode/gencode/sample/migrate_run.bat +5 -0
- gencode/gencode/sample/migrate_run.pys +9 -0
- gencode/gencode/sample/requirements.txt +17 -0
- gencode/gencode/sample/run.sh +27 -0
- gencode/gencode/sample/seeds/__init__.py +0 -0
- gencode/gencode/sample/seeds/models_rm.pys +187 -0
- gencode/gencode/sample/seeds/seed_dev_data.pys +21 -0
- gencode/gencode/sample/seeds/seed_init.pys +17 -0
- gencode/gencode/sample/seeds/seed_rm.pys +39 -0
- gencode/gencode/sample/seeds/seed_run.pys +13 -0
- gencode/gencode/sample/seeds/seed_utils.pys +23 -0
- gencode/gencode/sample/test__init__.pys +6 -0
- gencode/gencode/sample/test_run.pys +4 -0
- gencode/gencode/sample/utils.pys +92 -0
- gencode/gencode/template/Dockerfile.tmp +55 -0
- gencode/gencode/template/README.md +91 -0
- gencode/gencode/template/__init__.py +0 -0
- gencode/gencode/template/__init__.pys +99 -0
- gencode/gencode/template/config.pys +134 -0
- gencode/gencode/template/default.conf +21 -0
- gencode/gencode/template/docker-compose-dev.yaml +52 -0
- gencode/gencode/template/docker-compose.yaml +55 -0
- gencode/gencode/template/drone.tmp +45 -0
- gencode/gencode/template/flask_models.pys +107 -0
- gencode/gencode/template/flask_models_base.pys +159 -0
- gencode/gencode/template/gen_code_flask.yaml +21 -0
- gencode/gencode/template/gen_code_run.pys +28 -0
- gencode/gencode/template/k8s-tmp.yml +141 -0
- gencode/gencode/template/run.pys +52 -0
- gencode/gencode/template/sample.mdj +1193 -0
- gencode/gencode/template/setup.tmp +48 -0
- gencode/gencode/template/supervisord.conf +21 -0
- gencode/gencode/template/swagger_file.yaml +195 -0
- gencode/gencode/template/swg_class.tmp +41 -0
- gencode/gencode/template/swg_ctrl_code.pys +130 -0
- gencode/gencode/template/swg_package_mng.tmp +4423 -0
- gencode/gencode/template/test_test_base.tmp +34 -0
- gencode/gencode/template/tests/__init__.py +0 -0
- gencode/gencode/template/tests/__init__.pys +5 -0
- gencode/gencode/template/tests/init_test_data.pys +80 -0
- gencode/gencode/template/tests/run.pys +4 -0
- gencode/gencode/template/tests/test_base.pys +87 -0
- gencode/gencode/template/tests/test_classmng.pys +58 -0
- gencode/gencode/template/uwsgi.ini +20 -0
- gencode/gencode/template/uwsgi_run.pys +44 -0
- gencode/importmdj/__init__.py +0 -0
- gencode/importmdj/import_dd_classes.py +369 -0
- gencode/importmdj/import_swagger2_class.py +371 -0
- gencode/importmdj/import_uml_models.py +466 -0
- gencode/importxmi/__init__.py +1 -0
- gencode/importxmi/import_classes.py +342 -0
- gencode/importxmi/import_sequences.py +291 -0
- gencode/importxmi/import_states.py +150 -0
- gencode/importxmi/import_swagger.py +151 -0
- gencode/swg2_class_models.py +179 -0
- gencode/uml_class_models.py +295 -0
- gencode/upgrade.py +113 -0
- gencode/utils.py +225 -0
- manage.py +194 -0
- mwgencode-1.4.1.dist-info/METADATA +325 -0
- mwgencode-1.4.1.dist-info/RECORD +84 -0
- mwgencode-1.4.1.dist-info/WHEEL +5 -0
- mwgencode-1.4.1.dist-info/entry_points.txt +2 -0
- mwgencode-1.4.1.dist-info/licenses/LICENSE.txt +19 -0
- mwgencode-1.4.1.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from gencode.importxmi.import_states import ImportStates
|
|
4
|
+
from gencode.utils import saveUTF8File
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Gen_State_Code():
|
|
8
|
+
def __init__(self,root_path,xmifile):
|
|
9
|
+
self.state_imp = ImportStates()
|
|
10
|
+
self.state_imp.impxml(xmifile)
|
|
11
|
+
self.root_path = root_path
|
|
12
|
+
self.codes = []
|
|
13
|
+
|
|
14
|
+
def _gen_state_code(self):
|
|
15
|
+
def get_states_code():
|
|
16
|
+
self.codes.append(' ')
|
|
17
|
+
for states in self.state_imp.states:
|
|
18
|
+
for key,values in states.items():
|
|
19
|
+
self.codes.append('%s = ['%key)
|
|
20
|
+
for state in values:
|
|
21
|
+
state_doc = ' #%s:%s'%(state['name'],state['doc'])
|
|
22
|
+
state_doc = state_doc+ ','.join([";%s:%s"%(ent['name'],ent['doc']) for ent in state['onenter']])
|
|
23
|
+
state_doc = state_doc + ','.join([";%s:%s" % (ext['name'], ext['doc']) for ext in state['onexit']])
|
|
24
|
+
self.codes.append(state_doc)
|
|
25
|
+
state_code = " State(name='%s',"%state['name']
|
|
26
|
+
on_enter_code = ','.join(["'%s'"%ent['name'] for ent in state['onenter']])
|
|
27
|
+
if on_enter_code:
|
|
28
|
+
state_code = state_code+ "on_enter=[%s],"%on_enter_code
|
|
29
|
+
on_exit_code = ','.join(["'%s'"%ext['name'] for ext in state['onexit']])
|
|
30
|
+
if on_exit_code:
|
|
31
|
+
state_code = state_code + "on_exit=[%s],"%on_exit_code
|
|
32
|
+
state_code = state_code + 'ignore_invalid_triggers=True,'
|
|
33
|
+
state_code = state_code + '),'
|
|
34
|
+
self.codes.append(state_code)
|
|
35
|
+
self.codes.append(']')
|
|
36
|
+
|
|
37
|
+
def get_trans_code():
|
|
38
|
+
self.codes.append(' ')
|
|
39
|
+
def get_conditions(trg):
|
|
40
|
+
return ','.join(["'%s'" % g for g in trg['guard'].split('&')])
|
|
41
|
+
|
|
42
|
+
self.codes.append('transitions = [')
|
|
43
|
+
for trg in self.state_imp.trans:
|
|
44
|
+
trg_code = " {'trigger': '%s', "%trg['trigger']
|
|
45
|
+
trg_code = trg_code + "'source': '%s', "%trg['source']
|
|
46
|
+
trg_code = trg_code +"'dest': '%s', "%trg['target']
|
|
47
|
+
if trg['guard']:
|
|
48
|
+
code_guard = ','.join(["'%s'" % g for g in trg['guard'].split('&')])
|
|
49
|
+
trg_code = trg_code +"'conditions' : [%s], "%code_guard
|
|
50
|
+
if trg['after']:
|
|
51
|
+
trg_code = trg_code +"'after' : '%s',"%trg['after']
|
|
52
|
+
if trg['before']:
|
|
53
|
+
trg_code = trg_code +"'before' : '%s_before',"%trg['before'].split('(')[0]
|
|
54
|
+
trg_code = trg_code +'},'
|
|
55
|
+
self.codes.append(trg_code)
|
|
56
|
+
self.codes.append(']')
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
self.codes.append('from transitions import State')
|
|
60
|
+
self.codes.append(' ')
|
|
61
|
+
get_states_code()
|
|
62
|
+
get_trans_code()
|
|
63
|
+
filename = os.path.join(self.root_path, 'states.py')
|
|
64
|
+
if os.path.exists(filename):
|
|
65
|
+
print('the file is exists,filename:%s'%filename)
|
|
66
|
+
print('codes :')
|
|
67
|
+
for c in self.codes:
|
|
68
|
+
print(c)
|
|
69
|
+
return
|
|
70
|
+
saveUTF8File(filename,self.codes)
|
|
71
|
+
|
|
72
|
+
def gen_state_code(self):
|
|
73
|
+
self.codes = []
|
|
74
|
+
self._gen_state_code()
|
|
75
|
+
|
|
76
|
+
def _gen_model_code(self):
|
|
77
|
+
self.codes.append('from transitions import Machine')
|
|
78
|
+
self.codes.append('from fsm.states import states,transitions')
|
|
79
|
+
self.codes.append('import logging')
|
|
80
|
+
self.codes.append('from transitions import logger')
|
|
81
|
+
self.codes.append(' ')
|
|
82
|
+
self.codes.append('logger.setLevel(logging.DEBUG)')
|
|
83
|
+
self.codes.append(' ')
|
|
84
|
+
self.codes.append('class State_Model(object):')
|
|
85
|
+
self.codes.append(' def __init__(self):')
|
|
86
|
+
self.codes.append(' self._add_extend_state()')
|
|
87
|
+
self.codes.append(" self.machine = Machine(model=self, states=states, transitions=transitions, initial='free')")
|
|
88
|
+
self.codes.append('')
|
|
89
|
+
|
|
90
|
+
def gen_add_extend_state():
|
|
91
|
+
self.codes.append(' def _add_extend_state(self):')
|
|
92
|
+
self.codes.append(' #fault = State(name="fault", )')
|
|
93
|
+
self.codes.append(' #states.append(fault)')
|
|
94
|
+
self.codes.append(" #transitions.append({'trigger': 'fail', 'source': '*', 'dest': 'fault',})")
|
|
95
|
+
self.codes.append(" #transitions.append({'trigger': 'fix', 'source': 'fault', 'dest': 'free',})")
|
|
96
|
+
self.codes.append(" pass")
|
|
97
|
+
|
|
98
|
+
def gen_failure_recovery():
|
|
99
|
+
self.codes.append('def failure_recovery(statemodel,state):')
|
|
100
|
+
self.codes.append(' if state == statemodel.state:')
|
|
101
|
+
self.codes.append(' return')
|
|
102
|
+
for sts in self.state_imp.states:
|
|
103
|
+
for key, values in sts.items():
|
|
104
|
+
for value in values:
|
|
105
|
+
self.codes.append(" elif state == '%s':"%value['name'])
|
|
106
|
+
self.codes.append(" statemodel.to_%s()"%value['name'])
|
|
107
|
+
self.codes.append(" logger.debug('recovery state to (%s)' % statemodel.state)")
|
|
108
|
+
|
|
109
|
+
def get_func():
|
|
110
|
+
for sts in self.state_imp.states:
|
|
111
|
+
for key,values in sts.items():
|
|
112
|
+
for value in values:
|
|
113
|
+
for ent in value['onenter']:
|
|
114
|
+
self.codes.append('')
|
|
115
|
+
self.codes.append(' #%s' % ent['doc'])
|
|
116
|
+
self.codes.append(' def %s(self):' % ent['name'])
|
|
117
|
+
self.codes.append(' logger.debug("onenter:%s")' % ent['name'])
|
|
118
|
+
for ext in value['onexit']:
|
|
119
|
+
self.codes.append('')
|
|
120
|
+
self.codes.append(' #%s' % ext['doc'])
|
|
121
|
+
self.codes.append(' def %s(self):' % ext['name'])
|
|
122
|
+
self.codes.append(' logger.debug("onexit:%s")' % ext['name'])
|
|
123
|
+
for tr in self.state_imp.trans:
|
|
124
|
+
if tr['before']:
|
|
125
|
+
self.codes.append('')
|
|
126
|
+
self.codes.append(' #%s' % tr['doc'])
|
|
127
|
+
# check_in(carid) 解析成 ['check_in','carid)']
|
|
128
|
+
func_bfr =tr['before'].split('(')
|
|
129
|
+
args_bfr = lambda x :', %s:'%func_bfr[1] if len(func_bfr)>1 else '):'
|
|
130
|
+
self.codes.append(' def %s_before(self %s:' % (func_bfr[0],args_bfr(func_bfr)))
|
|
131
|
+
self.codes.append(' logger.debug("before:%s")' % tr['before'])
|
|
132
|
+
if tr['after']:
|
|
133
|
+
self.codes.append('')
|
|
134
|
+
self.codes.append(' #%s' % tr['doc'])
|
|
135
|
+
self.codes.append(' def %s(self):' % tr['after'])
|
|
136
|
+
self.codes.append(' logger.debug("after:%s")' % tr['after'])
|
|
137
|
+
if tr['guard']:
|
|
138
|
+
for g in tr['guard'].split('&'):
|
|
139
|
+
self.codes.append('')
|
|
140
|
+
self.codes.append(' #%s' % tr['doc'])
|
|
141
|
+
self.codes.append(' def %s(self):' % g)
|
|
142
|
+
self.codes.append(' logger.debug("guard:%s")' % g)
|
|
143
|
+
|
|
144
|
+
gen_add_extend_state()
|
|
145
|
+
get_func()
|
|
146
|
+
gen_failure_recovery()
|
|
147
|
+
filename = os.path.join(self.root_path, 'model.py')
|
|
148
|
+
if os.path.exists(filename):
|
|
149
|
+
print('the file is exists,filename:%s'%filename)
|
|
150
|
+
print('code :')
|
|
151
|
+
for c in self.codes:
|
|
152
|
+
print(c)
|
|
153
|
+
return
|
|
154
|
+
saveUTF8File(filename,self.codes)
|
|
155
|
+
|
|
156
|
+
def gen_model_code(self):
|
|
157
|
+
self.codes = []
|
|
158
|
+
self._gen_model_code()
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
if __name__ == '__main__':
|
|
162
|
+
g = Gen_State_Code(r"d:\temp",r"D:\mwwork\projects\iparking\docs-parking\parking-state.xml")
|
|
163
|
+
# g.gen_state_code()
|
|
164
|
+
g.gen_model_code()
|
|
165
|
+
# def state(self):
|
|
166
|
+
# gen_code = Gen_State_Code(os.path.join(self.rootpath, 'fsm'), self.modelfile)
|
|
167
|
+
# gen_code.gen_state_code()
|
|
168
|
+
# gen_code.gen_model_code()
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
from gencode.utils import saveUTF8File, get_merge_file
|
|
2
|
+
from gencode.importmdj.import_swagger2_class import ImportSwagger
|
|
3
|
+
from gencode.swg2_class_models import Swagger2,Path2,Action2,Tag2,Param2,Resp2
|
|
4
|
+
import os
|
|
5
|
+
from jinja2 import FileSystemLoader, Environment
|
|
6
|
+
from enum import Enum
|
|
7
|
+
from gencode.ext import Session
|
|
8
|
+
import logging
|
|
9
|
+
match = lambda fld, evalue: True if fld.fieldtype == evalue.value else False
|
|
10
|
+
|
|
11
|
+
required = lambda st: ('noreq' not in st) and ('nr' not in st)
|
|
12
|
+
|
|
13
|
+
class ProjectType(Enum):
|
|
14
|
+
flask = 'flask'
|
|
15
|
+
aiohttp = 'aiohttp'
|
|
16
|
+
|
|
17
|
+
right_type = {'post':'insert','put':'edit','delete':'delete','get':'view'}
|
|
18
|
+
|
|
19
|
+
def get_params(params):
|
|
20
|
+
result = []
|
|
21
|
+
for param in params:
|
|
22
|
+
p_name = param.name
|
|
23
|
+
if not param.required:
|
|
24
|
+
p_name = p_name + ' = None'
|
|
25
|
+
# heard 的不要写入到参数中
|
|
26
|
+
if param.is_header:
|
|
27
|
+
continue
|
|
28
|
+
result.append(p_name)
|
|
29
|
+
return ','.join(result)
|
|
30
|
+
|
|
31
|
+
class GenSwaggerCodeFromUml():
|
|
32
|
+
def __init__(self, root_path, xmifile, type='flask'):
|
|
33
|
+
self.type = type
|
|
34
|
+
self.swagger_imp = ImportSwagger()
|
|
35
|
+
self.swager = self.swagger_imp.impUMLModels(xmifile)
|
|
36
|
+
self.root_path = root_path
|
|
37
|
+
tmp_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'template')
|
|
38
|
+
load = FileSystemLoader(tmp_path)
|
|
39
|
+
self.env = Environment(loader=load)
|
|
40
|
+
self.session = Session()
|
|
41
|
+
|
|
42
|
+
def gen_swagger_code(self,outfile):
|
|
43
|
+
codes = []
|
|
44
|
+
swg = self.swager
|
|
45
|
+
if self.type == ProjectType.aiohttp.value:
|
|
46
|
+
swg.host = ''
|
|
47
|
+
else:
|
|
48
|
+
swg.host = 'host: localhost:8000'
|
|
49
|
+
swg.swghost = '{{host}}'
|
|
50
|
+
swg.swgtitle = '{{title}}'
|
|
51
|
+
paths = self.session.query(Path2).\
|
|
52
|
+
join(Tag2,Tag2.id==Path2.tagid).\
|
|
53
|
+
join(Swagger2,Swagger2.id==Tag2.swaggerid).\
|
|
54
|
+
filter(Swagger2.id==self.swager.id).\
|
|
55
|
+
order_by(Swagger2.name,Tag2.name,Path2.name).all()
|
|
56
|
+
template = self.env.get_template('swagger_file.yaml')
|
|
57
|
+
result = template.render(swg=swg,paths=paths) # self.defines)
|
|
58
|
+
result = '\n'.join([line for line in result.split('\n') if line.strip() != ''])
|
|
59
|
+
# print(result)
|
|
60
|
+
codes.append(result)
|
|
61
|
+
version_dir = swg.version.replace('.', '_')
|
|
62
|
+
if outfile:
|
|
63
|
+
filename = outfile
|
|
64
|
+
else:
|
|
65
|
+
fname = '%s.yaml' % swg.name
|
|
66
|
+
filename = os.path.join(self.root_path, 'swagger', version_dir, fname)
|
|
67
|
+
if os.path.exists(filename):
|
|
68
|
+
logging.info('the file is exists,将被覆盖!,filename:%s ' % filename)
|
|
69
|
+
saveUTF8File(filename, codes,writegeninfo=False)
|
|
70
|
+
|
|
71
|
+
def gen_swagger_ctr_code(self):
|
|
72
|
+
template = self.env.get_template('swg_ctrl_code.pys')
|
|
73
|
+
version_dir = self.swager.version.replace('.', '_')
|
|
74
|
+
for tag in self.swager.tags:
|
|
75
|
+
codes = template.render(paths = tag.paths,
|
|
76
|
+
right_type=right_type,
|
|
77
|
+
get_params=get_params)
|
|
78
|
+
codes = [line for line in codes.split('\n') if line.strip() != '']
|
|
79
|
+
fname = '%s.py' % tag.name
|
|
80
|
+
filename = os.path.join(self.root_path, 'app', 'api', version_dir, fname)
|
|
81
|
+
if os.path.exists(filename):
|
|
82
|
+
logging.info('文件存在,将被合并,文件:%s' % filename)
|
|
83
|
+
saveUTF8File(filename, get_merge_file(codes, filename))
|
|
84
|
+
else:
|
|
85
|
+
saveUTF8File(filename, codes)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
if __name__ == '__main__':
|
|
89
|
+
g = GenSwaggerCodeFromUml(r"d:\temp\swg", r"D:\mwwork\projects\its\mobile_gateway_server\docs\uml analyse.xml")
|
|
90
|
+
g.gen_swagger_code()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
from gencode.utils import saveUTF8File, get_merge_file
|
|
2
|
+
from gencode.importmdj.import_swagger2_class import ImportSwagger
|
|
3
|
+
from gencode.swg2_class_models import Swagger2,Path2,Action2,Tag2,Param2,Resp2
|
|
4
|
+
import os
|
|
5
|
+
from jinja2 import FileSystemLoader, Environment
|
|
6
|
+
from enum import Enum
|
|
7
|
+
from gencode.ext import Session
|
|
8
|
+
import json
|
|
9
|
+
import codecs
|
|
10
|
+
import logging
|
|
11
|
+
|
|
12
|
+
match = lambda fld, evalue: True if fld.fieldtype == evalue.value else False
|
|
13
|
+
|
|
14
|
+
required = lambda st: ('noreq' not in st) and ('nr' not in st)
|
|
15
|
+
|
|
16
|
+
class ProjectType(Enum):
|
|
17
|
+
flask = 'flask'
|
|
18
|
+
aiohttp = 'aiohttp'
|
|
19
|
+
|
|
20
|
+
right_type = {'post':'insert','put':'edit','delete':'delete','get':'view'}
|
|
21
|
+
|
|
22
|
+
def get_params(params):
|
|
23
|
+
result = []
|
|
24
|
+
for param in params:
|
|
25
|
+
p_name = param.name
|
|
26
|
+
if param.is_query:
|
|
27
|
+
p_name = p_name + '=None'
|
|
28
|
+
# heard 的不要写入到参数中
|
|
29
|
+
else:
|
|
30
|
+
continue
|
|
31
|
+
result.append(p_name)
|
|
32
|
+
return '?'+'&'.join(result) if result else ''
|
|
33
|
+
|
|
34
|
+
def get_define(ref_name,swg):
|
|
35
|
+
for defn in swg.defines:
|
|
36
|
+
if defn.name==ref_name:
|
|
37
|
+
return defn
|
|
38
|
+
|
|
39
|
+
def get_define_js(defn,swg):
|
|
40
|
+
|
|
41
|
+
result ={}
|
|
42
|
+
for att in defn.attrs:
|
|
43
|
+
if att.type_attr=='object':
|
|
44
|
+
defn1 = get_define(att.ref_name,swg)
|
|
45
|
+
assert defn1, "%s's is null" % (defn.call_path())
|
|
46
|
+
defn1_js = get_define_js(defn1,swg)
|
|
47
|
+
if hasattr(defn1,'is_array') and defn1.is_array:
|
|
48
|
+
result[att.name] = [defn1_js]
|
|
49
|
+
else:
|
|
50
|
+
result[att.name] = defn1_js
|
|
51
|
+
continue
|
|
52
|
+
result[att.name] = '%s'%att.type
|
|
53
|
+
return result
|
|
54
|
+
def get_resp_js(act):
|
|
55
|
+
def_resp = act.default_resp
|
|
56
|
+
swg = act.path.tag.swagger
|
|
57
|
+
defn = get_define(def_resp.ref_name,swg)
|
|
58
|
+
if not defn:
|
|
59
|
+
result =''
|
|
60
|
+
else:
|
|
61
|
+
result = get_define_js(defn,swg)
|
|
62
|
+
if def_resp.is_array:
|
|
63
|
+
return [result]
|
|
64
|
+
return result
|
|
65
|
+
|
|
66
|
+
class GenTestsCodeFromUml():
|
|
67
|
+
def __init__(self, root_path, xmifile, type='flask'):
|
|
68
|
+
self.type = type
|
|
69
|
+
self.swagger_imp = ImportSwagger()
|
|
70
|
+
self.swager = self.swagger_imp.impUMLModels(xmifile)
|
|
71
|
+
self.root_path = root_path
|
|
72
|
+
self.tmp_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'template','tests')
|
|
73
|
+
load = FileSystemLoader(self.tmp_path)
|
|
74
|
+
self.env = Environment(loader=load)
|
|
75
|
+
self.session = Session()
|
|
76
|
+
def save_as(self,sfile,dfile):
|
|
77
|
+
if os.path.exists(dfile):
|
|
78
|
+
logging.info('the file(%s) is exist'%dfile)
|
|
79
|
+
return
|
|
80
|
+
with codecs.open(sfile,encoding='utf8') as f:
|
|
81
|
+
codes = f.readlines()
|
|
82
|
+
saveUTF8File(dfile,[code.rstrip() for code in codes])
|
|
83
|
+
|
|
84
|
+
def __gen_test_classmng_code(self):
|
|
85
|
+
template = self.env.get_template('test_classmng.pys')
|
|
86
|
+
for tag in self.swager.tags:
|
|
87
|
+
fname = 'test_%s.py' % tag.name
|
|
88
|
+
filename = os.path.join(self.root_path, 'tests', fname)
|
|
89
|
+
if os.path.exists(filename):
|
|
90
|
+
logging.info('测试文件存在,文件:%s' % filename)
|
|
91
|
+
continue
|
|
92
|
+
codes = template.render(tag = tag,
|
|
93
|
+
get_params=get_params,
|
|
94
|
+
get_resp_js = get_resp_js
|
|
95
|
+
)
|
|
96
|
+
codes = [line for line in codes.split('\n') if line.strip() != '']
|
|
97
|
+
saveUTF8File(filename, codes)
|
|
98
|
+
|
|
99
|
+
def gen_tests_codes(self):
|
|
100
|
+
self.__gen_test_classmng_code()
|
|
101
|
+
self.save_as(os.path.join(self.tmp_path ,'__init__.pys'),
|
|
102
|
+
os.path.join(os.path.realpath(self.root_path),'tests', '__init__.py'))
|
|
103
|
+
self.save_as(os.path.join(self.tmp_path, 'run.pys'),
|
|
104
|
+
os.path.join(os.path.realpath(self.root_path), 'tests', 'run.py'))
|
|
105
|
+
self.save_as(os.path.join(self.tmp_path, 'init_test_data.pys'),
|
|
106
|
+
os.path.join(os.path.realpath(self.root_path), 'tests', 'init_test_data.py'))
|
|
107
|
+
saveUTF8File(os.path.join(os.path.realpath(self.root_path),'tests', 'test_base.py'),
|
|
108
|
+
[self.env.get_template('test_base.pys').render(swagger=self.swager)],
|
|
109
|
+
exist_ok=False
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
[web]
|
|
2
|
+
#web port
|
|
3
|
+
port = 8000
|
|
4
|
+
|
|
5
|
+
[reg_service]
|
|
6
|
+
#true: register service to kong,false:do not
|
|
7
|
+
kong = False
|
|
8
|
+
#true : register service to consul,false :do not
|
|
9
|
+
consul = False
|
|
10
|
+
|
|
11
|
+
[app_config]
|
|
12
|
+
# select development config,can take away kong auth
|
|
13
|
+
config = development
|
|
14
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
########################################
|
|
2
|
+
# create by :cxh-PC
|
|
3
|
+
# create time :2018-02-08 15:02:13.462231
|
|
4
|
+
########################################
|
|
5
|
+
from app import create_app_swagger
|
|
6
|
+
|
|
7
|
+
def create_dev_db():
|
|
8
|
+
from app import create_app_swagger, db
|
|
9
|
+
# from app.models import App_confirm
|
|
10
|
+
app_sw = create_app_swagger('default')
|
|
11
|
+
app = app_sw.app
|
|
12
|
+
app_context = app.app_context()
|
|
13
|
+
app_context.push()
|
|
14
|
+
#db.d*r*o*p*_*all()
|
|
15
|
+
db.create_all()
|
|
16
|
+
|
|
17
|
+
if __name__ == '__main__':
|
|
18
|
+
# 开了这项会显示不了log???
|
|
19
|
+
create_dev_db()
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Created by .ignore support plugin (hsz.mobi)
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
env/
|
|
8
|
+
build/
|
|
9
|
+
develop-eggs/
|
|
10
|
+
dist/
|
|
11
|
+
downloads/
|
|
12
|
+
eggs/
|
|
13
|
+
.eggs/
|
|
14
|
+
lib/
|
|
15
|
+
lib64/
|
|
16
|
+
parts/
|
|
17
|
+
sdist/
|
|
18
|
+
var/
|
|
19
|
+
wheels/
|
|
20
|
+
*.egg-info/
|
|
21
|
+
.installed.cfg
|
|
22
|
+
*.egg
|
|
23
|
+
*.manifest
|
|
24
|
+
*.spec
|
|
25
|
+
pip-log.txt
|
|
26
|
+
pip-delete-this-directory.txt
|
|
27
|
+
htmlcov/
|
|
28
|
+
.tox/
|
|
29
|
+
.coverage
|
|
30
|
+
.coverage.*
|
|
31
|
+
.cache
|
|
32
|
+
nosetests.xml
|
|
33
|
+
coverage.xml
|
|
34
|
+
*,cover
|
|
35
|
+
.hypothesis/
|
|
36
|
+
*.mo
|
|
37
|
+
*.pot
|
|
38
|
+
*.log
|
|
39
|
+
local_settings.py
|
|
40
|
+
instance/
|
|
41
|
+
.webassets-cache
|
|
42
|
+
.scrapy
|
|
43
|
+
docs/_build/
|
|
44
|
+
target/
|
|
45
|
+
.ipynb_checkpoints
|
|
46
|
+
.python-version
|
|
47
|
+
celerybeat-schedule
|
|
48
|
+
*.sage.py
|
|
49
|
+
.env
|
|
50
|
+
.venv
|
|
51
|
+
venv/
|
|
52
|
+
ENV/
|
|
53
|
+
.spyderproject
|
|
54
|
+
.ropeproject
|
|
55
|
+
*.md
|
|
56
|
+
*.bak
|
|
57
|
+
*.xmi
|