chore(deps): updated versions

This commit is contained in:
ITQ
2025-07-22 21:54:10 +03:00
parent d1a0f20c49
commit 0ab9a70645
11 changed files with 167 additions and 184 deletions
+2 -2
View File
@@ -109,7 +109,7 @@ aiogram is a modern and fully asynchronous framework for Telegram bot developmen
### [Redis](https://redis.io/) ### [Redis](https://redis.io/)
Redis is an in-memory data structure store often used as a database, cache, and message broker. It supports various data structures and offers high performance for read and write operations, making it suitable for caching and real-time analytics. Very popular and has big community for today. In project used as fsm for aiogram (to avoid data loss on restart), caches (current_date, mlscores, clicks, views) for backend and as broker for Celery. Redis is an in-memory data structure store often used as a database, cache, and message broker. It supports various data structures and offers high performance for read and write operations, making it suitable for caching and real-time analytics. Very popular and has big community for today. In project used as fsm for aiogram (to avoid data loss on restart), caches (mlscores, clicks, views) for backend and as broker for Celery.
### [Postgres](https://www.postgresql.org/) ### [Postgres](https://www.postgresql.org/)
@@ -268,7 +268,7 @@ Default login: `admin`
Default password: `proooooood` Default password: `proooooood`
Analytics dashboard when deployed with default docker compose: [localhost:13243/d/adnova-statistics/statistics](http://localhost:13243/d/adnova-statisticss/statistics). You can enter advertiser id and get detailed advertiser statistics and also detailed statistics for each advertiser's campaign. Analytics dashboard when deployed with default docker compose: [localhost:13243/d/adnova-advertiser-statistics](http://localhost:13243/d/adnova-advertiser-statistics/statistics). You can enter advertiser id and get detailed advertiser statistics and also detailed statistics for each advertiser's campaign.
Demonstration: Demonstration:
+4 -4
View File
@@ -1,7 +1,7 @@
# Stage 1: Install dependencies # Stage 1: Install dependencies
FROM docker.io/python:3.11-alpine3.20 AS builder FROM docker.io/python:3.13-alpine3.22 AS builder
COPY --from=ghcr.io/astral-sh/uv:0.4.30 /uv /uvx /bin/ COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app WORKDIR /app
@@ -17,7 +17,7 @@ RUN uv sync --no-dev --no-install-project --no-cache
# Stage 2: Start the application # Stage 2: Start the application
FROM docker.io/python:3.11-alpine3.20 FROM docker.io/python:3.13-alpine3.22
WORKDIR /app WORKDIR /app
@@ -39,4 +39,4 @@ EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --start-interval=2s --retries=3 \ HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --start-interval=2s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:8080/health?format=json || exit 1 CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:8080/health?format=json || exit 1
CMD gunicorn config.wsgi --workers=8 -b 0.0.0.0:8080 --access-logfile - --error-logfile - CMD [ "gunicorn", "config.wsgi", "--workers=8", "-b", "0.0.0.0:8080", "--access-logfile", "-", "--error-logfile", "-" ]
+6 -5
View File
@@ -1,7 +1,7 @@
# Stage 1: Install dependencies and compile staticfiles # Stage 1: Install dependencies and compile staticfiles
FROM docker.io/python:3.11-alpine3.20 AS builder FROM docker.io/python:3.13-alpine3.22 AS builder
COPY --from=ghcr.io/astral-sh/uv:0.4.30 /uv /uvx /bin/ COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app WORKDIR /app
@@ -17,11 +17,12 @@ RUN uv sync --no-dev --no-install-project --no-cache
COPY . . COPY . .
RUN uv run python manage.py collectstatic --noinput RUN uv run --no-dev python manage.py collectstatic --noinput
# Stage 2: Start nginx and serve staticfiles # Stage 2: Start nginx and serve staticfiles
FROM docker.io/nginx:latest FROM docker.io/nginx:1.29-alpine-slim
COPY --from=builder /app/static /usr/share/nginx/html COPY --from=builder /app/static /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"] CMD [ "nginx", "-g", "daemon off;" ]
+3 -3
View File
@@ -4,9 +4,9 @@
Ensure you have the following installed on your system: Ensure you have the following installed on your system:
- [Python](https://www.python.org/) (>=3.10,<3.12) - [Python](https://www.python.org/) (>=3.10,<3.14)
- [uv](https://docs.astral.sh/uv/) - [uv](https://docs.astral.sh/uv/) (latest version recommended)
- [Docker](https://www.docker.com/) (for containerized setup) - [Docker](https://www.docker.com/) (for containerized setup, latest version recommended)
## Basic setup ## Basic setup
+69 -69
View File
@@ -1,38 +1,38 @@
[project] [project]
name = "adnova-backend"
version = "0.1.0"
readme = "README.md"
requires-python = ">=3.10,<3.12"
dependencies = [ dependencies = [
"celery>=5.4.0", "celery>=5.5.0,<6.0.0",
"colorlog>=6.9.0", "colorlog>=6.9.0,<7.0.0",
"django-cors-headers>=4.6.0", "django-cors-headers>=4.7.0,<5.0.0",
"django-environ>=0.11.2", "django-environ>=0.12.0,<1.0.0",
"django-extensions>=3.2.3", "django-extensions>=4.1.0,<5.0.0",
"django-guid>=3.5.0", "django-guid>=3.5.1,<4.0.0",
"django-health-check>=3.18.3", "django-health-check>=3.18.3,<4.0.0",
"django-minio-storage>=0.5.7", "django-minio-storage>=0.5.7,<0.6.0",
"django-ninja>=1.3.0", "django-ninja>=1.3.0,<2.0.0",
"django-stubs-ext>=5.1.3", "django-stubs-ext>=5.1.3,<6.0.0",
"gunicorn>=23.0.0", "gunicorn>=23.0.0,<24.0.0",
"httpx>=0.28.1", "httpx>=0.28.1,<0.29.0",
"pillow>=11.1.0", "pillow>=11.1.0,<12.0.0",
"psycopg2-binary>=2.9.10", "psycopg2-binary>=2.9.10,<3.0.0",
"pydantic>=2.10.5", "pydantic>=2.10.5,<3.0.0",
"pyjwt>=2.10.1", "pyjwt>=2.10.1,<3.0.0",
"python-json-logger>=3.2.1", "python-json-logger>=3.2.1,<4.0.0",
"pytz>=2024.2", "pytz>=2024.2,<2025.0",
"redis>=5.2.1", "redis>=6.2.0,<7.0.0",
"yandex-cloud-ml-sdk>=0.3.1", "yandex-cloud-ml-sdk>=0.3.1,<0.4.0",
] ]
name = "adnova-backend"
readme = "README.md"
requires-python = ">=3.10,<3.14"
version = "0.1.0"
[dependency-groups] [dependency-groups]
dev = [ dev = [
"coverage>=7.6.12", "coverage",
"django-debug-toolbar>=4.4.6", "django-debug-toolbar>=5.2,<5.3",
"django-stubs[compatible-mypy]>=5.1.3", "django-stubs[compatible-mypy]",
"mypy>=1.15.0", "mypy",
"ruff>=0.9.3", "ruff",
] ]
[tool.ruff] [tool.ruff]
@@ -66,7 +66,7 @@ extend-include = []
fix = false fix = false
fix-only = false fix-only = false
force-exclude = true force-exclude = true
include = ["*.py", "*.pyi", "*.ipynb", "**/pyproject.toml"] include = ["**/pyproject.toml", "*.ipynb", "*.py", "*.pyi"]
indent-width = 4 indent-width = 4
line-length = 79 line-length = 79
namespace-packages = [] namespace-packages = []
@@ -81,20 +81,20 @@ unsafe-fixes = false
[tool.ruff.analyze] [tool.ruff.analyze]
detect-string-imports = true detect-string-imports = true
direction = "Dependencies" direction = "Dependencies"
exclude = [] exclude = []
include-dependencies = {} include-dependencies = {}
preview = false preview = false
[tool.ruff.format] [tool.ruff.format]
docstring-code-format = true docstring-code-format = true
docstring-code-line-length = 79 docstring-code-line-length = 79
exclude = [] exclude = []
indent-style = "space" indent-style = "space"
line-ending = "lf" line-ending = "lf"
preview = false preview = false
quote-style = "double" quote-style = "double"
skip-magic-trailing-comma = false skip-magic-trailing-comma = false
[tool.ruff.lint] [tool.ruff.lint]
allowed-confusables = [""] allowed-confusables = [""]
@@ -109,26 +109,26 @@ extend-unsafe-fixes = []
external = [] external = []
fixable = ["ALL"] fixable = ["ALL"]
ignore = [ ignore = [
"ARG", "ANN401",
"D", "ARG",
"ANN401", "COM812",
"COM812", "D",
"DJ001", "DJ001",
"DJ007", "DJ007",
"FBT001", "FBT001",
"FBT002", "FBT002",
"N813", "N813",
"PLR2004", "PLR2004",
"PT009", "PT009",
"PT027", "PT027",
"RUF001", "RUF001",
"S311", "S311",
] ]
logger-objects = [] logger-objects = []
per-file-ignores = {} per-file-ignores = {}
preview = false preview = false
select = ["ALL"] select = ["ALL"]
task-tags = ["TODO", "FIXME", "HACK", "WORKOUT"] task-tags = ["FIXME", "HACK", "TODO", "WORKOUT"]
typing-modules = [] typing-modules = []
unfixable = [] unfixable = []
@@ -136,26 +136,26 @@ unfixable = []
max-args = 6 max-args = 6
[tool.mypy] [tool.mypy]
plugins = ["mypy_django_plugin.main"]
ignore_missing_imports = true ignore_missing_imports = true
strict = false no_implicit_optional = false
show_error_context = false plugins = ["mypy_django_plugin.main"]
no_implicit_optional = false show_error_context = false
strict = false
[tool.django-stubs] [tool.django-stubs]
django_settings_module = "config.settings" django_settings_module = "config.settings"
strict_settings = false strict_settings = false
[tool.coverage.run] [tool.coverage.run]
omit = [ omit = [
"manage.py", "config/asgi.py",
"config/wsgi.py", "config/errors.py",
"config/asgi.py", "config/handlers.py",
"config/urls.py", "config/settings.py",
"config/settings.py", "config/urls.py",
"config/handlers.py", "config/wsgi.py",
"config/errors.py", "integrations/yandexai/*",
"integrations/yandexai/*" "manage.py",
] ]
[tool.coverage.report] [tool.coverage.report]
+4 -4
View File
@@ -1,7 +1,7 @@
# Stage 1: Install dependencies # Stage 1: Install dependencies
FROM docker.io/python:3.11-alpine3.20 AS builder FROM docker.io/python:3.13-alpine3.22 AS builder
COPY --from=ghcr.io/astral-sh/uv:0.4.30 /uv /uvx /bin/ COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app WORKDIR /app
@@ -17,7 +17,7 @@ RUN uv sync --no-dev --no-install-project --no-cache
# Stage 2: Start the application # Stage 2: Start the application
FROM docker.io/python:3.11-alpine3.20 FROM docker.io/python:3.13-alpine3.22
WORKDIR /app WORKDIR /app
@@ -34,4 +34,4 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONOPTIMIZE=2 \ PYTHONOPTIMIZE=2 \
PATH="/opt/venv/bin:$PATH" PATH="/opt/venv/bin:$PATH"
CMD python main.py CMD [ "python", "main.py" ]
+3 -3
View File
@@ -4,9 +4,9 @@
Ensure you have the following installed on your system: Ensure you have the following installed on your system:
- [Python](https://www.python.org/) (>=3.10,<3.12) - [Python](https://www.python.org/) (>=3.10,<3.14)
- [uv](https://docs.astral.sh/uv/) - [uv](https://docs.astral.sh/uv/) (latest version recommended)
- [Docker](https://www.docker.com/) (for containerized setup) - [Docker](https://www.docker.com/) (for containerized setup, latest version recommended)
## Basic setup ## Basic setup
+35 -38
View File
@@ -1,22 +1,19 @@
[project] [project]
name = "adnova-telegram_bot"
version = "0.1.0"
readme = "README.md"
requires-python = ">=3.10,<3.12"
dependencies = [ dependencies = [
"aiogram-dialog>=2.3.1", "aiogram-dialog>=2.4.0,<3.0.0",
"aiogram>=3.17.0", "aiogram>=3.17.0,<4.0.0",
"cachetools>=5.5.1", "cachetools>=5.0.0,<6.0.0",
"httpx>=0.28.1", "httpx>=0.28.0,<0.29.0",
"openapi-python-client>=0.23.1", "python-dotenv>=1.1.0,<2.0.0",
"python-dotenv>=1.0.1", "redis>=6.2.0,<7.0.0",
"redis>=5.2.1",
] ]
name = "adnova-telegram_bot"
readme = "README.md"
requires-python = ">=3.10,<3.14"
version = "0.1.0"
[dependency-groups] [dependency-groups]
dev = [ dev = ["ruff"]
"ruff>=0.9.6",
]
[tool.ruff] [tool.ruff]
builtins = [] builtins = []
@@ -49,7 +46,7 @@ extend-include = []
fix = false fix = false
fix-only = false fix-only = false
force-exclude = true force-exclude = true
include = ["*.py", "*.pyi", "*.ipynb", "**/pyproject.toml"] include = ["**/pyproject.toml", "*.ipynb", "*.py", "*.pyi"]
indent-width = 4 indent-width = 4
line-length = 79 line-length = 79
namespace-packages = [] namespace-packages = []
@@ -64,20 +61,20 @@ unsafe-fixes = false
[tool.ruff.analyze] [tool.ruff.analyze]
detect-string-imports = true detect-string-imports = true
direction = "Dependencies" direction = "Dependencies"
exclude = [] exclude = []
include-dependencies = {} include-dependencies = {}
preview = false preview = false
[tool.ruff.format] [tool.ruff.format]
docstring-code-format = true docstring-code-format = true
docstring-code-line-length = 79 docstring-code-line-length = 79
exclude = [] exclude = []
indent-style = "space" indent-style = "space"
line-ending = "lf" line-ending = "lf"
preview = false preview = false
quote-style = "double" quote-style = "double"
skip-magic-trailing-comma = false skip-magic-trailing-comma = false
[tool.ruff.lint] [tool.ruff.lint]
allowed-confusables = [""] allowed-confusables = [""]
@@ -92,23 +89,23 @@ extend-unsafe-fixes = []
external = [] external = []
fixable = ["ALL"] fixable = ["ALL"]
ignore = [ ignore = [
"ARG", "ANN401",
"D", "ARG",
"ANN401", "COM812",
"COM812", "D",
"DJ001", "DJ001",
"FBT001", "FBT001",
"FBT002", "FBT002",
"N813", "N813",
"PLR2004", "PLR2004",
"RUF001", "RUF001",
"TC002", "TC002",
] ]
logger-objects = [] logger-objects = []
per-file-ignores = {} per-file-ignores = {}
preview = false preview = false
select = ["ALL"] select = ["ALL"]
task-tags = ["TODO", "FIXME", "HACK", "WORKOUT"] task-tags = ["FIXME", "HACK", "TODO", "WORKOUT"]
typing-modules = [] typing-modules = []
unfixable = [] unfixable = []
+1 -1
View File
@@ -1,6 +1,6 @@
# AdNova Tests # AdNova Tests
There is `unit` and `e2e` tests available, unit tests are placed all around `backend` service folder and `e2e` tests placed [here](./e2e/). There is `unit` and `e2e` tests available, `unit` tests are placed all around `backend` service folder and `e2e` tests placed [here](./e2e/).
## Running unit tests ## Running unit tests
+4 -4
View File
@@ -4,10 +4,10 @@
Ensure you have the following installed on your system: Ensure you have the following installed on your system:
- [Python](https://www.python.org/) (>=3.10,<3.12) - [Python](https://www.python.org/) (>=3.10,<3.14)
- [uv](https://docs.astral.sh/uv/) - [uv](https://docs.astral.sh/uv/) (latest version recommended)
- [Docker](https://www.docker.com/) - [Docker](https://www.docker.com/) (latest version recommended)
- [Docker compose](https://docs.docker.com/compose/) (latest versions) - [Docker compose](https://docs.docker.com/compose/) (latest version recommended)
## Warning ## Warning
+36 -51
View File
@@ -1,18 +1,12 @@
[project] [project]
name = "adnova-e2e-tests" dependencies = ["httpx>=0.28.1", "pytest>=8.3.4", "python-dotenv>=1.0.1"]
version = "0.1.0" name = "adnova-tests-e2e"
readme = "README.md" readme = "README.md"
requires-python = ">=3.10,<3.12" requires-python = ">=3.10,<3.14"
dependencies = [ version = "0.1.0"
"httpx>=0.28.1",
"pytest>=8.3.4",
"python-dotenv>=1.0.1",
]
[dependency-groups] [dependency-groups]
dev = [ dev = ["ruff"]
"ruff>=0.9.6",
]
[tool.ruff] [tool.ruff]
builtins = [] builtins = []
@@ -45,7 +39,7 @@ extend-include = []
fix = false fix = false
fix-only = false fix-only = false
force-exclude = true force-exclude = true
include = ["*.py", "*.pyi", "*.ipynb", "**/pyproject.toml"] include = ["**/pyproject.toml", "*.ipynb", "*.py", "*.pyi"]
indent-width = 4 indent-width = 4
line-length = 79 line-length = 79
namespace-packages = [] namespace-packages = []
@@ -60,50 +54,41 @@ unsafe-fixes = false
[tool.ruff.analyze] [tool.ruff.analyze]
detect-string-imports = true detect-string-imports = true
direction = "Dependencies" direction = "Dependencies"
exclude = [] exclude = []
include-dependencies = {} include-dependencies = {}
preview = false preview = false
[tool.ruff.format] [tool.ruff.format]
docstring-code-format = true docstring-code-format = true
docstring-code-line-length = 79 docstring-code-line-length = 79
exclude = [] exclude = []
indent-style = "space" indent-style = "space"
line-ending = "lf" line-ending = "lf"
preview = false preview = false
quote-style = "double" quote-style = "double"
skip-magic-trailing-comma = false skip-magic-trailing-comma = false
[tool.ruff.lint] [tool.ruff.lint]
allowed-confusables = [""] allowed-confusables = [""]
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
exclude = ["tests.py"] exclude = ["tests.py"]
explicit-preview-rules = false explicit-preview-rules = false
extend-fixable = [] extend-fixable = []
extend-per-file-ignores = {} extend-per-file-ignores = {}
extend-safe-fixes = [] extend-safe-fixes = []
extend-select = [] extend-select = []
extend-unsafe-fixes = [] extend-unsafe-fixes = []
external = [] external = []
fixable = ["ALL"] fixable = ["ALL"]
ignore = [ ignore = ["ANN401", "ARG", "COM812", "D", "FBT001", "FBT002", "N813", "S101"]
"ARG", logger-objects = []
"D", per-file-ignores = {}
"ANN401", preview = false
"COM812", select = ["ALL"]
"FBT001", task-tags = ["FIXME", "HACK", "TODO", "WORKOUT"]
"FBT002", typing-modules = []
"N813", unfixable = []
"S101",
]
logger-objects = []
per-file-ignores = {}
preview = false
select = ["ALL"]
task-tags = ["TODO", "FIXME", "HACK", "WORKOUT"]
typing-modules = []
unfixable = []
[tool.ruff.lint.pylint] [tool.ruff.lint.pylint]
max-args = 6 max-args = 6