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,34 @@
1
+ import unittest
2
+ from app import create_app_swagger, db
3
+
4
+ class BasicTestCase(unittest.TestCase):
5
+ def setUp(self):
6
+ self.app = create_app_swagger('testing').app
7
+ self.app_context = self.app.app_context()
8
+ self.app_context.push()
9
+ db.create_all()
10
+ self.client = self.app.test_client()
11
+ self.server ='http://localhost:9999/{{service_name}}/v1.0'
12
+
13
+ def url_for(self,endpoint):
14
+ return '%s/%s'%(self.server,endpoint)
15
+
16
+ def tearDown(self):
17
+ db.session.remove()
18
+ db.drop_all()
19
+ self.app_context.pop()
20
+
21
+ # 范例一:测试health
22
+ # def test_health(self):
23
+ # response = self.client.get(self.url_for('health'))
24
+ # self.assertEqual(response.status_code,200)
25
+
26
+ # def test_register(self):
27
+ # response = self.client.post(url_for('main.register'), data={
28
+ # 'email': '879651072@qq.com',
29
+ # 'name': 'Hyman',
30
+ # 'password1': '123',
31
+ # 'password2': '123'})
32
+ # self.assertTrue(response.status_code == 302)
33
+
34
+
File without changes
@@ -0,0 +1,5 @@
1
+ import unittest
2
+ def test():
3
+ """Run the unit tests."""
4
+ tests = unittest.TestLoader().discover('tests')
5
+ unittest.TextTestRunner().run(tests)
@@ -0,0 +1,80 @@
1
+ from app import db
2
+ import json
3
+ # todo 如果model中没有定义user ,则在此定义
4
+ # class Authuser(db.Model):
5
+ # __tablename__ = 'appuser'
6
+ # uid = db.Column("id",db.String(50), primary_key=True)
7
+ # uname = db.Column("name",db.String(50))
8
+ # manageuser = db.Column("ismanage",db.Boolean)
9
+ # manageuserid = db.Column("manageuserid",db.String(50))
10
+ # password = db.Column("passwordmd5",db.String(50))
11
+ # systemuser = db.Column("issystemuser",db.Boolean)
12
+ # companyid = db.Column(db.String(50))
13
+ # # 邮件,用于修改密码
14
+ # email = db.Column(db.String(200))
15
+ # # 微信的openid
16
+ # wx_openid = db.Column(db.String(50))
17
+ # def __repr__(self):
18
+ # return json.dumps(self.to_json())
19
+ # def to_json(self,fields:list=None):
20
+ # '''
21
+ # 按资料库中的fieldname输出json
22
+ # :param fields:资料库栏位名,不指定fields时,输出所有的资料,否则按指定fields输出
23
+ # :return:
24
+ # '''
25
+ # return {key: getattr(self, key) for key in (fields or self.__table__.columns.keys())
26
+ # if hasattr(self,key)
27
+ # }
28
+ def add_seed(session, cls, flt, datas):
29
+ '''
30
+ 增加物件
31
+ :param session: sQLAlchemy session
32
+ :param cls: boclass,如:Employee
33
+ :param flt: 过滤条件,如:{'id':1000,'name':'cxh'}
34
+ :param datas: 物件body,如:
35
+ {'id':1000,'emp_name':'cxh',
36
+ 'departid':999}
37
+ :return: 企业物件,employee
38
+ '''
39
+ data = session.query(cls).filter_by(**flt).first()
40
+ if not data:
41
+ data = cls(**datas)
42
+ session.add(data)
43
+ session.commit()
44
+ else:
45
+ session.query(cls).filter_by(**flt).update(datas)
46
+ session.commit()
47
+ return data
48
+
49
+ def init_companys():
50
+ from app.models import Company
51
+ comp1 = add_seed(db.session, Company, {'id': 'comp1'},
52
+ {'id': 'comp1', 'code': 'code1', 'name': 'name1', 'xtype': 1,'inuse':True})
53
+ comp2 = add_seed(db.session, Company, {'id': 'comp2','inuse':True},
54
+ {'id': 'comp2', 'code': 'code2', 'name': 'name2', 'xtype': 1,'companyid':'comp1','inuse':True})
55
+ comp3 = add_seed(db.session, Company, {'id': 'comp3'},
56
+ {'id': 'comp3', 'code': 'code3', 'name': 'name3', 'xtype': 1,'companyid':'comp1','inuse':True})
57
+ return comp1,comp2,comp3
58
+
59
+ def init_test_data():
60
+ '''
61
+ 初始化测试资料
62
+ :return:返回各种类型的用户,方便后期测试
63
+ '''
64
+ init_companys()
65
+ # todo import AuthUser
66
+ from app.models import AuthUser
67
+ # 超级用户
68
+ dev = add_seed(db.session,AuthUser,{'uid':'2222'},
69
+ {'uid':'2222','uname':'dev','systemuser':True,'manageuser':False,'manageuserid':'','password':'2222'})
70
+ # 管理者用户
71
+ manage = add_seed(db.session,AuthUser,{'uid':'2000'},
72
+ {'uid':'2000','uname':'manage','systemuser':False,'manageuser':True,'manageuserid':'','password':'2000','companyid':'comp1'})
73
+ # 管理者下的普通用户
74
+ user_mng1 = add_seed(db.session,AuthUser,{'uid':'2001'},
75
+ {'uid':'2001','uname':'user_mng1','systemuser':False,'manageuser':False,'manageuserid':'2000','password':'2001','companyid':'comp1'})
76
+ # 普通用户
77
+ user = add_seed(db.session,AuthUser,{'uid':'2002'},
78
+ {'uid':'2002','uname':'user','systemuser':False,'manageuser':False,'manageuserid':'','password':'2002','companyid':'comp2'})
79
+ # current_app.logger.info('init_test_data success')
80
+ return dev, manage, user_mng1, user
@@ -0,0 +1,4 @@
1
+ import tests
2
+
3
+ if __name__ == '__main__':
4
+ tests.test()
@@ -0,0 +1,87 @@
1
+ '''
2
+ 测试范例:
3
+ 1,form 提交
4
+ response = self.client.post(self.url_for('empuser_login'),
5
+ # header 定义
6
+ headers={'Content-Type': 'multipart/form-data', 'Accept': 'application/json'},
7
+ # data 必须是字典
8
+ data={'user': '13712363409', 'password': 'string','valid_code':'1234','companyid':'comp1'})
9
+ 2,post body,内容是 json
10
+ response = self.client.post(self.url_for('empuser_update'),
11
+ # header 定义
12
+ headers=self.get_headers(self.manage_user,{'Content-Type': 'application/json'}),
13
+ # data 必须是str,json.dumps
14
+ data=json.dumps({'uid': 'string', 'uname': 'string', 'companyid': 'string', 'emp_name': 'string', 'password': 'string'}))
15
+ 3,mock 使用 注意事项
16
+ from unittest import mock
17
+ 。。。
18
+ # check_valid_code是 import的unit,不能设定函数的单元auth_utils,只需要指定引用单元empusermng
19
+ @mock.patch('app.api.v1_0.empusermng.check_valid_code')
20
+ def test_empuser_register_post(self,mock_check_valid_code):
21
+ # 驗證碼檢查找 mock
22
+ mock_check_valid_code.side_effect = [True,True,True,True]
23
+ response = self.client.post(self.url_for('empuser_register?valid_code=1234'),
24
+ headers=self.get_headers(self.manage_user,{'Content-Type': 'application/json'}),
25
+ data=json.dumps({ 'uname': '13712363409', 'companyid': 'comp1', 'emp_name': 'cxh', 'password': 'string'}))
26
+ # mock_check_valid_code.
27
+ 。。。
28
+ mock_check_valid_code.assert_called_with('1234',0,None)
29
+ 。。。
30
+ # 对应修饰器的顺序需颠倒
31
+ @mock.patch('app.api.v1_0.auth_companymng.get_companyids')
32
+ @mock.patch('app.api.v1_0.auth_companymng.get_service_companyid')
33
+ def test_auth_companys_servicename_get(self,mock_get_service_companyid,mock_get_companyids):
34
+ """
35
+ 测试获取认证的公司
36
+ """
37
+ # 博览会服务
38
+ mock_companyid.side_effect = ['comp1']
39
+ # 返回多个时,list中必须要是一个list
40
+ mock_get_service_companyid.side_effect = [['comp1','comp2','comp3'],['comp1','comp2','comp3'],['comp1','comp3','comp4']]
41
+
42
+ '''
43
+
44
+ import unittest
45
+ from app import create_app_swagger, db
46
+ from unittest import mock
47
+ from .init_test_data import init_test_data
48
+ from flask.testing import FlaskClient
49
+
50
+ class BasicTestCase(unittest.TestCase):
51
+
52
+ def setUp(self):
53
+ self.app = create_app_swagger('testing').app
54
+ self.app_context = self.app.app_context()
55
+ self.app_context.push()
56
+ db.create_all()
57
+ self.client = self.app.test_client()
58
+ self.server ='http://localhost:9999/{{swagger.name}}/v1.0'
59
+ # 超级用户,管理员用户,管理员创建的用户,普通用户
60
+ self.super_user,self.manage_user,self.user_mng,self.user =init_test_data()
61
+
62
+ def get_headers(self,user,ext_header=None):
63
+ '''
64
+ :param user:
65
+ :return:
66
+ '''
67
+ from app import rds
68
+ import json
69
+ rds.set('session:jwt_test',json.dumps({"uid": "%s"%user.uid, "uname": "%s"%user.uname,
70
+ "systemuser": user.systemuser, "manageuser": user.manageuser, "manageuserid": user.manageuserid}))
71
+ result ={'X-Consumer-Username': user.uname,
72
+ 'X-Consumer-Custom-Id': user.uid,
73
+ 'accept-language':'en-US;q=0.8,en;q=0.7'}
74
+ if ext_header is not None:
75
+ result.update(ext_header)
76
+ return result
77
+
78
+ def url_for(self,endpoint):
79
+ return '%s/%s'%(self.server,endpoint)
80
+
81
+ def tearDown(self):
82
+ db.session.remove()
83
+ db.drop_all()
84
+ self.app_context.pop()
85
+
86
+
87
+
@@ -0,0 +1,58 @@
1
+ from tests.test_base import BasicTestCase
2
+ import json
3
+ # from unittest import mock
4
+
5
+ class Test{{tag.name}}(BasicTestCase):
6
+ {% for path in tag.paths %}
7
+ {% for act in path.actions %}
8
+ def test_{{path.name.replace('{', '').replace('}', '').replace('-', '_') + '_' + act.action}}(self):
9
+ """
10
+ # todo add testcacse description
11
+ """
12
+ {% if act.action == 'get' and act.default_resp.is_array %}
13
+ # todo fix url
14
+ response = self.client.get(self.url_for('{{path.name.replace('_{', '/{')}}{{get_params(act.params)}}'),
15
+ headers=self.get_headers(self.super_user))
16
+ self.assertEqual(response.status_code,200)
17
+ # todo add other assert code
18
+ exp_data = {{get_resp_js(act)}}
19
+ resp_data = response.json # json.loads(response.data.decode())
20
+ {% endif %}
21
+ {% if act.action == 'get' and not act.default_resp.is_array %}
22
+ # todo fix url
23
+ response = self.client.get(self.url_for('{{path.name.replace('_{', '/{')}}{{get_params(act.params)}}'),
24
+ headers=self.get_headers(self.manage_user))
25
+ self.assertEqual(response.status_code,200)
26
+ # todo add other assert code
27
+ exp_data = {{get_resp_js(act)}}
28
+ resp_data = response.json
29
+ {% endif %}
30
+ {% if act.action == 'post' %}
31
+ # todo fix url
32
+ response = self.client.post(self.url_for('{{path.name.replace('_{', '/{')}}{{get_params(act.params)}}'),
33
+ headers=self.get_headers(self.manage_user,{'Content-Type': 'application/json'}),
34
+ data=json.dumps({{get_resp_js(act)}}))
35
+ self.assertEqual(response.status_code, 201)
36
+ # todo add other assert code
37
+ exp_data = {{get_resp_js(act)}}
38
+ resp_data = response.json #json.loads(response.data.decode())
39
+ {% endif %}
40
+ {% if act.action == 'put' %}
41
+ # todo fix url
42
+ response = self.client.post(self.url_for('{{path.name.replace('_{', '/{')}}{{get_params(act.params)}}'),
43
+ headers=self.get_headers(self.manage_user,{'Content-Type': 'application/json'}),
44
+ data=json.dumps({{get_resp_js(act)}}))
45
+ self.assertEqual(response.status_code, 201)
46
+ # todo add other assert code
47
+ exp_data = {{get_resp_js(act)}}
48
+ resp_data = response.json # json.loads(response.data.decode())
49
+ {% endif %}
50
+ {% if act.action == 'delete' %}
51
+ # todo fix url
52
+ response = self.client.delete(self.url_for('{{path.name.replace('_{', '/{')}}{{get_params(act.params)}}'),
53
+ headers=self.get_headers(self.manage_user,{'Content-Type': 'application/json'}),
54
+ )
55
+ self.assertEqual(response.status_code, 204)
56
+ {% endif %}
57
+ {% endfor %}
58
+ {% endfor %}
@@ -0,0 +1,20 @@
1
+ [uwsgi]
2
+ socket = /tmp/uwsgi.sock
3
+ chdir = /var/{{swagger.name}}
4
+ module = uwsgi_run
5
+ callable = app
6
+ #生产环境下不能开启
7
+ ;py-autoreload = true
8
+ master = true
9
+ chmod-socket = 666
10
+ plugin = python,http
11
+ processes = 2
12
+ threads = 2
13
+ max-requests = 500
14
+ ;worker超过60秒没有反应,会被重启
15
+ harakiri=60
16
+ {% if 'kafka' in plugins %}
17
+ ; 在有cassandra,kafka等应用的专案中要开启lazy-apps和touch-chain-reload
18
+ lazy-apps=true
19
+ touch-chain-reload=true
20
+ {% endif %}
@@ -0,0 +1,44 @@
1
+ from app import create_app_swagger
2
+
3
+ def register_service(config_name,app):
4
+ from app.config import config
5
+ # 注册本服务到kong
6
+ config = config[config_name]
7
+ auto_register2consul = config.CONSUL_AUTO_REGISTER
8
+ auto_register2kong = config.KONG_AUTO_REGISTER
9
+ web_port = config.PORT
10
+ # from mwsdk import AgentConf
11
+ service_host = f"{config.get_host_addr()}:{ web_port}"
12
+ app.logger.info('auto_register2kong:%s'%auto_register2kong)
13
+ if auto_register2kong:
14
+ from mwsdk import Kong
15
+ kong = Kong()
16
+ kong.add_upstream_target('{{swagger.name}}-server', service_host, 100, '/{{swagger.name}}/v1.0/health')
17
+ kong.reg_service('{{swagger.name}}/v1.0', '{{swagger.name}}-server', auth='jwt')
18
+ #todo add other_api
19
+ app.logger.info('注册kong成功')
20
+ #kong.reg_service('xxxx/v1.0/login_jwt', '{{swagger.name}}-server', auth='')
21
+ #kong.reg_service('xxxx/v1.0/token', '{{swagger.name}}-server', auth='key')
22
+ #kong.reg_service('xxxx/v1.0/logout_jwt', '{{swagger.name}}-server',auth='jwt')
23
+ #kong.reg_service('static', '{{swagger.name}}-server', auth='', kong_uris='/auth/static')
24
+ # 註冊到kong的服務到consul
25
+ app.logger.info('auto_register2consul:%s'%auto_register2consul)
26
+ if auto_register2consul:
27
+ check = {"id": "{{swagger.name}} api",
28
+ "name": "{{swagger.name}} on port %s"%web_port,
29
+ "http": "http://%s/{{swagger.name}}/v1.0/health"%service_host,
30
+ "interval": "20s",
31
+ "timeout": "10s",
32
+ "DeregisterCriticalServiceAfter": "5m"
33
+ }
34
+ from mwsdk import Kong, reg_service
35
+ kong = Kong()
36
+ reg_service('{{swagger.name}}',address=kong.ip, port=kong.port, tags=['kong','jwt'],
37
+ check=check)
38
+ app.logger.info('注册consul成功')
39
+
40
+ app = create_app_swagger('production')
41
+ register_service('production',app.app)
42
+ application = app.app
43
+
44
+
File without changes