diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6c88bf9..f1a5e39 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,33 +9,29 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - - name: Set up Python 3.11 - uses: actions/setup-python@v4 + - name: Set up Python 3.12 + uses: actions/setup-python@v6 with: - python-version: "3.11" + python-version: "3.12" - - name: Cache pip - uses: actions/cache@v3 + - name: Install uv + uses: astral-sh/setup-uv@v7 with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} - restore-keys: | - ${{ runner.os }}-pip- + enable-cache: true - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install wheel setuptools twine check-manifest - XDG_CACHE_HOME=/cache pip install -e ".[dev]" + uv sync + uv pip install build twine check-manifest - name: Check manifest - run: check-manifest + run: uv run check-manifest - name: Build package run: | - python setup.py sdist bdist_wheel + uv run python -m build ls -l dist - name: Upload to PyPI @@ -43,8 +39,8 @@ jobs: TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | - twine check dist/* - twine upload dist/* + uv run twine check dist/* + uv run twine upload dist/* artifacts: paths: diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index 7546a86..c66c317 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -4,67 +4,59 @@ on: push: branches: [main, master] paths-ignore: - - "exhibitors/locale/**" - - "exhibitors/static/**" + - "eventyay_exhibition/locale/**" + - "eventyay_exhibition/static/**" pull_request: branches: [main, master] paths-ignore: - - "exhibitors/locale/**" - - "exhibitors/static/**" + - "eventyay_exhibition/locale/**" + - "eventyay_exhibition/static/**" jobs: ruff: name: ruff runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - - name: Set up Python 3.11 - uses: actions/setup-python@v4 + - name: Set up Python 3.12 + uses: actions/setup-python@v6 with: - python-version: "3.11" + python-version: "3.12" - - name: Cache pip - uses: actions/cache@v3 + - name: Install uv + uses: astral-sh/setup-uv@v7 with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} - restore-keys: | - ${{ runner.os }}-pip- + enable-cache: true - name: Install Dependencies run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" psycopg2-binary - pip install ruff + uv sync + uv pip install psycopg2-binary ruff - name: Run ruff (import sorting) - run: ruff check --select I . + run: uv run ruff check --select I . flake: name: flake8 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - - name: Set up Python 3.11 - uses: actions/setup-python@v4 + - name: Set up Python 3.12 + uses: actions/setup-python@v6 with: - python-version: "3.11" + python-version: "3.12" - - name: Cache pip - uses: actions/cache@v3 + - name: Install uv + uses: astral-sh/setup-uv@v7 with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} - restore-keys: | - ${{ runner.os }}-pip- + enable-cache: true - name: Install Dependencies run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" psycopg2-binary - pip install flake8 + uv sync + uv pip install psycopg2-binary - name: Run flake8 - run: flake8 . + run: uv run flake8 . diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b8a56b2..c8aa423 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -4,53 +4,72 @@ on: push: branches: [main, master] paths-ignore: - - "exhibitors/locale/**" + - "exhibition/locale/**" pull_request: branches: [main, master] paths-ignore: - - "exhibitors/locale/**" + - "exhibition/locale/**" jobs: test: runs-on: ubuntu-latest name: Exhibitors Plugin Tests + + services: + postgres: + image: postgres:15 + env: + POSTGRES_PASSWORD: postgres + POSTGRES_DB: eventyay-db + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 steps: - - name: Checkout exhibitors plugin - uses: actions/checkout@v3 + - name: Checkout eventyay_exhibition plugin + uses: actions/checkout@v6 - - name: Clone eventyay-tickets + - name: Clone eventyay run: | - git clone https://github.com/fossasia/eventyay-tickets.git ../eventyay-tickets + git clone https://github.com/fossasia/eventyay.git ../eventyay - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v6 with: - python-version: "3.11" + python-version: "3.12" + + - name: Install uv + uses: astral-sh/setup-uv@v7 + with: + enable-cache: true - name: Install system dependencies run: sudo apt-get update && sudo apt-get install -y gettext libjpeg-dev zlib1g-dev libpq-dev - - name: Set up virtual environment + - name: Set up eventyay environment run: | - python -m venv venv - source venv/bin/activate - pip install --upgrade pip - - # Install eventyay-tickets with dev dependencies - cd ../eventyay-tickets - pip install -e ".[dev]" + cd ../eventyay/app + uv sync --all-extras --all-groups - # Go back to plugin directory and install it - cd ../eventyay-tickets-exhibitors - pip install -e . + # Install exhibition plugin in the eventyay environment + uv pip install -e ../../eventyay-exhibition - name: Compile translations run: | - source venv/bin/activate make - name: Run tests + env: + EVY_RUNNING_ENVIRONMENT: testing + EVY_POSTGRES_HOST: localhost + EVY_POSTGRES_PORT: 5432 + EVY_POSTGRES_USER: postgres + EVY_POSTGRES_PASSWORD: postgres + EVY_POSTGRES_DB: eventyay-db run: | - source venv/bin/activate - pytest tests --reruns 3 + cd ../eventyay/app + uv run pytest ../../eventyay-exhibition/tests --reruns 3 diff --git a/.update-locales.sh b/.update-locales.sh index 7326895..1b6bfa9 100755 --- a/.update-locales.sh +++ b/.update-locales.sh @@ -6,8 +6,8 @@ if ! command -v wlc >/dev/null 2>&1; then exit 1 fi -COMPONENTS=pretix/pretix-plugin-exhibitors -DIR=exhibitors/locale +COMPONENTS=eventyay/eventyay-exhibition +DIR=eventyay_exhibition/locale # Renerates .po files used for translating the plugin set -e set -x diff --git a/MANIFEST.in b/MANIFEST.in index 6df9b05..60c7884 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,5 @@ -recursive-include exhibitors/static * -recursive-include exhibitors/templates * -recursive-include exhibitors/locale * +recursive-include eventyay_exhibition/static * +recursive-include eventyay_exhibition/templates * +recursive-include eventyay_exhibition/locale * include LICENSE exclude .gitlab-ci.yml diff --git a/Makefile b/Makefile index 1bb14f6..7b7466d 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ all: localecompile -LNGS:=`find exhibitors/locale/ -mindepth 1 -maxdepth 1 -type d -printf "-l %f "` +LNGS:=`find eventyay_exhibition/locale/ -mindepth 1 -maxdepth 1 -type d -printf "-l %f "` localecompile: django-admin compilemessages diff --git a/README.rst b/README.rst index 8034066..c8019c9 100644 --- a/README.rst +++ b/README.rst @@ -1,16 +1,16 @@ Exhibitors ========================== -This is a plugin for `eventyay-tickets`_. +This is a plugin for `eventyay`_. -This plugin enables to add and control exhibitors in eventyay +This plugin enables you to add and control exhibitors in eventyay Development setup ----------------- 1. Make sure that you have a working `eventyay-tickets development setup`_. -2. Clone this repository, eg to ``local/exhibitors``. +2. Clone this repository, e.g., to ``local/eventyay-exhibition``. 3. Activate the virtual environment you use for eventyay-tickets development. diff --git a/exhibitors/__init__.py b/exhibition/__init__.py similarity index 100% rename from exhibitors/__init__.py rename to exhibition/__init__.py diff --git a/exhibitors/api.py b/exhibition/api.py similarity index 100% rename from exhibitors/api.py rename to exhibition/api.py diff --git a/exhibitors/apps.py b/exhibition/apps.py similarity index 95% rename from exhibitors/apps.py rename to exhibition/apps.py index c065b66..56d44c0 100644 --- a/exhibitors/apps.py +++ b/exhibition/apps.py @@ -10,7 +10,7 @@ class ExhibitorApp(PluginConfig): default = True - name = "exhibitors" + name = "eventyay_exhibition" verbose_name = _("Exhibitors") class EventyayPluginMeta: diff --git a/exhibitors/forms.py b/exhibition/forms.py similarity index 100% rename from exhibitors/forms.py rename to exhibition/forms.py diff --git a/exhibitors/locale/de/LC_MESSAGES/django.po b/exhibition/locale/de/LC_MESSAGES/django.po similarity index 100% rename from exhibitors/locale/de/LC_MESSAGES/django.po rename to exhibition/locale/de/LC_MESSAGES/django.po diff --git a/exhibitors/locale/de_Informal/.gitkeep b/exhibition/locale/de_Informal/.gitkeep similarity index 100% rename from exhibitors/locale/de_Informal/.gitkeep rename to exhibition/locale/de_Informal/.gitkeep diff --git a/exhibitors/locale/de_Informal/LC_MESSAGES/django.po b/exhibition/locale/de_Informal/LC_MESSAGES/django.po similarity index 100% rename from exhibitors/locale/de_Informal/LC_MESSAGES/django.po rename to exhibition/locale/de_Informal/LC_MESSAGES/django.po diff --git a/exhibitors/migrations/0001_initial.py b/exhibition/migrations/0001_initial.py similarity index 99% rename from exhibitors/migrations/0001_initial.py rename to exhibition/migrations/0001_initial.py index 5bb2ad7..1cf27b1 100644 --- a/exhibitors/migrations/0001_initial.py +++ b/exhibition/migrations/0001_initial.py @@ -1,9 +1,8 @@ # Generated by Django 5.2.5 on 2026-01-19 17:22 import django.db.models.deletion -from django.db import migrations, models - import exhibitors.models +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/exhibitors/migrations/0002_alter_exhibitorinfo_booth_id_and_more.py b/exhibition/migrations/0002_alter_exhibitorinfo_booth_id_and_more.py similarity index 100% rename from exhibitors/migrations/0002_alter_exhibitorinfo_booth_id_and_more.py rename to exhibition/migrations/0002_alter_exhibitorinfo_booth_id_and_more.py diff --git a/exhibitors/migrations/__init__.py b/exhibition/migrations/__init__.py similarity index 100% rename from exhibitors/migrations/__init__.py rename to exhibition/migrations/__init__.py diff --git a/exhibitors/models.py b/exhibition/models.py similarity index 100% rename from exhibitors/models.py rename to exhibition/models.py diff --git a/exhibitors/signals.py b/exhibition/signals.py similarity index 100% rename from exhibitors/signals.py rename to exhibition/signals.py diff --git a/exhibitors/templates/exhibitors/add.html b/exhibition/templates/exhibitors/add.html similarity index 100% rename from exhibitors/templates/exhibitors/add.html rename to exhibition/templates/exhibitors/add.html diff --git a/exhibitors/templates/exhibitors/delete.html b/exhibition/templates/exhibitors/delete.html similarity index 100% rename from exhibitors/templates/exhibitors/delete.html rename to exhibition/templates/exhibitors/delete.html diff --git a/exhibitors/templates/exhibitors/exhibitor_info.html b/exhibition/templates/exhibitors/exhibitor_info.html similarity index 100% rename from exhibitors/templates/exhibitors/exhibitor_info.html rename to exhibition/templates/exhibitors/exhibitor_info.html diff --git a/exhibitors/templates/exhibitors/settings.html b/exhibition/templates/exhibitors/settings.html similarity index 100% rename from exhibitors/templates/exhibitors/settings.html rename to exhibition/templates/exhibitors/settings.html diff --git a/exhibitors/urls.py b/exhibition/urls.py similarity index 100% rename from exhibitors/urls.py rename to exhibition/urls.py diff --git a/exhibitors/views.py b/exhibition/views.py similarity index 100% rename from exhibitors/views.py rename to exhibition/views.py diff --git a/exhibitors/static/exhibitors/.gitkeep b/exhibitors/static/exhibitors/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/exhibitors/templates/exhibitors/.gitkeep b/exhibitors/templates/exhibitors/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/pyproject.toml b/pyproject.toml index 190d29d..fd0d145 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,9 @@ [project] -name = "exhibitors" +name = "eventyay-exhibition" dynamic = ["version"] description = "Eventyay-tickets plugin to add and manage exhibitors" readme = "README.rst" -requires-python = ">=3.11" +requires-python = ">=3.12, <3.13" license = {file = "LICENSE"} keywords = ["Eventyay-tickets"] authors = [ @@ -17,8 +17,16 @@ dependencies = [ "flake8>=7.3.0", ] +[project.optional-dependencies] +test = [ + "pytest>=9.0.2", + "pytest-django>=4.9.0", + "pytest-env>=1.2.0", + "pytest-rerunfailures>=16.1", +] + [project.entry-points."pretix.plugin"] -exhibitors = "exhibitors:PretixPluginMeta" +eventyay_exhibition = "eventyay_exhibition.apps:ExhibitorApp" [project.entry-points."distutils.commands"] build = "pretix_plugin_build.build:CustomBuild" @@ -30,14 +38,14 @@ requires = [ ] [project.urls] -homepage = "https://github.com/fossasia/eventyay-tickets-exhibitors" +homepage = "https://github.com/fossasia/eventyay-exhibition" [tool.setuptools] include-package-data = true [tool.setuptools.dynamic] -version = {attr = "exhibitors.__version__"} +version = {attr = "eventyay_exhibition.__version__"} [tool.setuptools.packages.find] -include = ["exhibitors*"] +include = ["eventyay_exhibition*"] namespaces = false diff --git a/setup.cfg b/setup.cfg index d6ee165..b879edf 100644 --- a/setup.cfg +++ b/setup.cfg @@ -14,10 +14,19 @@ not_skip = __init__.py skip = setup.py [tool:pytest] -DJANGO_SETTINGS_MODULE = pretix.testutils.settings +DJANGO_SETTINGS_MODULE = eventyay.config.settings +testpaths = tests + +[pytest_env] +EVY_RUNNING_ENVIRONMENT = testing +EVY_POSTGRES_HOST = localhost +EVY_POSTGRES_PORT = 5432 +EVY_POSTGRES_USER = postgres +EVY_POSTGRES_PASSWORD = postgres +EVY_POSTGRES_DB = eventyay-db [coverage:run] -source = exhibitors +source = eventyay_exhibition omit = */migrations/*,*/urls.py,*/tests/* [coverage:report] diff --git a/tests/conftest.py b/tests/conftest.py index 9ffe32d..f1cf7dd 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,10 +1,11 @@ import pytest from django.utils.timezone import now -from pretix.base.models import Event, Organizer +from eventyay.base.models import Event, Organizer @pytest.fixture def event(db): + """Create a test event with an organizer.""" organizer = Organizer.objects.create(name="Test Organizer", slug="test-organizer") event = Event.objects.create( organizer=organizer, diff --git a/tests/test_main.py b/tests/test_main.py index 0cef02c..0c1f28d 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,6 +1,5 @@ import pytest from django.core.files.uploadedfile import SimpleUploadedFile - from exhibitors.models import ExhibitorInfo diff --git a/uv.lock b/uv.lock index 0872aa6..b463eec 100644 --- a/uv.lock +++ b/uv.lock @@ -1,16 +1,40 @@ version = 1 revision = 3 -requires-python = ">=3.11" +requires-python = "==3.12.*" [[package]] -name = "exhibitors" +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "eventyay-exhibition" source = { editable = "." } dependencies = [ { name = "flake8" }, ] +[package.optional-dependencies] +test = [ + { name = "pytest" }, + { name = "pytest-django" }, + { name = "pytest-env" }, + { name = "pytest-rerunfailures" }, +] + [package.metadata] -requires-dist = [{ name = "flake8", specifier = ">=7.3.0" }] +requires-dist = [ + { name = "flake8", specifier = ">=7.3.0" }, + { name = "pytest", marker = "extra == 'test'", specifier = ">=9.0.2" }, + { name = "pytest-django", marker = "extra == 'test'", specifier = ">=4.9.0" }, + { name = "pytest-env", marker = "extra == 'test'", specifier = ">=1.2.0" }, + { name = "pytest-rerunfailures", marker = "extra == 'test'", specifier = ">=16.1" }, +] +provides-extras = ["test"] [[package]] name = "flake8" @@ -26,6 +50,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl", hash = "sha256:b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e", size = 57922, upload-time = "2025-06-20T19:31:34.425Z" }, ] +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + [[package]] name = "mccabe" version = "0.7.0" @@ -35,6 +68,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e", size = 7350, upload-time = "2022-01-24T01:14:49.62Z" }, ] +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + [[package]] name = "pycodestyle" version = "2.14.0" @@ -52,3 +103,65 @@ sdist = { url = "https://files.pythonhosted.org/packages/45/dc/fd034dc20b4b264b3 wheels = [ { url = "https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl", hash = "sha256:f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f", size = 63551, upload-time = "2025-06-20T18:45:26.937Z" }, ] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pytest" +version = "9.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, +] + +[[package]] +name = "pytest-django" +version = "4.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/fb/55d580352db26eb3d59ad50c64321ddfe228d3d8ac107db05387a2fadf3a/pytest_django-4.11.1.tar.gz", hash = "sha256:a949141a1ee103cb0e7a20f1451d355f83f5e4a5d07bdd4dcfdd1fd0ff227991", size = 86202, upload-time = "2025-04-03T18:56:09.338Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/ac/bd0608d229ec808e51a21044f3f2f27b9a37e7a0ebaca7247882e67876af/pytest_django-4.11.1-py3-none-any.whl", hash = "sha256:1b63773f648aa3d8541000c26929c1ea63934be1cfa674c76436966d73fe6a10", size = 25281, upload-time = "2025-04-03T18:56:07.678Z" }, +] + +[[package]] +name = "pytest-env" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/13/12/9c87d0ca45d5992473208bcef2828169fa7d39b8d7fc6e3401f5c08b8bf7/pytest_env-1.2.0.tar.gz", hash = "sha256:475e2ebe8626cee01f491f304a74b12137742397d6c784ea4bc258f069232b80", size = 8973, upload-time = "2025-10-09T19:15:47.42Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/98/822b924a4a3eb58aacba84444c7439fce32680592f394de26af9c76e2569/pytest_env-1.2.0-py3-none-any.whl", hash = "sha256:d7e5b7198f9b83c795377c09feefa45d56083834e60d04767efd64819fc9da00", size = 6251, upload-time = "2025-10-09T19:15:46.077Z" }, +] + +[[package]] +name = "pytest-rerunfailures" +version = "16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/04/71e9520551fc8fe2cf5c1a1842e4e600265b0815f2016b7c27ec85688682/pytest_rerunfailures-16.1.tar.gz", hash = "sha256:c38b266db8a808953ebd71ac25c381cb1981a78ff9340a14bcb9f1b9bff1899e", size = 30889, upload-time = "2025-10-10T07:06:01.238Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/54/60eabb34445e3db3d3d874dc1dfa72751bfec3265bd611cb13c8b290adea/pytest_rerunfailures-16.1-py3-none-any.whl", hash = "sha256:5d11b12c0ca9a1665b5054052fcc1084f8deadd9328962745ef6b04e26382e86", size = 14093, upload-time = "2025-10-10T07:06:00.019Z" }, +]