1
This commit is contained in:
parent
224d9816fa
commit
baa8635a17
@ -6,6 +6,7 @@ from .endpoints import space
|
||||
from .endpoints import dashboard
|
||||
from .endpoints import report
|
||||
from .endpoints import authority
|
||||
from .endpoints import table_struct
|
||||
|
||||
api_router = APIRouter()
|
||||
|
||||
@ -17,3 +18,5 @@ api_router.include_router(dashboard.router, tags=["看板接口"], prefix='/dash
|
||||
api_router.include_router(report.router, tags=["报表接口"], prefix='/report')
|
||||
|
||||
api_router.include_router(authority.router, tags=["权限管理接口"], prefix='/authority')
|
||||
|
||||
api_router.include_router(table_struct.router, tags=["表结构"], prefix='/table_struct')
|
||||
|
23
api/api_v1/endpoints/query.py
Normal file
23
api/api_v1/endpoints/query.py
Normal file
@ -0,0 +1,23 @@
|
||||
import json
|
||||
|
||||
from aioredis import Redis
|
||||
from fastapi import APIRouter, Depends, Request
|
||||
import crud, schemas
|
||||
|
||||
from api import deps
|
||||
from db.redisdb import get_redis_pool
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post("/sql")
|
||||
async def query_sql(
|
||||
request: Request,
|
||||
data_in: schemas.GetTable,
|
||||
rdb: Redis = Depends(get_redis_pool),
|
||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||
) -> schemas.Msg:
|
||||
"""原 sql 查询 """
|
||||
data = await rdb.get(f'{data_in.game}_{data_in.name}')
|
||||
return schemas.Msg(code=0, msg='ok', data=json.loads(data))
|
||||
|
23
api/api_v1/endpoints/table_struct.py
Normal file
23
api/api_v1/endpoints/table_struct.py
Normal file
@ -0,0 +1,23 @@
|
||||
import json
|
||||
|
||||
from aioredis import Redis
|
||||
from fastapi import APIRouter, Depends, Request
|
||||
import crud, schemas
|
||||
|
||||
from api import deps
|
||||
from db.redisdb import get_redis_pool
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post("/event")
|
||||
async def read_event(
|
||||
request: Request,
|
||||
data_in: schemas.GetTable,
|
||||
rdb: Redis = Depends(get_redis_pool),
|
||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||
) -> schemas.Msg:
|
||||
"""获取时间表结构"""
|
||||
data = await rdb.get(f'{data_in.game}_{data_in.name}')
|
||||
return schemas.Msg(code=0, msg='ok', data=json.loads(data))
|
||||
|
35
ck_test.py
Normal file
35
ck_test.py
Normal file
@ -0,0 +1,35 @@
|
||||
from datetime import datetime
|
||||
|
||||
import asyncio
|
||||
from aioch import Client
|
||||
|
||||
from core.config import settings
|
||||
|
||||
|
||||
async def exec_progress():
|
||||
client = Client(**settings.CK_CONFIG)
|
||||
|
||||
progress = await client.execute_with_progress('LONG AND COMPLICATED QUERY')
|
||||
timeout = 20
|
||||
started_at = datetime.now()
|
||||
|
||||
async for num_rows, total_rows in progress:
|
||||
done = num_rows / total_rows if total_rows else total_rows
|
||||
now = datetime.now()
|
||||
# Cancel query if it takes more than 20 seconds to process 50% of rows.
|
||||
if (now - started_at).total_seconds() > timeout and done < 0.5:
|
||||
await client.cancel()
|
||||
break
|
||||
else:
|
||||
rv = await progress.get_result()
|
||||
print(rv)
|
||||
|
||||
|
||||
async def exec_no_progress():
|
||||
client = Client('localhost')
|
||||
rv = await client.execute('LONG AND COMPLICATED QUERY')
|
||||
print(rv)
|
||||
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(asyncio.wait([exec_progress(), exec_no_progress()]))
|
@ -28,8 +28,25 @@ class Settings(BaseSettings):
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8
|
||||
SECRET_KEY: str = 'ZaFX6EypK6PtuhGv11q4DLRvAb0csiLx4dbKUwLwCe8'
|
||||
|
||||
REDIS_CONF = {
|
||||
'address': ('192.168.0.161', 6379),
|
||||
'password': 'd1Gh*zp5',
|
||||
'db': 1, # 存表结构
|
||||
}
|
||||
|
||||
CK_CONFIG = {'host': '119.29.176.224',
|
||||
'send_receive_timeout': 30}
|
||||
|
||||
class Config:
|
||||
case_sensitive = True
|
||||
|
||||
|
||||
settings = Settings()
|
||||
class Debug(Settings):
|
||||
REDIS_CONF = {
|
||||
'address': ('139.159.159.3', 6378),
|
||||
'password': 'd1Gh*zp5',
|
||||
'db': 1
|
||||
}
|
||||
|
||||
|
||||
settings = Debug()
|
||||
|
12
db/ckdb.py
Normal file
12
db/ckdb.py
Normal file
@ -0,0 +1,12 @@
|
||||
from aioredis import create_redis_pool, Redis
|
||||
|
||||
|
||||
class RedisBase:
|
||||
client: Redis = None
|
||||
|
||||
|
||||
rdb = RedisBase()
|
||||
|
||||
|
||||
def get_redis_pool() -> Redis:
|
||||
return rdb.client
|
14
db/ckdb_utils.py
Normal file
14
db/ckdb_utils.py
Normal file
@ -0,0 +1,14 @@
|
||||
import aioredis
|
||||
from aioredis import create_redis_pool, Redis
|
||||
|
||||
from core.config import settings
|
||||
from .redisdb import rdb
|
||||
|
||||
|
||||
async def connect_to_redis():
|
||||
rdb.client = await create_redis_pool(**settings.REDIS_CONF)
|
||||
|
||||
|
||||
async def close_redis_connection():
|
||||
rdb.client.close()
|
||||
await rdb.client.wait_closed()
|
12
db/redisdb.py
Normal file
12
db/redisdb.py
Normal file
@ -0,0 +1,12 @@
|
||||
from aioredis import create_redis_pool, Redis
|
||||
|
||||
|
||||
class RedisBase:
|
||||
client: Redis = None
|
||||
|
||||
|
||||
rdb = RedisBase()
|
||||
|
||||
|
||||
def get_redis_pool() -> Redis:
|
||||
return rdb.client
|
14
db/redisdb_utils.py
Normal file
14
db/redisdb_utils.py
Normal file
@ -0,0 +1,14 @@
|
||||
import aioredis
|
||||
from aioredis import create_redis_pool, Redis
|
||||
|
||||
from core.config import settings
|
||||
from .redisdb import rdb
|
||||
|
||||
|
||||
async def connect_to_redis():
|
||||
rdb.client = await create_redis_pool(**settings.REDIS_CONF)
|
||||
|
||||
|
||||
async def close_redis_connection():
|
||||
rdb.client.close()
|
||||
await rdb.client.wait_closed()
|
32
main.py
32
main.py
@ -1,33 +1,27 @@
|
||||
import base64
|
||||
import binascii
|
||||
|
||||
import uvicorn
|
||||
from fastapi import FastAPI
|
||||
import casbin
|
||||
|
||||
from api.deps import get_current_user2
|
||||
from core.config import settings
|
||||
from starlette.middleware.cors import CORSMiddleware
|
||||
from starlette.authentication import AuthenticationBackend, AuthenticationError, AuthCredentials, BaseUser, SimpleUser
|
||||
from starlette.middleware.authentication import AuthenticationMiddleware
|
||||
from fastapi_authz import CasbinMiddleware
|
||||
|
||||
from db import connect_to_mongo, close_mongo_connection, get_database
|
||||
from db.redisdb_utils import connect_to_redis, close_redis_connection
|
||||
from utils import *
|
||||
from api.api_v1.api import api_router
|
||||
from core.config import settings
|
||||
from api.deps import get_current_user2
|
||||
|
||||
app = FastAPI(title=settings.PROJECT_NAME)
|
||||
app.include_router(api_router, prefix=settings.API_V1_STR)
|
||||
|
||||
if settings.BACKEND_CORS_ORIGINS:
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=['*'],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
app.add_event_handler("startup", connect_to_mongo)
|
||||
app.add_event_handler("startup", connect_to_redis)
|
||||
|
||||
app.add_event_handler("shutdown", close_mongo_connection)
|
||||
app.add_event_handler("shutdown", close_redis_connection)
|
||||
|
||||
|
||||
class CurrentUser(BaseUser):
|
||||
@ -67,9 +61,13 @@ class BasicAuth(AuthenticationBackend):
|
||||
app.add_middleware(CasbinMiddleware, enforcer=casbin_enforcer)
|
||||
app.add_middleware(AuthenticationMiddleware, backend=BasicAuth())
|
||||
|
||||
from api.api_v1.api import api_router
|
||||
app.include_router(api_router, prefix=settings.API_V1_STR)
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=['*'],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
if __name__ == '__main__':
|
||||
uvicorn.run(app='main2:app', host="0.0.0.0", port=8889, reload=True, debug=True)
|
||||
uvicorn.run(app='main:app', host="0.0.0.0", port=8889, reload=True, debug=True)
|
||||
|
@ -6,3 +6,4 @@ from .space import *
|
||||
from .dashboard import *
|
||||
from .report import *
|
||||
from .authotity import *
|
||||
from .table_struct import *
|
@ -14,6 +14,7 @@ class ProjectBase(BaseModel):
|
||||
# 解析请求json 创建项目
|
||||
class ProjectCreate(ProjectBase):
|
||||
name: str = Field(..., title='项目名')
|
||||
game: str = Field(..., title='游戏代号')
|
||||
|
||||
|
||||
# 查询某个项目看板
|
||||
@ -25,6 +26,7 @@ class ProjectKanban(DBBase):
|
||||
# 数据库模型
|
||||
class ProjectDB(DBBase):
|
||||
name: str
|
||||
game: str
|
||||
user_id: str
|
||||
members: List[str] = []
|
||||
create_date: datetime = datetime.now()
|
||||
|
13
schemas/table_struct.py
Normal file
13
schemas/table_struct.py
Normal file
@ -0,0 +1,13 @@
|
||||
from enum import Enum
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class TableEnum(str, Enum):
|
||||
event = 'event'
|
||||
user = 'user'
|
||||
|
||||
|
||||
class GetTable(BaseModel):
|
||||
game: str
|
||||
name: TableEnum
|
Loading…
Reference in New Issue
Block a user