mirror of
https://github.com/django-q2/django-q2.git
synced 2026-09-15 13:37:56 +08:00
Migrate poetry to uv (#337)
This commit is contained in:
8
.github/workflows/release.yml
vendored
8
.github/workflows/release.yml
vendored
@@ -23,9 +23,11 @@ jobs:
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install gettext
|
||||
python -m pip install pip setuptools django poetry
|
||||
pip install uv==0.12.1 django==5.2
|
||||
# compile messages to get .mo files
|
||||
django-admin compilemessages
|
||||
uv run django-admin compilemessages
|
||||
- name: Build and publish package
|
||||
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
|
||||
run: poetry --build --username=__token__ --password=${{ secrets.PYPI_TOKEN }} publish
|
||||
run: |
|
||||
uv build
|
||||
uv publish --token ${{ secrets.PYPI_TOKEN }}
|
||||
|
||||
9
.github/workflows/test.yml
vendored
9
.github/workflows/test.yml
vendored
@@ -86,13 +86,12 @@ jobs:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install dependencies with Django ${{ matrix.django }}
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install poetry==1.8.5
|
||||
poetry add "django~=${{ matrix.django }}a1" --python=${{ matrix.python-version }}
|
||||
poetry install -E testing
|
||||
python -m pip install uv==0.12.1
|
||||
uv sync --extra testing --python ${{ matrix.python-version }}
|
||||
uv pip install "django~=${{ matrix.django }}a1"
|
||||
- name: Run Tests
|
||||
run: |
|
||||
poetry run pytest --cov=./django_q --cov-report=xml
|
||||
uv run pytest --cov=./django_q --cov-report=xml
|
||||
env:
|
||||
MONGO_HOST: "127.0.0.1"
|
||||
REDIS_HOST: "127.0.0.1"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Sets the python version
|
||||
FROM python:3.9-slim-bookworm
|
||||
FROM python:3.13-slim-bookworm
|
||||
|
||||
# Allows the logs generated by python apps to be rendered in the terminal
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
@@ -9,20 +9,13 @@ ENV SHELL /bin/bash
|
||||
|
||||
RUN set -ex \
|
||||
&& apt update \
|
||||
&& apt-get install gcc python3-dev --yes
|
||||
&& apt-get install gcc gettext python3-dev --yes
|
||||
|
||||
# Upgrades pip
|
||||
RUN pip install -U pip setuptools
|
||||
|
||||
# Install poetry
|
||||
RUN pip install poetry==1.8.2
|
||||
# Install UV
|
||||
RUN pip install uv==0.12.1
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN poetry lock --no-update
|
||||
|
||||
RUN poetry config virtualenvs.create false
|
||||
|
||||
RUN poetry install -E testing
|
||||
RUN uv sync --extra testing
|
||||
|
||||
22
Makefile
22
Makefile
@@ -1,21 +1,31 @@
|
||||
dev:
|
||||
docker compose -f web-docker-compose.yaml up
|
||||
|
||||
build-test:
|
||||
docker compose -f test-services-docker-compose.yaml build --no-cache
|
||||
|
||||
lock:
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 uv lock
|
||||
|
||||
test:
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 poetry run pytest
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 uv run pytest
|
||||
|
||||
shell:
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 poetry run python manage.py shell
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 uv run python manage.py shell
|
||||
|
||||
makemigrations:
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 poetry run python manage.py makemigrations
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 uv run python manage.py makemigrations
|
||||
|
||||
migrate:
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 poetry run python manage.py migrate
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 uv run python manage.py migrate
|
||||
|
||||
build-package:
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 uv run django-admin compilemessages
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 uv build
|
||||
|
||||
createsuperuser:
|
||||
docker compose -f web-docker-compose.yaml run --rm web python manage.py createsuperuser
|
||||
|
||||
format:
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 poetry run ruff format .
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 poetry run ruff check . --fix
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 uv run ruff format .
|
||||
docker compose -f test-services-docker-compose.yaml run --rm django-q2 uv run ruff check . --fix
|
||||
|
||||
@@ -97,7 +97,9 @@ def monitor(run_once=False, broker=None):
|
||||
for stat in stats:
|
||||
status = stat.status
|
||||
# color status
|
||||
if stat.status == Conf.WORKING:
|
||||
if stat.status == Conf.STARTING:
|
||||
status = term.yellow(str(Conf.STARTING))
|
||||
elif stat.status == Conf.WORKING:
|
||||
status = term.green(str(Conf.WORKING))
|
||||
elif stat.status == Conf.STOPPING:
|
||||
status = term.yellow(str(Conf.STOPPING))
|
||||
@@ -105,6 +107,8 @@ def monitor(run_once=False, broker=None):
|
||||
status = term.red(str(Conf.STOPPED))
|
||||
elif stat.status == Conf.IDLE:
|
||||
status = str(Conf.IDLE)
|
||||
else:
|
||||
status = _("Unknown")
|
||||
# color q's
|
||||
tasks = str(stat.task_q_size)
|
||||
if stat.task_q_size > 0:
|
||||
@@ -114,10 +118,14 @@ def monitor(run_once=False, broker=None):
|
||||
results = stat.done_q_size
|
||||
if results > 0:
|
||||
results = term.cyan(str(results))
|
||||
else:
|
||||
results = str(results)
|
||||
# color workers
|
||||
workers = len(stat.workers)
|
||||
if workers < Conf.WORKERS:
|
||||
workers = term.yellow(str(workers))
|
||||
else:
|
||||
workers = str(workers)
|
||||
# format uptime
|
||||
uptime = (timezone.now() - stat.tob).total_seconds()
|
||||
hours, remainder = divmod(uptime, 3600)
|
||||
@@ -150,7 +158,7 @@ def monitor(run_once=False, broker=None):
|
||||
)
|
||||
print(
|
||||
term.move(i, 6 * col_width)
|
||||
+ term.center(stat.reincarnations, width=col_width - 1)
|
||||
+ term.center(str(stat.reincarnations), width=col_width - 1)
|
||||
)
|
||||
print(
|
||||
term.move(i, 7 * col_width)
|
||||
@@ -411,27 +419,29 @@ def memory(run_once=False, workers=False, broker=None):
|
||||
)
|
||||
print(
|
||||
term.move(row, 2 * col_width)
|
||||
+ term.center(memory_available_percentage, width=col_width - 1)
|
||||
+ term.center(str(memory_available_percentage), width=col_width - 1)
|
||||
)
|
||||
print(
|
||||
term.move(row, 3 * col_width)
|
||||
+ term.center(memory_available, width=col_width - 1)
|
||||
+ term.center(str(memory_available), width=col_width - 1)
|
||||
)
|
||||
print(
|
||||
term.move(row, 4 * col_width)
|
||||
+ term.center(
|
||||
round(psutil.virtual_memory().total / 1024**2, 2),
|
||||
str(round(psutil.virtual_memory().total / 1024**2, 2)),
|
||||
width=col_width - 1,
|
||||
)
|
||||
)
|
||||
print(
|
||||
term.move(row, 5 * col_width)
|
||||
+ term.center(get_process_mb(stat.sentinel), width=col_width - 1)
|
||||
+ term.center(
|
||||
str(get_process_mb(stat.sentinel)), width=col_width - 1
|
||||
)
|
||||
)
|
||||
print(
|
||||
term.move(row, 6 * col_width)
|
||||
+ term.center(
|
||||
get_process_mb(getattr(stat, "monitor", None)),
|
||||
str(get_process_mb(getattr(stat, "monitor", None))),
|
||||
width=col_width - 1,
|
||||
)
|
||||
)
|
||||
@@ -444,7 +454,7 @@ def memory(run_once=False, workers=False, broker=None):
|
||||
print(
|
||||
term.move(row, 7 * col_width)
|
||||
+ term.center(
|
||||
workers_mb or "NO_PROCESSES_FOUND", width=col_width - 1
|
||||
str(workers_mb or "NO_PROCESSES_FOUND"), width=col_width - 1
|
||||
)
|
||||
)
|
||||
row += 1
|
||||
@@ -476,7 +486,7 @@ def memory(run_once=False, workers=False, broker=None):
|
||||
mb_used = get_process_mb(worker_pid)
|
||||
print(
|
||||
term.move(row, (idx + 1) * col_width)
|
||||
+ term.center(mb_used, width=col_width - 1)
|
||||
+ term.center(str(mb_used), width=col_width - 1)
|
||||
)
|
||||
row += 1
|
||||
row += 1
|
||||
|
||||
1536
poetry.lock
generated
1536
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
142
pyproject.toml
142
pyproject.toml
@@ -1,91 +1,87 @@
|
||||
[build-system]
|
||||
requires = ["poetry-core>=1.0.0"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
requires = ["uv_build>=0.10.7,<=0.12.1"]
|
||||
build-backend = "uv_build"
|
||||
|
||||
[tool.poetry]
|
||||
[project]
|
||||
name = "django-q2"
|
||||
version = "1.10.0"
|
||||
packages = [
|
||||
{ include = "django_q" },
|
||||
]
|
||||
description = "A multiprocessing distributed task queue for Django"
|
||||
authors = ["Stan Triepels <django-q2@stantriepels.com>", "Ilan Steemers <koed00@gmail.com>"]
|
||||
maintainers = ["Stan Triepels <django-q2@stantriepels.com>"]
|
||||
authors = [
|
||||
{ name = "Stan Triepels", email = "django-q2@stantriepels.com" },
|
||||
{ name = "Ilan Steemers", email = "koed00@gmail.com" },
|
||||
]
|
||||
requires-python = ">=3.9,<4"
|
||||
readme = "README.rst"
|
||||
license = "MIT"
|
||||
readme = 'README.rst'
|
||||
|
||||
repository = "https://github.com/GDay/django-q2"
|
||||
homepage = "https://django-q2.readthedocs.org"
|
||||
documentation = "https://django-q2.readthedocs.org"
|
||||
|
||||
keywords = ["django", "distributed", "multiprocessing", "queue", "scheduler"]
|
||||
|
||||
maintainers = [{ name = "Stan Triepels", email = "django-q2@stantriepels.com" }]
|
||||
keywords = [
|
||||
"django",
|
||||
"distributed",
|
||||
"multiprocessing",
|
||||
"queue",
|
||||
"scheduler",
|
||||
]
|
||||
classifiers = [
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
'Environment :: Web Environment',
|
||||
'Framework :: Django',
|
||||
'Intended Audience :: Developers',
|
||||
'License :: OSI Approved :: MIT License',
|
||||
'Operating System :: POSIX',
|
||||
'Operating System :: MacOS',
|
||||
'Programming Language :: Python',
|
||||
'Programming Language :: Python :: 3',
|
||||
'Programming Language :: Python :: 3.9',
|
||||
'Programming Language :: Python :: 3.10',
|
||||
'Programming Language :: Python :: 3.11',
|
||||
'Programming Language :: Python :: 3.12',
|
||||
'Programming Language :: Python :: 3.13',
|
||||
'Topic :: Internet :: WWW/HTTP',
|
||||
'Topic :: System :: Distributed Computing',
|
||||
'Topic :: Software Development :: Libraries :: Python Modules',
|
||||
"Development Status :: 5 - Production/Stable",
|
||||
"Environment :: Web Environment",
|
||||
"Framework :: Django",
|
||||
"Intended Audience :: Developers",
|
||||
"Operating System :: POSIX",
|
||||
"Operating System :: MacOS",
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Topic :: Internet :: WWW/HTTP",
|
||||
"Topic :: System :: Distributed Computing",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
"Programming Language :: Python :: 3.14",
|
||||
]
|
||||
dependencies = [
|
||||
"django>=4.2",
|
||||
"django-picklefield>=3.1,<4",
|
||||
"importlib-metadata>=3.6 ; python_full_version < '3.10'",
|
||||
]
|
||||
|
||||
include = [
|
||||
{ path = "CHANGELOG.md", format = "sdist" },
|
||||
[project.optional-dependencies]
|
||||
testing = [
|
||||
"django-redis",
|
||||
"croniter",
|
||||
"hiredis",
|
||||
"psutil",
|
||||
"iron-mq",
|
||||
"boto3",
|
||||
"pymongo",
|
||||
"blessed",
|
||||
"redis",
|
||||
"setproctitle",
|
||||
"pytest",
|
||||
"pytest-django",
|
||||
"pytest-cov",
|
||||
"ruff",
|
||||
]
|
||||
|
||||
[tool.poetry.plugins] # Optional super table
|
||||
|
||||
[tool.poetry.plugins."djangoq.errorreporters"]
|
||||
"rollbar" = "django_q_rollbar:Rollbar"
|
||||
"sentry" = "django_q_sentry:Sentry"
|
||||
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = ">=3.9,<4"
|
||||
django = ">=4.2"
|
||||
django-picklefield = "^3.1"
|
||||
|
||||
blessed = { version = "^1.19.1", optional = true }
|
||||
hiredis = { version = "^2.0.0", optional = true }
|
||||
psutil = { version = "^5.9.2", optional = true }
|
||||
django-redis = { version = "^5.2.0", optional = true }
|
||||
iron-mq = { version = "^0.9", optional = true }
|
||||
boto3 = { version = "^1.24.92", optional = true }
|
||||
pymongo = { version = "^4.2.0", optional = true }
|
||||
croniter = { version = "^2.0.1", optional = true }
|
||||
django-q-rollbar = {version = ">=0.1", optional = true}
|
||||
django-q-sentry = {version = ">=0.1", optional = true}
|
||||
redis = {version = "^4.3.4", optional = true}
|
||||
setproctitle = {version = "^1.3.2", optional = true}
|
||||
importlib-metadata = {version = ">=3.6", python = "<3.10"}
|
||||
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
pytest = "^7.1.3"
|
||||
pytest-django = "^4.5.2"
|
||||
Sphinx = "^4.0.2"
|
||||
pytest-cov = "^4.0.0"
|
||||
ruff = "^0.4.4"
|
||||
|
||||
[tool.poetry.extras]
|
||||
requires = ["poetry_core"]
|
||||
build-backend = ["poetry.core.masonry.api"]
|
||||
testing = ["django-redis", "croniter", "hiredis", "psutil", "iron-mq", "boto3", "pymongo", "blessed", "redis", "setproctitle"]
|
||||
rollbar = ["django-q-rollbar"]
|
||||
sentry = ["django-q-sentry"]
|
||||
croniter = ["croniter"]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://django-q2.readthedocs.org"
|
||||
Repository = "https://github.com/GDay/django-q2"
|
||||
Documentation = "https://django-q2.readthedocs.org"
|
||||
|
||||
[project.entry-points."djangoq.errorreporters"]
|
||||
rollbar = "django_q_rollbar:Rollbar"
|
||||
sentry = "django_q_sentry:Sentry"
|
||||
|
||||
[tool.uv.build-backend]
|
||||
module-name = ["django_q"]
|
||||
module-root = ""
|
||||
source-include = ["CHANGELOG.md"]
|
||||
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
multi_line_output = 3
|
||||
|
||||
Reference in New Issue
Block a user