Package: wisdoms
[TOC]通用库用法此库作为git项目管理，凡是修改完后应及时通知到开发团队需要使用库中的方法，使用pip install,这时候就可以在项目中引用库中的方法引用的方法举例：generation - 更新库Make sure you have installed setuptools and wheel.Important: You must modify the version of the package in setup.py and then delete those folders (build, dist, egg-info)python setup.py sdist bdist_wheelupload - 上传代码Install twine before doing this(qays:一只会抓鱼的熊）twine upload dist/*install - 安装pip install wisdomsfind the latest package of wisdoms - 发现最新版本pip list --outdatedupgrade - 升级到最新包pip install wisdoms --upgrade --no-cache-dirpackets usage:ms.py:# 权限验证fromwisdoms.msimportpermit,add_uid,add_userhost={'AMQP_URI':"amqp://guest:guest@localhost"}auth_=permit(host)user_=add_user(host)uid_=add_uid(host)classA:@auth_deffunc_need_auth(self,data):"""1.进入这个方法之前会验证权限，data需带有token2.之后的data的数据结构：{'uid':用户id, 'full_user':用户全部信息字典类型,'data':前端传来的data,'token':token,'full_org':当前组织, 'user':精简用户信息,'org':精简组织信息}:param data::return:"""user=data.get('user')data=data.get('data')# ...@user_deffunc_need_user(self,data):"""1.进入这个方法不需要验证权限，需要token返回用户信息2.之后的data的数据结构：{'uid':用户id, 'full_user':用户全部信息字典类型,'data':前端传来的data,'token':token,'full_org':当前组织, 'user':精简用户信息,'org':精简组织信息}:param data::return:"""user=data.get('user')data=data.get('data')# ...@uid_deffunc_need_uid(self,data):"""1.进入这个方法不需要验证权限，需要token只返回用户id2.之后的data的数据结构：{'uid':用户id, 'data':前端传来的data,'token':token}:param data::return:"""uid=data.get('uid')data=data.get('data')# ...config.py# 读取yml配置fromwisdoms.configimportc# gains item of YML configprint(c.get('name'))# transforms class into dictd=c.to_dict()print(d['name'])commons package# 返回执行后的状态码fromwisdoms.commonsimportrevert,codes,successdeffunc():# do something# revert(codes.code) or revert(number)# return revert(1)returnrevert(codes.ERROR)deffoo():# return revert(code, data, desc)returnrevert(codes.SUCCESS,{'data':'data'},'返回成功描述信息')defdone():# simplified revert where success execute# return success(data) or success()returnsuccess()util.py# 多个字符串连接成路径fromwisdoms.utilsimportjoint4pathprint(joint4path('abc','dac','ccc'))# $: abc/dac/ccc# ------------------------------------------------------------------# 对象转字典fromwisdoms.utilsimporto2do2d(obj)# ------------------------------------------------------------------# 捕获异常装饰器fromwisdoms.utilsimportfunc_exceptionex=func_exception(codes.WARNING)@exdeffunc():pass# ------------------------------------------------------------------# 捕获异常类装饰器fromwisdoms.utilsimportcls_exception# ex为方法装饰器xpt_cls=cls_exception(ex)@xpt_clsclassA:name='a'def__init__(self,param):self.desc=paramdeffunc1(self,param):returnself.desc+param@classmethoddeffunc2(cls,param):print(cls)print('func2',param)raiseException('func2 error')@staticmethoddeffunc3(param):print('func3',param)raiseException('func3 error')aa=A('param')# 注意： 该装饰器的静态方法和类方法必须用实例调用ms.py# 应用微服务 基类fromwisdoms.msimportms_basefromxximportROLES# ROLES 数据结构# import json# defRole = {#     'role': 'default',#     'name': '默认角色',#     'desc': '',#     'functions': ['user_register', 'user_update', 'user_logoff', 'user_search', 'user_audit', 'user_login',#                   'user_logout', 'org_register', 'org_update', 'org_dismiss', 'org_search', 'org_audit',#                   'org_user_list', 'app_register', 'app_update', 'app_delete', 'app_search', 'app_audit',#                   'user_org_apply', 'user_org_choose', 'user_org_list', 'user_org_audit', 'user_org_update',#                   'user_org_rid', 'user_app_apply', 'user_app_apply_list', 'user_app_audit', 'user_app_update',#                   'user_app_rid', 'user_app_router'],#     'router': {}# }# ROLES = list()# ROLES.append(json.dumps(defRole))# 不需要的不写MsBase=ms_base(MS_HOST,name='XX应用',roles=ROLES,types='free',entrance='/xx/index')classA(MsBase):pass# -----------------------------------------------fromwisdoms.msimportclosure_crfcrf=closure_crf(config('ms_host'))pg_db.pyfromwisdoms.pg_dbimportsession_exceptionse=session_exception(session)@sedeffunc():# raise exception extend SqlalChemyErrorpass# ------------------------------------------------------------------# session 增删改查表基础类，已经实现增删改查通用方法，直接继承就能使用fromwisdoms.dbimportrepo_refRepoBase=repo_ref(session)classFooRepo(RepoBase):"""common add, delete, update, get(include search) function finished"""pass# Foo is the model of tablefoo=FooRepo(Foo)# you can do follow listfoo.add(name='name',desc='desc',...)foo.update(id,name='rename',desc='redesc',...)foo.delete(id)foo.get()# return list of all objectsfoo.get(id)# return a objectfoo.get(name='name',...)# return list of objects what you search#-----------------------------------------------------postgresql使用ARRAYJSON使用jsonb来存储example:notes=Column(CastingArray())classCastingArray(ARRAY):defbind_expression(self):returncast(JSONB,self)#---------------------------------------------------------定制PGmodel五个基本属性classBaseModelPG(declarative_base()):__abstract__=True# 定制基本属性id=Column(Integer,nullable=False,primary_key=True,unique=True,autoincrement=True,)uid=Column(Integer,nullable=False)oid=Column(Integer,nullable=False)create_time=Column(DateTime,default=datetime.now(),onupdate=datetime.now())update_time=Column(DateTime,default=datetime.now(),)使用例子classSomeEntity(BaseModelPG):name=models.CharField(max_length=1000)address=models.CharField(max_length=1000,default='')info=models.CharField(max_length=2000,default='')如何设计包顶级包：wisdom，代表天智，智慧现阶段的约定：采用一级包的方式不同的功能放在不同的文件（模块）即可做好方法的分类