3 Commits

Author SHA1 Message Date
dependabot[bot]
6e9c212a5b Merge df51b1886b into 50d46ab835 2023-10-19 05:36:07 +00:00
dependabot[bot]
df51b1886b Bump @babel/traverse from 7.22.11 to 7.23.2 in /frontend
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.11 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-19 05:36:05 +00:00
50d46ab835 updating deps
All checks were successful
Build and push image / deploy (push) Has been cancelled
2023-10-13 10:17:44 +01:00
8 changed files with 487 additions and 456 deletions

View File

@@ -1,4 +1,4 @@
FROM python:3.10-slim-bullseye FROM python:3.12-slim-bookworm
ENV PYTHONFAULTHANDLER=1 \ ENV PYTHONFAULTHANDLER=1 \
PYTHONHASHSEED=random \ PYTHONHASHSEED=random \
@@ -16,16 +16,13 @@ WORKDIR /src
COPY . /src/ COPY . /src/
RUN apt update \ RUN apt update \
&& apt install -y software-properties-common \ && apt install -y npm cron unrar-free libmariadb-dev libpq-dev pkg-config swig \
&& apt-add-repository non-free \
&& apt update \
&& apt install -y npm cron unrar libmariadb-dev libpq-dev pkg-config \
&& pip install --upgrade pip \ && pip install --upgrade pip \
&& pip install -r requirements.txt \ && pip install -r requirements.txt \
&& cd frontend \ && cd frontend \
&& npm install \ && npm install \
&& npm run build \ && npm run build \
&& apt remove -y npm software-properties-common pkg-config \ && apt remove -y npm software-properties-common pkg-config swig \
&& rm -r node_modules \ && rm -r node_modules \
&& apt -y auto-remove \ && apt -y auto-remove \
&& apt clean \ && apt clean \

View File

@@ -1,4 +1,4 @@
poetry export --without-hashes -f requirements.txt --output requirements.txt poetry export --without-hashes -f requirements.txt --output requirements.txt
$version=poetry version -s $version=poetry version -s
docker build . --no-cache -t ajurna/cbwebreader -t ajurna/cbwebreader:$version docker build . -t ajurna/cbwebreader -t ajurna/cbwebreader:$version
docker push ajurna/cbwebreader --all-tags docker push ajurna/cbwebreader --all-tags

View File

@@ -191,10 +191,13 @@ BOOTSTRAP4 = {
}, },
} }
CSP_DEFAULT_SRC = ("'none'",) CSP_DEFAULT_SRC = ("'none'",)
CSP_STYLE_SRC = ("'self'", "'sha256-MBVp6JYxbC/wICelYC6eULCRpgi9kGezXXSaq/TS2+I='") CSP_STYLE_SRC = (
"'self'",
"'unsafe-inline'"
)
CSP_IMG_SRC = ("'self'", "data:") CSP_IMG_SRC = ("'self'", "data:")
CSP_FONT_SRC = ("'self'",) CSP_FONT_SRC = ("'self'",)
CSP_SCRIPT_SRC = ("'self'",) CSP_SCRIPT_SRC = ("'self'", "'sha256-IYBrMxCTJ62EwagLTIRncEIpWwTmoXcXkqv3KZm/Wik='")
CSP_CONNECT_SRC = ("'self'",) CSP_CONNECT_SRC = ("'self'",)
CSP_INCLUDE_NONCE_IN = ['script-src'] CSP_INCLUDE_NONCE_IN = ['script-src']
CSP_SCRIPT_SRC_ATTR = ("'self'",) # "'unsafe-inline'") CSP_SCRIPT_SRC_ATTR = ("'self'",) # "'unsafe-inline'")

View File

@@ -13,7 +13,7 @@ services:
expose: expose:
- 8000 - 8000
volumes: volumes:
- ${COMIC_BOOK_VOLUME}:${COMIC_BOOK_VOLUME} - ${COMIC_BOOK_VOLUME}:/comics
# - c:/comics:/comics # - c:/comics:/comics
- static_files:/static - static_files:/static
- media_files:/media - media_files:/media
@@ -35,7 +35,7 @@ services:
# command: /bin/bash entrypoint-cron.sh # command: /bin/bash entrypoint-cron.sh
database: database:
image: postgres:14-alpine image: postgres:16-alpine
expose: expose:
- 5432 - 5432
volumes: volumes:
@@ -62,4 +62,4 @@ services:
- cbwebreader - cbwebreader
volumes: volumes:
static_files: static_files:
media_files: media_files:

