Skip to content

Commit

Permalink
Add Django 5.0 to build matrix
Browse files Browse the repository at this point in the history
  • Loading branch information
hugorodgerbrown committed Nov 15, 2023
1 parent 7afc131 commit 3861c36
Show file tree
Hide file tree
Showing 16 changed files with 156 additions and 138 deletions.
48 changes: 0 additions & 48 deletions .flake8

This file was deleted.

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

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

- name: Set up Python 3.10
uses: actions/setup-python@v1
- name: Set up Python (3.11)
uses: actions/setup-python@v4
with:
python-version: "3.10"
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"

- name: Install and run tox
run: |
Expand All @@ -38,24 +61,25 @@ jobs:
strategy:
matrix:
python: ["3.10", "3.11", "3.12"]
django: [32,42,50,main]
# build LTS version, next version, HEAD
django: ["32", "42", "50", "main"]
exclude:
- python: "3.10"
django: "main"
- python: "3.11"
django: "32"
- python: "3.12"
django: "32"
- python: "3.12"
django: "42"

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

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

- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v1
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*.db
*.egg-info
*.pyc
dist
node_modules
poetry.lock
test.db
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,37 +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: 23.1.0
rev: 23.10.1
hooks:
- id: black

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

# Flake8 includes pyflakes, pycodestyle, mccabe, pydocstyle, bandit
- repo: https://github.com/pycqa/flake8
rev: 6.0.0
- 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
- pyyaml
- id: ruff
args: [--fix, --exit-non-zero-on-fix]

# python static type checking
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.0.0
rev: v1.7.0
hooks:
- id: mypy
args:
Expand Down
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:
]
11 changes: 9 additions & 2 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,19 @@

All notable changes to this project will be documented in this file.

## [1.0.0] - 2023-02-17
## 3.1 - 2023-11-15

- Add Django 5.0 to build matrix
- Add Python 3.12 to build matrix

No code changes.

## 3.0.0 - 2023-11-07

- Drop support for Python < 3.10
- Drop support for Pydantic < 2

## [0.10.0] - 2023-02-17
## 0.10.0 - 2023-02-17

- Improve admin list view to include date filters and value search [#8]
- Implement directive downgrades [#6]
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2022 yunojuno
Copyright (c) 2023 yunojuno

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion csp/management/commands/truncate_csp_reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@


class Command(BaseCommand):
help = "Clears out CSP violation reports"
help = "Clears out CSP violation reports" # noqa: A003

def handle(self, *args: object, **options: object) -> None:
count, _ = CspReport.objects.all().delete()
Expand Down
2 changes: 1 addition & 1 deletion csp/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,4 +142,4 @@ def get_default_rules_expanded() -> list[tuple[str, str]]:
"""
# Ask ChatGPT: how can I expand a dictionary of lists in python to a
# list of tuples?
return [(k, v) for k, l in get_default_rules().items() for v in l]
return [(k, v) for k, lst in get_default_rules().items() for v in lst]
2 changes: 2 additions & 0 deletions demo/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

DATABASES = {"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": "demo.db"}}

DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"

INSTALLED_APPS = (
"django.contrib.admin",
"django.contrib.auth",
Expand Down
33 changes: 14 additions & 19 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,54 +1,49 @@
[tool.poetry]
name = "django-csp-plus"
version = "3.0.0"
version = "3.1"
description = "CSP tracking and violation report endpoint."
license = "MIT"
authors = ["YunoJuno <[email protected]>"]
maintainers = ["YunoJuno <[email protected]>"]
readme = "README.md"
readme = "README"
homepage = "https://github.com/yunojuno/django-csp-plus"
repository = "https://github.com/yunojuno/django-csp-plus"
documentation = "https://github.com/yunojuno/django-csp-plus"
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Web Environment",
"Framework :: Django",
"Framework :: Django :: 3.2",
"Framework :: Django :: 4.0",
"Framework :: Django :: 4.1",
"Framework :: Django :: 4.2",
"Framework :: Django :: 5.0",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
packages = [{ include = "csp" }]

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

[tool.poetry.dev-dependencies]
black = "*"
[tool.poetry.group.test.dependencies]
coverage = "*"
flake8 = "*"
flake8-bandit = "*"
flake8-blind-except = "*"
flake8-docstrings = "*"
flake8-logging-format = "*"
flake8-print = "*"
freezegun = "*"
isort = "*"
mypy = "*"
pre-commit = "*"
pytest = "*"
pytest-cov = "*"
pytest-django = "*"
# forced dependency from flake8-bandit
pyyaml = "*"
tox = "*"

[tool.poetry.group.dev.dependencies]
black = "*"
mypy = "*"
pre-commit = "*"
ruff = "*"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
4 changes: 2 additions & 2 deletions tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
("ws://example.com", "ws://example.com"),
],
)
def test_clean_value(input: str, output: str) -> None:
def test_clean_value(input: str, output: str) -> None: # noqa: A002
assert CspRule.clean_value(input) == output


Expand Down Expand Up @@ -73,7 +73,7 @@ def test_mandatory_fields(self, report_data: dict) -> None:
("https://example.com:80/foo/?bar", "https://example.com:80/foo/"),
],
)
def test_blocked_uri(self, input: str, output: str) -> None:
def test_blocked_uri(self, input: str, output: str) -> None: # noqa: A002
data = ReportData(effective_directive="img-src", blocked_uri=input)
assert data.blocked_uri == output

Expand Down
Loading

0 comments on commit 3861c36

Please sign in to comment.