master
leo 3 years ago
commit 938979ae88

@ -0,0 +1 @@
## NovaLOG

@ -0,0 +1,159 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/03 16:59:57
# @Author : leo liu
# @Version : 1.0
# @Description :
import traceback
from fastapi import FastAPI, Request, status, HTTPException
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from fastapi.exceptions import RequestValidationError
from fastapi.middleware.cors import CORSMiddleware
# from slowapi import Limiter
# from slowapi.util import get_remote_address
# from slowapi.middleware import SlowAPIMiddleware
from api.v1 import api_v1
from extensions import logger
from core.settings import config
from utils.custom_exc import PostParamsError, TokenAuthError # 自定义异常
# swigger 文档分类 https://fastapi.tiangolo.com/tutorial/metadata/
tags_metadata = [
{
"name": "首页",
"description": "数据API",
},
]
def create_app():
app = FastAPI(
title="Chatmed",
description="",
version="0.0.1",
docs_url=config.DOCS_URL,
openapi_url=config.OPENAPI_URL,
redoc_url=config.REDOC_URL,
openapi_tags=tags_metadata
)
app.include_router(
api_v1,
prefix="/api/v1",
)
register_exception(app) # 注册捕获异常信息
register_cors(app) # 跨域设置
register_middleware(app)
return app
def register_exception(app: FastAPI):
"""
全局异常捕获
:param app:
:return:
"""
# 捕获自定义异常
@app.exception_handler(PostParamsError)
async def query_params_exception_handler(request: Request, exc: PostParamsError):
"""
捕获 自定义抛出的异常
:param request:
:param exc:
:return:
"""
logger.error(f"参数查询异常\nURL:{request.url}\nHeaders:{request.headers}\n{traceback.format_exc()}")
return JSONResponse(
status_code=status.HTTP_400_BAD_REQUEST,
content={"code": 400, "data": {"tip": exc.err_desc}, "message": "fail"},
)
@app.exception_handler(TokenAuthError)
async def token_exception_handler(request: Request, exc: TokenAuthError):
logger.error(f"参数查询异常\nURL:{request.url}\nHeaders:{request.headers}\n{traceback.format_exc()}")
return JSONResponse(
status_code=status.HTTP_400_BAD_REQUEST,
content={"code": 400, "data": None, "message": exc.err_desc},
)
# 捕获参数 验证错误
@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request: Request, exc: RequestValidationError):
"""
捕获请求参数 验证错误
:param request:
:param exc:
:return:
"""
logger.error(f"参数错误\nURL:{request.url}\nHeaders:{request.headers}\n{traceback.format_exc()}")
return JSONResponse(
status_code=status.HTTP_400_BAD_REQUEST,
content=jsonable_encoder({"code": 400, "data": {"tip": exc.errors()}, "body": exc.body, "message": "fail"}),
)
# 捕获全部异常
@app.exception_handler(Exception)
async def all_exception_handler(request: Request, exc: Exception):
logger.error(f"全局异常\nURL:{request.url}\nHeaders:{request.headers}\n{traceback.format_exc()}")
return JSONResponse(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
content={"code": 500, "data": {"tip": "服务器错误"}, "message": "fail"},
)
# 捕获调用超限异常
# @app.exception_handler(HTTPException)
# async def rate_limit_handler(request, exc):
# if exc.status_code == 429:
# return JSONResponse(status_code=status.HTTP_429_TOO_MANY_REQUESTS,
# content={"code": 429, "data": "我还在处理您的问题,请稍后再试!", "message": "to many requests"},)
# return JSONResponse(
# status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
# content={"code": 500, "data": {"tip": "服务器错误"}, "message": "fail"},
# )
def register_cors(app: FastAPI):
"""
支持跨域
貌似发现了一个bug
https://github.com/tiangolo/fastapi/issues/133
:param app:
:return:
"""
app.add_middleware(
CORSMiddleware,
# allow_origins=['http://localhost:8081'], # 有效, 但是本地vue端口一直在变化, 接口给其他人用也不一定是这个端口
# allow_origins=['*'], # 无效 bug allow_origins=['http://localhost:8081']
allow_origin_regex='https?://.*', # 改成用正则就行了
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
def register_middleware(app: FastAPI):
"""
请求响应拦截 hook
https://fastapi.tiangolo.com/tutorial/middleware/
:param app:
:return:
"""
@app.middleware("http")
async def logger_request(request: Request, call_next):
# https://stackoverflow.com/questions/60098005/fastapi-starlette-get-client-real-ip
logger.info(f"访问记录:{request.method} url:{request.url}\nheaders:{request.headers.get('user-agent')}"
f"\nIP:{request.client.host}")
response = await call_next(request)
return response

@ -0,0 +1,23 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:19:33
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
路由汇总
"""
from fastapi import APIRouter
from api.v1 import auth
from api.v1 import chat
api_v1 = APIRouter()
api_v1.include_router(auth.router, tags=["鉴权相关"])
api_v1.include_router(chat.router, tags=["J-Med聊天"])

@ -0,0 +1,11 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:20:53
# @Author : leo liu
# @Version : 1.0
# @Description :
from .views import router
from .views import get_current_user

@ -0,0 +1,9 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/04 21:24:52
# @Author : leo liu
# @Version : 1.0
# @Description :

@ -0,0 +1,99 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : menu.py
# @Software : VSCode
# @Datetime : 2021/11/08 22:13:05
# @Author : leo liu
# @Version : 1.0
# @Description :
from typing import List, Optional
from loguru import logger
from sqlalchemy import func, desc
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import and_, or_
from pydantic.types import conint
from extensions.curd_base import CRUDBase
from models import Menu, role_menu
from ..schemas import menu_schema
class CRUDMenu(CRUDBase[Menu, menu_schema.MenuCreate, menu_schema.MenuUpdate]):
@staticmethod
def query_all(db: Session, *, col_val: str = "", is_delete: int = 0, page: int = 0, page_size: conint(le=50) = 20, order_by: str = "id", is_desc: bool = False) -> dict:
temp_page = (page - 1) * page_size
search = None
order_type = None
# 处理多个字段的模糊查询name
if col_val:
search = and_(Menu.is_delete == is_delete, or_(Menu.name.like('%' + col_val + "%"), Menu.path.like('%' + col_val + "%")))
else:
search = Menu.is_delete == is_delete
# 处理排序方式
# 利用属性名反射类属性
if is_desc:
order_type = desc(Menu.getAttrFromName(Menu, order_by))
else:
order_type = Menu.getAttrFromName(Menu, order_by)
# 查询数量
total = db.query(func.count(Menu.menu_id)).filter(search).scalar()
# 查询结果集
if page > 0:
query_obj = db.query(Menu).filter(search).order_by(order_type).offset(temp_page).limit(page_size).all()
else:
query_obj = db.query(Menu).filter(search).order_by(order_type).all()
items = [{
"menu_id": obj.menu_id,
"path": obj.path,
"name": obj.name,
"super_menu": obj.super_menu and obj.super_menu or ""
} for obj in query_obj]
return {
"items": items,
"total": total
}
def create(self, db: Session, *, obj_in: menu_schema.MenuCreate):
db_obj = Menu(
path = obj_in.path,
name = obj_in.name,
super_menu = obj_in.super_menu
)
db.add(db_obj)
db.commit()
# db.refresh(db_obj)
def sync_menus(self, db: Session, *, obj_arr: List):
for obj_in in obj_arr:
menu = db.query(Menu).filter(Menu.path == obj_in["path"]).first()
if (menu):
menu.name = obj_in["name"]
menu.path = obj_in["path"]
menu.super_menu = obj_in["super_menu"]
menu.is_delete = obj_in["is_delete"]
if (menu.is_delete):
db.query(role_menu).filter(role_menu.c.menu_id == menu.menu_id).delete()
else:
db_obj = Menu (
path = obj_in["path"],
name = obj_in["name"],
super_menu = obj_in["super_menu"]
)
db.add(db_obj)
db.commit()
def get_by_path(self, db: Session, *, path: str) -> Menu:
return db.query(Menu).filter(Menu.path == path).first()
crud_menu = CRUDMenu(Menu)

@ -0,0 +1,123 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : role.py
# @Software : VSCode
# @Datetime : 2021/11/15 21:25:46
# @Author : leo liu
# @Version : 1.0
# @Description :
from loguru import logger
from pydantic.types import conint
from sqlalchemy import func, desc
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import and_, or_
from extensions.curd_base import CRUDBase
from models import Role, user_role, role_menu
from .menu import crud_menu
from ..schemas import role_schema
class CRUDRole(CRUDBase[Role, role_schema.RoleCreate, role_schema.RoleUpdate]):
@staticmethod
def query_all(db: Session, *, col_val: str = "", is_delete: int = 0, page: int = 0, page_size: conint(le=50) = 20, order_by: str = "id", is_desc: bool = False) -> dict:
"""
查询角色列表
:param db:
:param col_val: 输入模糊查询参数值对应usernamenickname和email
:param is_delete: 输入参数值是否逻辑删除
:param page: 输入参数值分页页号为0时不分页
:param page_size: 输入参数值分页页宽page=0时无效
:param order_by: 输入参数值排序字段
:param is_desc: 排序顺序true为ascfalse为desc
:return: Role字典
"""
temp_page = (page - 1) * page_size
search = None
order_type = None
# 处理多个字段的模糊查询name
if col_val:
search = and_(Role.is_delete == is_delete, or_(Role.name.like('%' + col_val + "%"), Role.title.like('%' + col_val + "%")))
else:
search = Role.is_delete == is_delete
# 处理排序方式
# 利用属性名反射类属性
if is_desc:
order_type = desc(Role.getAttrFromName(Role, order_by))
else:
order_type = Role.getAttrFromName(Role, order_by)
# 查询数量
total = db.query(func.count(Role.role_id)).filter(search).scalar()
# 查询结果集
if page > 0:
query_obj = db.query(Role).filter(search).order_by(order_type).offset(temp_page).limit(page_size).all()
else:
query_obj = db.query(Role).filter(search).order_by(order_type).all()
items = [{
"id": obj.id,
"role_id": obj.role_id,
"name": obj.name,
"title": obj.title,
"menus": obj.menus,
"create_time": obj.create_time,
"is_delete": obj.is_delete,
"update_time": obj.update_time
} for obj in query_obj]
return {
"items": items,
"total": total
}
@staticmethod
def get_by_id(db: Session, *, role_id: str) -> Role:
return db.query(Role).filter(Role.role_id == role_id).first()
@staticmethod
def is_exist(db: Session, role_in: role_schema.BaseRole) -> bool:
role = db.query(Role).filter(or_(
Role.role_id == role_in.role_id,
Role.name == role_in.name,
Role.title == role_in.title
)).first()
if role:
return True
else:
return False
@staticmethod
def update(db: Session, *, obj_in: role_schema.RoleUpdate) -> Role:
db_obj = db.query(Role).filter(Role.role_id == obj_in.role_id).first()
if db_obj:
if (obj_in.title):
db_obj.title = obj_in.title
if (obj_in.menus):
db_obj.menus.clear()
for m in obj_in.menus:
menu = crud_menu.get_by_path(db, path=m['path'])
if (menu):
db_obj.menus.append(menu)
db_obj.is_delete = obj_in.is_delete
if (obj_in.is_delete):
db.query(user_role).filter(user_role.c.role_id == db_obj.role_id).delete()
db.query(role_menu).filter(role_menu.c.role_id == db_obj.role_id).delete()
db.commit()
db.refresh(db_obj)
return db_obj
crud_role = CRUDRole(Role)

@ -0,0 +1,216 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : user.py
# @Software : VSCode
# @Datetime : 2021/11/04 21:25:44
# @Author : leo liu
# @Version : 1.0
# @Description :
from datetime import datetime
from typing import Optional
from loguru import logger
from pydantic.types import conint
from sqlalchemy import func, desc
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import and_, or_, join
from core.security import get_password_hash, verify_password
from extensions.curd_base import CRUDBase
from models import User, Role, LoginHistory
from .role import crud_role
from ..schemas import user_schema
class CRUDUser(CRUDBase[User, user_schema.UserCreate, user_schema.UserUpdate]):
@staticmethod
def query_all(db: Session, *, col_val: str = "", is_delete: int = 0, role: str = "", page: int = 1, page_size: conint(le=50) = 20, order_by: str = "id", is_desc: bool = False) -> dict:
"""
查询用户列表
:param db:
:param page:
:param page_size:
:return:
"""
temp_page = (page - 1) * page_size
search = None
order_type = None
# 处理多个字段的模糊查询username、nickname、email
if col_val:
search = and_(User.is_delete == is_delete, or_(User.username.like('%' + col_val + "%"), User.nickname.like('%' + col_val + "%"), User.email.like('%' + col_val + "%")))
else:
search = User.is_delete == is_delete
# 处理角色查询role
if role:
search = and_(search, Role.role_id == role)
# 处理排序方式
# 利用属性名反射类属性
if is_desc:
order_type = desc(User.getAttrFromName(User, order_by))
else:
order_type = User.getAttrFromName(User, order_by)
# 查询数量
total = db.query(func.count(User.user_id)).outerjoin(User.roles).filter(search).scalar()
# 查询结果集
if page > 0: # page > 0 分页查询
query_obj = db.query(User).outerjoin(User.roles).filter(search).order_by(order_type).offset(temp_page).limit(page_size).all()
else: # page <= 0 全量查询
query_obj = db.query(User).outerjoin(User.roles).filter(search).order_by(order_type).all()
items = [{
"id": obj.id,
"user_id": obj.user_id,
"username": obj.username,
"nickname": obj.nickname,
"email": obj.email,
"avatar": obj.avatar,
"phone": obj.phone,
"gender": obj.gender,
"register_time": obj.register_time,
"last_login_time": obj.last_login_time,
"last_login_ip": obj.last_login_ip,
"wechat_openid": obj.wechat_openid,
"country": obj.country,
"province": obj.province,
"city": obj.city,
"roles": obj.roles,
"is_delete": obj.is_delete,
"update_time": obj.update_time
} for obj in query_obj]
return {
"items": items,
"total": total
}
@staticmethod
def get_by_email(db: Session, *, email: str) -> Optional[User]:
"""
通过email获取用户
参数里面的* 表示 后面调用的时候 要用指定参数的方法调用
正确调用方式
curd_user.get_by_email(db, email="xxx")
错误调用方式
curd_user.get_by_email(db, "xxx")
:param db:
:param email:
:return:
"""
return db.query(User).filter(User.email == email).first()
@staticmethod
def get_by_username(db: Session, *, username: str) -> Optional[User]:
"""
通过用户名获取用户
"""
return db.query(User).filter(User.username == username).first()
def authenticate(self, db: Session, *, username: str, password: str, ip: str) -> Optional[User]:
user = self.get_by_username(db, username=username)
if not user:
return None
if not verify_password(password, user.hashed_password):
return None
user.last_login_time = datetime.now()
user.last_login_ip = ip
login_history = LoginHistory(
user_id = user.user_id,
username = user.username,
login_time = user.last_login_time,
login_ipv4 = user.last_login_ip
)
user.login_histories.append(login_history)
db.commit()
db.refresh(user)
return user
def authenticate_by_email(self, db: Session, *, email: str, password: str) -> Optional[User]:
user = self.get_by_email(db, email=email)
if not user:
return None
if not verify_password(password, user.hashed_password):
return None
return user
@staticmethod
def is_active(user: User) -> bool:
return user.is_active == 1
@staticmethod
def is_delete(user: User) -> bool:
return user.is_delete == 1
@staticmethod
def is_exist(db: Session, user_in: user_schema.UserCreate) -> bool:
user = db.query(User).filter(User.username == user_in.username).first()
if user:
return True
else:
return False
@staticmethod
def create(db: Session, *, obj_in: user_schema.UserCreate) -> User:
db_user = User(
username=obj_in.username,
nickname=obj_in.nickname,
email=obj_in.email,
hashed_password=get_password_hash(obj_in.password),
q_limit_day=obj_in.q_limit_day,
tokens_limit=obj_in.tokens_limit,
# avatar=obj_in.avatar,
is_active=obj_in.is_active
)
for role_id in obj_in.roles:
role = crud_role.get_by_id(db, role_id=role_id)
if (role):
db_user.roles.append(role)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
@staticmethod
def update(db: Session, *, obj_in: user_schema.UserUpdate) -> User:
db_obj = db.query(User).filter(User.username == obj_in.username).first()
if db_obj:
db_obj.nickname = obj_in.nickname
db_obj.email = obj_in.email
db_obj.hashed_password = get_password_hash(obj_in.password) if obj_in.password else db_obj.hashed_password
if obj_in.q_day_limit >= 0:
db_obj.q_day_limit = obj_in.q_day_limit
if obj_in.tokens_limit >= 0:
db_obj.tokens_limit = obj_in.tokens_limit
db_obj.roles.clear()
for role_id in obj_in.roles:
role = crud_role.get_by_id(db, role_id=role_id)
if (role):
db_obj.roles.append(role)
db_obj.is_active = obj_in.is_active
db_obj.is_delete = obj_in.is_delete
db.commit()
db.refresh(db_obj)
return db_obj

@ -0,0 +1,8 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:27:57
# @Author : leo liu
# @Version : 1.0
# @Description :

@ -0,0 +1,35 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : menu_schema.py
# @Software : VSCode
# @Datetime : 2021/11/08 22:15:39
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
"""
from typing import Optional
from pydantic import BaseModel
class MenuCreate(BaseModel):
path: str
name: str
super_menu: Optional[str] = None
class MenuUpdate(BaseModel):
menu_id: str
name: Optional[str] = None
path: Optional[str] = None
super_menu: Optional[str] = None
is_delete: Optional[int] = None
class MenuQuery(BaseModel):
col_val: Optional[str] = ''
is_delete: Optional[int] = 0
page: Optional[int] = 0
page_size: Optional[int] = 20
order_by: Optional[str] = 'id'
is_desc: Optional[bool] = False

@ -0,0 +1,35 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : role_schema.py
# @Software : VSCode
# @Datetime : 2021/11/13 21:51:02
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
"""
from typing import List, Optional
from pydantic import BaseModel
class BaseRole(BaseModel):
role_id: Optional[str] = None
name: Optional[str] = None
title: Optional[str] = ''
is_delete: Optional[int] = 0
class RoleCreate(BaseRole):
name: str
title: str
class RoleUpdate(BaseRole):
title: Optional[str] = None
menus: Optional[List] = None
class RoleQuery(BaseRole):
col_val: Optional[str] = ''
page: Optional[int] = 0
page_size: Optional[int] = 20
order_by: Optional[str] = 'id'
is_desc: Optional[bool] = False

@ -0,0 +1,20 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/7/10 17:01
# @Author : CoderCharm
# @File : token_schema.py
# @Software: PyCharm
# @Desc :
"""
"""
from typing import Optional
from pydantic import BaseModel
class Token(BaseModel):
token: str
class TokenPayload(BaseModel):
sub: Optional[int] = None

@ -0,0 +1,61 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/7/7 16:23
# @Author : CoderCharm
# @File : user_schema.py
# @Software: PyCharm
# @Desc :
"""
"""
from typing import Optional
from pydantic import BaseModel, EmailStr, AnyHttpUrl
class UserBase(BaseModel):
username: str
is_active: Optional[bool] = True
is_delete: Optional[int] = 0
class UserAuth(UserBase):
username: str
password: str
class UserCreate(UserBase):
password: str
nickname: Optional[str] = None
email: Optional[EmailStr] = None
phone: Optional[str] = None
# avatar: Optional[AnyHttpUrl] = None
gender: Optional[int] = 0
wechat_openid: Optional[str] = None
country: Optional[str] = None
province: Optional[str] = None
city: Optional[str] = None
q_limit_day: Optional[int] = 0
tokens_limit: Optional[int] = 0
roles: Optional[list] = []
class UserUpdate(UserBase):
password: Optional[str] = None
nickname: Optional[str] = None
email: Optional[EmailStr] = None
phone: Optional[str] = None
avatar: Optional[AnyHttpUrl] = None
gender: Optional[int] = 0
wechat_openid: Optional[str] = None
country: Optional[str] = None
province: Optional[str] = None
city: Optional[str] = None
q_limit_day: Optional[int] = -1
tokens_limit: Optional[int] = -1
roles: Optional[list] = []
class UserQuery(BaseModel):
col_val: Optional[str] = ''
is_delete: Optional[int] = 0
role: Optional[str] = ''
page: Optional[int] = 0
page_size: Optional[int] = 20
order_by: Optional[str] = 'id'
is_desc: Optional[bool] = False

@ -0,0 +1,322 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : views.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:24:24
# @Author : leo liu
# @Version : 1.0
# @Description :
from typing import Any, List, Optional, Union
from datetime import datetime, timedelta
from fastapi import APIRouter, Depends, Header, Request
from sqlalchemy.orm.session import Session
from sqlalchemy.sql.functions import count
from core.settings import config
from core import security
from utils import response_code
from utils.messages import msg
from utils import custom_exc
from db.session import get_db
from models import User, Menu
from extensions import logger
from .schemas import user_schema, role_schema, menu_schema
from .crud.user import CRUDUser
from .crud.role import crud_role
from .crud.menu import crud_menu
router = APIRouter()
def get_current_user(
db: Session = Depends(get_db), token: Optional[str] = Header(None)
) -> User:
"""
根据header中token 获取当前用户
:param db:
:param token:
:return:
"""
if not token:
raise custom_exc.TokenAuthError(err_desc='headers not found token')
crud_user = CRUDUser(User)
token_data = security.check_jwt_token(token)
user = crud_user.get(db, id=token_data.sub)
if not user:
raise custom_exc.UserNotFound(err_desc="user not found")
return user
@router.post("/auth/login", summary="登录")
async def auth_login(
*,
db: Session = Depends(get_db),
user_info: user_schema.UserAuth,
request: Request
) -> Any:
crud_user = CRUDUser(User)
# 验证用户
user = crud_user.authenticate(db, username=user_info.username, password=user_info.password, ip=request.client.host)
if not user:
return response_code.resp_200(message=msg.MSG_WRONG_USERINFO)
elif not crud_user.is_active(user):
return response_code.resp_200(message=msg.MSG_USER_INACTIVE)
elif crud_user.is_delete(user):
return response_code.resp_200(message=msg.MSG_USER_UNSIGNUP)
access_token_expires = timedelta(minutes=config.ACCESS_TOKEN_EXPIRE_MINUTES)
logger.info(f"用户[{user.username}]登录成功")
return response_code.resp_200(data={
"message": msg.MSG_USER_LOGIN_SUCCESS,
"token": security.create_access_token(user.id, expires_delta=access_token_expires),
})
@router.post("/auth/userinfo", summary="个人信息")
async def auth_info(
*,
current_user: User = Depends(get_current_user)
) -> Any:
"""
获取用户信息
:param db:
:param current_user:
:return:
"""
menus = []
roles = []
for role in current_user.roles:
for menu in role.menus:
menus.append(menu.path)
roles.append(role.name)
return response_code.resp_200(data={
"username": current_user.username,
"nickname": current_user.nickname,
"email": current_user.email,
"avatar": current_user.avatar,
"roles": roles,
"menus": menus
})
@router.post("/auth/logout", summary="登出")
async def auth_logout(
*,
current_user: User = Depends(get_current_user)
):
"""
用户退出
:param current_user:
"""
logger.info(f"用户[{current_user.username}]退出登录")
return response_code.resp_200(message="logout success")
@router.post("/auth/users", summary="用户列表")
async def user_list(
*,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
query: user_schema.UserQuery = None
):
"""
用户列表
"""
crud_user = CRUDUser(User)
is_accessable = False
for role in current_user.roles:
for menu in role.menus:
if menu.path == "/system/auth/user":
is_accessable = True
break
if not is_accessable:
logger.info(f"无权查询用户列表->用户id:{current_user.username}")
return response_code.resp_200(data=None)
else:
logger.info(f"查询用户列表->用户id:{current_user.username}当前页{query.page}长度{query.page_size}")
response_result = crud_user.query_all(db, col_val=query.col_val, is_delete=query.is_delete, role=query.role, page=query.page, page_size=query.page_size, order_by=query.order_by, is_desc=query.is_desc)
return response_code.resp_200(data=response_result)
@router.post("/auth/roles", summary="角色列表")
async def role_list(
*,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
query: role_schema.RoleQuery = None
):
"""
角色列表
"""
is_accessable = False
for role in current_user.roles:
for menu in role.menus:
if menu.path == "/system/auth/role":
is_accessable = True
break
if not is_accessable:
logger.info(f"无权查询角色列表->用户id:{current_user.username}")
return response_code.resp_200(data=None)
else:
logger.info(f"查询角色列表->用户id:{current_user.username}当前页{query.page}长度{query.page_size}")
response_result = crud_role.query_all(db, col_val=query.col_val, is_delete=query.is_delete, page=query.page, page_size=query.page_size, order_by=query.order_by, is_desc=query.is_desc)
return response_code.resp_200(data=response_result)
@router.post("/auth/newuser", summary="创建用户")
async def new_user(
*,
db: Session = Depends(get_db),
# token: Optional[str] = Header(None),
user: user_schema.UserCreate
) -> Any:
"""
创建用户
"""
# logger.info(f"创建新用户->用户id:{user.username}")
crud_user = CRUDUser(User)
if (crud_user.is_exist(db, user_in=user)):
logger.info(f"创建新用户失败,用户已存在->帐号:{user.username}")
return response_code.resp_5010(message="user already exist")
user = crud_user.create(db, obj_in=user)
if (user):
logger.info(f"创建新用户成功->帐号:{user.username}")
return response_code.resp_200(data=user, message="success created user")
else:
logger.info(f"创建新用户失败->帐号:{user.username}")
return response_code.resp_5010(data=None, message="failed created user")
@router.post("/auth/updateuser", summary="修改用户/逻辑删除用户")
async def update_user(
*,
db: Session = Depends(get_db),
token: Optional[str] = Header(None),
user: user_schema.UserUpdate
) -> Any:
"""
创建用户
"""
# logger.info(f"创建新用户->用户id:{user.username}")
crud_user = CRUDUser(User)
if (not crud_user.is_exist(db, user)):
logger.info(f"修改用户失败,用户不存在->用户id:{user.username}")
return response_code.resp_5010(message="user not exist")
user = crud_user.update(db, obj_in=user)
if (user):
logger.info(f"修改用户成功->用户id:{user.username}")
return response_code.resp_200(data=user, message="success updated user")
else:
logger.info(f"修改用户失败->用户id:{user.username}")
return response_code.resp_5010(data=None, message="failed updated user")
@router.post("/auth/newrole", summary="创建角色")
async def new_role(
*,
db: Session = Depends(get_db),
token: Optional[str] = Header(None),
role: role_schema.RoleCreate
) -> Any:
"""
创建角色
"""
if (crud_role.is_exist(db, role_in=role)):
logger.info(f"创建新角色失败,角色已存在->角色名称:{role.name}")
return response_code.resp_5010(message="role already exist")
role = crud_role.create(db, obj_in=role)
if (role):
logger.info(f"创建新角色成功->角色标题:{role.title}")
return response_code.resp_200(data=role, message="success created role")
else:
logger.info(f"创建新角色失败->角色标题:{role.title}")
return response_code.resp_5010(data=None, message="failed created role")
@router.post("/auth/roleinfo", summary="角色信息")
async def role_info(
*,
db: Session = Depends(get_db),
token: Optional[str] = Header(None),
query: role_schema.BaseRole
) -> Any:
"""
获取角色信息
:param db:
:param token:
:param role_id:
:return:
"""
role = crud_role.get_by_id(db=db, role_id=query.role_id)
if(role):
return response_code.resp_200(data={
"role_id": query.role_id,
"name": role.name,
"title": role.title,
"menus": role.menus,
"is_delete": role.is_delete
})
return response_code.resp_200(data=None)
@router.post("/auth/updaterole", summary="修改角色/逻辑删除角色")
async def update_role(
*,
db: Session = Depends(get_db),
token: Optional[str] = Header(None),
role: role_schema.RoleUpdate
) -> Any:
"""
修改角色
"""
role = crud_role.update(db, obj_in=role)
if (role):
logger.info(f"修改角色成功->角色名:{role.name}")
return response_code.resp_200(data=role, message="success updated role")
else:
logger.info(f"修改角色失败->角色名:{role.name}")
return response_code.resp_5010(data=None, message="failed updated role")
@router.post("/auth/menus", summary="菜单列表")
async def menu_list(
*,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
query: menu_schema.MenuQuery = None
):
"""
菜单列表
"""
logger.info(f"查询菜单列表->用户id:{current_user.username}当前页{query.page}长度{query.page_size}")
response_result = crud_menu.query_all(db, col_val=query.col_val, is_delete=query.is_delete, page=query.page, page_size=query.page_size, order_by=query.order_by, is_desc=query.is_desc)
return response_code.resp_200(data=response_result)
@router.post("/auth/syncmenus", summary="同步菜单")
async def sync_menus(
*,
db: Session = Depends(get_db),
token: Optional[str] = Header(None),
data: List = None
):
if (data and data.count):
crud_menu.sync_menus(db, obj_arr = data)
response_result = crud_menu.query_all(db, is_delete=0)
return response_code.resp_200(data=response_result)

@ -0,0 +1,10 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2023/03/20 15:54:34
# @Author : leo liu
# @Version : 1.0
# @Description :
from .views import router

@ -0,0 +1,96 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : chat.py
# @Software : VSCode
# @Datetime : 2023/03/23 11:25:10
# @Author : leo liu
# @Version : 1.0
# @Description :
from datetime import date
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import and_
from typing import Any
from extensions.curd_base import CRUDBase
from models import ChatHistory, ChatCountDay
from ..schemas import chat_schema
from models import User, ChatCountDay, Settings
class CRUDChat(CRUDBase[ChatHistory, ChatCountDay, chat_schema.Chat]):
'''
获取openai_key
'''
def get_openai_keys(self, db: Session) -> Any:
openai_keys = []
settings = db.query(Settings).filter(Settings.key == 'openai_key')
if settings:
for setting in settings:
openai_keys.append(setting.value)
return openai_keys
'''
获取默认max_tokens
'''
def get_default_max_tokens(self, db:Session) -> int:
default_max_tokens = 2000
setting = db.query(Settings).filter(Settings.key == 'default_max_tokens').first()
if setting:
if (str.isdigit(setting.value)):
limit = int(setting.value)
if limit > 0 and limit <= 2048:
default_max_tokens = limit
return default_max_tokens
'''
获取当前用户当天的提问次数
'''
def get_chat_count(self, db: Session, user: User) -> int:
q_date = date.today()
chat_count_day = db.query(ChatCountDay).filter(and_(ChatCountDay.user_id == user.user_id, ChatCountDay.q_time == q_date)).first()
if not chat_count_day:
return -1
return chat_count_day.q_times
'''
更新当前用户当天的提问次数
'''
def update_chat_count(self, db: Session, user: User):
q_date = date.today()
chat_count_day = db.query(ChatCountDay).filter(and_(ChatCountDay.user_id == user.user_id, ChatCountDay.q_time == q_date)).first()
if not chat_count_day:
chat_count_day = ChatCountDay(
user_id = user.user_id,
q_time = q_date,
q_times = 1
)
user.chat_count_day.append(chat_count_day)
else:
chat_count_day.q_times = chat_count_day.q_times + 1
db.commit()
db.refresh(user)
'''
记录用户会话
'''
def new_chat(self, db: Session, user: User, q: str, a: str):
chat_history = ChatHistory(
user_id = user.user_id,
username = user.username,
q_content = q,
a_content = a
)
user.chat_history.append(chat_history)
db.commit()
db.refresh(user)

@ -0,0 +1,9 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2023/03/20 23:15:18
# @Author : leo liu
# @Version : 1.0
# @Description :

@ -0,0 +1,17 @@
import openai
class CTRLChat():
'''
OpenAI api调用控制类
'''
def chat(self, key:str, q:str, tokens_limit:int) -> str:
openai.api_key = key
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": q}
],
max_tokens=tokens_limit
)
return completion.choices[0].message.content

@ -0,0 +1,13 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : chat_schema.py
# @Software : VSCode
# @Datetime : 2023/03/20 23:31:03
# @Author : leo liu
# @Version : 1.0
# @Description :
from pydantic import BaseModel
class Chat(BaseModel):
question: str

@ -0,0 +1,84 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : views.py
# @Software : VSCode
# @Datetime : 2023/03/20 15:56:34
# @Author : leo liu
# @Version : 1.0
# @Description :
from typing import Optional, Any
from fastapi import APIRouter, Depends, Header
from sqlalchemy.orm.session import Session
from extensions import logger
from core import security
from utils import response_code, custom_exc
from db.session import get_db
from models import User, ChatHistory
from .schemas import chat_schema
from .ctrl.chat import CTRLChat
from ..auth.crud.user import CRUDUser
from .crud.chat import CRUDChat
router = APIRouter()
def get_current_user(
db: Session = Depends(get_db), token: Optional[str] = Header(None)
) -> User:
"""
根据header中token 获取当前用户
:param db:
:param token:
:return:
"""
if not token:
raise custom_exc.TokenAuthError(err_desc='headers not found token')
crud_user = CRUDUser(User)
token_data = security.check_jwt_token(token)
user = crud_user.get(db, id=token_data.sub)
if not user:
raise custom_exc.UserNotFound(err_desc="user not found")
return user
@router.post("/chat/ask", summary="提问")
async def ask(
*,
db: Session = Depends(get_db),
security: Optional[bool] = Depends(security.check_jwt_token),
current_user: User = Depends(get_current_user),
chat_info:chat_schema.Chat = None
) -> Any:
if not chat_info:
return response_code.resp_200(data="", message="no chat info")
crud_chat = CRUDChat(ChatHistory)
ctrl_chat = CTRLChat()
q_times = crud_chat.get_chat_count(db, current_user)
q_limit_day = current_user.q_limit_day
if ((q_limit_day > 0 and q_times >= q_limit_day) or q_limit_day < 0):
return response_code.resp_200(data="您今天的提问次数已达到限额,欢迎您明日再来!", message="success chat with j-med")
openai_keys = crud_chat.get_openai_keys(db)
default_max_tokens = crud_chat.get_default_max_tokens(db)
if not openai_keys or len(openai_keys) <= 0:
return response_code.resp_200(data="", message="no openai_key defined")
key = openai_keys[0]
tokens_limit = current_user.tokens_limit
if tokens_limit == 0:
tokens_limit = default_max_tokens
answer = ctrl_chat.chat(key, chat_info.question, tokens_limit)
crud_chat.update_chat_count(db, current_user)
crud_chat.new_chat(db, current_user, chat_info.question, answer)
return response_code.resp_200(data=answer, message="success chat with j-med")

@ -0,0 +1,9 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:31:26
# @Author : leo liu
# @Version : 1.0
# @Description :

@ -0,0 +1,71 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : security.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:33:20
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
token password 验证
pip install python-jose
pip install passlib
"""
from datetime import datetime, timedelta
from typing import Any, Union, Optional
from fastapi import Depends, Header
from jose import jwt
from passlib.context import CryptContext
from pydantic import ValidationError
from core.settings import config
from utils import custom_exc
from api.v1.auth.schemas import token_schema
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def create_access_token(
subject: Union[str, Any], expires_delta: timedelta = None
) -> str:
if expires_delta:
expire = datetime.utcnow() + expires_delta
else:
expire = datetime.utcnow() + timedelta(
minutes=config.ACCESS_TOKEN_EXPIRE_MINUTES
)
to_encode = {"exp": expire, "sub": str(subject)}
encoded_jwt = jwt.encode(to_encode, config.SECRET_KEY, algorithm=config.JWT_ALGORITHM)
return encoded_jwt
def verify_password(plain_password: str, hashed_password: str) -> bool:
return pwd_context.verify(plain_password, hashed_password)
def get_password_hash(password: str) -> str:
return pwd_context.hash(password)
def check_jwt_token(
token: Optional[str] = Header(None)
) -> Union[str, Any]:
"""
只解析验证token
:param token:
:return:
"""
try:
payload = jwt.decode(
token,
config.SECRET_KEY, algorithms=config.JWT_ALGORITHM
)
return token_schema.TokenPayload(**payload)
except (jwt.JWTError, ValidationError, AttributeError):
raise custom_exc.TokenAuthError(err_desc="access token fail")

@ -0,0 +1,21 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:01:05
# @Author : leo liu
# @Version : 1.0
# @Description :
import os
# 获取环境变量
env = os.getenv("ENV", "")
if env:
# 如果有虚拟环境 则是 生产环境
print("----------生产环境启动------------")
from .production_config import config
else:
# 没有则是开发环境
print("----------开发环境启动------------")
from .development_config import config

@ -0,0 +1,48 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/6/9 14:47
# @Author : CoderCharm
# @File : development_config.py
# @Software: PyCharm
# @Desc :
"""
开发环境配置
"""
from typing import Optional
from pydantic import BaseSettings
from urllib.parse import quote_plus as urlquote
import os
class Config(BaseSettings):
# 文档地址
DOCS_URL: str = "/api/v1/docs"
# # 文档关联请求数据接口
OPENAPI_URL: str = "/api/v1/openapi.json"
# 禁用 redoc 文档
REDOC_URL: Optional[str] = None
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8
JWT_ALGORITHM: str = "HS256"
SECRET_KEY: str = 'koelndom'
# 配置你的Mysql环境
MYSQL_USERNAME: str = 'root'
# MYSQL_USERNAME: str = 'bireport'
MYSQL_PASSWORD: str = "1qazxsw2"
# MYSQL_PASSWORD: str = "Jiahui@0108"
# MYSQL_HOST: Union[AnyHttpUrl, IPvAnyAddress] = "192.168.0.112"
MYSQL_HOST: str = "120.55.81.57"
# MYSQL_HOST: str = "rm-uf6d1660v738e34f6vo.mysql.rds.aliyuncs.com"
MYSQL_DATABASE: str = 'jmedchat'
# Mysql地址
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{urlquote(MYSQL_PASSWORD)}@" \
f"{MYSQL_HOST}/{MYSQL_DATABASE}?charset=utf8"
os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890"
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890"
config = Config()

@ -0,0 +1,49 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/6/16 10:15
# @Author : CoderCharm
# @File : production_config.py
# @Software: PyCharm
# @Desc :
"""
生产环境
我这种是一种方式简单直观
还有一种是服务一个固定路径放一个配置文件如 /etc/conf xxx.ini 或者 xxx.py文件
然后项目默认读取 /etc/conf 目录下的配置文件能读取则为生产环境
读取不到则为开发环境开发环境配置可以直接写在代码里面(或者配置ide环境变量)
服务器上设置 ENV 环境变量
"""
import os
from typing import Union, Optional
from pydantic import AnyHttpUrl, BaseSettings, IPvAnyAddress
class Config(BaseSettings):
# 文档地址 成产环境可以关闭 None
DOCS_URL: Optional[str] = "/api/v1/docs"
# # 文档关联请求数据接口 成产环境可以关闭 None
OPENAPI_URL: Optional[str] = "/api/v1/openapi.json"
# 禁用 redoc 文档
REDOC_URL: Optional[str] = None
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8 # 8 天
SECRET_KEY: str = '-*&^)()sd(*A%&^aWEQaasda_asdasd*&*)(asd%$#'
MYSQL_USERNAME: str = os.getenv("MYSQL_USER", "root")
MYSQL_PASSWORD: str = os.getenv("MYSQL_PASSWORD", "1qaz@WSX")
MYSQL_HOST: Union[AnyHttpUrl, IPvAnyAddress] = os.getenv("MYSQL_HOST", "120.55.81.57")
MYSQL_DATABASE: str = 'chat'
# Mysql地址
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@" \
f"{MYSQL_HOST}/{MYSQL_DATABASE}?charset=utf8mb4"
config = Config()

@ -0,0 +1,8 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/03 21:36:56
# @Author : leo liu
# @Version : 1.0
# @Description :

@ -0,0 +1,47 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : base_class.py
# @Software : VSCode
# @Datetime : 2021/11/04 21:27:43
# @Author : leo liu
# @Version : 1.0
# @Description :
import uuid
from datetime import datetime
from sqlalchemy import Column, Integer, DateTime
from sqlalchemy.sql import func
from sqlalchemy.ext.declarative import as_declarative, declared_attr
@as_declarative()
class Base:
# 通用的字段
id = Column(Integer, unique=True, index=True, primary_key=True, autoincrement=True)
create_time = Column(DateTime, default=datetime.now, server_default=func.now(), comment="创建时间")
update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, server_default=func.now(),
server_onupdate=func.now(), comment="更新时间")
is_delete = Column(Integer, default=0, comment="逻辑删除:0=未删除,1=删除", server_default='0')
__name__: str
# Generate __tablename__ automatically
@declared_attr
def __tablename__(cls) -> str:
import re
# 如果没有指定__tablename__ 则默认使用model类名转换表名字
name_list = re.findall(r"[A-Z][a-z\d]*", cls.__name__)
# 表名格式替换成 下划线_格式 如 MallUser 替换成 mall_user
return "_".join(name_list).lower()
def getAttrFromName(self, attrName):
if hasattr(self, attrName):
return getattr(self, attrName)
else:
return getattr(self, "id")
def gen_uuid() -> str:
# 生成uuid
# https://stackoverflow.com/questions/183042/how-can-i-use-uuids-in-sqlalchemy?rq=1
return uuid.uuid4().hex

