From 978d215b6f5c8c937319269c89abbfc84b771125 Mon Sep 17 00:00:00 2001 From: Tim Schilling Date: Wed, 4 Feb 2026 17:00:45 -0600 Subject: [PATCH] Switch to TOML file and ruff. --- .github/workflows/test.yml | 4 +- .pre-commit-config.yaml | 33 ++---- README.md | 6 +- docs/lab1.md | 2 +- docs/lab2.md | 4 +- manage.py | 1 + project/data/management/commands/fake_data.py | 2 +- project/data/markdown.py | 26 ++--- project/data/subscribers.py | 14 +-- project/newsletter/migrations/0001_initial.py | 1 - ...ost_is_draft_post_is_published_and_more.py | 1 - .../0003_post_is_public_post_summary.py | 1 - ...004_alter_subscription_options_and_more.py | 1 - .../migrations/0005_auto_20220809_0012.py | 1 - ...y_options_alter_subscription_categories.py | 1 - ...bscriptionnotification_options_and_more.py | 1 - .../migrations/0008_alter_post_categories.py | 1 - ...graph_description_post_open_graph_image.py | 1 - .../0010_subscriptionnotification_read.py | 1 - ...ove_category_category_unq_slug_and_more.py | 1 - ...ory_created_alter_post_created_and_more.py | 1 - project/newsletter/models.py | 26 +++-- project/newsletter/operations.py | 1 + project/newsletter/test_receivers.py | 1 - project/newsletter/test_views.py | 2 +- project/tests/runner.py | 1 - pyproject.toml | 66 +++++++++++ requirements.in | 12 -- requirements.txt | 104 ------------------ setup.cfg | 38 ------- 30 files changed, 124 insertions(+), 231 deletions(-) create mode 100644 pyproject.toml delete mode 100644 requirements.in delete mode 100644 requirements.txt delete mode 100644 setup.cfg diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e8320ca..5339fee 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,12 +33,12 @@ jobs: with: python-version: ${{ matrix.python-version }} cache: pip - cache-dependency-path: 'requirements.txt' + cache-dependency-path: 'pyproject.toml' - name: Install dependencies run: | python -m pip install --upgrade pip setuptools wheel - python -m pip install -r requirements.txt + python -m pip install . - name: Run tests run: | diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9efbc0b..c012a5b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,43 +1,30 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.3.0 + rev: v5.0.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace - id: mixed-line-ending -- repo: https://github.com/pycqa/flake8 - rev: 4.0.1 +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.9.4 hooks: - - id: flake8 + - id: ruff + args: [--fix] + - id: ruff-format - repo: https://github.com/pycqa/doc8 - rev: 0.11.2 + rev: v1.1.2 hooks: - id: doc8 -- repo: https://github.com/asottile/pyupgrade - rev: v2.34.0 - hooks: - - id: pyupgrade - args: [--py38-plus] - repo: https://github.com/adamchainz/django-upgrade - rev: 1.7.0 + rev: 1.22.2 hooks: - id: django-upgrade - args: [--target-version, "3.2"] -- repo: https://github.com/pycqa/isort - rev: 5.10.1 - hooks: - - id: isort + args: [--target-version, "5.0"] - repo: https://github.com/pre-commit/pygrep-hooks - rev: v1.9.0 + rev: v1.10.0 hooks: - id: python-check-blanket-noqa - id: python-check-mock-methods - id: python-no-eval - id: python-no-log-warn -- repo: https://github.com/psf/black - rev: 22.3.0 - hooks: - - id: black - language_version: python3 - entry: black --target-version=py38 diff --git a/README.md b/README.md index b99a785..fde847d 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ warning. Do what's comfortable. If not, I highly recommend using the Windows Subsystem for Linux ([docs](https://learn.microsoft.com/en-us/windows/wsl/about)). If you do, the -rest of the instructions will work for you. If you don't have access to that, +rest of the instructions will work for you. If you don't have access to that, please scroll down to [Windows non-WSL Setup](#windows-non-wsl-setup). --- @@ -95,7 +95,7 @@ please scroll down to [Windows non-WSL Setup](#windows-non-wsl-setup). ``` 3. Install the project dependencies. ```shell - pip install -r requirements.txt + pip install -e . ``` 4. Create a new .env file. ```shell @@ -151,7 +151,7 @@ Proceed to [Lab 1](docs/lab1.md). ``` 3. Install the project dependencies. ```shell - pip install -r requirements.txt + pip install -e . ``` 4. Create a new .env file. ```shell diff --git a/docs/lab1.md b/docs/lab1.md index a76b712..792a029 100644 --- a/docs/lab1.md +++ b/docs/lab1.md @@ -168,7 +168,7 @@ If you've gone through all the steps of the investigation, and you're still unsu file isn't being shared, you should read about the [``enctype`` attribute of forms](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/form#enctype). -You'll see that the +You'll see that the By default, a ``
`` element will use ``enctype="application/x-www-form-urlencoded"``. However, as we found, that will not submit any ```` (or other file-based diff --git a/docs/lab2.md b/docs/lab2.md index 916dc6a..3aa3cde 100644 --- a/docs/lab2.md +++ b/docs/lab2.md @@ -36,7 +36,7 @@ cache.clear() Let's consider what we know: - The pages render correctly and there are no errors. -- The pages rendered "fast" earlier, but over time as the data set has grown, +- The pages rendered "fast" earlier, but over time as the data set has grown, they have slowed down. @@ -449,7 +449,7 @@ At this point it's clear there's a difference in functionality between how ``toggle_post_privacy`` and ``update_post`` save the data changes. ``toggle_post_privacy`` updates the instance using a ``QuerySet.update()`` call while ``update_post`` uses ``PostForm.save()`` which under the hood is -doing something like ``Model.save()``. If we read +doing something like ``Model.save()``. If we read [the documentation for ``update``](https://docs.djangoproject.com/en/stable/ref/models/querysets/#update) we'll see that there's a note that the ``post_save`` signal isn't emitted. This explains why ``toggle_post_privacy`` doesn't delete the cached value diff --git a/manage.py b/manage.py index c645127..6186d8d 100755 --- a/manage.py +++ b/manage.py @@ -1,5 +1,6 @@ #!/usr/bin/env python """Django's command-line utility for administrative tasks.""" + import os import sys diff --git a/project/data/management/commands/fake_data.py b/project/data/management/commands/fake_data.py index ce9e809..42fddd2 100644 --- a/project/data/management/commands/fake_data.py +++ b/project/data/management/commands/fake_data.py @@ -21,7 +21,7 @@ def log(event): logger.info(f"{event} - start") yield end = timezone.now() - logger.info(f"{event} - end, {(end-start).total_seconds()}s") + logger.info(f"{event} - end, {(end - start).total_seconds()}s") class Command(BaseCommand): diff --git a/project/data/markdown.py b/project/data/markdown.py index bd0aa0a..0775e6f 100644 --- a/project/data/markdown.py +++ b/project/data/markdown.py @@ -1,4 +1,4 @@ -from datetime import datetime, timezone +from datetime import UTC, datetime from itertools import cycle from faker import Faker @@ -42,17 +42,17 @@ def generate_data(user, image_category, post_categories): slug = slugify(title) + f"-{fake.pyint(10, 99999)}" publish_at = ( fake.date_time_between_dates( - datetime_start=datetime(2020, 1, 1, tzinfo=timezone.utc), - datetime_end=datetime(2022, 10, 12, tzinfo=timezone.utc), - tzinfo=timezone.utc, + datetime_start=datetime(2020, 1, 1, tzinfo=UTC), + datetime_end=datetime(2022, 10, 12, tzinfo=UTC), + tzinfo=UTC, ) if fake.pybool() else None ) created = fake.date_time_between_dates( - datetime_start=datetime(2020, 1, 1, tzinfo=timezone.utc), - datetime_end=datetime(2022, 10, 12, tzinfo=timezone.utc), - tzinfo=timezone.utc, + datetime_start=datetime(2020, 1, 1, tzinfo=UTC), + datetime_end=datetime(2022, 10, 12, tzinfo=UTC), + tzinfo=UTC, ) if publish_at and publish_at < created: created = publish_at @@ -89,17 +89,17 @@ def generate_data(user, image_category, post_categories): slug = slugify(title) + f"-{fake.pyint(10, 9999)}" publish_at = ( fake.date_time_between_dates( - datetime_start=datetime(2020, 1, 1, tzinfo=timezone.utc), - datetime_end=datetime(2022, 10, 12, tzinfo=timezone.utc), - tzinfo=timezone.utc, + datetime_start=datetime(2020, 1, 1, tzinfo=UTC), + datetime_end=datetime(2022, 10, 12, tzinfo=UTC), + tzinfo=UTC, ) if fake.pybool() else None ) created = fake.date_time_between_dates( - datetime_start=datetime(2020, 1, 1, tzinfo=timezone.utc), - datetime_end=datetime(2022, 10, 12, tzinfo=timezone.utc), - tzinfo=timezone.utc, + datetime_start=datetime(2020, 1, 1, tzinfo=UTC), + datetime_end=datetime(2022, 10, 12, tzinfo=UTC), + tzinfo=UTC, ) if publish_at and publish_at < created: created = publish_at diff --git a/project/data/subscribers.py b/project/data/subscribers.py index 1b0f311..676db61 100644 --- a/project/data/subscribers.py +++ b/project/data/subscribers.py @@ -1,5 +1,5 @@ from collections import OrderedDict -from datetime import datetime, timezone +from datetime import UTC, datetime from functools import partial from django.contrib.auth.models import User @@ -25,9 +25,9 @@ def generate_data(categories: CategoryData): ) user.email = f"{user.username}@example.com" user.date_joined = fake.date_time_between_dates( - datetime_start=datetime(2020, 1, 1, tzinfo=timezone.utc), - datetime_end=datetime(2022, 10, 12, tzinfo=timezone.utc), - tzinfo=timezone.utc, + datetime_start=datetime(2020, 1, 1, tzinfo=UTC), + datetime_end=datetime(2022, 10, 12, tzinfo=UTC), + tzinfo=UTC, ) users.append(user) User.objects.bulk_create(users, ignore_conflicts=True) @@ -50,9 +50,9 @@ def generate_data(categories: CategoryData): for i in range(0, USER_COUNT, 50): created_map = { user_id: fake.date_time_between_dates( - datetime_start=datetime(2020, 1, 1, tzinfo=timezone.utc), - datetime_end=datetime(2022, 10, 12, tzinfo=timezone.utc), - tzinfo=timezone.utc, + datetime_start=datetime(2020, 1, 1, tzinfo=UTC), + datetime_end=datetime(2022, 10, 12, tzinfo=UTC), + tzinfo=UTC, ) for user_id in user_ids[i : i + 50] } diff --git a/project/newsletter/migrations/0001_initial.py b/project/newsletter/migrations/0001_initial.py index 7f9525a..e90d898 100644 --- a/project/newsletter/migrations/0001_initial.py +++ b/project/newsletter/migrations/0001_initial.py @@ -7,7 +7,6 @@ class Migration(migrations.Migration): - initial = True dependencies = [ diff --git a/project/newsletter/migrations/0002_remove_post_is_draft_post_is_published_and_more.py b/project/newsletter/migrations/0002_remove_post_is_draft_post_is_published_and_more.py index 15652d7..3d3de1e 100644 --- a/project/newsletter/migrations/0002_remove_post_is_draft_post_is_published_and_more.py +++ b/project/newsletter/migrations/0002_remove_post_is_draft_post_is_published_and_more.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0001_initial"), ] diff --git a/project/newsletter/migrations/0003_post_is_public_post_summary.py b/project/newsletter/migrations/0003_post_is_public_post_summary.py index 75ba6e5..c43473a 100644 --- a/project/newsletter/migrations/0003_post_is_public_post_summary.py +++ b/project/newsletter/migrations/0003_post_is_public_post_summary.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0002_remove_post_is_draft_post_is_published_and_more"), ] diff --git a/project/newsletter/migrations/0004_alter_subscription_options_and_more.py b/project/newsletter/migrations/0004_alter_subscription_options_and_more.py index 810946a..1279fd7 100644 --- a/project/newsletter/migrations/0004_alter_subscription_options_and_more.py +++ b/project/newsletter/migrations/0004_alter_subscription_options_and_more.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0003_post_is_public_post_summary"), ] diff --git a/project/newsletter/migrations/0005_auto_20220809_0012.py b/project/newsletter/migrations/0005_auto_20220809_0012.py index 566b61f..9b55c96 100644 --- a/project/newsletter/migrations/0005_auto_20220809_0012.py +++ b/project/newsletter/migrations/0005_auto_20220809_0012.py @@ -13,7 +13,6 @@ def create_site(apps, schema_editor): # pragma: nocover class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0004_alter_subscription_options_and_more"), ("sites", "0002_alter_domain_unique"), diff --git a/project/newsletter/migrations/0006_alter_category_options_alter_subscription_categories.py b/project/newsletter/migrations/0006_alter_category_options_alter_subscription_categories.py index 04848d8..3fd62b3 100644 --- a/project/newsletter/migrations/0006_alter_category_options_alter_subscription_categories.py +++ b/project/newsletter/migrations/0006_alter_category_options_alter_subscription_categories.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0005_auto_20220809_0012"), ] diff --git a/project/newsletter/migrations/0007_alter_subscriptionnotification_options_and_more.py b/project/newsletter/migrations/0007_alter_subscriptionnotification_options_and_more.py index 60a4521..1d45b6c 100644 --- a/project/newsletter/migrations/0007_alter_subscriptionnotification_options_and_more.py +++ b/project/newsletter/migrations/0007_alter_subscriptionnotification_options_and_more.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0006_alter_category_options_alter_subscription_categories"), ] diff --git a/project/newsletter/migrations/0008_alter_post_categories.py b/project/newsletter/migrations/0008_alter_post_categories.py index 883d7d8..c968c95 100644 --- a/project/newsletter/migrations/0008_alter_post_categories.py +++ b/project/newsletter/migrations/0008_alter_post_categories.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0007_alter_subscriptionnotification_options_and_more"), ] diff --git a/project/newsletter/migrations/0009_post_open_graph_description_post_open_graph_image.py b/project/newsletter/migrations/0009_post_open_graph_description_post_open_graph_image.py index f6203e2..e32a4bf 100644 --- a/project/newsletter/migrations/0009_post_open_graph_description_post_open_graph_image.py +++ b/project/newsletter/migrations/0009_post_open_graph_description_post_open_graph_image.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0008_alter_post_categories"), ] diff --git a/project/newsletter/migrations/0010_subscriptionnotification_read.py b/project/newsletter/migrations/0010_subscriptionnotification_read.py index d3f876d..0db7c54 100644 --- a/project/newsletter/migrations/0010_subscriptionnotification_read.py +++ b/project/newsletter/migrations/0010_subscriptionnotification_read.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0009_post_open_graph_description_post_open_graph_image"), ] diff --git a/project/newsletter/migrations/0011_alter_post_options_remove_category_category_unq_slug_and_more.py b/project/newsletter/migrations/0011_alter_post_options_remove_category_category_unq_slug_and_more.py index 0e2fa01..03b8873 100644 --- a/project/newsletter/migrations/0011_alter_post_options_remove_category_category_unq_slug_and_more.py +++ b/project/newsletter/migrations/0011_alter_post_options_remove_category_category_unq_slug_and_more.py @@ -7,7 +7,6 @@ class Migration(migrations.Migration): - dependencies = [ ("newsletter", "0010_subscriptionnotification_read"), ] diff --git a/project/newsletter/migrations/0012_alter_category_created_alter_post_created_and_more.py b/project/newsletter/migrations/0012_alter_category_created_alter_post_created_and_more.py index 912f4f7..dfc6e75 100644 --- a/project/newsletter/migrations/0012_alter_category_created_alter_post_created_and_more.py +++ b/project/newsletter/migrations/0012_alter_category_created_alter_post_created_and_more.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ( "newsletter", diff --git a/project/newsletter/models.py b/project/newsletter/models.py index c0fa3ab..d53ebd4 100644 --- a/project/newsletter/models.py +++ b/project/newsletter/models.py @@ -155,13 +155,13 @@ def __str__(self): def __repr__(self): return f"" + def get_absolute_url(self): + return reverse("newsletter:view_post", kwargs={"slug": self.slug}) + @property def publish_date(self): return self.publish_at or self.created - def get_absolute_url(self): - return reverse("newsletter:view_post", kwargs={"slug": self.slug}) - class SubscriptionQuerySet(models.QuerySet): def for_user(self, user: User) -> Optional["Subscription"]: @@ -206,6 +206,9 @@ class Subscription(TimestampedModel): def __repr__(self): return f"" + def __str__(self): + return f"Subscription id={self.id}" + class SubscriptionNotificationQuerySet(models.QuerySet): def needs_notifications_sent_for_post(self, post: Post): @@ -234,13 +237,6 @@ class SubscriptionNotification(TimestampedModel): should be notified of the post. """ - class Meta: - constraints = [ - models.UniqueConstraint( - fields=["post", "subscription"], name="subscript_notif_uniq" - ) - ] - subscription = models.ForeignKey( Subscription, related_name="notifications", on_delete=models.CASCADE ) @@ -251,5 +247,15 @@ class Meta: read = models.DateTimeField(null=True, blank=True) objects = models.Manager.from_queryset(SubscriptionNotificationQuerySet)() + class Meta: + constraints = [ + models.UniqueConstraint( + fields=["post", "subscription"], name="subscript_notif_uniq" + ) + ] + def __repr__(self): return f"" + + def __str__(self): + return f"SubscriptionNotification id={self.id}" diff --git a/project/newsletter/operations.py b/project/newsletter/operations.py index 584e715..bfad47d 100644 --- a/project/newsletter/operations.py +++ b/project/newsletter/operations.py @@ -1,6 +1,7 @@ """ This file contains create/update/writing operations. """ + from datetime import timedelta from django.core.cache import cache diff --git a/project/newsletter/test_receivers.py b/project/newsletter/test_receivers.py index 8c3b8b3..1778ad4 100644 --- a/project/newsletter/test_receivers.py +++ b/project/newsletter/test_receivers.py @@ -8,7 +8,6 @@ class TestPostOnSave(DataTestCase): def test_clears_cache_on_save(self): - post = Post.objects.create( slug="receiver", title="receiver", diff --git a/project/newsletter/test_views.py b/project/newsletter/test_views.py index cea85fc..ac51176 100644 --- a/project/newsletter/test_views.py +++ b/project/newsletter/test_views.py @@ -316,7 +316,7 @@ def test_toggle(self): # Toggle the property back and verify the redirect to next. response = self.client.post( url - + f'?next={reverse("newsletter:update_post", kwargs={"slug": post.slug})}' + + f"?next={reverse('newsletter:update_post', kwargs={'slug': post.slug})}" ) self.assertRedirects( response, reverse("newsletter:update_post", kwargs={"slug": post.slug}) diff --git a/project/tests/runner.py b/project/tests/runner.py index c8fa9fd..fe9c3ef 100644 --- a/project/tests/runner.py +++ b/project/tests/runner.py @@ -21,7 +21,6 @@ def setup_databases(self, **kwargs): self.interactive = interactive def run_tests(self, *args, **kwargs): - with override_settings(**TEST_SETTINGS): return super().run_tests(*args, **kwargs) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..1a47dc5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,66 @@ +[project] +name = "debug-tutorial" +version = "1.0.0" +description = "An example Newsletter application used for a debugging tutorial." +authors = [ + {name = "Tim Schilling", email = "schillingt@better-simple.com"} +] +readme = "README.md" +license = "AGPL-3.0-or-later" +requires-python = ">=3.11" +dependencies = [ + "coverage", + "django-anymail", + "django-coverage-plugin", + "django-debug-toolbar", + "django-environ", + "django-registration-redux", + "faker", + "martor", + "mdgen", + "Pillow", + "pre-commit", + "ruff", +] + +[project.urls] +Homepage = "https://github.com/tim-schilling/debug-tutorial" +Repository = "https://github.com/tim-schilling/debug-tutorial" + +[tool.setuptools] +packages = ["project"] + +[tool.coverage.html] +skip_covered = true +skip_empty = true + +[tool.coverage.run] +branch = true +parallel = true +source = ["project"] +omit = [ + "manage.py", + "project/config/asgi.py", + "project/config/wsgi.py", + "project/data/*", +] +plugins = ["django_coverage_plugin"] + +[tool.coverage.django_coverage_plugin] +template_extensions = "html, txt" + +[tool.coverage.paths] +source = ["project"] + +[tool.coverage.report] +show_missing = true + +[tool.ruff] +line-length = 88 + +[tool.ruff.lint] +extend-ignore = ["E501"] +select = ["E", "F", "I", "UP", "DJ"] + +[tool.ruff.lint.isort] +combine-as-imports = true diff --git a/requirements.in b/requirements.in deleted file mode 100644 index 9bdb953..0000000 --- a/requirements.in +++ /dev/null @@ -1,12 +0,0 @@ -pip-tools -coverage -django-anymail -django-debug-toolbar -django_coverage_plugin -django-environ -django-registration-redux -Pillow -martor -pre-commit -faker -mdgen diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 1b900be..0000000 --- a/requirements.txt +++ /dev/null @@ -1,104 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --strip-extras -# -asgiref==3.9.2 - # via django -bleach==6.2.0 - # via martor -build==1.3.0 - # via pip-tools -certifi==2025.8.3 - # via requests -cfgv==3.4.0 - # via pre-commit -charset-normalizer==3.4.3 - # via requests -click==8.3.0 - # via pip-tools -coverage==7.10.7 - # via - # -r requirements.in - # django-coverage-plugin -distlib==0.4.0 - # via virtualenv -django==5.2.6 - # via - # django-anymail - # django-debug-toolbar - # martor -django-anymail==13.1 - # via -r requirements.in -django-coverage-plugin==3.1.1 - # via -r requirements.in -django-debug-toolbar==6.0.0 - # via -r requirements.in -django-environ==0.12.0 - # via -r requirements.in -django-registration-redux==2.13 - # via -r requirements.in -faker==37.8.0 - # via - # -r requirements.in - # mdgen -filelock==3.19.1 - # via virtualenv -identify==2.6.14 - # via pre-commit -idna==3.10 - # via requests -markdown==3.9 - # via martor -martor==1.7.15 - # via -r requirements.in -mdgen==0.1.10 - # via -r requirements.in -nodeenv==1.9.1 - # via pre-commit -packaging==25.0 - # via build -pillow==11.3.0 - # via -r requirements.in -pip-tools==7.5.0 - # via -r requirements.in -platformdirs==4.4.0 - # via virtualenv -pre-commit==4.3.0 - # via -r requirements.in -pyproject-hooks==1.2.0 - # via - # build - # pip-tools -pyyaml==6.0.2 - # via pre-commit -requests==2.32.5 - # via - # django-anymail - # martor -sqlparse==0.5.3 - # via - # django - # django-debug-toolbar -tzdata==2025.2 - # via - # faker - # martor -urllib3==2.5.0 - # via - # django-anymail - # martor - # requests -virtualenv==20.34.0 - # via pre-commit -webencodings==0.5.1 - # via bleach -wheel==0.45.1 - # via pip-tools -zipp==3.23.0 - # via martor - -# The following packages are considered to be unsafe in a requirements file: -# pip -# setuptools diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index a5222f9..0000000 --- a/setup.cfg +++ /dev/null @@ -1,38 +0,0 @@ -[metadata] -name = Debug Tutorial -version = 1.0.0 -description = An example Newsletter application used for a debugging tutorial. -author = Tim Schilling -author_email = schillingt@better-simple.com -url = https://github.com/tim-schilling/debug-tutorial - -[coverage.html] -skip_covered = True -skip_empty = True - -[coverage:run] -branch = True -parallel = True -source = project -omit = - manage.py - project/config/asgi.py - project/config/wsgi.py - project/data/* -plugins = django_coverage_plugin - -[coverage:django_coverage_plugin] -template_extensions = html, txt - -[coverage:paths] -source = project - -[coverage:report] -show_missing = True - -[flake8] -extend-ignore = E203, E501 - -[isort] -combine_as_imports = true -profile = black