Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions backend/common/schema.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import datetime
from typing import Annotated

from pydantic import BaseModel, ConfigDict, EmailStr, validate_email
from pydantic_extra_types.phone_numbers import PhoneNumber
from pydantic import BaseModel, ConfigDict, EmailStr, Field, validate_email

from backend.core.conf import settings

Expand Down Expand Up @@ -142,8 +142,7 @@
}


class CustomPhoneNumber(PhoneNumber):
default_region_code = 'CN'
CustomPhoneNumber = Annotated[str, Field(pattern=r'^1[3-9]\d{9}$')]


class CustomEmailStr(EmailStr):
Expand Down
6 changes: 3 additions & 3 deletions backend/utils/request_parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

from asgiref.sync import sync_to_async
from fastapi import Request
from ip2loc import XdbSearcher
from user_agents import parse
from XdbSearchIP.xdbSearcher import XdbSearcher

from backend.common.dataclasses import IpInfo, UserAgentInfo
from backend.common.log import log
Expand Down Expand Up @@ -80,7 +80,7 @@ async def parse_ip_info(request: Request) -> IpInfo:
ip = get_request_ip(request)
location = await redis_client.get(f'{settings.IP_LOCATION_REDIS_PREFIX}:{ip}')
if location:
country, region, city = location.split(' ')
country, region, city = location.split('|')
return IpInfo(ip=ip, country=country, region=region, city=city)
if settings.IP_LOCATION_PARSE == 'online':
location_info = await get_location_online(ip, request.headers.get('User-Agent'))
Expand All @@ -94,7 +94,7 @@ async def parse_ip_info(request: Request) -> IpInfo:
city = location_info.get('city')
await redis_client.set(
f'{settings.IP_LOCATION_REDIS_PREFIX}:{ip}',
f'{country} {region} {city}',
f'{country}|{region}|{city}',
ex=settings.IP_LOCATION_EXPIRE_SECONDS,
)
return IpInfo(ip=ip, country=country, region=region, city=city)
Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,26 +29,26 @@ dependencies = [
"fastapi-limiter>=0.1.6",
"fastapi-oauth20>=0.0.1a2",
"fastapi-pagination>=0.12.34",
"fastapi[all]==0.111.0",
"fastapi[standard]==0.115.11",
"flower>=2.0.0",
"gevent>=24.11.1",
"ip2loc>=1.0.0",
"itsdangerous>=2.2.0",
"jinja2>=3.1.4",
"loguru>=0.7.3",
"msgspec>=0.19.0",
"path==17.0.0",
"phonenumbers>=8.13.0",
"psutil>=6.0.0",
"pwdlib>=0.2.1",
"pydantic>=2.10.6",
"pydantic-settings>=2.0.0",
"python-jose>=3.3.0",
"python-socketio>=5.12.0",
"redis[hiredis]>=5.2.0",
"rtoml>=0.12.0",
"sqlalchemy-crud-plus==1.6.0",
"sqlalchemy[asyncio]>=2.0.30",
"user-agents==2.2.0",
"XdbSearchIP>=1.0.2",
]

[dependency-groups]
Expand Down
10 changes: 3 additions & 7 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ ecdsa==0.19.0
email-validator==2.2.0
exceptiongroup==1.2.2 ; python_full_version < '3.11'
fast-captcha==0.3.2
fastapi==0.111.0
fastapi==0.115.11
fastapi-cli==0.0.5
fastapi-limiter==0.1.6
fastapi-oauth20==0.0.1a2
Expand All @@ -48,6 +48,7 @@ humanize==4.12.1
identify==2.6.9
idna==3.10
iniconfig==2.0.0
ip2loc==1.0.0
itsdangerous==2.2.0
jinja2==3.1.6
kombu==5.4.2
Expand All @@ -58,10 +59,8 @@ markupsafe==3.0.2
mdurl==0.1.2
msgspec==0.19.0
nodeenv==1.9.1
orjson==3.10.15
packaging==24.2
path==17.0.0
phonenumbers==9.0.0
pillow==11.1.0
platformdirs==4.3.6
pluggy==1.5.0
Expand All @@ -74,7 +73,6 @@ pyasn1==0.4.8
pycparser==2.22 ; platform_python_implementation != 'PyPy'
pydantic==2.10.6
pydantic-core==2.27.2
pydantic-extra-types==2.10.2
pydantic-settings==2.8.1
pygments==2.19.1
pytest==8.3.5
Expand All @@ -99,7 +97,7 @@ six==1.17.0
sniffio==1.3.1
sqlalchemy==2.0.38
sqlalchemy-crud-plus==1.6.0
starlette==0.37.2
starlette==0.46.1
termcolor==2.5.0
tomli==2.2.1 ; python_full_version < '3.11'
tornado==6.4.2
Expand All @@ -108,7 +106,6 @@ typing-extensions==4.12.2
tzdata==2025.1
ua-parser==1.0.1
ua-parser-builtins==0.18.0.post1
ujson==5.10.0
user-agents==2.2.0
uvicorn==0.34.0
uvloop==0.21.0 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'
Expand All @@ -119,6 +116,5 @@ wcwidth==0.2.13
websockets==15.0.1
win32-setctime==1.2.0 ; sys_platform == 'win32'
wsproto==1.2.0
xdbsearchip==1.0.2
zope-event==5.0
zope-interface==7.2
Loading