Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Django 5.0 #34

Merged
merged 1 commit into from
Nov 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 0 additions & 53 deletions .flake8

This file was deleted.

53 changes: 46 additions & 7 deletions .github/workflows/tox.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,38 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
toxenv: [fmt, lint, mypy, checks]
toxenv: [fmt, lint, mypy]
env:
TOXENV: ${{ matrix.toxenv }}

steps:
- name: Check out the repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Set up Python 3.11
- name: Set up Python (3.11)
uses: actions/setup-python@v4
with:
python-version: "3.11"

- name: Install and run tox
run: |
pip install tox
tox

checks:
name: Run Django checks
runs-on: ubuntu-latest
strategy:
matrix:
toxenv: ["django-checks"]
env:
TOXENV: ${{ matrix.toxenv }}

steps:
- name: Check out the repository
uses: actions/checkout@v4

- name: Set up Python (3.11)
uses: actions/setup-python@v4
with:
python-version: "3.11"
Expand All @@ -37,15 +60,31 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python: ["3.8", "3.11"]
django: ["32", "41", "main"]
python: ["3.8", "3.9", "3.10", "3.11", "3.12"]
# build LTS version, next version, HEAD
django: ["32", "42", "50", "main"]
exclude:
- python: "3.8"
django: "50"
- python: "3.8"
django: "main"
- python: "3.9"
django: "50"
- python: "3.9"
django: "main"
- python: "3.10"
django: "main"
- python: "3.11"
django: "32"
- python: "3.12"
django: "32"

env:
TOXENV: py${{ matrix.python }}-django${{ matrix.django }}
TOXENV: django${{ matrix.django }}-py${{ matrix.python }}

steps:
- name: Check out the repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v4
Expand Down
8 changes: 0 additions & 8 deletions .isort.cfg

This file was deleted.

31 changes: 7 additions & 24 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,36 +1,20 @@
repos:
# python import sorting - will amend files
- repo: https://github.com/pre-commit/mirrors-isort
rev: v5.10.1
hooks:
- id: isort

# python code formatting - will amend files
- repo: https://github.com/ambv/black
rev: 22.10.0
rev: 23.10.1
hooks:
- id: black

- repo: https://github.com/asottile/pyupgrade
rev: v3.2.0
hooks:
- id: pyupgrade

# Flake8 includes pyflakes, pycodestyle, mccabe, pydocstyle, bandit
- repo: https://gitlab.com/pycqa/flake8
rev: 3.9.2
- repo: https://github.com/charliermarsh/ruff-pre-commit
# Ruff version.
rev: "v0.1.5"
hooks:
- id: flake8
additional_dependencies:
- flake8-bandit
- flake8-blind-except
- flake8-docstrings
- flake8-logging-format
- flake8-print
- id: ruff
args: [--fix, --exit-non-zero-on-fix]

# python static type checking
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.982
rev: v1.7.0
hooks:
- id: mypy
args:
Expand All @@ -40,4 +24,3 @@ repos:
- --no-implicit-optional
- --ignore-missing-imports
- --follow-imports=silent
exclude: ^tests
66 changes: 66 additions & 0 deletions .ruff.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
line-length = 88
ignore = [
"D100", # Missing docstring in public module
"D101", # Missing docstring in public class
"D102", # Missing docstring in public method
"D103", # Missing docstring in public function
"D104", # Missing docstring in public package
"D105", # Missing docstring in magic method
"D106", # Missing docstring in public nested class
"D107", # Missing docstring in __init__
"D203", # 1 blank line required before class docstring
"D212", # Multi-line docstring summary should start at the first line
"D213", # Multi-line docstring summary should start at the second line
"D404", # First word of the docstring should not be "This"
"D405", # Section name should be properly capitalized
"D406", # Section name should end with a newline
"D407", # Missing dashed underline after section
"D410", # Missing blank line after section
"D411", # Missing blank line before section
"D412", # No blank lines allowed between a section header and its content
"D416", # Section name should end with a colon
"D417",
"D417", # Missing argument description in the docstring
]
select = [
"A", # flake8 builtins
"C9", # mcabe
"D", # pydocstyle
"E", # pycodestyle (errors)
"F", # Pyflakes
"I", # isort
"S", # flake8-bandit
"T2", # flake8-print
"W", # pycodestype (warnings)
]

[isort]
combine-as-imports = true

[mccabe]
max-complexity = 8

