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: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get -y install gettext
|
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
|
# compile messages to get .mo files
|
||||||
django-admin compilemessages
|
uv run django-admin compilemessages
|
||||||
- name: Build and publish package
|
- name: Build and publish package
|
||||||
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
|
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 }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- name: Install dependencies with Django ${{ matrix.django }}
|
- name: Install dependencies with Django ${{ matrix.django }}
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install uv==0.12.1
|
||||||
pip install poetry==1.8.5
|
uv sync --extra testing --python ${{ matrix.python-version }}
|
||||||
poetry add "django~=${{ matrix.django }}a1" --python=${{ matrix.python-version }}
|
uv pip install "django~=${{ matrix.django }}a1"
|
||||||
poetry install -E testing
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: |
|
run: |
|
||||||
poetry run pytest --cov=./django_q --cov-report=xml
|
uv run pytest --cov=./django_q --cov-report=xml
|
||||||
env:
|
env:
|
||||||
MONGO_HOST: "127.0.0.1"
|
MONGO_HOST: "127.0.0.1"
|
||||||
REDIS_HOST: "127.0.0.1"
|
REDIS_HOST: "127.0.0.1"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Sets the python version
|
# 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
|
# Allows the logs generated by python apps to be rendered in the terminal
|
||||||
ENV PYTHONUNBUFFERED 1
|
ENV PYTHONUNBUFFERED 1
|
||||||
@@ -9,20 +9,13 @@ ENV SHELL /bin/bash
|
|||||||
|
|
||||||
RUN set -ex \
|
RUN set -ex \
|
||||||
&& apt update \
|
&& apt update \
|
||||||
&& apt-get install gcc python3-dev --yes
|
&& apt-get install gcc gettext python3-dev --yes
|
||||||
|
|
||||||
# Upgrades pip
|
# Install UV
|
||||||
RUN pip install -U pip setuptools
|
RUN pip install uv==0.12.1
|
||||||
|
|
||||||
# Install poetry
|
|
||||||
RUN pip install poetry==1.8.2
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN poetry lock --no-update
|
RUN uv sync --extra testing
|
||||||
|
|
||||||
RUN poetry config virtualenvs.create false
|
|
||||||
|
|
||||||
RUN poetry install -E testing
|
|
||||||
|
|||||||
22
Makefile
22
Makefile
@@ -1,21 +1,31 @@
|
|||||||
dev:
|
dev:
|
||||||
docker compose -f web-docker-compose.yaml up
|
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:
|
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:
|
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:
|
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:
|
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:
|
createsuperuser:
|
||||||
docker compose -f web-docker-compose.yaml run --rm web python manage.py createsuperuser
|
docker compose -f web-docker-compose.yaml run --rm web python manage.py createsuperuser
|
||||||
|
|
||||||
format:
|
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 uv 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 check . --fix
|
||||||
|
|||||||
@@ -97,7 +97,9 @@ def monitor(run_once=False, broker=None):
|
|||||||
for stat in stats:
|
for stat in stats:
|
||||||
status = stat.status
|
status = stat.status
|
||||||
# color 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))
|
status = term.green(str(Conf.WORKING))
|
||||||
elif stat.status == Conf.STOPPING:
|
elif stat.status == Conf.STOPPING:
|
||||||
status = term.yellow(str(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))
|
status = term.red(str(Conf.STOPPED))
|
||||||
elif stat.status == Conf.IDLE:
|
elif stat.status == Conf.IDLE:
|
||||||
status = str(Conf.IDLE)
|
status = str(Conf.IDLE)
|
||||||
|
else:
|
||||||
|
status = _("Unknown")
|
||||||
# color q's
|
# color q's
|
||||||
tasks = str(stat.task_q_size)
|
tasks = str(stat.task_q_size)
|
||||||
if stat.task_q_size > 0:
|
if stat.task_q_size > 0:
|
||||||
@@ -114,10 +118,14 @@ def monitor(run_once=False, broker=None):
|
|||||||
results = stat.done_q_size
|
results = stat.done_q_size
|
||||||
if results > 0:
|
if results > 0:
|
||||||
results = term.cyan(str(results))
|
results = term.cyan(str(results))
|
||||||
|
else:
|
||||||
|
results = str(results)
|
||||||
# color workers
|
# color workers
|
||||||
workers = len(stat.workers)
|
workers = len(stat.workers)
|
||||||
if workers < Conf.WORKERS:
|
if workers < Conf.WORKERS:
|
||||||
workers = term.yellow(str(workers))
|
workers = term.yellow(str(workers))
|
||||||
|
else:
|
||||||
|
workers = str(workers)
|
||||||
# format uptime
|
# format uptime
|
||||||
uptime = (timezone.now() - stat.tob).total_seconds()
|
uptime = (timezone.now() - stat.tob).total_seconds()
|
||||||
hours, remainder = divmod(uptime, 3600)
|
hours, remainder = divmod(uptime, 3600)
|
||||||
@@ -150,7 +158,7 @@ def monitor(run_once=False, broker=None):
|
|||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
term.move(i, 6 * col_width)
|
term.move(i, 6 * col_width)
|
||||||
+ term.center(stat.reincarnations, width=col_width - 1)
|
+ term.center(str(stat.reincarnations), width=col_width - 1)
|
||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
term.move(i, 7 * col_width)
|
term.move(i, 7 * col_width)
|
||||||
@@ -411,27 +419,29 @@ def memory(run_once=False, workers=False, broker=None):
|
|||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
term.move(row, 2 * col_width)
|
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(
|
print(
|
||||||
term.move(row, 3 * col_width)
|
term.move(row, 3 * col_width)
|
||||||
+ term.center(memory_available, width=col_width - 1)
|
+ term.center(str(memory_available), width=col_width - 1)
|
||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
term.move(row, 4 * col_width)
|
term.move(row, 4 * col_width)
|
||||||
+ term.center(
|
+ term.center(
|
||||||
round(psutil.virtual_memory().total / 1024**2, 2),
|
str(round(psutil.virtual_memory().total / 1024**2, 2)),
|
||||||
width=col_width - 1,
|
width=col_width - 1,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
term.move(row, 5 * col_width)
|
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(
|
print(
|
||||||
term.move(row, 6 * col_width)
|
term.move(row, 6 * col_width)
|
||||||
+ term.center(
|
+ term.center(
|
||||||
get_process_mb(getattr(stat, "monitor", None)),
|
str(get_process_mb(getattr(stat, "monitor", None))),
|
||||||
width=col_width - 1,
|
width=col_width - 1,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -444,7 +454,7 @@ def memory(run_once=False, workers=False, broker=None):
|
|||||||
print(
|
print(
|
||||||
term.move(row, 7 * col_width)
|
term.move(row, 7 * col_width)
|
||||||
+ term.center(
|
+ 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
|
row += 1
|
||||||
@@ -476,7 +486,7 @@ def memory(run_once=False, workers=False, broker=None):
|
|||||||
mb_used = get_process_mb(worker_pid)
|
mb_used = get_process_mb(worker_pid)
|
||||||
print(
|
print(
|
||||||
term.move(row, (idx + 1) * col_width)
|
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
|
||||||
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]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.0.0"]
|
requires = ["uv_build>=0.10.7,<=0.12.1"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "uv_build"
|
||||||
|
|
||||||
[tool.poetry]
|
[project]
|
||||||
name = "django-q2"
|
name = "django-q2"
|
||||||
version = "1.10.0"
|
version = "1.10.0"
|
||||||
packages = [
|
packages = [
|
||||||
{ include = "django_q" },
|
{ include = "django_q" },
|
||||||
]
|
]
|
||||||
description = "A multiprocessing distributed task queue for Django"
|
description = "A multiprocessing distributed task queue for Django"
|
||||||
authors = ["Stan Triepels <django-q2@stantriepels.com>", "Ilan Steemers <koed00@gmail.com>"]
|
authors = [
|
||||||
maintainers = ["Stan Triepels <django-q2@stantriepels.com>"]
|
{ 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"
|
license = "MIT"
|
||||||
readme = 'README.rst'
|
maintainers = [{ name = "Stan Triepels", email = "django-q2@stantriepels.com" }]
|
||||||
|
keywords = [
|
||||||
repository = "https://github.com/GDay/django-q2"
|
"django",
|
||||||
homepage = "https://django-q2.readthedocs.org"
|
"distributed",
|
||||||
documentation = "https://django-q2.readthedocs.org"
|
"multiprocessing",
|
||||||
|
"queue",
|
||||||
keywords = ["django", "distributed", "multiprocessing", "queue", "scheduler"]
|
"scheduler",
|
||||||
|
]
|
||||||
classifiers = [
|
classifiers = [
|
||||||
'Development Status :: 5 - Production/Stable',
|
"Development Status :: 5 - Production/Stable",
|
||||||
'Environment :: Web Environment',
|
"Environment :: Web Environment",
|
||||||
'Framework :: Django',
|
"Framework :: Django",
|
||||||
'Intended Audience :: Developers',
|
"Intended Audience :: Developers",
|
||||||
'License :: OSI Approved :: MIT License',
|
"Operating System :: POSIX",
|
||||||
'Operating System :: POSIX',
|
"Operating System :: MacOS",
|
||||||
'Operating System :: MacOS',
|
"Programming Language :: Python",
|
||||||
'Programming Language :: Python',
|
"Programming Language :: Python :: 3",
|
||||||
'Programming Language :: Python :: 3',
|
"Programming Language :: Python :: 3.9",
|
||||||
'Programming Language :: Python :: 3.9',
|
"Programming Language :: Python :: 3.10",
|
||||||
'Programming Language :: Python :: 3.10',
|
"Programming Language :: Python :: 3.11",
|
||||||
'Programming Language :: Python :: 3.11',
|
"Programming Language :: Python :: 3.12",
|
||||||
'Programming Language :: Python :: 3.12',
|
"Programming Language :: Python :: 3.13",
|
||||||
'Programming Language :: Python :: 3.13',
|
"Topic :: Internet :: WWW/HTTP",
|
||||||
'Topic :: Internet :: WWW/HTTP',
|
"Topic :: System :: Distributed Computing",
|
||||||
'Topic :: System :: Distributed Computing',
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||||
'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 = [
|
[project.optional-dependencies]
|
||||||
{ path = "CHANGELOG.md", format = "sdist" },
|
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"]
|
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]
|
[tool.isort]
|
||||||
profile = "black"
|
profile = "black"
|
||||||
multi_line_output = 3
|
multi_line_output = 3
|
||||||
|
|||||||
Reference in New Issue
Block a user