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,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,2 @@
1
+ #
2
+ #
@@ -0,0 +1,3 @@
1
+ [python: **.py]
2
+ [jinja2: **/templates/**.html]
3
+ extensions=jinja2.ext.autoescape,jinja2.ext.with_
@@ -0,0 +1,9 @@
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
@@ -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