@ -0,0 +1,31 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : session.py
# @Software : VSCode
# @Datetime : 2021/11/04 15:49:56
# @Author : leo liu
# @Version : 1.0
# @Description :
from typing import Generator
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from core.settings import config
engine = create_engine(
config.SQLALCHEMY_DATABASE_URI
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
def get_db() -> Generator:
try:
db = SessionLocal()
yield db
finally:
db.close()

@ -0,0 +1,17 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:17:10
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
其他扩展文件全局对象
"""
from .logger import logger

@ -0,0 +1,78 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/7/7 14:08
# @Author : CoderCharm
# @File : curd_base.py
# @Software: PyCharm
# @Desc :
"""
"""
from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, Union
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
from sqlalchemy.orm import Session
from db.base_class import Base
ModelType = TypeVar("ModelType", bound=Base)
CreateSchemaType = TypeVar("CreateSchemaType", bound=BaseModel)
UpdateSchemaType = TypeVar("UpdateSchemaType", bound=BaseModel)
class CRUDBase(Generic[ModelType, CreateSchemaType, UpdateSchemaType]):
def __init__(self, model: Type[ModelType]):
"""
CRUD object with default methods to Create, Read, Update, Delete (CRUD).
**Parameters**
* `model`: A SQLAlchemy model class
* `schema`: A Pydantic model (schema) class
"""
self.model = model
def get(self, db: Session, id: Any) -> Optional[ModelType]:
return db.query(self.model).filter(self.model.id == id, self.model.is_delete == 0).first()
def get_multi(
self, db: Session, *, page: int = 0, page_size: int = 100
) -> List[ModelType]:
temp_page = (page - 1) * page_size
return db.query(self.model).filter(self.model.is_delete == 0).offset(temp_page).limit(page_size).all()
def create(self, db: Session, *, obj_in: CreateSchemaType) -> ModelType:
obj_in_data = jsonable_encoder(obj_in)
db_obj = self.model(**obj_in_data) # type: ignore
db.add(db_obj)
db.commit()
db.refresh(db_obj)
return db_obj
def update(
self,
db: Session,
*,
db_obj: ModelType,
obj_in: Union[UpdateSchemaType, Dict[str, Any]]
) -> ModelType:
obj_data = jsonable_encoder(db_obj)
if isinstance(obj_in, dict):
update_data = obj_in
else:
update_data = obj_in.dict(exclude_unset=True)
for field in obj_data:
if field in update_data:
setattr(db_obj, field, update_data[field])
db.add(db_obj)
db.commit()
db.refresh(db_obj)
return db_obj
def remove(self, db: Session, *, id: int) -> ModelType:
obj = db.query(self.model).filter(self.model.id == id).update({self.model.is_delete: 1})
# db.delete(obj)
db.commit()
return obj

@ -0,0 +1,38 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : logger.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:17:17
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
日志文件配置
# 本来是想 像flask那样把日志对象挂载到app对象上作者建议直接使用全局对象
https://github.com/tiangolo/fastapi/issues/81#issuecomment-473677039
"""
import os
import time
from loguru import logger
basedir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 定位到log日志文件
log_path = os.path.join(basedir, 'logs')
if not os.path.exists(log_path):
os.mkdir(log_path)
log_path = os.path.join(log_path, f'{time.strftime("%Y-%m-%d")}.log')
# 日志简单配置
logger.add(log_path, rotation="12:00", retention="5 days", enqueue=True)
__all__ = ["logger"]

File diff suppressed because it is too large Load Diff

@ -0,0 +1,118 @@
2023-03-21 23:49:19.295 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-21 23:49:32.470 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-21 23:49:49.064 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-21 23:49:49.439 | INFO | api.v1.auth.views:auth_login:69 - 用户[13917323763]登录成功
2023-03-21 23:50:07.567 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-21 23:50:07.640 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAxMDQ5ODksInN1YiI6IjIifQ.Klb_gwMvZ4vHMLhs7VgS5K_fvg55h3DMkyfF7SdO4lM', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/connection.py", line 95, in create_connection
raise err
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/connection.py", line 85, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 700, in urlopen
self._prepare_proxy(conn)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 996, in _prepare_proxy
conn.connect()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 363, in connect
self.sock = conn = self._new_conn()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x7fdaf75f40a0>: Failed to establish a new connection: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/adapters.py", line 489, in send
resp = conn.urlopen(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen
return self.urlopen(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen
return self.urlopen(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen
retries = retries.increment(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fdaf75f40a0>: Failed to establish a new connection: [Errno 111] Connection refused')))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 516, in request_raw
result = _thread_context.session.request(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/sessions.py", line 701, in send
r = adapter.send(request, **kwargs)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/adapters.py", line 559, in send
raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fdaf75f40a0>: Failed to establish a new connection: [Errno 111] Connection refused')))
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 53, in ask
answer = chat(chat_info.question)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/ctrl/chat.py", line 5, in chat
completion = openai.ChatCompletion.create(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/chat_completion.py", line 25, in create
return super().create(*args, **kwargs)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.py", line 153, in create
response, _, api_key = requestor.request(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 216, in request
result = self.request_raw(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 528, in request_raw
raise error.APIConnectionError(
openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fdaf75f40a0>: Failed to establish a new connection: [Errno 111] Connection refused')))
2023-03-21 23:50:27.269 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1

@ -0,0 +1,376 @@
2023-03-23 10:22:36.315 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 10:22:44.876 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 10:23:42.389 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 10:23:42.608 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/auth/login
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '57', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context
self.dialect.do_execute(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
cursor.execute(statement, parameters)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute
result = self._query(query)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query
conn.query(q)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result
result.read()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read
first_packet = self.connection._read_packet()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet
packet.raise_for_error()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1054, "Unknown column 'nlt_user.q_limit_day' in 'field list'")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/auth/views.py", line 58, in auth_login
user = crud_user.authenticate(db, username=user_info.username, password=user_info.password)
File "/home/leo/Work/openai/JmedChat/app/api/v1/auth/crud/user.py", line 116, in authenticate
user = self.get_by_username(db, username=username)
File "/home/leo/Work/openai/JmedChat/app/api/v1/auth/crud/user.py", line 113, in get_by_username
return db.query(User).filter(User.username == username).first()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2819, in first
return self.limit(1)._iter().first()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2903, in _iter
result = self.session.execute(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1696, in execute
result = conn._execute_20(statement, params or {}, execution_options)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1631, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
return connection._execute_clauseelement(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1498, in _execute_clauseelement
ret = self._execute_context(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1862, in _execute_context
self._handle_dbapi_exception(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2043, in _handle_dbapi_exception
util.raise_(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context
self.dialect.do_execute(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
cursor.execute(statement, parameters)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute
result = self._query(query)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query
conn.query(q)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result
result.read()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read
first_packet = self.connection._read_packet()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet
packet.raise_for_error()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'nlt_user.q_limit_day' in 'field list'")
[SQL: SELECT nlt_user.id AS nlt_user_id, nlt_user.create_time AS nlt_user_create_time, nlt_user.update_time AS nlt_user_update_time, nlt_user.is_delete AS nlt_user_is_delete, nlt_user.user_id AS nlt_user_user_id, nlt_user.username AS nlt_user_username, nlt_user.hashed_password AS nlt_user_hashed_password, nlt_user.nickname AS nlt_user_nickname, nlt_user.email AS nlt_user_email, nlt_user.avatar AS nlt_user_avatar, nlt_user.phone AS nlt_user_phone, nlt_user.gender AS nlt_user_gender, nlt_user.register_time AS nlt_user_register_time, nlt_user.last_login_time AS nlt_user_last_login_time, nlt_user.last_login_ip AS nlt_user_last_login_ip, nlt_user.register_ip AS nlt_user_register_ip, nlt_user.wechat_openid AS nlt_user_wechat_openid, nlt_user.country AS nlt_user_country, nlt_user.province AS nlt_user_province, nlt_user.city AS nlt_user_city, nlt_user.q_limit_day AS nlt_user_q_limit_day, nlt_user.tokens_limit AS nlt_user_tokens_limit, nlt_user.is_active AS nlt_user_is_active
FROM nlt_user
WHERE nlt_user.username = %(username_1)s
LIMIT %(param_1)s]
[parameters: {'username_1': '13917323763', 'param_1': 1}]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
2023-03-23 10:26:56.423 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 10:26:56.947 | INFO | api.v1.auth.views:auth_login:69 - 用户[13917323763]登录成功
2023-03-23 10:56:08.175 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 10:56:08.535 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 10:56:13.811 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 10:56:13.812 | INFO | api.v1.auth.views:auth_login:58 - 127.0.0.1
2023-03-23 10:56:14.274 | INFO | api.v1.auth.views:auth_login:72 - 用户[13917323763]登录成功
2023-03-23 11:10:51.787 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 11:10:51.976 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 11:10:57.192 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 11:10:57.728 | INFO | api.v1.auth.views:auth_login:70 - 用户[13917323763]登录成功
2023-03-23 11:56:35.406 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 11:56:35.576 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 11:56:40.287 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 11:56:41.425 | INFO | api.v1.auth.views:auth_login:70 - 用户[13917323763]登录成功
2023-03-23 11:57:16.628 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 11:57:16.802 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '25', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/connection.py", line 95, in create_connection
raise err
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/connection.py", line 85, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 700, in urlopen
self._prepare_proxy(conn)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 996, in _prepare_proxy
conn.connect()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 363, in connect
self.sock = conn = self._new_conn()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x7f18b4d5b670>: Failed to establish a new connection: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/adapters.py", line 489, in send
resp = conn.urlopen(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen
return self.urlopen(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen
return self.urlopen(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen
retries = retries.increment(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/urllib3/util/retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f18b4d5b670>: Failed to establish a new connection: [Errno 111] Connection refused')))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 516, in request_raw
result = _thread_context.session.request(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/sessions.py", line 701, in send
r = adapter.send(request, **kwargs)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/requests/adapters.py", line 559, in send
raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f18b4d5b670>: Failed to establish a new connection: [Errno 111] Connection refused')))
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 56, in ask
answer = chat(chat_info.question)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/ctrl/chat.py", line 5, in chat
completion = openai.ChatCompletion.create(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/chat_completion.py", line 25, in create
return super().create(*args, **kwargs)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.py", line 153, in create
response, _, api_key = requestor.request(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 216, in request
result = self.request_raw(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 528, in request_raw
raise error.APIConnectionError(
openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f18b4d5b670>: Failed to establish a new connection: [Errno 111] Connection refused')))
2023-03-23 11:57:40.875 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 11:57:43.645 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '25', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context
self.dialect.do_execute(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
cursor.execute(statement, parameters)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute
result = self._query(query)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query
conn.query(q)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result
result.read()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read
first_packet = self.connection._read_packet()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet
packet.raise_for_error()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1525, "Incorrect DATE value: 'DATE'")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 58, in ask
crud_chat.update_chat_count(db, user = current_user)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/crud/chat.py", line 24, in update_chat_count
chat_count_day = db.query(ChatCountDay).filter(and_(ChatCountDay.user_id == user.user_id, ChatCountDay.q_time == q_date)).first()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2819, in first
return self.limit(1)._iter().first()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2903, in _iter
result = self.session.execute(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1696, in execute
result = conn._execute_20(statement, params or {}, execution_options)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1631, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
return connection._execute_clauseelement(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1498, in _execute_clauseelement
ret = self._execute_context(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1862, in _execute_context
self._handle_dbapi_exception(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2043, in _handle_dbapi_exception
util.raise_(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context
self.dialect.do_execute(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
cursor.execute(statement, parameters)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute
result = self._query(query)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query
conn.query(q)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result
result.read()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read
first_packet = self.connection._read_packet()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet
packet.raise_for_error()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1525, "Incorrect DATE value: 'DATE'")
[SQL: SELECT nlt_chat_count_day.id AS nlt_chat_count_day_id, nlt_chat_count_day.create_time AS nlt_chat_count_day_create_time, nlt_chat_count_day.update_time AS nlt_chat_count_day_update_time, nlt_chat_count_day.is_delete AS nlt_chat_count_day_is_delete, nlt_chat_count_day.user_id AS nlt_chat_count_day_user_id, nlt_chat_count_day.q_time AS nlt_chat_count_day_q_time, nlt_chat_count_day.q_times AS nlt_chat_count_day_q_times
FROM nlt_chat_count_day
WHERE nlt_chat_count_day.user_id = %(user_id_1)s AND nlt_chat_count_day.q_time = %(q_time_1)s
LIMIT %(param_1)s]
[parameters: {'user_id_1': '899a7ed3a88f46aaacd973ef20166ced', 'q_time_1': Date(), 'param_1': 1}]
(Background on this error at: https://sqlalche.me/e/14/e3q8)

@ -0,0 +1,904 @@
2023-03-23 12:16:52.924 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:16:55.764 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '25', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context
self.dialect.do_execute(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
cursor.execute(statement, parameters)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute
result = self._query(query)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query
conn.query(q)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result
result.read()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read
first_packet = self.connection._read_packet()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet
packet.raise_for_error()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1525, "Incorrect DATE value: 'DATE'")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 58, in ask
crud_chat.update_chat_count(db, user = current_user)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/crud/chat.py", line 24, in update_chat_count
chat_count_day = db.query(ChatCountDay).filter(and_(ChatCountDay.user_id == user.user_id, ChatCountDay.q_time == q_date)).first()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2819, in first
return self.limit(1)._iter().first()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2903, in _iter
result = self.session.execute(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1696, in execute
result = conn._execute_20(statement, params or {}, execution_options)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1631, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
return connection._execute_clauseelement(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1498, in _execute_clauseelement
ret = self._execute_context(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1862, in _execute_context
self._handle_dbapi_exception(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2043, in _handle_dbapi_exception
util.raise_(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1819, in _execute_context
self.dialect.do_execute(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
cursor.execute(statement, parameters)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 148, in execute
result = self._query(query)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 310, in _query
conn.query(q)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 548, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 775, in _read_query_result
result.read()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1156, in read
first_packet = self.connection._read_packet()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet
packet.raise_for_error()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1525, "Incorrect DATE value: 'DATE'")
[SQL: SELECT nlt_chat_count_day.id AS nlt_chat_count_day_id, nlt_chat_count_day.create_time AS nlt_chat_count_day_create_time, nlt_chat_count_day.update_time AS nlt_chat_count_day_update_time, nlt_chat_count_day.is_delete AS nlt_chat_count_day_is_delete, nlt_chat_count_day.user_id AS nlt_chat_count_day_user_id, nlt_chat_count_day.q_time AS nlt_chat_count_day_q_time, nlt_chat_count_day.q_times AS nlt_chat_count_day_q_times
FROM nlt_chat_count_day
WHERE nlt_chat_count_day.user_id = %(user_id_1)s AND nlt_chat_count_day.q_time = %(q_time_1)s
LIMIT %(param_1)s]
[parameters: {'user_id_1': '899a7ed3a88f46aaacd973ef20166ced', 'q_time_1': Date(), 'param_1': 1}]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
2023-03-23 12:26:44.878 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:46:06.681 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:47:38.758 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:47:39.289 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:48:10.680 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:48:13.346 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask
crud_chat.update_chat_count(db, user = current_user)
TypeError: CRUDChat.update_chat_count() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given
2023-03-23 12:49:32.139 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:49:35.845 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask
crud_chat.update_chat_count(db, user = current_user)
TypeError: CRUDChat.update_chat_count() got multiple values for argument 'user'
2023-03-23 12:51:58.105 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:52:00.557 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask
crud_chat.update_chat_count(db, current_user)
TypeError: CRUDChat.update_chat_count() takes 2 positional arguments but 3 were given
2023-03-23 12:52:34.618 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:52:38.269 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask
crud_chat.update_chat_count(db, current_user)
TypeError: CRUDChat.update_chat_count() takes 1 positional argument but 3 were given
2023-03-23 12:52:53.067 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:53:21.738 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:54:03.396 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:54:03.645 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:54:17.562 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:54:19.977 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask
crud_chat.update_chat_count(db, current_user)
TypeError: CRUDChat.update_chat_count() takes 2 positional arguments but 3 were given
2023-03-23 12:55:22.340 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:56:51.467 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:56:51.672 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:57:00.073 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:57:03.113 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask
crud_chat.update_chat_count(db=db, user=current_user)
TypeError: CRUDChat.update_chat_count() got multiple values for argument 'db'
2023-03-23 12:57:24.327 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:57:27.473 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask
crud_chat.update_chat_count(db, user=current_user)
TypeError: CRUDChat.update_chat_count() got multiple values for argument 'user'
2023-03-23 12:57:40.478 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 12:57:44.591 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 59, in ask
crud_chat.update_chat_count(db, current_user)
TypeError: CRUDChat.update_chat_count() takes 2 positional arguments but 3 were given
2023-03-23 12:59:23.358 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:11:52.024 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:11:52.480 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '44', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 58, in ask
q_times = crud_chat.get_chat_count()
TypeError: CRUDChat.get_chat_count() missing 2 required positional arguments: 'db' and 'user'
2023-03-23 13:12:36.709 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:12:36.954 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '44', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyMzUwMDEsInN1YiI6IjIifQ.7QDklT73W35-3Sy-1ZdM1aGFiY4644NQ9q7k_PjdmwQ', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 61, in ask
if ((q_limit_day > 0 and q_times >= q_limit_day) or q_limit_day < 0):
TypeError: '>' not supported between instances of 'NoneType' and 'int'
2023-03-23 13:14:20.494 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:16:00.033 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:16:26.872 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:16:35.009 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:22:02.077 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:22:02.697 | INFO | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功
2023-03-23 13:22:13.849 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:22:39.228 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:22:39.797 | INFO | api.v1.auth.views:auth_login:73 - 用户[13916742981]登录成功
2023-03-23 13:22:57.879 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:24:50.740 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:24:51.307 | INFO | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功
2023-03-23 13:25:03.582 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:31:00.457 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:31:01.100 | INFO | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功
2023-03-23 13:31:19.751 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:31:52.733 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 13:31:53.259 | INFO | api.v1.auth.views:auth_login:73 - 用户[13916742981]登录成功
2023-03-23 13:32:13.247 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 14:22:14.146 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 14:25:39.347 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 14:34:06.108 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 14:34:38.505 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 14:34:39.704 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '48', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAyNDA3MTMsInN1YiI6IjUifQ.XN2aGfqBllHuSaUfzwZJ-ZDHKsQ5wQ0yjr6wwNTNn2I', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 77, in ask
answer = chat(key, chat_info.question, tokens_limit)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/ctrl/chat.py", line 5, in chat
completion = openai.ChatCompletion.create(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/chat_completion.py", line 25, in create
return super().create(*args, **kwargs)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.py", line 153, in create
response, _, api_key = requestor.request(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 226, in request
resp, got_stream = self._interpret_response(result, stream)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 619, in _interpret_response
self._interpret_response_line(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/openai/api_requestor.py", line 682, in _interpret_response_line
raise self.handle_error_response(
openai.error.InvalidRequestError: This model's maximum context length is 4097 tokens. However, you requested 10020 tokens (20 in the messages, 10000 in the completion). Please reduce the length of the messages or completion.
2023-03-23 14:37:02.244 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 14:39:50.021 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 14:39:50.427 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 14:40:10.634 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-23 14:42:57.728 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1

@ -0,0 +1,77 @@
2023-03-24 11:21:33.249 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 11:21:36.393 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 11:21:50.795 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 11:21:51.682 | INFO | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功
2023-03-24 11:22:08.783 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 11:22:09.123 | ERROR | api:all_exception_handler:100 - 全局异常
URL:http://127.0.0.1:8010/api/v1/chat/ask
Headers:Headers({'host': '127.0.0.1:8010', 'connection': 'keep-alive', 'content-length': '26', 'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', 'accept': 'application/json', 'content-type': 'application/json', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODAzMTkzMTEsInN1YiI6IjIifQ.Oau8jQLeXTZNd7SImtQkQztdhKjpOn6CBbHbfcpu8fE', 'sec-ch-ua-platform': '"Linux"', 'origin': 'http://127.0.0.1:8010', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'http://127.0.0.1:8010/api/v1/docs', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8'})
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 81, in receive
return self.receive_nowait()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 76, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 41, in call_next
message = await recv_stream.receive()
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/anyio/streams/memory.py", line 101, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 63, in __call__
response = await self.dispatch_func(request, call_next)
File "/home/leo/Work/openai/JmedChat/app/api/__init__.py", line 143, in logger_request
response = await call_next(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 44, in call_next
raise app_exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/base.py", line 34, in coro
await self.app(scope, request.receive, send_stream.send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 92, in __call__
await self.simple_response(scope, receive, send, request_headers=headers)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 147, in simple_response
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 82, in __call__
raise exc
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 227, in app
raw_response = await run_endpoint_function(
File "/home/leo/Work/openai/JmedChat/venv/lib/python3.10/site-packages/fastapi/routing.py", line 160, in run_endpoint_function
return await dependant.call(**values)
File "/home/leo/Work/openai/JmedChat/app/api/v1/chat/views.py", line 79, in ask
answer = ctrl_chat.chat(key, chat_info.question, tokens_limit)
TypeError: CTRLChat.chat() takes 3 positional arguments but 4 were given
2023-03-24 11:22:28.858 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 11:22:42.693 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1

@ -0,0 +1,184 @@
2023-03-24 12:53:52.918 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 12:53:53.438 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 12:54:08.121 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/views/Login.html
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 12:54:08.361 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/favicon.ico
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:03:38.152 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/docs
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:03:38.360 | INFO | api:logger_request:140 - 访问记录:GET url:http://127.0.0.1:8010/api/v1/openapi.json
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:11:15.583 | INFO | api:logger_request:140 - 访问记录:OPTIONS url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:11:15.591 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/auth/login
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:11:20.246 | INFO | api.v1.auth.views:auth_login:73 - 用户[13917323763]登录成功
2023-03-24 13:11:27.111 | INFO | api:logger_request:140 - 访问记录:OPTIONS url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:11:27.121 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:11:50.724 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:09.163 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:12.053 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:12.054 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:12.054 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:12.055 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:23.149 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:23.435 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:23.503 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:23.816 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:23.991 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:24.212 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:24.361 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:24.480 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:24.611 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:24.924 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:24.964 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:25.331 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:25.560 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:25.781 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:28.620 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:28.803 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:29.028 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:29.162 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:29.419 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:29.509 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:29.736 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:29.869 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:29.985 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:30.178 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:30.359 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:30.575 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:30.608 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:30.829 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:31.064 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:31.283 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:31.383 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:31.599 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:31.707 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:31.952 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:32.036 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:32.175 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:32.355 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:32.571 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:32.672 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:32.881 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:33.010 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:33.113 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:33.249 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:33.455 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1
2023-03-24 13:13:33.569 | INFO | api:logger_request:140 - 访问记录:POST url:http://127.0.0.1:8010/api/v1/chat/ask
headers:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
IP:127.0.0.1

@ -0,0 +1,16 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : main.py
# @Software : VSCode
# @Datetime : 2021/11/03 16:59:04
# @Author : leo liu
# @Version : 1.0
# @Description :
from api import create_app
app = create_app()
if __name__ == "__main__":
import uvicorn
uvicorn.run(app='main:app', host="127.0.0.1", port=8010, reload=True, debug=True)

@ -0,0 +1,18 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/04 21:30:46
# @Author : leo liu
# @Version : 1.0
# @Description :
from db.base_class import Base
from db.session import engine
from .auth import User, Role, user_role, LoginHistory
from .menu import Menu, role_menu
from .chat import ChatHistory, ChatCountDay
from .settings import Settings
Base.metadata.create_all(engine)

@ -0,0 +1,79 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : user.py
# @Software : VSCode
# @Datetime : 2021/11/04 21:33:10
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
用户模型
"""
from datetime import datetime
from sqlalchemy import Column, Integer, VARCHAR, SmallInteger, DateTime, ForeignKey, Table
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from db.base_class import Base, gen_uuid
user_role = Table(
"nlt_userrole",
Base.metadata,
Column("id", Integer, unique=True, index=True, primary_key=True, autoincrement=True, comment="ID"),
Column("user_id", VARCHAR(32), ForeignKey("nlt_user.user_id"), nullable=False, primary_key=True, comment="用户id"),
Column("role_id", VARCHAR(32), ForeignKey("nlt_role.role_id"), nullable=False, primary_key=True, comment="角色id"),
Column("create_time", DateTime, default=datetime.now, server_default=func.now(), comment="创建时间")
)
class User(Base):
"""
用户表
"""
__tablename__ = "nlt_user"
user_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="用户id")
username = Column(VARCHAR(128), nullable=False, unique=True, comment="用户名(不可更改)")
hashed_password = Column(VARCHAR(128), nullable=False, comment="密码")
nickname = Column(VARCHAR(128), comment="用户昵称(显示用可更改)")
email = Column(VARCHAR(128), unique=True, comment="邮箱")
avatar = Column(VARCHAR(256), nullable=True, comment="用户头像")
phone = Column(VARCHAR(16), unique=True, index=True, nullable=True, comment="手机号")
gender = Column(SmallInteger, default=0, comment="性别 0=未知 1=男 2=女", server_default="0")
register_time = Column(DateTime, default=datetime.now, comment="注册事件")
last_login_time = Column(DateTime, default=datetime.now, comment="上次登录时间")
last_login_ip = Column(VARCHAR(64), nullable=True, comment="上次登录IP")
register_ip = Column(VARCHAR(64), nullable=True, comment="注册IP")
wechat_openid = Column(VARCHAR(64), nullable=True, comment="微信openId")
country = Column(VARCHAR(64), nullable=True, comment="国家")
province = Column(VARCHAR(64), nullable=True, comment="")
city = Column(VARCHAR(64), nullable=True, comment="")
q_limit_day = Column(Integer, default=0, comment="每日问题数量限制")
tokens_limit = Column(Integer, default=0, comment="字数限制")
# role_id = Column(Integer, comment="角色")
# role = relationship("Role", secondary=user_role)
is_active = Column(Integer, default=True, comment="用户是否激活 0=未激活 1=激活", server_default="1")
__table_args__ = ({'comment': '用户表'})
class Role(Base):
"""
角色表
"""
__tablename__ = "nlt_role"
role_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="角色id")
name = Column(VARCHAR(128), nullable=False, comment="角色名")
title = Column(VARCHAR(128), comment="角色名(中文)")
users = relationship("User", backref="roles", secondary=user_role)
# menu = relationship("Menu", secondary=menu.role_menu)
__table_args__ = ({'comment': '角色表'})
class LoginHistory(Base):
"""
登录记录
"""
__tablename__ = "nlt_login_history"
user_id = Column(VARCHAR(32), ForeignKey('nlt_user.user_id'))
username = Column(VARCHAR(128), comment="用户名")
login_time = Column(DateTime, default=datetime.now, comment="登录时间")
login_ipv4 = Column(VARCHAR(15), comment="登录ip")
user = relationship("User", backref="login_histories")

@ -0,0 +1,40 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : chat.py
# @Software : VSCode
# @Datetime : 2023/03/20 21:46:54
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
聊天模型
"""
from datetime import datetime
from sqlalchemy import Column, Integer, Text, Date, DateTime, ForeignKey, VARCHAR
from sqlalchemy.orm import relationship
from db.base_class import Base
class ChatHistory(Base):
"""
聊天记录
"""
__tablename__ = "nlt_chat_history"
user_id = Column(VARCHAR(32), ForeignKey('nlt_user.user_id'))
username = Column(VARCHAR(128), comment="用户名")
q_content = Column(Text, nullable=False, comment="提问内容")
a_content = Column(Text, nullable=False, comment="回答内容")
q_time = Column(DateTime, default=datetime.now, comment="提问时间")
user = relationship("User", backref="chat_history")
class ChatCountDay(Base):
"""
日聊天计数
"""
__tablename__ = "nlt_chat_count_day"
user_id = Column(VARCHAR(32), ForeignKey('nlt_user.user_id'))
q_time = Column(Date, default=datetime.now, comment="聊天计数日期")
q_times = Column(Integer, default=0, comment="聊天计数")
user = relationship("User", backref="chat_count_day")

@ -0,0 +1,40 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : menu.py
# @Software : VSCode
# @Datetime : 2021/11/08 21:50:31
# @Author : leo liu
# @Version : 1.0
# @Description : 前端菜单
"""
菜单模型
"""
from datetime import datetime
from sqlalchemy import Column, Integer, VARCHAR, ForeignKey, Table, DateTime
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from db.base_class import Base, gen_uuid
role_menu = Table(
"nlt_rolemenu",
Base.metadata,
Column("id", Integer, unique=True, index=True, primary_key=True, autoincrement=True, comment="ID"),
Column("role_id", VARCHAR(32), ForeignKey("nlt_role.role_id"), nullable=False, primary_key=True, comment="角色id"),
Column("menu_id", VARCHAR(32), ForeignKey("nlt_menu.menu_id"), nullable=False, primary_key=True, comment="菜单id"),
Column("create_time", DateTime, default=datetime.now, server_default=func.now(), comment="创建时间")
)
class Menu(Base):
"""
菜单表
"""
__tablename__ = "nlt_menu"
menu_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="菜单id")
path = Column(VARCHAR(64), unique=True, nullable=False, comment="菜单地址")
name = Column(VARCHAR(32), unique=True, nullable=False, comment="菜单名称")
super_menu = Column(VARCHAR(64), nullable=True, comment="上级菜单id")
role = relationship("Role", backref="menus", secondary=role_menu)
__table_args__ = ({'comment': '菜单表'})

@ -0,0 +1,24 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : settings.py
# @Software : VSCode
# @Datetime : 2023/03/23 13:55:46
# @Author : leo liu
# @Version : 1.0
# @Description :
'''
系统配置模型
'''
from db.base_class import Base
from sqlalchemy import Column, VARCHAR
class Settings(Base):
"""
系统配置表
"""
__tablename__ = "nlt_settings"
key = Column(VARCHAR(32), nullable=False, comment="配置类型")
value = Column(VARCHAR(64), nullable=False, comment="配置值")
__table_args__ = ({'comment': '系统配置表'})

@ -0,0 +1,16 @@
import sys
sys.path.append("..")
from db.session import SessionLocal
from api.v1.auth.crud.user import curd_user
def main() -> None:
db = SessionLocal()
user = curd_user.get_by_username(db, username="admin")
print(f"获取用户{user.nickname}成功")
# print("123")
if __name__ == "__main__":
main()

@ -0,0 +1,116 @@
import sys
sys.path.append("..")
from db.session import SessionLocal, engine
from db.base_class import Base
from models.auth import Role, User
from models.menu import Menu
from api.v1.auth.crud.user import crud_user
# from core.security import get_password_hash
def main() -> None:
Base.metadata.create_all(engine)
db = SessionLocal()
# create_user(db)
create_menu(db)
# create_auth_data(db)
# get_userinfo(db)
def create_auth_data(db):
user_in_1 = User(
username="admin",
# hashed_password=get_password_hash('1qazxsw2'),
nickname="Leo Liu",
email="10200039@qq.com",
avatar="http://www.koelndom.top:13060/public/upload/642/5f81bd14eebb2e000d000002/images/logo/6115abbb55b35ac4c047a00b1272d475.jpg"
)
user_in_2 = User(
username="novelliou",
# hashed_password=get_password_hash('1qazxsw2'),
nickname="Leo",
email="leo@koelndom.cn",
avatar="http://www.koelndom.top:13060/public/upload/642/5f81bd14eebb2e000d000002/images/logo/6115abbb55b35ac4c047a00b1272d475.jpg"
)
role_in_1 = Role(
name="admin",
title="管理员"
)
role_in_2 = Role(
name="user",
title="用户"
)
menu_in_1 = Menu(
path = "/system",
name = "System"
)
menu_in_2 = Menu(
path = "/system/auth",
name = "Auth",
super_menu = "/system"
)
menu_in_3 = Menu(
path = "/system/auth/user",
name = "User",
super_menu = "/system/auth"
)
menu_in_4 = Menu(
path = "/system/auth/role",
name = "Role",
super_menu = "/system/auth"
)
menu_in_5 = Menu(
path = "/system/logs",
name = "Logs",
super_menu = "/system"
)
""" role_in_1.menus = [menu_in_1, menu_in_2, menu_in_3, menu_in_4, menu_in_5, menu_in_6, menu_in_7]
role_in_2.menus = [menu_in_1, menu_in_2, menu_in_3, menu_in_4, menu_in_5, menu_in_7]
user_in_1.roles = [role_in_1]
user_in_2.roles = [role_in_2] """
role_in_1.menus.append(menu_in_1)
role_in_1.menus.append(menu_in_2)
role_in_1.menus.append(menu_in_3)
role_in_1.menus.append(menu_in_4)
role_in_1.menus.append(menu_in_5)
user_in_1.roles.append(role_in_1)
user_in_2.roles.append(role_in_2)
db.add(user_in_1)
db.add(user_in_2)
db.commit()
db.refresh(user_in_1)
def get_userinfo(db):
user = crud_user.get_by_username(db, username="novelliou")
for menu in user.roles[0].menus:
print(menu.path)
def create_menu(db):
menu_in = Menu(
path = "/system/auth/menu",
name = "Menu",
super_menu = "/system/auth"
)
db.add(menu_in)
db.commit()
if __name__ == "__main__":
main()

@ -0,0 +1,18 @@
import sys
sys.path.append("..")
from db.session import SessionLocal
from api.v1.auth.crud.user import curd_user
def main() -> None:
db = SessionLocal()
user = curd_user.authenticate(db, username="admin", password="1qazxsw2")
if (user):
print(f"用户{user.nickname}登录成功")
else:
print(f"登录失败")
if __name__ == "__main__":
main()

@ -0,0 +1,14 @@
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : __init__.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:15:36
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
"""

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save