Skip to content

Commit baebdd9

Browse files
authored
Optimize dependencies to reduce package size (#548)
1 parent d1648bb commit baebdd9

File tree

5 files changed

+41
-163
lines changed

5 files changed

+41
-163
lines changed

backend/common/schema.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
33
from datetime import datetime
4+
from typing import Annotated
45

5-
from pydantic import BaseModel, ConfigDict, EmailStr, validate_email
6-
from pydantic_extra_types.phone_numbers import PhoneNumber
6+
from pydantic import BaseModel, ConfigDict, EmailStr, Field, validate_email
77

88
from backend.core.conf import settings
99

@@ -142,8 +142,7 @@
142142
}
143143

144144

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

148147

149148
class CustomEmailStr(EmailStr):

backend/utils/request_parse.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
from asgiref.sync import sync_to_async
66
from fastapi import Request
7+
from ip2loc import XdbSearcher
78
from user_agents import parse
8-
from XdbSearchIP.xdbSearcher import XdbSearcher
99

1010
from backend.common.dataclasses import IpInfo, UserAgentInfo
1111
from backend.common.log import log
@@ -80,7 +80,7 @@ async def parse_ip_info(request: Request) -> IpInfo:
8080
ip = get_request_ip(request)
8181
location = await redis_client.get(f'{settings.IP_LOCATION_REDIS_PREFIX}:{ip}')
8282
if location:
83-
country, region, city = location.split(' ')
83+
country, region, city = location.split('|')
8484
return IpInfo(ip=ip, country=country, region=region, city=city)
8585
if settings.IP_LOCATION_PARSE == 'online':
8686
location_info = await get_location_online(ip, request.headers.get('User-Agent'))
@@ -94,7 +94,7 @@ async def parse_ip_info(request: Request) -> IpInfo:
9494
city = location_info.get('city')
9595
await redis_client.set(
9696
f'{settings.IP_LOCATION_REDIS_PREFIX}:{ip}',
97-
f'{country} {region} {city}',
97+
f'{country}|{region}|{city}',
9898
ex=settings.IP_LOCATION_EXPIRE_SECONDS,
9999
)
100100
return IpInfo(ip=ip, country=country, region=region, city=city)

pyproject.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,26 @@ dependencies = [
2929
"fastapi-limiter>=0.1.6",
3030
"fastapi-oauth20>=0.0.1a2",
3131
"fastapi-pagination>=0.12.34",
32-
"fastapi[all]==0.111.0",
32+
"fastapi[standard]==0.115.11",
3333
"flower>=2.0.0",
3434
"gevent>=24.11.1",
35+
"ip2loc>=1.0.0",
3536
"itsdangerous>=2.2.0",
3637
"jinja2>=3.1.4",
3738
"loguru>=0.7.3",
3839
"msgspec>=0.19.0",
3940
"path==17.0.0",
40-
"phonenumbers>=8.13.0",
4141
"psutil>=6.0.0",
4242
"pwdlib>=0.2.1",
4343
"pydantic>=2.10.6",
44+
"pydantic-settings>=2.0.0",
4445
"python-jose>=3.3.0",
4546
"python-socketio>=5.12.0",
4647
"redis[hiredis]>=5.2.0",
4748
"rtoml>=0.12.0",
4849
"sqlalchemy-crud-plus==1.6.0",
4950
"sqlalchemy[asyncio]>=2.0.30",
5051
"user-agents==2.2.0",
51-
"XdbSearchIP>=1.0.2",
5252
]
5353

5454
[dependency-groups]

requirements.txt

+3-7
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ ecdsa==0.19.0
3030
email-validator==2.2.0
3131
exceptiongroup==1.2.2 ; python_full_version < '3.11'
3232
fast-captcha==0.3.2
33-
fastapi==0.111.0
33+
fastapi==0.115.11
3434
fastapi-cli==0.0.5
3535
fastapi-limiter==0.1.6
3636
fastapi-oauth20==0.0.1a2
@@ -48,6 +48,7 @@ humanize==4.12.1
4848
identify==2.6.9
4949
idna==3.10
5050
iniconfig==2.0.0
51+
ip2loc==1.0.0
5152
itsdangerous==2.2.0
5253
jinja2==3.1.6
5354
kombu==5.4.2
@@ -58,10 +59,8 @@ markupsafe==3.0.2
5859
mdurl==0.1.2
5960
msgspec==0.19.0
6061
nodeenv==1.9.1
61-
orjson==3.10.15
6262
packaging==24.2
6363
path==17.0.0
64-
phonenumbers==9.0.0
6564
pillow==11.1.0
6665
platformdirs==4.3.6
6766
pluggy==1.5.0
@@ -74,7 +73,6 @@ pyasn1==0.4.8
7473
pycparser==2.22 ; platform_python_implementation != 'PyPy'
7574
pydantic==2.10.6
7675
pydantic-core==2.27.2
77-
pydantic-extra-types==2.10.2
7876
pydantic-settings==2.8.1
7977
pygments==2.19.1
8078
pytest==8.3.5
@@ -99,7 +97,7 @@ six==1.17.0
9997
sniffio==1.3.1
10098
sqlalchemy==2.0.38
10199
sqlalchemy-crud-plus==1.6.0
102-
starlette==0.37.2
100+
starlette==0.46.1
103101
termcolor==2.5.0
104102
tomli==2.2.1 ; python_full_version < '3.11'
105103
tornado==6.4.2
@@ -108,7 +106,6 @@ typing-extensions==4.12.2
108106
tzdata==2025.1
109107
ua-parser==1.0.1
110108
ua-parser-builtins==0.18.0.post1
111-
ujson==5.10.0
112109
user-agents==2.2.0
113110
uvicorn==0.34.0
114111
uvloop==0.21.0 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'
@@ -119,6 +116,5 @@ wcwidth==0.2.13
119116
websockets==15.0.1
120117
win32-setctime==1.2.0 ; sys_platform == 'win32'
121118
wsproto==1.2.0
122-
xdbsearchip==1.0.2
123119
zope-event==5.0
124120
zope-interface==7.2

0 commit comments

Comments
 (0)