`rst file editor <http://rst.ninjs.org>`_
mwgencode
maxwin 团队产生工程代码的工具,uml 建模工具为starUML,工程代码包括: swagger,controller,
modules,tests code,seeds code,dockerfile,babel.cfg,uwsgi file等
maxwin 开发框架使用的 lib
1. 工具 `mwutils <https://bitbucket.org/maxwin-inc/mwutils/src>`_
2. 认证检查 `mwauth <https://bitbucket.org/maxwin-inc/auth/src>`_
3. 确定权限 `mwpermission <https://bitbucket.org/maxwin-inc/mwpermission/src>`_
4. 通用服务SDK `mwsdk <https://bitbucket.org/maxwin-inc/mwsdk/src>`_
5. aiohttp多语言 `mw-aiohttp-babel <https://bitbucket.org/maxwin-inc/mw-aiohttp-babel/src>`_
6. aiohttp认证检查和确权 `mw-aiohttp-security <https://bitbucket.org/maxwin-inc/mw-aiohttp-security/src>`_
7. aiohttpsession `mw-aiohttp-session <https://bitbucket.org/maxwin-inc/mw-aiohttp-session/src>`_
8. 认证服务 需要kong和consul,支持jwt 和session 认证
9. 确权服务 需要kong和consul
.. _gencode:
生成工程代码的方法
1. 创建工程目录,如:order_system
2. cd order_system
3. 进入cmd,在cmd 输入 ::
gencode init -c
提示如下 ::
gen code success!
则表示创建专案成功
4. 在pycharm中打开 order_system
5. 用 `staruml2 <http://staruml.io/download>`_ 打开(暂时不支持starUML v3) ./docs/oder_system.mdj,修改model( `建模帮助手册 <https://docs.qq.com/doc/DQkZSaUtvWXpMU1lh>`_)
6. 在python中执行 gen_code_run.py,则可产生完整的flask专案文件
工程文件架构说明
> 目录app,为项目
- api 目录编写 swagger control 代码
- __init__.py 创建 flask app
- models.py 物件模型代码,企业物件的规则在此添加
- models_base.py 企业物件代码,由工具自动产生,无需手工维护
- unitls 增加一些工具代码
> docs 保存uml module 文件,mdj 文件为starUML v2的文件
> migrations 数据迁移文件,工具自动产生,不需要手工维护
> swagger 为swagger file 目录,工具自动产生,不需要手工维护
> tests 单元测试代码,每次增加api时,均会产生测试模板文件
> seeds 为初始化数据的代码,可视需求增减
> root 目录下的文件说明:
- config.py flask 的config 文件,包括 TestingConfig(单元测试用的config),DevelopmentConfig(开发模式下用的config),ProductionConfig(生产模式下用的config)
- docker 相关文件,docker-compose-dev.yaml(docker compose 样本,生产环境下改名成 docker-compose.yaml即可),docker-compose.yaml(本地测试文件,不会上传git),Dockerfile
- gen_code_run.py 由工具初始化专案时产生,用于产生完整的专案代码 或 每次更新module后,重新生成专案代码
- run.py 开发环境下的run 单元, 包含 consul 和 kong 的注册
- uwsgi_run.py 生产环境下的run 单元,包含 consul 和 kong 的注册,在docker 中执行
- seed_run.py 产生系统默认数据,比如权限资料
- migrate_run.sh变更模型后,执行该文件 升级资料库,仅限开发环境
- run-dev.sh 为run.sh的模板文件
- run.sh 直接开启docker
:备注:
1. 其中 要产生 tests 和seeds 目录,需要把test和seed 两个参数设为True,如:gen_code(include_test=True,include_seeds=True)
2. 具体见 **readme.md**
数据迁移
支持对开发环境下的sqlite资料的数据迁移,不建议在生产环境中执行,避免人工失误,导致损坏资料
1. install or upgrade ::
pip install --upgrade Flask-Migrate
2. 指定Flask app
- linux 下 ::
export FLASK_APP=migrate_run.py
- windows 下 ::
set FLASK_APP=migrate_run.py
3. 初始化 ::
flask db init
4. 产生迁移语句 ::
flask db migrate
5. 执行升级资料库 ::
flask db upgrade
* 可直接执行migrate_run.bat or migrate_run.sh 升级资料库
单元测试
继承tests下的test_base.py的 BasicTestCase
定义test 开头的单元方法,编写测试代码即可
> 代码样例
.. code-block:: python
from .test_base import BasicTestCase
from app.models import *
from app import db
class Testexp(BasicTestCase):
# 测试model
def test_data1(self):
cet = Cacl_exp_type()
cet.code = 'cet001'
cet.description = 'cet_des001'
db.session.add(cet)
db.session.commit()
cet = Cacl_exp_type.query.first()
self.assertEqual(cet.code,'cet001')
# 测试方法
def test_health(self):
response = self.client.get(self.url_for('health'))
self.assertTrue(response.status_code, 200)
> 执行单元测试 ::
cd tests
python run.py
升级旧专案的方法
> 如果不是由本工具产生的专案,可 参照生成代码的方法( gencode_)
> 如果是该工具产生旧代码,可先备份代码,删除工具之前产生的代码(保留gen_code_run.py和app 目录下的除__init__.py的代码)并重现运行gen_code_run.py产生框架
Changes
1.3.10(2024-02-26)
- drone.yml 支持tag
1.3.7(2023-02-21)
- 升级代码,支持k8s
1.3.6(2023-02-15)
- 产生k8s.yml模板文档
1.3.0(2021-12-20)
- 升级 sqlalchmy,redis等的版本
1.2.26(2021-04-22)
- 支持redis 哨兵模式
1.2.6(2020-09-07)
- 增加 .drone.yml 模板
1.2.6(2020-08-04)
- 修改project 文件代码
1.2.4(2020-05-20)
- 修改project 文件代码
1.2.3(2020-05-20)
- 修改dockerfile template
1.2.0(2020-02-17)
- 增加GenSwagger 类,创建swagger
1.1.0(2020-02-14)
- 支持startUML3 ,swagger2.0
1.0.0(2020-01-01)
- 只支持startUML2.8.1,swagger2.0
0.6.44(2019-12-18)
- 类别没有ID时,统一用integer 做id
0.6.40(2019-12-18)
- json中的日期时间增加本地时区
0.6.37(2019-12-18)
- 增加 new_id 代码
0.6.35(2019-12-04)
- 增加 file_utils单元
0.6.34(2019-12-04)
- 修正 put api 错误时触发500的错误
0.6.32(2019-11-27)
- 有自定义多对多的关联类需要在models中产生后端类
0.6.31(2019-11-25)
- 数据模型支持 lazy
0.6.30(2019-11-12)
- 修改url 参数支持大小写
0.6.29(2019-10-22)
- 修改 text/html对应错误
Changes
0.6.28(2019-09-26)
- 修改 setup.tmp
0.6.26(2019-09-20)
- 支持swagger 中定义 text/html
0.6.24(2019-08-23)
- 支持cython
0.6.23(2019-06-25)
- 升级mwsdk和mwutils的版本
0.6.22(2018-11-27)
- 解决table包含触发器时,key为自动新增栏位不能新增的问题
0.6.13(2018-11-27)
- 支持产生写kafka 代码
0.6.12(2018-11-27)
- 修正 描述中 包含" 导致swagger错误的问题
0.6.10(2018-11-07)
- 升级mwutils,mw-aiohttp-security 开发包
0.6.6(2018-11-06)
- 升级mw-aiohttp-session,mw-aiohttp-security 开发包
0.6.4(2018-10-31)
- 升级mwsdk 开发包
0.6.2(2018-10-31)
- 解决非unicode中文环境下不能安装的问题
0.6.1(2018-10-30)
- 修正安装包错误
0.6.0(2018-10-30)
- 增加readme
Raw data
{
"_id": null,
"home_page": "https://bitbucket.org/maxwin-inc/gencode/src/",
"name": "mwgencode",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "cxhjet",
"author_email": "cxhjet@qq.com",
"download_url": "https://files.pythonhosted.org/packages/1f/21/1298d721b6b97e6e87a39b1aee4c70edc4609a12c85cbfd763151fbddac5/mwgencode-1.3.10.tar.gz",
"platform": null,
"description": "`rst file editor <http://rst.ninjs.org>`_\r\r\n\r\r\nmwgencode\r\r\n\r\r\nmaxwin \u56e2\u961f\u4ea7\u751f\u5de5\u7a0b\u4ee3\u7801\u7684\u5de5\u5177\uff0cuml \u5efa\u6a21\u5de5\u5177\u4e3astarUML\uff0c\u5de5\u7a0b\u4ee3\u7801\u5305\u62ec\uff1a swagger\uff0ccontroller\uff0c\r\r\nmodules\uff0ctests code\uff0cseeds code\uff0cdockerfile\uff0cbabel.cfg,uwsgi file\u7b49\r\r\n\r\r\n\r\r\nmaxwin \u5f00\u53d1\u6846\u67b6\u4f7f\u7528\u7684 lib\r\r\n\r\r\n1. \u5de5\u5177 `mwutils <https://bitbucket.org/maxwin-inc/mwutils/src>`_\r\r\n2. \u8ba4\u8bc1\u68c0\u67e5 `mwauth <https://bitbucket.org/maxwin-inc/auth/src>`_\r\r\n3. \u786e\u5b9a\u6743\u9650 `mwpermission <https://bitbucket.org/maxwin-inc/mwpermission/src>`_\r\r\n4. \u901a\u7528\u670d\u52a1SDK `mwsdk <https://bitbucket.org/maxwin-inc/mwsdk/src>`_\r\r\n5. aiohttp\u591a\u8bed\u8a00 `mw-aiohttp-babel <https://bitbucket.org/maxwin-inc/mw-aiohttp-babel/src>`_\r\r\n6. aiohttp\u8ba4\u8bc1\u68c0\u67e5\u548c\u786e\u6743 `mw-aiohttp-security <https://bitbucket.org/maxwin-inc/mw-aiohttp-security/src>`_\r\r\n7. aiohttpsession `mw-aiohttp-session <https://bitbucket.org/maxwin-inc/mw-aiohttp-session/src>`_\r\r\n8. \u8ba4\u8bc1\u670d\u52a1 \u9700\u8981kong\u548cconsul\uff0c\u652f\u6301jwt \u548csession \u8ba4\u8bc1\r\r\n9. \u786e\u6743\u670d\u52a1 \u9700\u8981kong\u548cconsul\r\r\n\r\r\n\r\r\n.. _gencode:\r\r\n\r\r\n\u751f\u6210\u5de5\u7a0b\u4ee3\u7801\u7684\u65b9\u6cd5\r\r\n\r\r\n\r\r\n1. \u521b\u5efa\u5de5\u7a0b\u76ee\u5f55\uff0c\u5982\uff1aorder_system\r\r\n2. cd order_system\r\r\n3. \u8fdb\u5165cmd,\u5728cmd \u8f93\u5165 ::\r\r\n\r\r\n gencode init -c\r\r\n\r\r\n\u63d0\u793a\u5982\u4e0b ::\r\r\n\r\r\n gen code success!\r\r\n\r\r\n\u5219\u8868\u793a\u521b\u5efa\u4e13\u6848\u6210\u529f\r\r\n\r\r\n4. \u5728pycharm\u4e2d\u6253\u5f00 order_system\r\r\n5. \u7528 `staruml2 <http://staruml.io/download>`_ \u6253\u5f00(\u6682\u65f6\u4e0d\u652f\u6301starUML v3) ./docs/oder_system.mdj\uff0c\u4fee\u6539model\uff08 `\u5efa\u6a21\u5e2e\u52a9\u624b\u518c <https://docs.qq.com/doc/DQkZSaUtvWXpMU1lh>`_\uff09\r\r\n6. \u5728python\u4e2d\u6267\u884c gen_code_run.py\uff0c\u5219\u53ef\u4ea7\u751f\u5b8c\u6574\u7684flask\u4e13\u6848\u6587\u4ef6\r\r\n\r\r\n\r\r\n\u5de5\u7a0b\u6587\u4ef6\u67b6\u6784\u8bf4\u660e\r\r\n\r\r\n> \u76ee\u5f55app\uff0c\u4e3a\u9879\u76ee\r\r\n\r\r\n- api \u76ee\u5f55\u7f16\u5199 swagger control \u4ee3\u7801\r\r\n- __init__.py \u521b\u5efa flask app\r\r\n- models.py \u7269\u4ef6\u6a21\u578b\u4ee3\u7801\uff0c\u4f01\u4e1a\u7269\u4ef6\u7684\u89c4\u5219\u5728\u6b64\u6dfb\u52a0\r\r\n- models_base.py \u4f01\u4e1a\u7269\u4ef6\u4ee3\u7801\uff0c\u7531\u5de5\u5177\u81ea\u52a8\u4ea7\u751f\uff0c\u65e0\u9700\u624b\u5de5\u7ef4\u62a4\r\r\n- unitls \u589e\u52a0\u4e00\u4e9b\u5de5\u5177\u4ee3\u7801\r\r\n\r\r\n> docs \u4fdd\u5b58uml module \u6587\u4ef6\uff0cmdj \u6587\u4ef6\u4e3astarUML v2\u7684\u6587\u4ef6\r\r\n\r\r\n> migrations \u6570\u636e\u8fc1\u79fb\u6587\u4ef6\uff0c\u5de5\u5177\u81ea\u52a8\u4ea7\u751f\uff0c\u4e0d\u9700\u8981\u624b\u5de5\u7ef4\u62a4\r\r\n\r\r\n> swagger \u4e3aswagger file \u76ee\u5f55\uff0c\u5de5\u5177\u81ea\u52a8\u4ea7\u751f\uff0c\u4e0d\u9700\u8981\u624b\u5de5\u7ef4\u62a4\r\r\n\r\r\n> tests \u5355\u5143\u6d4b\u8bd5\u4ee3\u7801\uff0c\u6bcf\u6b21\u589e\u52a0api\u65f6\uff0c\u5747\u4f1a\u4ea7\u751f\u6d4b\u8bd5\u6a21\u677f\u6587\u4ef6\r\r\n\r\r\n> seeds \u4e3a\u521d\u59cb\u5316\u6570\u636e\u7684\u4ee3\u7801\uff0c\u53ef\u89c6\u9700\u6c42\u589e\u51cf\r\r\n\r\r\n> root \u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u8bf4\u660e\uff1a\r\r\n\r\r\n- config.py flask \u7684config \u6587\u4ef6\uff0c\u5305\u62ec TestingConfig\uff08\u5355\u5143\u6d4b\u8bd5\u7528\u7684config\uff09\uff0cDevelopmentConfig\uff08\u5f00\u53d1\u6a21\u5f0f\u4e0b\u7528\u7684config\uff09\uff0cProductionConfig\uff08\u751f\u4ea7\u6a21\u5f0f\u4e0b\u7528\u7684config\uff09\r\r\n\r\r\n- docker \u76f8\u5173\u6587\u4ef6\uff0cdocker-compose-dev.yaml(docker compose \u6837\u672c\uff0c\u751f\u4ea7\u73af\u5883\u4e0b\u6539\u540d\u6210 docker-compose.yaml\u5373\u53ef)\uff0cdocker-compose.yaml\uff08\u672c\u5730\u6d4b\u8bd5\u6587\u4ef6\uff0c\u4e0d\u4f1a\u4e0a\u4f20git\uff09\uff0cDockerfile\r\r\n\r\r\n- gen_code_run.py \u7531\u5de5\u5177\u521d\u59cb\u5316\u4e13\u6848\u65f6\u4ea7\u751f\uff0c\u7528\u4e8e\u4ea7\u751f\u5b8c\u6574\u7684\u4e13\u6848\u4ee3\u7801 \u6216 \u6bcf\u6b21\u66f4\u65b0module\u540e\uff0c\u91cd\u65b0\u751f\u6210\u4e13\u6848\u4ee3\u7801\r\r\n\r\r\n- run.py \u5f00\u53d1\u73af\u5883\u4e0b\u7684run \u5355\u5143\uff0c \u5305\u542b consul \u548c kong \u7684\u6ce8\u518c\r\r\n\r\r\n- uwsgi_run.py \u751f\u4ea7\u73af\u5883\u4e0b\u7684run \u5355\u5143\uff0c\u5305\u542b consul \u548c kong \u7684\u6ce8\u518c\uff0c\u5728docker \u4e2d\u6267\u884c\r\r\n\r\r\n- seed_run.py \u4ea7\u751f\u7cfb\u7edf\u9ed8\u8ba4\u6570\u636e\uff0c\u6bd4\u5982\u6743\u9650\u8d44\u6599\r\r\n\r\r\n- migrate_run.sh\u53d8\u66f4\u6a21\u578b\u540e\uff0c\u6267\u884c\u8be5\u6587\u4ef6 \u5347\u7ea7\u8d44\u6599\u5e93\uff0c\u4ec5\u9650\u5f00\u53d1\u73af\u5883\r\r\n\r\r\n- run-dev.sh \u4e3arun.sh\u7684\u6a21\u677f\u6587\u4ef6\r\r\n\r\r\n- run.sh \u76f4\u63a5\u5f00\u542fdocker\r\r\n\r\r\n:\u5907\u6ce8:\r\r\n\r\r\n 1. \u5176\u4e2d \u8981\u4ea7\u751f tests \u548cseeds \u76ee\u5f55\uff0c\u9700\u8981\u628atest\u548cseed \u4e24\u4e2a\u53c2\u6570\u8bbe\u4e3aTrue\uff0c\u5982\uff1agen_code(include_test=True,include_seeds=True)\r\r\n 2. \u5177\u4f53\u89c1 **readme.md**\r\r\n\r\r\n\r\r\n\u6570\u636e\u8fc1\u79fb\r\r\n\r\r\n\r\r\n \u652f\u6301\u5bf9\u5f00\u53d1\u73af\u5883\u4e0b\u7684sqlite\u8d44\u6599\u7684\u6570\u636e\u8fc1\u79fb\uff0c\u4e0d\u5efa\u8bae\u5728\u751f\u4ea7\u73af\u5883\u4e2d\u6267\u884c\uff0c\u907f\u514d\u4eba\u5de5\u5931\u8bef\uff0c\u5bfc\u81f4\u635f\u574f\u8d44\u6599\r\r\n\r\r\n1. install or upgrade ::\r\r\n\r\r\n pip install --upgrade Flask-Migrate\r\r\n\r\r\n2. \u6307\u5b9aFlask app\r\r\n\r\r\n- linux \u4e0b ::\r\r\n\r\r\n export FLASK_APP=migrate_run.py\r\r\n\r\r\n- windows \u4e0b ::\r\r\n\r\r\n set FLASK_APP=migrate_run.py\r\r\n\r\r\n3. \u521d\u59cb\u5316 ::\r\r\n\r\r\n flask db init\r\r\n\r\r\n4. \u4ea7\u751f\u8fc1\u79fb\u8bed\u53e5 ::\r\r\n\r\r\n flask db migrate\r\r\n\r\r\n5. \u6267\u884c\u5347\u7ea7\u8d44\u6599\u5e93 ::\r\r\n\r\r\n flask db upgrade\r\r\n\r\r\n* \u53ef\u76f4\u63a5\u6267\u884cmigrate_run.bat or migrate_run.sh \u5347\u7ea7\u8d44\u6599\u5e93\r\r\n\r\r\n\u5355\u5143\u6d4b\u8bd5\r\r\n\r\r\n \u7ee7\u627ftests\u4e0b\u7684test_base.py\u7684 BasicTestCase\r\r\n \u5b9a\u4e49test \u5f00\u5934\u7684\u5355\u5143\u65b9\u6cd5\uff0c\u7f16\u5199\u6d4b\u8bd5\u4ee3\u7801\u5373\u53ef\r\r\n\r\r\n> \u4ee3\u7801\u6837\u4f8b\r\r\n\r\r\n.. code-block:: python\r\r\n\r\r\n from .test_base import BasicTestCase\r\r\n from app.models import *\r\r\n from app import db\r\r\n class Testexp(BasicTestCase):\r\r\n # \u6d4b\u8bd5model\r\r\n def test_data1(self):\r\r\n cet = Cacl_exp_type()\r\r\n cet.code = 'cet001'\r\r\n cet.description = 'cet_des001'\r\r\n db.session.add(cet)\r\r\n db.session.commit()\r\r\n cet = Cacl_exp_type.query.first()\r\r\n self.assertEqual(cet.code,'cet001')\r\r\n\r\r\n # \u6d4b\u8bd5\u65b9\u6cd5\r\r\n def test_health(self):\r\r\n response = self.client.get(self.url_for('health'))\r\r\n self.assertTrue(response.status_code, 200)\r\r\n\r\r\n\r\r\n> \u6267\u884c\u5355\u5143\u6d4b\u8bd5 ::\r\r\n\r\r\n cd tests\r\r\n python run.py\r\r\n\r\r\n\u5347\u7ea7\u65e7\u4e13\u6848\u7684\u65b9\u6cd5\r\r\n\r\r\n\r\r\n> \u5982\u679c\u4e0d\u662f\u7531\u672c\u5de5\u5177\u4ea7\u751f\u7684\u4e13\u6848\uff0c\u53ef \u53c2\u7167\u751f\u6210\u4ee3\u7801\u7684\u65b9\u6cd5\uff08 gencode_\uff09\r\r\n\r\r\n> \u5982\u679c\u662f\u8be5\u5de5\u5177\u4ea7\u751f\u65e7\u4ee3\u7801\uff0c\u53ef\u5148\u5907\u4efd\u4ee3\u7801\uff0c\u5220\u9664\u5de5\u5177\u4e4b\u524d\u4ea7\u751f\u7684\u4ee3\u7801\uff08\u4fdd\u7559gen_code_run.py\u548capp \u76ee\u5f55\u4e0b\u7684\u9664__init__.py\u7684\u4ee3\u7801\uff09\u5e76\u91cd\u73b0\u8fd0\u884cgen_code_run.py\u4ea7\u751f\u6846\u67b6\r\r\n\r\r\n\r\n\r\nChanges\r\r\n\r\r\n1.3.10(2024-02-26)\r\r\n- drone.yml \u652f\u6301tag\r\r\n\r\r\n1.3.7(2023-02-21)\r\r\n- \u5347\u7ea7\u4ee3\u7801,\u652f\u6301k8s\r\r\n\r\r\n1.3.6(2023-02-15)\r\r\n- \u4ea7\u751fk8s.yml\u6a21\u677f\u6587\u6863\r\r\n\r\r\n1.3.0(2021-12-20)\r\r\n- \u5347\u7ea7 sqlalchmy\uff0credis\u7b49\u7684\u7248\u672c\r\r\n\r\r\n1.2.26(2021-04-22)\r\r\n- \u652f\u6301redis \u54e8\u5175\u6a21\u5f0f\r\r\n\r\r\n1.2.6(2020-09-07)\r\r\n- \u589e\u52a0 .drone.yml \u6a21\u677f\r\r\n1.2.6(2020-08-04)\r\r\n- \u4fee\u6539project \u6587\u4ef6\u4ee3\u7801\r\r\n\r\r\n1.2.4(2020-05-20)\r\r\n- \u4fee\u6539project \u6587\u4ef6\u4ee3\u7801\r\r\n\r\r\n1.2.3(2020-05-20)\r\r\n- \u4fee\u6539dockerfile template\r\r\n\r\r\n1.2.0(2020-02-17)\r\r\n- \u589e\u52a0GenSwagger \u7c7b\uff0c\u521b\u5efaswagger\r\r\n\r\r\n1.1.0(2020-02-14)\r\r\n- \u652f\u6301startUML3 ,swagger2.0\r\r\n\r\r\n1.0.0(2020-01-01)\r\r\n- \u53ea\u652f\u6301startUML2.8.1,swagger2.0\r\r\n\r\r\n0.6.44(2019-12-18)\r\r\n- \u7c7b\u522b\u6ca1\u6709ID\u65f6\uff0c\u7edf\u4e00\u7528integer \u505aid\r\r\n\r\r\n0.6.40(2019-12-18)\r\r\n- json\u4e2d\u7684\u65e5\u671f\u65f6\u95f4\u589e\u52a0\u672c\u5730\u65f6\u533a\r\r\n\r\r\n0.6.37(2019-12-18)\r\r\n- \u589e\u52a0 new_id \u4ee3\u7801\r\r\n\r\r\n0.6.35(2019-12-04)\r\r\n- \u589e\u52a0 file_utils\u5355\u5143\r\r\n\r\r\n0.6.34(2019-12-04)\r\r\n- \u4fee\u6b63 put api \u9519\u8bef\u65f6\u89e6\u53d1500\u7684\u9519\u8bef\r\r\n\r\r\n0.6.32(2019-11-27)\r\r\n- \u6709\u81ea\u5b9a\u4e49\u591a\u5bf9\u591a\u7684\u5173\u8054\u7c7b\u9700\u8981\u5728models\u4e2d\u4ea7\u751f\u540e\u7aef\u7c7b\r\r\n\r\r\n0.6.31(2019-11-25)\r\r\n- \u6570\u636e\u6a21\u578b\u652f\u6301 lazy\r\r\n\r\r\n0.6.30(2019-11-12)\r\r\n- \u4fee\u6539url \u53c2\u6570\u652f\u6301\u5927\u5c0f\u5199\r\r\n\r\r\n0.6.29(2019-10-22)\r\r\n- \u4fee\u6539 text/html\u5bf9\u5e94\u9519\u8bef\r\r\n\r\r\nChanges\r\r\n0.6.28(2019-09-26)\r\r\n- \u4fee\u6539 setup.tmp\r\r\n\r\r\n0.6.26(2019-09-20)\r\r\n- \u652f\u6301swagger \u4e2d\u5b9a\u4e49 text/html\r\r\n\r\r\n0.6.24(2019-08-23)\r\r\n- \u652f\u6301cython\r\r\n\r\r\n\r\r\n0.6.23(2019-06-25)\r\r\n- \u5347\u7ea7mwsdk\u548cmwutils\u7684\u7248\u672c\r\r\n\r\r\n\r\r\n0.6.22(2018-11-27)\r\r\n- \u89e3\u51b3table\u5305\u542b\u89e6\u53d1\u5668\u65f6\uff0ckey\u4e3a\u81ea\u52a8\u65b0\u589e\u680f\u4f4d\u4e0d\u80fd\u65b0\u589e\u7684\u95ee\u9898\r\r\n\r\r\n0.6.13(2018-11-27)\r\r\n- \u652f\u6301\u4ea7\u751f\u5199kafka \u4ee3\u7801\r\r\n\r\r\n0.6.12(2018-11-27)\r\r\n\r\r\n- \u4fee\u6b63 \u63cf\u8ff0\u4e2d \u5305\u542b\" \u5bfc\u81f4swagger\u9519\u8bef\u7684\u95ee\u9898\r\r\n\r\r\n0.6.10(2018-11-07)\r\r\n- \u5347\u7ea7mwutils,mw-aiohttp-security \u5f00\u53d1\u5305\r\r\n\r\r\n0.6.6(2018-11-06)\r\r\n\r\r\n- \u5347\u7ea7mw-aiohttp-session,mw-aiohttp-security \u5f00\u53d1\u5305\r\r\n\r\r\n0.6.4(2018-10-31)\r\r\n- \u5347\u7ea7mwsdk \u5f00\u53d1\u5305\r\r\n\r\r\n0.6.2(2018-10-31)\r\r\n- \u89e3\u51b3\u975eunicode\u4e2d\u6587\u73af\u5883\u4e0b\u4e0d\u80fd\u5b89\u88c5\u7684\u95ee\u9898\r\r\n\r\r\n0.6.1(2018-10-30)\r\r\n- \u4fee\u6b63\u5b89\u88c5\u5305\u9519\u8bef\r\r\n\r\r\n0.6.0(2018-10-30)\r\r\n- \u589e\u52a0readme\r\r\n\r\r\n",
"bugtrack_url": null,
"license": "",
"summary": "\u6839\u636estarUML\u6587\u6863\u4ea7\u751fflask\u4e13\u6848\u7684\u4ee3\u7801",
"version": "1.3.10",
"project_urls": {
"Homepage": "https://bitbucket.org/maxwin-inc/gencode/src/"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1f211298d721b6b97e6e87a39b1aee4c70edc4609a12c85cbfd763151fbddac5",
"md5": "e1955257422f7469ce48f45d364d477f",
"sha256": "105af27df9457bd1dafdae5ab55ce3bf3c13406de6d919895bf9e2340530def2"
},
"downloads": -1,
"filename": "mwgencode-1.3.10.tar.gz",
"has_sig": false,
"md5_digest": "e1955257422f7469ce48f45d364d477f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 96493,
"upload_time": "2024-02-26T09:15:47",
"upload_time_iso_8601": "2024-02-26T09:15:47.837162Z",
"url": "https://files.pythonhosted.org/packages/1f/21/1298d721b6b97e6e87a39b1aee4c70edc4609a12c85cbfd763151fbddac5/mwgencode-1.3.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-26 09:15:47",
"github": false,
"gitlab": false,
"bitbucket": true,
"codeberg": false,
"bitbucket_user": "maxwin-inc",
"bitbucket_project": "gencode",
"lcname": "mwgencode"
}