chore: Integrate pip-tools and safety, upgrade vulnerable dependencies

This commit is contained in:
InfinityPacer
2024-08-20 18:52:07 +08:00
parent 1f87bc643a
commit d5241a2eb8
6 changed files with 486 additions and 64 deletions
+1
View File
@@ -4,6 +4,7 @@ build/
dist/ dist/
nginx/ nginx/
test.py test.py
safety_report.txt
app/helper/sites.py app/helper/sites.py
app/helper/*.so app/helper/*.so
app/helper/*.pyd app/helper/*.pyd
+14 -3
View File
@@ -3,6 +3,7 @@ import os
import signal import signal
import sys import sys
import threading import threading
from contextlib import asynccontextmanager
from types import FrameType from types import FrameType
import uvicorn as uvicorn import uvicorn as uvicorn
@@ -41,9 +42,21 @@ from app.command import Command, CommandChian
from app.schemas import Notification, NotificationType from app.schemas import Notification, NotificationType
@asynccontextmanager
async def lifespan(app: FastAPI):
try:
print("Starting up...")
start_module()
yield
finally:
print("Shutting down...")
shutdown_server()
# App # App
App = FastAPI(title=settings.PROJECT_NAME, App = FastAPI(title=settings.PROJECT_NAME,
openapi_url=f"{settings.API_V1_STR}/openapi.json") openapi_url=f"{settings.API_V1_STR}/openapi.json",
lifespan=lifespan)
# 跨域 # 跨域
App.add_middleware( App.add_middleware(
@@ -189,7 +202,6 @@ def singal_handle():
signal.signal(signal.SIGINT, stop_event) signal.signal(signal.SIGINT, stop_event)
@App.on_event("shutdown")
def shutdown_server(): def shutdown_server():
""" """
服务关闭 服务关闭
@@ -213,7 +225,6 @@ def shutdown_server():
stop_frontend() stop_frontend()
@App.on_event("startup")
def start_module(): def start_module():
""" """
启动模块 启动模块
+108
View File
@@ -0,0 +1,108 @@
## 开发环境设置指南
本文档旨在帮助开发者快速设置开发环境,并介绍如何使用 `pip-tools` 管理依赖项和使用 `safety` 进行安全检查。
### 环境准备
在开始之前,请确保您的系统已安装以下软件:
- **Python 3.11 或更高版本**
- **pip** (Python 包管理器)
- **Git** (用于版本控制)
### 1. 创建虚拟环境
在项目根目录下创建并激活虚拟环境:
- 在 Windows 上:
```bash
python -m venv venv
.\venv\Scripts\activate
```
- 在 macOS/Linux 上:
```bash
python3 -m venv venv
source venv/bin/activate
```
虚拟环境确保项目的依赖项与系统全局环境隔离,防止冲突。
### 2. 使用 pip-tools 管理依赖项
我们使用 `pip-tools` 来管理项目的 Python 依赖项,这有助于保持 `requirements.txt` 文件的一致性和更新性。
#### 安装 pip-tools
首先,您需要安装 `pip-tools` 以便管理依赖项:
```bash
pip install pip-tools
```
#### 管理依赖项
1. **修改 `requirements.in` 文件**
`requirements.in` 文件是项目依赖项的源文件。要添加或更新依赖项,请直接编辑该文件。
2. **生成 `requirements.txt` 文件**
编辑完 `requirements.in` 文件后,运行以下命令生成或更新 `requirements.txt` 文件:
```bash
pip-compile requirements.in
```
这将根据 `requirements.in` 中指定的依赖项生成一个锁定的 `requirements.txt` 文件。
3. **安装依赖项**
使用以下命令安装 `requirements.txt` 文件中列出的依赖项:
```bash
pip install -r requirements.txt
```
### 3. 运行安全检查
我们使用 `safety` 工具来检查依赖项中是否存在已知的安全漏洞。请确保在每次更新依赖项后都运行安全检查,以确保项目的安全性。
#### 安装 safety
您可以使用以下命令安装 `safety`
```bash
pip install safety
```
#### 执行安全检查
运行以下命令以检查 `requirements.txt` 文件中列出的依赖项是否存在安全漏洞:
```bash
safety check -r requirements.txt --policy-file=safety.policy.yml > safety_report.txt
```
这将生成一个名为 `safety_report.txt` 的报告文件,您可以查看其中的漏洞报告并进行相应处理。
### 4. 提交代码前的检查
在提交代码之前,请确保完成以下步骤:
1. **确保依赖项已更新**:如果您对 `requirements.in` 进行了更改,请重新生成 `requirements.txt` 并安装依赖项。
2. **运行安全检查**:确保 `safety` 检查通过,没有新的安全漏洞。
3. **运行测试**:如果项目中包含测试,请确保所有测试都通过。运行以下命令以执行测试:
```bash
pytest
```
### 5. 参考资源
- [pip-tools 官方文档](https://github.com/jazzband/pip-tools)
- [safety 官方文档](https://pyup.io/safety/)
+62
View File
@@ -0,0 +1,62 @@
Cython~=3.0.2
pydantic~=1.10.13
SQLAlchemy~=2.0.15
uvicorn~=0.22.0
fastapi~=0.112.1
passlib~=1.7.4
PyJWT~=2.7.0
python-multipart~=0.0.9
alembic~=1.11.1
bcrypt~=4.0.1
regex~=2023.6.3
cn2an~=0.5.19
dateparser~=1.1.8
python-dateutil~=2.8.2
zhconv~=1.4.3
anitopy~=2.1.1
requests[socks]~=2.32.3
urllib3~=2.2.2
lxml~=4.9.2
pyquery~=2.0.0
ruamel.yaml~=0.17.31
APScheduler~=3.10.1
cryptography~=43.0.0
pytz~=2023.3
pycryptodome~=3.20.0
qbittorrent-api==2023.5.48
plexapi~=4.15.16
transmission-rpc~=4.3.0
Jinja2~=3.1.4
pyparsing~=3.0.9
func_timeout==4.3.5
bs4~=0.0.1
beautifulsoup4~=4.12.2
pillow~=10.4.0
pyTelegramBotAPI~=4.12.0
playwright~=1.37.0
cf-clearance~=0.31.0
torrentool~=1.2.0
slack-bolt~=1.18.0
slack-sdk~=3.21.3
chardet~=4.0.0
starlette~=0.38.2
PyVirtualDisplay~=3.0
psutil~=5.9.4
python-dotenv~=1.0.1
python-hosts~=1.0.7
watchdog~=3.0.0
tailer~=0.4.1
openai~=0.27.2
cacheout~=0.14.1
click~=8.1.6
requests-cache~=0.5.2
parse~=1.19.0
docker~=6.1.3
cachetools~=5.3.1
fast-bencode~=1.1.3
pystray~=0.19.5
pyotp~=2.9.0
Pinyin2Hanzi~=0.1.1
pywebpush~=2.0.0
py115~=0.0.4
oss2~=2.18.6
+292 -61
View File
@@ -1,62 +1,293 @@
Cython~=3.0.2 #
pydantic~=1.10.8 # This file is autogenerated by pip-compile with Python 3.11
SQLAlchemy~=2.0.15 # by the following command:
uvicorn~=0.22.0 #
fastapi~=0.96.0 # pip-compile requirements.in
passlib~=1.7.4 #
PyJWT~=2.7.0 aiohappyeyeballs==2.4.0
python-multipart~=0.0.6 # via aiohttp
alembic~=1.11.1 aiohttp==3.10.5
bcrypt~=4.0.1 # via
regex~=2023.6.3 # openai
cn2an~=0.5.19 # pywebpush
dateparser~=1.1.8 aiosignal==1.3.1
python-dateutil~=2.8.2 # via aiohttp
zhconv~=1.4.3 alembic==1.11.3
anitopy~=2.1.1 # via -r requirements.in
requests[socks]~=2.31.0 aliyun-python-sdk-core==2.15.1
urllib3~=2.0.2 # via
lxml~=4.9.2 # aliyun-python-sdk-kms
pyquery~=2.0.0 # oss2
ruamel.yaml~=0.17.31 aliyun-python-sdk-kms==2.16.4
APScheduler~=3.10.1 # via oss2
cryptography~=41.0.1 anitopy==2.1.1
pytz~=2023.3 # via -r requirements.in
pycryptodome~=3.18.0 anyio==4.4.0
# via starlette
apscheduler==3.10.4
# via -r requirements.in
attrs==24.2.0
# via aiohttp
bcrypt==4.0.1
# via -r requirements.in
beautifulsoup4==4.12.3
# via
# -r requirements.in
# bs4
bs4==0.0.2
# via -r requirements.in
cacheout==0.14.1
# via -r requirements.in
cachetools==5.3.3
# via -r requirements.in
certifi==2024.7.4
# via requests
cf-clearance==0.31.0
# via -r requirements.in
cffi==1.17.0
# via cryptography
chardet==4.0.0
# via -r requirements.in
charset-normalizer==3.3.2
# via requests
click==8.1.7
# via
# -r requirements.in
# uvicorn
cn2an==0.5.22
# via -r requirements.in
colorama==0.4.6
# via
# click
# tqdm
crcmod==1.7
# via oss2
cryptography==43.0.0
# via
# -r requirements.in
# aliyun-python-sdk-core
# http-ece
# py-vapid
# pywebpush
cssselect==1.2.0
# via pyquery
cython==3.0.11
# via -r requirements.in
dateparser==1.1.8
# via -r requirements.in
docker==6.1.3
# via -r requirements.in
fast-bencode==1.1.6
# via -r requirements.in
fastapi==0.112.1
# via -r requirements.in
frozenlist==1.4.1
# via
# aiohttp
# aiosignal
func-timeout==4.3.5
# via -r requirements.in
greenlet==2.0.2
# via
# playwright
# sqlalchemy
h11==0.14.0
# via uvicorn
http-ece==1.2.1
# via pywebpush
idna==3.7
# via
# anyio
# requests
# yarl
jinja2==3.1.4
# via -r requirements.in
jmespath==0.10.0
# via aliyun-python-sdk-core
lxml==4.9.4
# via
# -r requirements.in
# pyquery
lz4==4.3.3
# via py115
mako==1.3.5
# via alembic
markupsafe==2.1.5
# via
# jinja2
# mako
multidict==6.0.5
# via
# aiohttp
# yarl
openai==0.27.10
# via -r requirements.in
oss2==2.18.6
# via -r requirements.in
packaging==24.1
# via docker
parse==1.19.1
# via -r requirements.in
passlib==1.7.4
# via -r requirements.in
pillow==10.4.0
# via
# -r requirements.in
# pystray
pinyin2hanzi==0.1.1
# via -r requirements.in
playwright==1.37.0
# via
# -r requirements.in
# cf-clearance
plexapi==4.15.16
# via -r requirements.in
proces==0.1.7
# via cn2an
psutil==5.9.8
# via -r requirements.in
py-vapid==1.9.1
# via pywebpush
py115==0.0.4
# via -r requirements.in
pycparser==2.22
# via cffi
pycryptodome==3.20.0
# via
# -r requirements.in
# oss2
# py115
pydantic==1.10.17
# via
# -r requirements.in
# fastapi
pyee==9.0.4
# via playwright
pyjwt==2.7.0
# via -r requirements.in
pyotp==2.9.0
# via -r requirements.in
pyparsing==3.0.9
# via -r requirements.in
pyquery==2.0.0
# via -r requirements.in
pysocks==1.7.1
# via requests
pystray==0.19.5
# via -r requirements.in
pytelegrambotapi==4.12.0
# via -r requirements.in
python-dateutil==2.8.2
# via
# -r requirements.in
# dateparser
python-dotenv==1.0.1
# via -r requirements.in
python-hosts==1.0.7
# via -r requirements.in
python-multipart==0.0.9
# via -r requirements.in
pytz==2023.4
# via
# -r requirements.in
# apscheduler
# dateparser
# py115
pyvirtualdisplay==3.0
# via -r requirements.in
pywebpush==2.0.0
# via -r requirements.in
pywin32==306
# via docker
qbittorrent-api==2023.5.48 qbittorrent-api==2023.5.48
plexapi~=4.15.12 # via -r requirements.in
transmission-rpc~=4.3.0 regex==2023.6.3
Jinja2~=3.1.2 # via
pyparsing~=3.0.9 # -r requirements.in
func_timeout==4.3.5 # dateparser
bs4~=0.0.1 requests[socks]==2.32.3
beautifulsoup4~=4.12.2 # via
pillow~=9.5.0 # -r requirements.in
pyTelegramBotAPI~=4.12.0 # docker
playwright~=1.37.0 # openai
cf_clearance~=0.29.2 # oss2
torrentool~=1.2.0 # plexapi
slack_bolt~=1.18.0 # py115
slack_sdk~=3.21.3 # pytelegrambotapi
chardet~=4.0.0 # pywebpush
starlette~=0.27.0 # qbittorrent-api
PyVirtualDisplay~=3.0 # requests-cache
psutil~=5.9.4 # transmission-rpc
python_dotenv~=1.0.0 requests-cache==0.5.2
python_hosts~=1.0.3 # via -r requirements.in
watchdog~=3.0.0 ruamel-yaml==0.17.40
tailer~=0.4.1 # via -r requirements.in
openai~=0.27.2 ruamel-yaml-clib==0.2.8
cacheout~=0.14.1 # via ruamel-yaml
click~=8.1.6 six==1.16.0
requests_cache~=0.5.2 # via
parse~=1.19.0 # apscheduler
docker~=6.1.3 # oss2
cachetools~=5.3.1 # pystray
fast-bencode~=1.1.3 # python-dateutil
pystray~=0.19.5 # pywebpush
pyotp~=2.9.0 # qbittorrent-api
Pinyin2Hanzi~=0.1.1 slack-bolt==1.18.0
pywebpush~=2.0.0 # via -r requirements.in
py115~=0.0.4 slack-sdk==3.21.3
oss2~=2.18.6 # via
# -r requirements.in
# slack-bolt
sniffio==1.3.1
# via anyio
soupsieve==2.6
# via beautifulsoup4
sqlalchemy==2.0.32
# via
# -r requirements.in
# alembic
starlette==0.38.2
# via
# -r requirements.in
# fastapi
tailer==0.4.1
# via -r requirements.in
torrentool==1.2.0
# via -r requirements.in
tqdm==4.66.5
# via openai
transmission-rpc==4.3.1
# via -r requirements.in
typing-extensions==4.12.2
# via
# alembic
# fastapi
# pydantic
# pyee
# sqlalchemy
# transmission-rpc
tzdata==2024.1
# via tzlocal
tzlocal==5.2
# via
# apscheduler
# dateparser
urllib3==2.2.2
# via
# -r requirements.in
# docker
# qbittorrent-api
# requests
uvicorn==0.22.0
# via -r requirements.in
watchdog==3.0.0
# via -r requirements.in
websocket-client==1.8.0
# via docker
yarl==1.9.4
# via aiohttp
zhconv==1.4.3
# via -r requirements.in
# The following packages are considered to be unsafe in a requirements file:
# setuptools
+9
View File
@@ -0,0 +1,9 @@
security:
ignore-unpinned-requirements: False
ignore-vulnerabilities:
70612:
reason: The official statement indicates that this vulnerability is not valid because users should use sandboxing when handling untrusted templates.
65532:
reason: Legacy issue related to tvdbapi usage.
40100:
reason: Legacy issue related to tvdbapi usage.