View File

@@ -152,12 +152,12 @@
} }
}, },
"node_modules/@babel/generator": { "node_modules/@babel/generator": {
"version": "7.22.10", "version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
"integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/types": "^7.22.10", "@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17", "@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1" "jsesc": "^2.5.1"
@@ -263,22 +263,22 @@
} }
}, },
"node_modules/@babel/helper-environment-visitor": { "node_modules/@babel/helper-environment-visitor": {
"version": "7.22.5", "version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-function-name": { "node_modules/@babel/helper-function-name": {
"version": "7.22.5", "version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/template": "^7.22.5", "@babel/template": "^7.22.15",
"@babel/types": "^7.22.5" "@babel/types": "^7.23.0"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -440,9 +440,9 @@
} }
}, },
"node_modules/@babel/helper-validator-identifier": { "node_modules/@babel/helper-validator-identifier": {
"version": "7.22.5", "version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
"integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -500,9 +500,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.22.13", "version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.13.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
"integrity": "sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==", "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
}, },
@@ -1773,33 +1773,33 @@
} }
}, },
"node_modules/@babel/template": { "node_modules/@babel/template": {
"version": "7.22.5", "version": "7.22.15",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
"integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.22.5", "@babel/code-frame": "^7.22.13",
"@babel/parser": "^7.22.5", "@babel/parser": "^7.22.15",
"@babel/types": "^7.22.5" "@babel/types": "^7.22.15"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.22.11", "version": "7.23.2",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
"integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.22.10", "@babel/code-frame": "^7.22.13",
"@babel/generator": "^7.22.10", "@babel/generator": "^7.23.0",
"@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.22.5", "@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6", "@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.22.11", "@babel/parser": "^7.23.0",
"@babel/types": "^7.22.11", "@babel/types": "^7.23.0",
"debug": "^4.1.0", "debug": "^4.1.0",
"globals": "^11.1.0" "globals": "^11.1.0"
}, },
@@ -1808,13 +1808,13 @@
} }
}, },
"node_modules/@babel/types": { "node_modules/@babel/types": {
"version": "7.22.11", "version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
"integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.22.5", "@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
}, },
"engines": { "engines": {

728
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -3,36 +3,36 @@ line_length = 119
[tool.poetry] [tool.poetry]
name = "cbwebreader" name = "cbwebreader"
version = "1.1.6" version = "1.1.7"
description = "CBR/Z Web Reader" description = "CBR/Z Web Reader"
authors = ["ajurna <ajurna@gmail.com>"] authors = ["ajurna <ajurna@gmail.com>"]
license = "Creative Commons Attribution-ShareAlike 4.0 International License" license = "Creative Commons Attribution-ShareAlike 4.0 International License"
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.10" python = "^3.12"
Django = "^4.1" Django = "^4.1"
gunicorn = "^20.0.4" gunicorn = "^21.2.0"
dj-database-url = "^1.3.0" dj-database-url = "^2.1.0"
python-dotenv = "^1.0.0" python-dotenv = "^1.0.0"
loguru = "^0.7.0" loguru = "^0.7.0"
django-silk = "^5.0.0" django-silk = "^5.0.0"
mysqlclient = "^2.0.1" mysqlclient = "^2.0.1"
psycopg2 = "^2.9.6" psycopg2-binary = "^2.9.6"
rarfile = "^4.0" rarfile = "^4.0"
django-extensions = "^3.2.1" django-extensions = "^3.2.1"
Pillow = "^9.3.0" Pillow = "^10.0.1"
django-imagekit = "^4.0.2" django-imagekit = "^5.0.0"
PyMuPDF = "~1.20.2" PyMuPDF = "~1.20.2"
django-bootstrap4 = "^23.1" django-bootstrap4 = "^23.1"
django-csp = "^3.7" django-csp = "^3.7"
django-boost = "^2.1" django-boost = "^2.1"
django-sri = "^0.5.0" django-sri = "^0.7.0"
django-permissions-policy = "^4.15.0" django-permissions-policy = "^4.15.0"
djangorestframework = "^3.13.1" djangorestframework = "^3.13.1"
django-filter = "^23.1" django-filter = "^23.1"
django-cors-headers = "^3.14.0" django-cors-headers = "^4.2.0"
djangorestframework-simplejwt = "^5.2.0" djangorestframework-simplejwt = "^5.2.0"
django-webpack-loader = "^1.6.0" django-webpack-loader = "^2.0.1"
drf-yasg = "^1.20.0" drf-yasg = "^1.20.0"
drf-extensions = "^0.7.1" drf-extensions = "^0.7.1"

View File

@@ -1,49 +1,46 @@
asgiref==3.7.2 ; python_version >= "3.10" and python_version < "4.0" asgiref==3.7.2 ; python_version >= "3.12" and python_version < "4.0"
autopep8==2.0.4 ; python_version >= "3.10" and python_version < "4.0" autopep8==2.0.4 ; python_version >= "3.12" and python_version < "4.0"
beautifulsoup4==4.12.2 ; python_version >= "3.10" and python_version < "4.0" beautifulsoup4==4.12.2 ; python_version >= "3.12" and python_version < "4.0"
colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" colorama==0.4.6 ; python_version >= "3.12" and python_version < "4.0" and sys_platform == "win32"
dj-database-url==1.3.0 ; python_version >= "3.10" and python_version < "4.0" dj-database-url==2.1.0 ; python_version >= "3.12" and python_version < "4.0"
django-appconf==1.0.5 ; python_version >= "3.10" and python_version < "4.0" django-appconf==1.0.5 ; python_version >= "3.12" and python_version < "4.0"
django-boost==2.1 ; python_version >= "3.10" and python_version < "4.0" django-boost==2.1 ; python_version >= "3.12" and python_version < "4.0"
django-bootstrap4==23.2 ; python_version >= "3.10" and python_version < "4.0" django-bootstrap4==23.2 ; python_version >= "3.12" and python_version < "4.0"
django-cors-headers==3.14.0 ; python_version >= "3.10" and python_version < "4.0" django-cors-headers==4.2.0 ; python_version >= "3.12" and python_version < "4.0"
django-csp==3.7 ; python_version >= "3.10" and python_version < "4.0" django-csp==3.7 ; python_version >= "3.12" and python_version < "4.0"
django-extensions==3.2.3 ; python_version >= "3.10" and python_version < "4.0" django-extensions==3.2.3 ; python_version >= "3.12" and python_version < "4.0"
django-filter==23.2 ; python_version >= "3.10" and python_version < "4.0" django-filter==23.3 ; python_version >= "3.12" and python_version < "4.0"
django-imagekit==4.1.0 ; python_version >= "3.10" and python_version < "4.0" django-imagekit==5.0.0 ; python_version >= "3.12" and python_version < "4.0"
django-permissions-policy==4.17.0 ; python_version >= "3.10" and python_version < "4.0" django-permissions-policy==4.17.0 ; python_version >= "3.12" and python_version < "4.0"
django-silk==5.0.3 ; python_version >= "3.10" and python_version < "4.0" django-silk==5.0.4 ; python_version >= "3.12" and python_version < "4.0"
django-sri==0.5.0 ; python_version >= "3.10" and python_version < "4.0" django-sri==0.7.0 ; python_version >= "3.12" and python_version < "4.0"
django-webpack-loader==1.8.1 ; python_version >= "3.10" and python_version < "4.0" django-webpack-loader==2.0.1 ; python_version >= "3.12" and python_version < "4.0"
django==4.2.4 ; python_version >= "3.10" and python_version < "4.0" django==4.2.5 ; python_version >= "3.12" and python_version < "4.0"
djangorestframework-simplejwt==5.3.0 ; python_version >= "3.10" and python_version < "4.0" djangorestframework-simplejwt==5.3.0 ; python_version >= "3.12" and python_version < "4.0"
djangorestframework==3.14.0 ; python_version >= "3.10" and python_version < "4.0" djangorestframework==3.14.0 ; python_version >= "3.12" and python_version < "4.0"
drf-extensions==0.7.1 ; python_version >= "3.10" and python_version < "4.0" drf-extensions==0.7.1 ; python_version >= "3.12" and python_version < "4.0"
drf-yasg==1.21.7 ; python_version >= "3.10" and python_version < "4.0" drf-yasg==1.21.7 ; python_version >= "3.12" and python_version < "4.0"
gprof2dot==2022.7.29 ; python_version >= "3.10" and python_version < "4.0" gprof2dot==2022.7.29 ; python_version >= "3.12" and python_version < "4.0"
gunicorn==20.1.0 ; python_version >= "3.10" and python_version < "4.0" gunicorn==21.2.0 ; python_version >= "3.12" and python_version < "4.0"
inflection==0.5.1 ; python_version >= "3.10" and python_version < "4.0" inflection==0.5.1 ; python_version >= "3.12" and python_version < "4.0"
loguru==0.7.0 ; python_version >= "3.10" and python_version < "4.0" loguru==0.7.2 ; python_version >= "3.12" and python_version < "4.0"
mysqlclient==2.2.0 ; python_version >= "3.10" and python_version < "4.0" mysqlclient==2.2.0 ; python_version >= "3.12" and python_version < "4.0"
packaging==23.1 ; python_version >= "3.10" and python_version < "4.0" packaging==23.2 ; python_version >= "3.12" and python_version < "4.0"
pilkit==2.0 ; python_version >= "3.10" and python_version < "4.0" pilkit==3.0 ; python_version >= "3.12" and python_version < "4.0"
pillow==9.5.0 ; python_version >= "3.10" and python_version < "4.0" pillow==10.0.1 ; python_version >= "3.12" and python_version < "4.0"
psycopg2==2.9.7 ; python_version >= "3.10" and python_version < "4.0" psycopg2-binary==2.9.9 ; python_version >= "3.12" and python_version < "4.0"
pycodestyle==2.11.0 ; python_version >= "3.10" and python_version < "4.0" pycodestyle==2.11.0 ; python_version >= "3.12" and python_version < "4.0"
pyjwt==2.8.0 ; python_version >= "3.10" and python_version < "4.0" pyjwt==2.8.0 ; python_version >= "3.12" and python_version < "4.0"
pymupdf==1.20.2 ; python_version >= "3.10" and python_version < "4.0" pymupdf==1.20.2 ; python_version >= "3.12" and python_version < "4.0"
python-dotenv==1.0.0 ; python_version >= "3.10" and python_version < "4.0" python-dotenv==1.0.0 ; python_version >= "3.12" and python_version < "4.0"
pytz==2023.3 ; python_version >= "3.10" and python_version < "4.0" pytz==2023.3.post1 ; python_version >= "3.12" and python_version < "4.0"
pyyaml==6.0.1 ; python_version >= "3.10" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.12" and python_version < "4.0"
rarfile==4.0 ; python_version >= "3.10" and python_version < "4.0" rarfile==4.1 ; python_version >= "3.12" and python_version < "4.0"
setuptools==68.1.2 ; python_version >= "3.10" and python_version < "4.0" soupsieve==2.5 ; python_version >= "3.12" and python_version < "4.0"
six==1.16.0 ; python_version >= "3.10" and python_version < "4.0" sqlparse==0.4.4 ; python_version >= "3.12" and python_version < "4.0"
soupsieve==2.4.1 ; python_version >= "3.10" and python_version < "4.0" typing-extensions==4.8.0 ; python_version >= "3.12" and python_version < "4.0"
sqlparse==0.4.4 ; python_version >= "3.10" and python_version < "4.0" tzdata==2023.3 ; python_version >= "3.12" and python_version < "4.0" and sys_platform == "win32"
tomli==2.0.1 ; python_version >= "3.10" and python_version < "3.11" ua-parser==0.18.0 ; python_version >= "3.12" and python_version < "4.0"
typing-extensions==4.7.1 ; python_version >= "3.10" and python_version < "4.0" uritemplate==4.1.1 ; python_version >= "3.12" and python_version < "4.0"
tzdata==2023.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" user-agents==2.2.0 ; python_version >= "3.12" and python_version < "4.0"
ua-parser==0.18.0 ; python_version >= "3.10" and python_version < "4.0" win32-setctime==1.1.0 ; python_version >= "3.12" and python_version < "4.0" and sys_platform == "win32"
uritemplate==4.1.1 ; python_version >= "3.10" and python_version < "4.0"
user-agents==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
win32-setctime==1.1.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32"