[per-file-ignores]
"*tests/*" = [
"D205", # 1 blank line required between summary line and description
"D400", # First line should end with a period
"D401", # First line should be in imperative mood
"D415", # First line should end with a period, question mark, or exclamation point
"E501", # Line too long
"E731", # Do not assign a lambda expression, use a def
"S101", # Use of assert detected
"S105", # Possible hardcoded password
"S106", # Possible hardcoded password
"S113", # Probable use of requests call with timeout set to {value}
]
"*/migrations/*" = [
"E501", # Line too long
]
"*/settings.py" = [
"F403", # from {name} import * used; unable to detect undefined names
"F405", # {name} may be undefined, or defined from star imports:
]
"*/settings/*" = [
"F403", # from {name} import * used; unable to detect undefined names
"F405", # {name} may be undefined, or defined from star imports:
]
17 changes: 7 additions & 10 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "django-side-effects"
version = "2.0.b4"
version = "2.0"
description = "Django app for managing external side effects."
license = "MIT"
authors = ["YunoJuno <[email protected]>"]
Expand All @@ -13,35 +13,32 @@ classifiers = [
"Framework :: Django :: 3.2",
"Framework :: Django :: 4.0",
"Framework :: Django :: 4.1",
"Framework :: Django :: 4.2",
"Framework :: Django :: 5.0",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
packages = [{ include = "side_effects" }]

[tool.poetry.dependencies]
python = "^3.8"
django = "^3.2 || ^4.0"
django = "^3.2 || ^4.0 || ^5.0 "

[tool.poetry.dev-dependencies]
black = {version = "*", allow-prereleases = true}
black = "*"
coverage = "*"
flake8 = "*"
flake8-bandit = "*"
flake8-blind-except = "*"
flake8-docstrings = "*"
flake8-logging-format = "*"
flake8-print = "*"
freezegun = "*"
isort = "*"
mypy = "*"
pre-commit = "*"
pytest = "*"
pytest-cov = "*"
pytest-django = "*"
ruff = "*"
tox = "*"

[build-system]
Expand Down
1 change: 0 additions & 1 deletion side_effects/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@


class SideEffectsConfig(AppConfig):

name = "side_effects"
verbose_name = "External Side Effects"

Expand Down
5 changes: 2 additions & 3 deletions side_effects/management/commands/display_side_effects.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ def sort_events(


class Command(BaseCommand):

help = "Displays project side_effects."
help = "Displays project side_effects." # noqa: A003

def __init__(self, *args: Any, **kwargs: Any) -> None:
self.missing_docstrings: List[str] = []
Expand Down Expand Up @@ -160,7 +159,7 @@ def print_missing(self) -> None:
else:
self.stdout.write("\nAll registered functions have docstrings")

def exit(self) -> None:
def exit(self) -> None: # noqa: A003
"""
Exit based on whether there are any missing docstrings.

Expand Down
8 changes: 4 additions & 4 deletions tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@

@has_side_effects("foo")
def origin(message: str) -> str:
print(f"origin: {message}") # noqa: T001
print(f"origin: {message}") # noqa: T201
return f"Message received: {message}"


@is_side_effect_of("foo")
def no_docstring(message: str) -> None:
print(f"side-effect.1: message={message}") # noqa: T001
print(f"side-effect.1: message={message}") # noqa: T201


@is_side_effect_of("foo")
def one_line_docstring(message: str) -> None:
"""This is a one-line docstring."""
print(f"side-effect.2: message={message}") # noqa: T001
print(f"side-effect.2: message={message}") # noqa: T201


@is_side_effect_of("foo")
Expand All @@ -27,6 +27,6 @@ def multi_line_docstring(message: str, return_value: str) -> None:
It has more information here.

"""
print( # noqa: T001
print( # noqa: T201
f"Side-effect.3: message={message}, return_value={return_value}"
)
2 changes: 1 addition & 1 deletion tests/test_decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def test_http_response_check(self):
@mock.patch("side_effects.decorators.registry")
def test_has_side_effects(self, mock_registry):
"""Decorated functions should call run_side_effects."""

# call the decorator directly - then call the decorated function
# as the action takes places post-function call.
def test_func(arg1: int):
Expand Down Expand Up @@ -71,7 +72,6 @@ def test_func(arg1, arg2):

@decorators.disable_side_effects()
def test_disable_side_effects(self, events):

# simple func that calls the side-effect 'foo'
def test_func():
registry.run_side_effects("foo")
Expand Down
Loading