Skip to content

Commit

Permalink
Merge pull request #7 from sergei-maertens/chore/add-type-checking
Browse files Browse the repository at this point in the history
🏷️ Add mypy type checking
  • Loading branch information
sergei-maertens authored Mar 1, 2024
2 parents 7636d49 + 94e547d commit e09b1bb
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 10 deletions.
6 changes: 4 additions & 2 deletions privates/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from typing import Optional, Sequence, Type

import django.db.models.options
from django.contrib.admin import AdminSite
from django.contrib.auth import get_permission_codename
from django.db import models
from django.urls import re_path
Expand Down Expand Up @@ -39,6 +40,7 @@ class PrivateMediaMixin:
# options passed through to sendfile, as a dict
private_media_view_options: Optional[dict] = None

admin_site: AdminSite
model: Type[models.Model]
opts: django.db.models.options.Options

Expand Down Expand Up @@ -99,7 +101,7 @@ def get_private_media_view(self, field: str):
)

def formfield_for_dbfield(self, db_field, request, **kwargs):
field = super().formfield_for_dbfield(db_field, request, **kwargs)
field = super().formfield_for_dbfield(db_field, request, **kwargs) # type: ignore
private_media_fields = self.get_private_media_fields()
if db_field.name in private_media_fields:
# replace the widget
Expand All @@ -122,7 +124,7 @@ def _get_private_media_view_name(self, field: str) -> str:
return name

def get_urls(self):
default = super().get_urls()
default = super().get_urls() # type: ignore

extra = []
for field in self.get_private_media_fields():
Expand Down
12 changes: 8 additions & 4 deletions privates/widgets.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Optional, Union
from typing import Any, Dict, Optional, Union

from django.contrib.admin.widgets import AdminFileWidget
from django.core.files.uploadedfile import UploadedFile
Expand All @@ -13,14 +13,18 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def get_context(
self, name: str, value: Optional[Union[FieldFile, UploadedFile]], attrs: dict
self,
name: str,
value: Optional[Union[FieldFile, UploadedFile]],
attrs: Optional[Dict[str, Any]],
):
"""
Return value-related substitutions.
"""
context = super().get_context(name, value, attrs)
if self.is_initial(value):
context = super().get_context(name, value, attrs) # type: ignore
if self.is_initial(value): # type: ignore
if self.download_allowed:
assert isinstance(value, FieldFile)
context["url"] = reverse(
self.url_name, kwargs={"pk": value.instance.pk}
)
Expand Down
14 changes: 10 additions & 4 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ tests_require =
pyquery
isort
black
django-stubs[compatible-mypy]

[options.extras_require]
tests =
Expand All @@ -53,6 +54,7 @@ tests =
pyquery
isort
black
django-stubs[compatible-mypy]
pep8 = flake8
coverage = pytest-cov
docs =
Expand Down Expand Up @@ -110,8 +112,12 @@ exclude=env,.tox,doc
max-line-length=119
exclude=env,.tox,doc

[zest.releaser]
create-wheel = True
[mypy]
plugins =
mypy_django_plugin.main

[distutils]
index-servers = pypi
[mypy.plugins.django-stubs]
django_settings_module = "testapp.settings"

[mypy-django_sendfile]
ignore_missing_imports = True
7 changes: 7 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ envlist =
isort
black
docs
py{38,39,310}-django{32,41,42}-mypy
py311-django{41,42}-mypy
skip_missing_interpreters = true

[gh-actions]
Expand Down Expand Up @@ -59,3 +61,8 @@ commands=
py.test check_sphinx.py -v \
--tb=auto \
{posargs}

[testenv:py{38,39,310,311,312}-django{32,41,42}-mypy]
extras = tests
skipsdist = True
commands = mypy privates

0 comments on commit e09b1bb

Please sign in to comment.