wd-smebiz/context/common.py

103 lines
3.6 KiB
Python

# 全局使用的服务放到这里初始化,作为项目配置输入的入口
import sys
from configparser import ConfigParser
from logging import getLogger
from sqlalchemy.orm import declarative_base
from utils.api_data_utils import TianyanchaApi
from utils.auth_utils import AuthUtil, TokenDataModel
from utils.mongo_utils import MongoConnect
from utils.phone_msg_utils import PhoneMsgSend
from utils.redis_utils import RedisPool
from utils.sqlalchemy_common_utils import SqlalchemyConnect
from utils.verify_code_utils import EmailVerifyCode, ImageCaptchaVerify, PhoneVerifyCode
from pydantic import BaseModel
from typing import Optional, List
from pathlib import Path
# 权限验证工具类
# 日志
uvicorn_log = getLogger('uvicorn')
# 配置数据
conf = ConfigParser()
start_model = ""
if 'dev' in sys.argv:
start_model = 'dev'
print("start_model", start_model)
conf.read(Path(__file__).parent.parent / 'Config' / f'common{"." + start_model if start_model else ""}.ini',
encoding='utf-8-sig')
class CompanyUserTokenDataModel(BaseModel):
id: Optional[str]
company_name: Optional[str]
email: Optional[str]
phone: Optional[str]
class InstitutionUserTokenDataModel(BaseModel):
id: Optional[str]
institution_name: Optional[str]
email: Optional[str]
phone: Optional[str]
class AdminUserTokenDataModel(BaseModel):
id: Optional[str]
email: Optional[str]
phone: Optional[str]
departments: List[int]
posts: List[int]
auth_util = AuthUtil[AdminUserTokenDataModel](secret_key=conf['auth']['jwt_key'],
tokenDataModel=AdminUserTokenDataModel)
company_user_auth_util = AuthUtil[CompanyUserTokenDataModel](secret_key=conf['auth']['company_user_jwt_key'],
tokenDataModel=CompanyUserTokenDataModel)
##############################################################
# redis连接池
redis_pool = RedisPool(host=conf['redis']['host'], port=int(conf['redis']['port']))
redis_pool.connect()
# 共用mysql数据库
common_db_base = declarative_base()
# common_db = SqlalchemyConnect(common_db_base, host=conf['mysql']['host'],
# user=conf['mysql']['user'],
# password=conf['mysql']['password'],
# db=conf['mysql']['db'])
common_db = SqlalchemyConnect(common_db_base, host=conf['postgresql']['host'],
user=conf['postgresql']['user'],
password=conf['postgresql']['password'],
db=conf['postgresql']['db'], db_type='postgresql')
# mongo db
mg_db = MongoConnect(conf["mongo"]["host"], int(conf["mongo"]["port"]),
conf["mongo"]["db"],
conf["mongo"].get('user'),
conf["mongo"].get("password"))
# 邮箱验证码工具类
email_verify_code = EmailVerifyCode(redis_pool, conf['email']['api'], conf['email']['sender'])
# 图片验证码工具类
image_captcha_verify = ImageCaptchaVerify(redis_pool)
# 短信发送工具
phone_msg_send = PhoneMsgSend(conf['hw_msg']['url'],
conf['hw_msg']['app_key'],
conf['hw_msg']['app_secret'],
conf['hw_msg']['sender'],
conf['hw_msg']['template_id'],
conf['hw_msg']['signature']
)
# 短信验证码工具
phone_verify_code = PhoneVerifyCode(redis_pool, phone_msg_send)
tianyancha_api = TianyanchaApi(conf['tianyancha']['token'], mongo_connect=mg_db)
# 全局配置