Added linting and got tests passing

This commit is contained in:
Tris Forster 2026-05-12 13:26:56 +10:00
parent ca62ed693a
commit cfd6d45189
13 changed files with 53 additions and 48 deletions

View File

@ -1,10 +1,13 @@
PYTHON=env/bin/python
DROPZONE=5.7.0
test:
coverage run --include "app/*" --omit "*/migrations/*" app/manage.py test app
coverage html
coverage report
test: check
poetry run coverage run --include "app/*" --omit "*/migrations/*" app/manage.py test app
poetry run coverage html
poetry run coverage report
check:
poetry run ruff check app
dev-setup:
env/bin/pip install -r requirements.txt

View File

@ -1,5 +1,5 @@
from django.test import TestCase
from interface import models, utils
from interface import models
from django.contrib.auth.models import User
from django.utils import timezone
from datetime import timedelta
@ -16,7 +16,6 @@ class AccessTestCase(TestCase):
@classmethod
def setUpTestData(cls):
cls.users = {}
for details in cls.USERS:
cls.users[details["username"]] = User.objects.create_user(**details)
@ -42,7 +41,6 @@ class AccessTestCase(TestCase):
return
def test_protected_views(self):
self.assertAccess({x: False for x in self.PROTECTED_URLS})
if "admin" in self.users:

View File

@ -1,6 +1,7 @@
from django.urls import path
from django.contrib.auth import views as auth_views
from django.views.generic.base import RedirectView
from django.conf import settings
from . import views
@ -69,7 +70,6 @@ urlpatterns = [
),
]
from django.conf import settings
if settings.DEBUG:
from django.views.static import serve

View File

@ -1,20 +1,19 @@
from django.shortcuts import resolve_url
from django.core.signing import Signer
from django.core.exceptions import SuspiciousOperation
import logging
signer = Signer()
import logging
logger = logging.getLogger(__name__)
def sign_data(data, l=None):
def sign_data(data, length=None):
sig = signer.sign(data)
p = len(data) + 1
if l:
l += p
return sig[p:l]
pos = len(data) + 1
if length:
length += pos
return sig[pos:length]
def signed_url(name, **kwargs):

View File

@ -345,12 +345,11 @@ class Work(models.Model):
@property
def identifier(self):
if self.code:
return self.code
composer = self.composer or "Anon"
composer = re.sub("[^\w]", "", composer)
composer = re.sub(r"[^\w]", "", composer)
words = self.name.split()
work = words[0][:3]

View File

@ -1,4 +1,5 @@
from collections import namedtuple
import re
GENERAL = """
mvmt Movement
@ -195,8 +196,8 @@ class MusicTag(namedtuple("MusicTag", ("name", "variant"), defaults=[None])):
@property
def tag(self):
l = self.name.lower()
return MUSIC_TAG_BY_NAME.get(l, l)
lc = self.name.lower()
return MUSIC_TAG_BY_NAME.get(lc, lc)
@property
def is_general(self):
@ -232,9 +233,7 @@ class MusicTag(namedtuple("MusicTag", ("name", "variant"), defaults=[None])):
return self.name
import re
PATTERNS = [re.compile("([A-Za-z]+)[_\- ]*(\d+)"), re.compile("([A-Za-z]+)()")]
PATTERNS = [re.compile(r"([A-Za-z]+)[_\- ]*(\d+)"), re.compile(r"([A-Za-z]+)()")]
def auto_tag(filename):

View File

@ -1,7 +1,7 @@
from interface.tests import AccessTestCase
from byostorage.user import UserStorage
from . import models
from library import models
import tempfile
import json

View File

@ -0,0 +1,8 @@
from doctest import DocTestSuite
from library import music_tags
def load_tests(loader, tests, ignore):
tests.addTests(DocTestSuite(music_tags))
return tests

View File

@ -477,7 +477,7 @@ class WorkAddDocumentView(CollectionMixin, CreateView):
doc.sections.create(tag=inst.abbreviate())
if self.request.headers["Accept"] == "application/json":
filename = os.path.basename(doc.upload.name)
os.path.basename(doc.upload.name)
return JsonResponse(
{
"message": "created",
@ -541,7 +541,7 @@ class DocumentAnnotateView(DocumentMixin, DetailView):
for tag, start, end in data:
# pages.sort()
# end = pages[-1] if len(pages) > 1 else None
o = self.object.sections.create(tag=tag, start=start, end=end)
self.object.sections.create(tag=tag, start=start, end=end)
return HttpResponse(status=204)

View File

@ -1,3 +1,20 @@
from interface.views import AuthorizedResourceMixin
from rest_framework import serializers
from rest_framework.exceptions import APIException
from rest_framework import generics
from library.models import Collection, Work, Document, Section, WorkMeta
import requests
import urllib
import shutil
import os.path
from django.db import transaction
from django.core.files.uploadedfile import TemporaryUploadedFile
"""
Views relating to importing and exporting collection items
"""
@ -33,22 +50,6 @@ class WorkExportView(EnsembleMixin, WorkMixin, View):
"""
from interface.views import AuthorizedResourceMixin
from rest_framework import serializers
from rest_framework.exceptions import APIException
from library.models import Collection, Work, Document, Section, WorkMeta
import requests
import urllib
import shutil
import os.path
from django.db import transaction
from django.core.files.uploadedfile import TemporaryUploadedFile
class WorkMetaSerializer(serializers.ModelSerializer):
class Meta:
@ -176,9 +177,6 @@ class CollectionSerializer(serializers.Serializer):
return Collection.objects.get(pk=collection)
from rest_framework import generics
class CollectionExportView(AuthorizedResourceMixin, generics.RetrieveAPIView):
serializer_class = CollectionSerializer

View File

@ -1,6 +1,6 @@
try:
from .local_settings import *
from .local_settings import * # noqa
except ImportError:
from .default_settings import *
from .default_settings import * # noqa
INSTALLED_APPS += POLYPHONIC_MODULES
INSTALLED_APPS += POLYPHONIC_MODULES # type: ignore #noqa

View File

@ -15,7 +15,7 @@ Including another URLconf
"""
from django.contrib import admin
from django.urls import path, re_path, include
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),

View File

@ -26,6 +26,7 @@ packages = [{include = "*", from="app"}]
[tool.poetry.group.dev.dependencies]
django-debug-toolbar = "5.2"
ruff = "^0.15.12"
coverage = "^7.14.0"
[tool.poetry.scripts]
manage = "manage:main"