Skip to content
Snippets Groups Projects
Commit 6f532fb9 authored by Tore.Brede's avatar Tore.Brede
Browse files

Merge branch 'GREG-16/1' into 'master'

build: introduce pylint, pyproject.toml, and formatting lints

See merge request !8
parents 8eb05b0c b1271039
No related branches found
No related tags found
1 merge request!8build: introduce pylint, pyproject.toml, and formatting lints
Pipeline #87231 passed
......@@ -13,5 +13,6 @@ before_script:
test:
script:
- make lint
- make test
[MASTER]
load-plugins=pylint_django
ignore=gregsite/settings
django-settings-module=gregsite.settings
[MESSAGES CONTROL]
disable=
fixme,
import-outside-toplevel,
invalid-name,
line-too-long,
missing-class-docstring,
missing-function-docstring,
missing-module-docstring,
no-self-use,
too-few-public-methods,
too-many-ancestors,
unused-argument,
BLACK ?= black -q
MYPY ?= mypy
PIP ?= pip -q
POETRY ?= poetry
PYLINT ?= pylint -sn
PYTHON ?= python3.9
VENV ?= venv
......@@ -9,6 +11,8 @@ pip = python -m $(PIP)
poetry = python -m $(POETRY)
venv = . $(VENV)/bin/activate &&
PACKAGES = greg/ gregsite/
all: test
.PHONY: clean
......@@ -28,8 +32,18 @@ test: $(VENV)
$(venv) $(mypy) -p greg
$(venv) python manage.py test
.PHONY: lint
lint: $(VENV)
$(venv) $(poetry) -q check
$(venv) $(PYLINT) $(PACKAGES)
$(venv) $(BLACK) --check --diff $(PACKAGES)
.PHONY: fmt
fmt: $(VENV)
$(venv) $(BLACK) $(PACKAGES)
.PHONY: deps
deps: poetry.lock
poetry.lock: pyproject.toml | $(VENV)
$(venv) $(poetry) update $(PACKAGES)
$(venv) $(poetry) update
from rest_framework import fields, serializers
from rest_framework.serializers import ModelSerializer
from greg.models import Role
class RoleSerializer(serializers.ModelSerializer):
class RoleSerializer(ModelSerializer):
class Meta:
model = Role
fields = "__all__"
from django_filters import rest_framework as filters
from rest_framework import viewsets
from rest_framework.schemas.openapi import AutoSchema
from greg.api.pagination import PrimaryKeyCursorPagination
from greg.api.serializers.role import RoleSerializer
......
......@@ -7,4 +7,4 @@ class GregAppConfig(AppConfig):
verbose_name = _("Greg")
def ready(self):
import greg.signals
import greg.signals # pylint: disable=unused-import
......@@ -69,7 +69,7 @@ class Role(BaseModel):
default_duration_days = models.IntegerField(null=True)
def __str__(self):
return str(self.name_nb or self.name_en or self.slug)
return str(self.name_nb or self.name_en)
def __repr__(self):
return "{}(id={!r}, type={!r}, name_nb={!r}, name_en={!r})".format(
......
......@@ -75,7 +75,9 @@ def add_changed_fields_callback(sender, instance, raw, *args, **kwargs):
changed = instance.is_dirty()
if not changed:
return
instance._changed_fields = list(instance.get_dirty_fields().keys())
instance._changed_fields = list( # pylint: disable=protected-access
instance.get_dirty_fields().keys()
)
@receiver(models.signals.post_save, dispatch_uid="save_notification_callback")
......
from django.contrib.auth import get_user_model
from django.utils.dateparse import parse_datetime
from rest_framework import status
from rest_framework.reverse import reverse
from rest_framework.test import APIClient, APITestCase
from rest_framework.authtoken.models import Token
from rest_framework.reverse import reverse
from rest_framework.test import (
APIClient,
APITestCase,
)
from django.test import TestCase
from greg.models import Person, PersonRole, Role
from greg.models import Person
class GregAPITestCase(APITestCase):
......@@ -15,14 +15,14 @@ class GregAPITestCase(APITestCase):
self.client = self.get_token_client()
def get_token_client(self, username="test") -> APIClient:
self.user, created = get_user_model().objects.get_or_create(username=username)
token, created = Token.objects.get_or_create(user=self.user)
self.user, _ = get_user_model().objects.get_or_create(username=username)
token, _ = Token.objects.get_or_create(user=self.user)
client = APIClient()
client.credentials(HTTP_AUTHORIZATION="Token {}".format(token.key))
return client
class PersonTestData:
class PersonTestData(GregAPITestCase):
def setUp(self):
super().setUp()
self.person_foo_data = dict(
......@@ -43,7 +43,7 @@ class PersonTestData:
self.person_bar = Person.objects.create(**self.person_bar_data)
class PersonAPITestCase(PersonTestData, GregAPITestCase):
class PersonAPITestCase(PersonTestData):
def test_get_person(self):
url = reverse("person-detail", kwargs={"id": self.person_foo.id})
response = self.client.get(url)
......
......@@ -14,7 +14,6 @@ Including another URLconf
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from typing import List
from django.contrib import admin
from django.urls import path, include
from django.urls.resolvers import URLResolver
......
......@@ -21,7 +21,6 @@ whitenoise = "*"
[tool.poetry.dev-dependencies]
Faker = "^8.10.1"
autopep8 = "*"
black = "*"
django-stubs = "*"
djangorestframework-stubs = "*"
......@@ -31,6 +30,9 @@ pylint = "*"
pylint-django = "*"
rope = "*"
[tool.black]
extend-exclude = '^/greg/migrations/.*\.py'
[build-system]
build-backend = "poetry.core.masonry.api"
requires = ["poetry-core>=1.0.0"]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment