Skip to content

Commit 27b9cf4

Browse files
authored
Simplify apps and plugins config method (#600)
1 parent 87f29e5 commit 27b9cf4

File tree

23 files changed

+318
-206
lines changed

23 files changed

+318
-206
lines changed

.pre-commit-config.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ repos:
88
- id: check-toml
99

1010
- repo: https://github.com/charliermarsh/ruff-pre-commit
11-
rev: v0.11.2
11+
rev: v0.11.9
1212
hooks:
1313
- id: ruff
1414
args:
@@ -20,7 +20,7 @@ repos:
2020
- id: ruff-format
2121

2222
- repo: https://github.com/astral-sh/uv-pre-commit
23-
rev: 0.6.10
23+
rev: 0.7.3
2424
hooks:
2525
- id: uv-lock
2626
- id: uv-export

backend/.env.example

+6-6
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@ REDIS_DATABASE=0
1515
TOKEN_SECRET_KEY='1VkVF75nsNABBjK_7-qz7GtzNy3AMvktc9TCPwKczCk'
1616
# Opera Log
1717
OPERA_LOG_ENCRYPT_SECRET_KEY='d77b25790a804c2b4a339dd0207941e4cefa5751935a33735bc73bb7071a005b'
18-
# Admin
18+
# App Admin
1919
# OAuth2
2020
OAUTH2_GITHUB_CLIENT_ID='test'
2121
OAUTH2_GITHUB_CLIENT_SECRET='test'
2222
OAUTH2_LINUX_DO_CLIENT_ID='test'
2323
OAUTH2_LINUX_DO_CLIENT_SECRET='test'
24-
# Task
24+
# App Task
2525
# Celery
2626
CELERY_BROKER_REDIS_DATABASE=1
2727
CELERY_BACKEND_REDIS_DATABASE=2
2828
# Rabbitmq
29-
RABBITMQ_HOST='127.0.0.1'
30-
RABBITMQ_PORT=5672
31-
RABBITMQ_USERNAME='guest'
32-
RABBITMQ_PASSWORD='guest'
29+
CELERY_RABBITMQ_HOST='127.0.0.1'
30+
CELERY_RABBITMQ_PORT=5672
31+
CELERY_RABBITMQ_USERNAME='guest'
32+
CELERY_RABBITMQ_PASSWORD='guest'

backend/app/admin/api/v1/auth/captcha.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
from fastapi_limiter.depends import RateLimiter
66
from starlette.concurrency import run_in_threadpool
77

8-
from backend.app.admin.conf import admin_settings
98
from backend.app.admin.schema.captcha import GetCaptchaDetail
109
from backend.common.response.response_schema import ResponseSchemaModel, response_base
10+
from backend.core.conf import settings
1111
from backend.database.redis import redis_client
1212

1313
router = APIRouter()
@@ -26,9 +26,9 @@ async def get_captcha(request: Request) -> ResponseSchemaModel[GetCaptchaDetail]
2626
img, code = await run_in_threadpool(img_captcha, img_byte=img_type)
2727
ip = request.state.ip
2828
await redis_client.set(
29-
f'{admin_settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{ip}',
29+
f'{settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{ip}',
3030
code,
31-
ex=admin_settings.CAPTCHA_LOGIN_EXPIRE_SECONDS,
31+
ex=settings.CAPTCHA_LOGIN_EXPIRE_SECONDS,
3232
)
3333
data = GetCaptchaDetail(image_type=img_type, image=img)
3434
return response_base.success(data=data)

backend/app/admin/api/v1/oauth2/github.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
from fastapi_oauth20 import FastAPIOAuth20, GitHubOAuth20
66
from starlette.responses import RedirectResponse
77

8-
from backend.app.admin.conf import admin_settings
98
from backend.app.admin.service.oauth2_service import oauth2_service
109
from backend.common.enums import UserSocialType
1110
from backend.common.response.response_schema import ResponseSchemaModel, response_base
11+
from backend.core.conf import settings
1212

1313
router = APIRouter()
1414

15-
_github_client = GitHubOAuth20(admin_settings.OAUTH2_GITHUB_CLIENT_ID, admin_settings.OAUTH2_GITHUB_CLIENT_SECRET)
15+
_github_client = GitHubOAuth20(settings.OAUTH2_GITHUB_CLIENT_ID, settings.OAUTH2_GITHUB_CLIENT_SECRET)
1616
_github_oauth2 = FastAPIOAuth20(_github_client, redirect_route_name='github_login')
1717

1818

@@ -44,4 +44,4 @@ async def github_login(
4444
user=user,
4545
social=UserSocialType.github,
4646
)
47-
return RedirectResponse(url=f'{admin_settings.OAUTH2_FRONTEND_REDIRECT_URI}?access_token={data.access_token}')
47+
return RedirectResponse(url=f'{settings.OAUTH2_FRONTEND_REDIRECT_URI}?access_token={data.access_token}')

backend/app/admin/api/v1/oauth2/linux_do.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
from fastapi_oauth20 import FastAPIOAuth20, LinuxDoOAuth20
66
from starlette.responses import RedirectResponse
77

8-
from backend.app.admin.conf import admin_settings
98
from backend.app.admin.service.oauth2_service import oauth2_service
109
from backend.common.enums import UserSocialType
1110
from backend.common.response.response_schema import ResponseSchemaModel, response_base
11+
from backend.core.conf import settings
1212

1313
router = APIRouter()
1414

1515
_linux_do_client = LinuxDoOAuth20(
16-
admin_settings.OAUTH2_LINUX_DO_CLIENT_ID,
17-
admin_settings.OAUTH2_LINUX_DO_CLIENT_SECRET,
16+
settings.OAUTH2_LINUX_DO_CLIENT_ID,
17+
settings.OAUTH2_LINUX_DO_CLIENT_SECRET,
1818
)
1919
_linux_do_oauth2 = FastAPIOAuth20(_linux_do_client, redirect_route_name='linux_do_login')
2020

@@ -47,4 +47,4 @@ async def linux_do_login(
4747
user=user,
4848
social=UserSocialType.linux_do,
4949
)
50-
return RedirectResponse(url=f'{admin_settings.OAUTH2_FRONTEND_REDIRECT_URI}?access_token={data.access_token}')
50+
return RedirectResponse(url=f'{settings.OAUTH2_FRONTEND_REDIRECT_URI}?access_token={data.access_token}')

backend/app/admin/conf.py

-35
This file was deleted.

backend/app/admin/service/auth_service.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from sqlalchemy.ext.asyncio import AsyncSession
66
from starlette.background import BackgroundTask, BackgroundTasks
77

8-
from backend.app.admin.conf import admin_settings
98
from backend.app.admin.crud.crud_user import user_dao
109
from backend.app.admin.model import User
1110
from backend.app.admin.schema.token import GetLoginToken, GetNewToken
@@ -91,12 +90,12 @@ async def login(
9190
user = None
9291
try:
9392
user = await self.user_verify(db, obj.username, obj.password)
94-
captcha_code = await redis_client.get(f'{admin_settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{request.state.ip}')
93+
captcha_code = await redis_client.get(f'{settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{request.state.ip}')
9594
if not captcha_code:
9695
raise errors.AuthorizationError(msg='验证码失效,请重新获取')
9796
if captcha_code.lower() != obj.captcha.lower():
9897
raise errors.CustomError(error=CustomErrorCode.CAPTCHA_ERROR)
99-
await redis_client.delete(f'{admin_settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{request.state.ip}')
98+
await redis_client.delete(f'{settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{request.state.ip}')
10099
await user_dao.update_login_time(db, obj.username)
101100
await db.refresh(user)
102101
a_token = await create_access_token(

backend/app/admin/service/oauth2_service.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from fast_captcha import text_captcha
66
from fastapi import BackgroundTasks, Request, Response
77

8-
from backend.app.admin.conf import admin_settings
98
from backend.app.admin.crud.crud_user import user_dao
109
from backend.app.admin.crud.crud_user_social import user_social_dao
1110
from backend.app.admin.schema.token import GetLoginToken
@@ -102,7 +101,7 @@ async def create_with_login(
102101
msg='登录成功(OAuth2)',
103102
)
104103
background_tasks.add_task(login_log_service.create, **login_log)
105-
await redis_client.delete(f'{admin_settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{request.state.ip}')
104+
await redis_client.delete(f'{settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{request.state.ip}')
106105
response.set_cookie(
107106
key=settings.COOKIE_REFRESH_TOKEN_KEY,
108107
value=refresh_token.refresh_token,

backend/app/admin/service/user_service.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ async def update_avatar(*, request: Request, username: str, avatar: AvatarParam)
191191
"""
192192
async with async_db_session.begin() as db:
193193
if request.user.username != username:
194-
raise errors.AuthorizationError
194+
raise errors.AuthorizationError(msg='你只能修改自己的信息')
195195
user = await user_dao.get_by_username(db, username)
196196
if not user:
197197
raise errors.NotFoundError(msg='用户不存在')

backend/app/task/celery.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,38 @@
55
import celery
66
import celery_aio_pool
77

8-
from backend.app.task.conf import task_settings
98
from backend.core.conf import settings
109

1110
__all__ = ['celery_app']
1211

1312

1413
def get_broker_url() -> str:
1514
"""获取消息代理 URL"""
16-
if task_settings.CELERY_BROKER == 'redis':
15+
if settings.CELERY_BROKER == 'redis':
1716
return (
1817
f'redis://:{settings.REDIS_PASSWORD}@{settings.REDIS_HOST}:'
19-
f'{settings.REDIS_PORT}/{task_settings.CELERY_BROKER_REDIS_DATABASE}'
18+
f'{settings.REDIS_PORT}/{settings.CELERY_BROKER_REDIS_DATABASE}'
2019
)
2120
return (
22-
f'amqp://{task_settings.RABBITMQ_USERNAME}:{task_settings.RABBITMQ_PASSWORD}@'
23-
f'{task_settings.RABBITMQ_HOST}:{task_settings.RABBITMQ_PORT}'
21+
f'amqp://{settings.CELERY_RABBITMQ_USERNAME}:{settings.CELERY_RABBITMQ_PASSWORD}@'
22+
f'{settings.CELERY_RABBITMQ_HOST}:{settings.CELERY_RABBITMQ_PORT}'
2423
)
2524

2625

2726
def get_result_backend() -> str:
2827
"""获取结果后端 URL"""
2928
return (
3029
f'redis://:{settings.REDIS_PASSWORD}@{settings.REDIS_HOST}:'
31-
f'{settings.REDIS_PORT}/{task_settings.CELERY_BACKEND_REDIS_DATABASE}'
30+
f'{settings.REDIS_PORT}/{settings.CELERY_BACKEND_REDIS_DATABASE}'
3231
)
3332

3433

3534
def get_result_backend_transport_options() -> dict[str, Any]:
3635
"""获取结果后端传输选项"""
3736
return {
38-
'global_keyprefix': task_settings.CELERY_BACKEND_REDIS_PREFIX,
37+
'global_keyprefix': settings.CELERY_BACKEND_REDIS_PREFIX,
3938
'retry_policy': {
40-
'timeout': task_settings.CELERY_BACKEND_REDIS_TIMEOUT,
39+
'timeout': settings.CELERY_BACKEND_REDIS_TIMEOUT,
4140
},
4241
}
4342

@@ -55,7 +54,7 @@ def init_celery() -> celery.Celery:
5554
'fba_celery',
5655
enable_utc=False,
5756
timezone=settings.DATETIME_TIMEZONE,
58-
beat_schedule=task_settings.CELERY_SCHEDULE,
57+
beat_schedule=settings.CELERY_SCHEDULE,
5958
broker_url=get_broker_url(),
6059
broker_connection_retry_on_startup=True,
6160
result_backend=get_result_backend(),
@@ -65,7 +64,7 @@ def init_celery() -> celery.Celery:
6564
)
6665

6766
# 自动发现任务
68-
app.autodiscover_tasks(task_settings.CELERY_TASK_PACKAGES)
67+
app.autodiscover_tasks(settings.CELERY_TASK_PACKAGES)
6968

7069
return app
7170

backend/app/task/celery_task/base.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
from celery import Task
88
from sqlalchemy.exc import SQLAlchemyError
99

10-
from backend.app.task.conf import task_settings
1110
from backend.common.socketio.actions import task_notification
11+
from backend.core.conf import settings
1212

1313

1414
class TaskBase(Task):
1515
"""Celery 任务基类"""
1616

1717
autoretry_for = (SQLAlchemyError,)
18-
max_retries = task_settings.CELERY_TASK_MAX_RETRIES
18+
max_retries = settings.CELERY_TASK_MAX_RETRIES
1919

2020
async def before_start(self, task_id: str, args, kwargs) -> None:
2121
"""

backend/app/task/conf.py

-73
This file was deleted.

backend/common/socketio/server.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# -*- coding: utf-8 -*-
33
import socketio
44

5-
from backend.app.task.conf import task_settings
65
from backend.common.log import log
76
from backend.common.security.jwt import jwt_authentication
87
from backend.core.conf import settings
@@ -13,13 +12,13 @@
1312
# 集成 Celery 实现消息订阅
1413
client_manager=socketio.AsyncRedisManager(
1514
f'redis://:{settings.REDIS_PASSWORD}@{settings.REDIS_HOST}:'
16-
f'{settings.REDIS_PORT}/{task_settings.CELERY_BROKER_REDIS_DATABASE}'
15+
f'{settings.REDIS_PORT}/{settings.CELERY_BROKER_REDIS_DATABASE}'
1716
)
18-
if task_settings.CELERY_BROKER == 'redis'
17+
if settings.CELERY_BROKER == 'redis'
1918
else socketio.AsyncAioPikaManager(
2019
(
21-
f'amqp://{task_settings.RABBITMQ_USERNAME}:{task_settings.RABBITMQ_PASSWORD}@'
22-
f'{task_settings.RABBITMQ_HOST}:{task_settings.RABBITMQ_PORT}'
20+
f'amqp://{settings.CELERY_RABBITMQ_USERNAME}:{settings.CELERY_RABBITMQ_PASSWORD}@'
21+
f'{settings.CELERY_RABBITMQ_HOST}:{settings.CELERY_RABBITMQ_PORT}'
2322
)
2423
),
2524
async_mode='asgi',

0 commit comments

Comments
 (0)