mirror of
https://github.com/cnlimiter/codex-register.git
synced 2026-06-08 17:10:05 +08:00
fix(main): 优化项目结构
This commit is contained in:
@@ -15,6 +15,7 @@ dependencies = [
|
|||||||
"aiosqlite>=0.19.0",
|
"aiosqlite>=0.19.0",
|
||||||
"psycopg[binary]>=3.1.18",
|
"psycopg[binary]>=3.1.18",
|
||||||
"websockets>=16.0",
|
"websockets>=16.0",
|
||||||
|
"path>=17.1.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
核心功能模块
|
核心功能模块
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from .oauth import OAuthManager, OAuthStart, generate_oauth_url, submit_callback_url
|
from .openai.oauth import OAuthManager, OAuthStart, generate_oauth_url, submit_callback_url
|
||||||
from .http_client import (
|
from .http_client import (
|
||||||
OpenAIHTTPClient,
|
OpenAIHTTPClient,
|
||||||
HTTPClient,
|
HTTPClient,
|
||||||
|
|||||||
3
src/core/openai/__init__.py
Normal file
3
src/core/openai/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2026/3/18 19:55
|
||||||
@@ -14,7 +14,7 @@ from typing import Any, Dict, Optional
|
|||||||
|
|
||||||
from curl_cffi import requests as cffi_requests
|
from curl_cffi import requests as cffi_requests
|
||||||
|
|
||||||
from ..config.constants import (
|
from ...config.constants import (
|
||||||
OAUTH_CLIENT_ID,
|
OAUTH_CLIENT_ID,
|
||||||
OAUTH_AUTH_URL,
|
OAUTH_AUTH_URL,
|
||||||
OAUTH_TOKEN_URL,
|
OAUTH_TOKEN_URL,
|
||||||
@@ -9,7 +9,7 @@ from typing import Optional
|
|||||||
|
|
||||||
from curl_cffi import requests as cffi_requests
|
from curl_cffi import requests as cffi_requests
|
||||||
|
|
||||||
from ..database.models import Account
|
from ...database.models import Account
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -12,10 +12,10 @@ from datetime import datetime, timedelta
|
|||||||
|
|
||||||
from curl_cffi import requests as cffi_requests
|
from curl_cffi import requests as cffi_requests
|
||||||
|
|
||||||
from ..config.settings import get_settings
|
from ...config.settings import get_settings
|
||||||
from ..database.session import get_db
|
from ...database.session import get_db
|
||||||
from ..database import crud
|
from ...database import crud
|
||||||
from ..database.models import Account
|
from ...database.models import Account
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ from datetime import datetime
|
|||||||
|
|
||||||
from curl_cffi import requests as cffi_requests
|
from curl_cffi import requests as cffi_requests
|
||||||
|
|
||||||
from .oauth import OAuthManager, OAuthStart
|
from .openai.oauth import OAuthManager, OAuthStart
|
||||||
from .http_client import OpenAIHTTPClient, HTTPClientError
|
from .http_client import OpenAIHTTPClient, HTTPClientError
|
||||||
from ..services import EmailServiceFactory, BaseEmailService, EmailServiceType
|
from ..services import EmailServiceFactory, BaseEmailService, EmailServiceType
|
||||||
from ..database import crud
|
from ..database import crud
|
||||||
|
|||||||
3
src/core/upload/__init__.py
Normal file
3
src/core/upload/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2026/3/18 19:54
|
||||||
@@ -10,9 +10,9 @@ from datetime import datetime
|
|||||||
from curl_cffi import requests as cffi_requests
|
from curl_cffi import requests as cffi_requests
|
||||||
from curl_cffi import CurlMime
|
from curl_cffi import CurlMime
|
||||||
|
|
||||||
from ..database.session import get_db
|
from ...database.session import get_db
|
||||||
from ..database.models import Account
|
from ...database.models import Account
|
||||||
from ..config.settings import get_settings
|
from ...config.settings import get_settings
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -10,8 +10,8 @@ from typing import List, Tuple, Optional
|
|||||||
|
|
||||||
from curl_cffi import requests as cffi_requests
|
from curl_cffi import requests as cffi_requests
|
||||||
|
|
||||||
from ..database.session import get_db
|
from ...database.session import get_db
|
||||||
from ..database.models import Account
|
from ...database.models import Account
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -9,9 +9,9 @@ from datetime import datetime
|
|||||||
|
|
||||||
from curl_cffi import requests as cffi_requests
|
from curl_cffi import requests as cffi_requests
|
||||||
|
|
||||||
from ..database.session import get_db
|
from ...database.session import get_db
|
||||||
from ..database.models import Account
|
from ...database.models import Account
|
||||||
from ..config.settings import get_settings
|
from ...config.settings import get_settings
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -12,13 +12,13 @@ from .base import (
|
|||||||
)
|
)
|
||||||
from .tempmail import TempmailService
|
from .tempmail import TempmailService
|
||||||
from .outlook import OutlookService
|
from .outlook import OutlookService
|
||||||
from .custom_domain import CustomDomainEmailService
|
from .moe_mail import MeoMailEmailService
|
||||||
from .temp_mail import TempMailService
|
from .temp_mail import TempMailService
|
||||||
|
|
||||||
# 注册服务
|
# 注册服务
|
||||||
EmailServiceFactory.register(EmailServiceType.TEMPMAIL, TempmailService)
|
EmailServiceFactory.register(EmailServiceType.TEMPMAIL, TempmailService)
|
||||||
EmailServiceFactory.register(EmailServiceType.OUTLOOK, OutlookService)
|
EmailServiceFactory.register(EmailServiceType.OUTLOOK, OutlookService)
|
||||||
EmailServiceFactory.register(EmailServiceType.CUSTOM_DOMAIN, CustomDomainEmailService)
|
EmailServiceFactory.register(EmailServiceType.CUSTOM_DOMAIN, MeoMailEmailService)
|
||||||
EmailServiceFactory.register(EmailServiceType.TEMP_MAIL, TempMailService)
|
EmailServiceFactory.register(EmailServiceType.TEMP_MAIL, TempMailService)
|
||||||
|
|
||||||
# 导出 Outlook 模块的额外内容
|
# 导出 Outlook 模块的额外内容
|
||||||
@@ -48,7 +48,7 @@ __all__ = [
|
|||||||
# 服务类
|
# 服务类
|
||||||
'TempmailService',
|
'TempmailService',
|
||||||
'OutlookService',
|
'OutlookService',
|
||||||
'CustomDomainEmailService',
|
'MeoMailEmailService',
|
||||||
'TempMailService',
|
'TempMailService',
|
||||||
# Outlook 模块
|
# Outlook 模块
|
||||||
'ProviderType',
|
'ProviderType',
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from ..config.constants import OTP_CODE_PATTERN
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class CustomDomainEmailService(BaseEmailService):
|
class MeoMailEmailService(BaseEmailService):
|
||||||
"""
|
"""
|
||||||
自定义域名邮箱服务
|
自定义域名邮箱服务
|
||||||
基于 REST API 接口
|
基于 REST API 接口
|
||||||
@@ -7,11 +7,11 @@ from fastapi import APIRouter
|
|||||||
from .accounts import router as accounts_router
|
from .accounts import router as accounts_router
|
||||||
from .registration import router as registration_router
|
from .registration import router as registration_router
|
||||||
from .settings import router as settings_router
|
from .settings import router as settings_router
|
||||||
from .email_services import router as email_services_router
|
from .email import router as email_services_router
|
||||||
from .payment import router as payment_router
|
from .payment import router as payment_router
|
||||||
from .cpa_services import router as cpa_services_router
|
from .upload.cpa_services import router as cpa_services_router
|
||||||
from .sub2api_services import router as sub2api_services_router
|
from .upload.sub2api_services import router as sub2api_services_router
|
||||||
from .tm_services import router as tm_services_router
|
from .upload.tm_services import router as tm_services_router
|
||||||
|
|
||||||
api_router = APIRouter()
|
api_router = APIRouter()
|
||||||
|
|
||||||
|
|||||||
@@ -14,13 +14,13 @@ from ...database.models import Account
|
|||||||
from ...database import crud
|
from ...database import crud
|
||||||
from ...config.settings import get_settings
|
from ...config.settings import get_settings
|
||||||
from .accounts import resolve_account_ids
|
from .accounts import resolve_account_ids
|
||||||
from ...core.payment import (
|
from ...core.openai.payment import (
|
||||||
generate_plus_link,
|
generate_plus_link,
|
||||||
generate_team_link,
|
generate_team_link,
|
||||||
open_url_incognito,
|
open_url_incognito,
|
||||||
check_subscription_status,
|
check_subscription_status,
|
||||||
)
|
)
|
||||||
from ...core.team_manager import (
|
from ...core.upload.team_manager_upload import (
|
||||||
upload_to_team_manager,
|
upload_to_team_manager,
|
||||||
batch_upload_to_team_manager,
|
batch_upload_to_team_manager,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -3,14 +3,15 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from typing import Optional, Dict, Any, List
|
import os
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from ...config.settings import get_settings, update_settings
|
||||||
from ...database import crud
|
from ...database import crud
|
||||||
from ...database.session import get_db
|
from ...database.session import get_db
|
||||||
from ...config.settings import get_settings, update_settings
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
@@ -289,6 +290,7 @@ async def backup_database():
|
|||||||
raise HTTPException(status_code=404, detail="数据库文件不存在")
|
raise HTTPException(status_code=404, detail="数据库文件不存在")
|
||||||
|
|
||||||
# 创建备份目录
|
# 创建备份目录
|
||||||
|
from fastapi import Path
|
||||||
backup_dir = Path(db_path).parent / "backups"
|
backup_dir = Path(db_path).parent / "backups"
|
||||||
backup_dir.mkdir(exist_ok=True)
|
backup_dir.mkdir(exist_ok=True)
|
||||||
|
|
||||||
|
|||||||
2
src/web/routes/upload/__init__.py
Normal file
2
src/web/routes/upload/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
@@ -6,9 +6,9 @@ from typing import List, Optional
|
|||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ...database import crud
|
from ....database import crud
|
||||||
from ...database.session import get_db
|
from ....database.session import get_db
|
||||||
from ...core.cpa_upload import test_cpa_connection
|
from ....core.upload.cpa_upload import test_cpa_connection
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@@ -6,9 +6,9 @@ from typing import List, Optional
|
|||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ...database import crud
|
from ....database import crud
|
||||||
from ...database.session import get_db
|
from ....database.session import get_db
|
||||||
from ...core.sub2api_upload import test_sub2api_connection, batch_upload_to_sub2api
|
from ....core.upload.sub2api_upload import test_sub2api_connection, batch_upload_to_sub2api
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@@ -6,9 +6,9 @@ from typing import List, Optional
|
|||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ...database import crud
|
from ....database import crud
|
||||||
from ...database.session import get_db
|
from ....database.session import get_db
|
||||||
from ...core.team_manager import test_team_manager_connection
|
from ....core.upload.team_manager_upload import test_team_manager_connection
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
11
uv.lock
generated
11
uv.lock
generated
@@ -164,6 +164,7 @@ dependencies = [
|
|||||||
{ name = "curl-cffi" },
|
{ name = "curl-cffi" },
|
||||||
{ name = "fastapi" },
|
{ name = "fastapi" },
|
||||||
{ name = "jinja2" },
|
{ name = "jinja2" },
|
||||||
|
{ name = "path" },
|
||||||
{ name = "psycopg", extra = ["binary"] },
|
{ name = "psycopg", extra = ["binary"] },
|
||||||
{ name = "pydantic" },
|
{ name = "pydantic" },
|
||||||
{ name = "pydantic-settings" },
|
{ name = "pydantic-settings" },
|
||||||
@@ -194,6 +195,7 @@ requires-dist = [
|
|||||||
{ name = "fastapi", specifier = ">=0.100.0" },
|
{ name = "fastapi", specifier = ">=0.100.0" },
|
||||||
{ name = "httpx", marker = "extra == 'dev'", specifier = ">=0.24.0" },
|
{ name = "httpx", marker = "extra == 'dev'", specifier = ">=0.24.0" },
|
||||||
{ name = "jinja2", specifier = ">=3.1.0" },
|
{ name = "jinja2", specifier = ">=3.1.0" },
|
||||||
|
{ name = "path", specifier = ">=17.1.1" },
|
||||||
{ name = "playwright", marker = "extra == 'payment'", specifier = ">=1.40.0" },
|
{ name = "playwright", marker = "extra == 'payment'", specifier = ">=1.40.0" },
|
||||||
{ name = "psycopg", extras = ["binary"], specifier = ">=3.1.18" },
|
{ name = "psycopg", extras = ["binary"], specifier = ">=3.1.18" },
|
||||||
{ name = "pydantic", specifier = ">=2.0.0" },
|
{ name = "pydantic", specifier = ">=2.0.0" },
|
||||||
@@ -502,6 +504,15 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" },
|
{ url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "path"
|
||||||
|
version = "17.1.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/dd/52/a7bdd5ef8488977d354b7915d1e75009bebbd04f73eff14e52372d5e9435/path-17.1.1.tar.gz", hash = "sha256:2dfcbfec8b4d960f3469c52acf133113c2a8bf12ac7b98d629fa91af87248d42", size = 50528, upload-time = "2025-07-27T20:40:23.79Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7c/50/11c9ee1ede64b45d687fd36eb8768dafc57afc78b4d83396920cfd69ed30/path-17.1.1-py3-none-any.whl", hash = "sha256:ec7e136df29172e5030dd07e037d55f676bdb29d15bfa09b80da29d07d3b9303", size = 23936, upload-time = "2025-07-27T20:40:22.453Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pefile"
|
name = "pefile"
|
||||||
version = "2024.8.26"
|
version = "2024.8.26"
|
||||||
|
|||||||
Reference in New Issue
Block a user