Better format enforcing (#1391)
* Add shared python format-check target * Add .format-check to api lint target * Format api code with makefile format target * Add .format-check to tools lint target * Add .format-check to analyzer lint target * Format analyzer code with makefile format target * Add .format-check to celery lint target * Add .format-check to api_client lint target * Format api_client code with makefile format target * Add .format-check to playout lint target * Run CI linting in parallel * Disable isort in pre-commit
This commit is contained in:
parent
ada4c72e87
commit
30b3470a06
|
@ -106,6 +106,16 @@ jobs:
|
||||||
# into 'test' when the entire matrix succeeds.
|
# into 'test' when the entire matrix succeeds.
|
||||||
lint:
|
lint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
context:
|
||||||
|
- analyzer
|
||||||
|
- api
|
||||||
|
- api_client
|
||||||
|
- playout
|
||||||
|
- worker
|
||||||
|
|
||||||
container: ghcr.io/libretime/libretime-dev:buster
|
container: ghcr.io/libretime/libretime-dev:buster
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
|
@ -124,12 +134,8 @@ jobs:
|
||||||
echo "::add-matcher::.github/annotations/pylint.json"
|
echo "::add-matcher::.github/annotations/pylint.json"
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
run: |
|
run: make lint
|
||||||
make -C api lint
|
working-directory: ${{ matrix.context }}
|
||||||
make -C analyzer lint
|
|
||||||
make -C worker lint
|
|
||||||
make -C api_client lint
|
|
||||||
make -C playout lint
|
|
||||||
|
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
|
@ -39,11 +39,11 @@ repos:
|
||||||
hooks:
|
hooks:
|
||||||
- id: black
|
- id: black
|
||||||
|
|
||||||
- repo: https://github.com/pycqa/isort
|
# - repo: https://github.com/pycqa/isort
|
||||||
rev: 5.9.3
|
# rev: 5.9.3
|
||||||
hooks:
|
# hooks:
|
||||||
- id: isort
|
# - id: isort
|
||||||
args: ["--profile", "black", "--filter-files"]
|
# args: ["--profile", "black", "--filter-files"]
|
||||||
|
|
||||||
- repo: https://github.com/codespell-project/codespell
|
- repo: https://github.com/codespell-project/codespell
|
||||||
rev: v2.1.0
|
rev: v2.1.0
|
||||||
|
|
|
@ -8,7 +8,7 @@ MYPY_ARG := airtime_analyzer tests
|
||||||
PYTEST_ARG := --cov=airtime_analyzer tests
|
PYTEST_ARG := --cov=airtime_analyzer tests
|
||||||
|
|
||||||
format: .format
|
format: .format
|
||||||
lint: .pylint .mypy
|
lint: .format-check .pylint .mypy
|
||||||
|
|
||||||
fixtures:
|
fixtures:
|
||||||
bash tests/fixtures/generate.sh
|
bash tests/fixtures/generate.sh
|
||||||
|
|
|
@ -4,6 +4,7 @@ import shutil
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from airtime_analyzer.analyzer_pipeline import AnalyzerPipeline
|
from airtime_analyzer.analyzer_pipeline import AnalyzerPipeline
|
||||||
|
|
||||||
from .conftest import AUDIO_FILENAME, AUDIO_IMPORT_DEST
|
from .conftest import AUDIO_FILENAME, AUDIO_IMPORT_DEST
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from airtime_analyzer.analyzer import Analyzer
|
from airtime_analyzer.analyzer import Analyzer
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import distro
|
import distro
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from airtime_analyzer.cuepoint_analyzer import CuePointAnalyzer
|
from airtime_analyzer.cuepoint_analyzer import CuePointAnalyzer
|
||||||
|
|
||||||
from .fixtures import FILE_INVALID_DRM, FILES, Fixture
|
from .fixtures import FILE_INVALID_DRM, FILES, Fixture
|
||||||
|
|
|
@ -5,6 +5,7 @@ import time
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from airtime_analyzer.filemover_analyzer import FileMoverAnalyzer
|
from airtime_analyzer.filemover_analyzer import FileMoverAnalyzer
|
||||||
|
|
||||||
from .conftest import AUDIO_FILENAME
|
from .conftest import AUDIO_FILENAME
|
||||||
|
|
|
@ -3,6 +3,7 @@ from unittest import mock
|
||||||
|
|
||||||
import mutagen
|
import mutagen
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from airtime_analyzer.metadata_analyzer import MetadataAnalyzer
|
from airtime_analyzer.metadata_analyzer import MetadataAnalyzer
|
||||||
|
|
||||||
from .fixtures import FILE_INVALID_DRM, FILE_INVALID_TXT, FILES_TAGGED, FixtureMeta
|
from .fixtures import FILE_INVALID_DRM, FILE_INVALID_TXT, FILES_TAGGED, FixtureMeta
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import distro
|
import distro
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from airtime_analyzer.playability_analyzer import (
|
from airtime_analyzer.playability_analyzer import (
|
||||||
PlayabilityAnalyzer,
|
PlayabilityAnalyzer,
|
||||||
UnplayableFileError,
|
UnplayableFileError,
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from airtime_analyzer.replaygain_analyzer import ReplayGainAnalyzer
|
from airtime_analyzer.replaygain_analyzer import ReplayGainAnalyzer
|
||||||
|
|
||||||
from .fixtures import FILE_INVALID_DRM, FILES, Fixture
|
from .fixtures import FILE_INVALID_DRM, FILES, Fixture
|
||||||
|
|
|
@ -7,5 +7,5 @@ PYLINT_ARG := libretimeapi
|
||||||
MYPY_ARG := libretimeapi
|
MYPY_ARG := libretimeapi
|
||||||
|
|
||||||
format: .format
|
format: .format
|
||||||
lint: .pylint .mypy
|
lint: .format-check .pylint .mypy
|
||||||
clean: .clean
|
clean: .clean
|
||||||
|
|
|
@ -4,6 +4,7 @@ from django.contrib import auth
|
||||||
from django.contrib.auth.models import AbstractBaseUser, Permission
|
from django.contrib.auth.models import AbstractBaseUser, Permission
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
from libretimeapi.managers import UserManager
|
from libretimeapi.managers import UserManager
|
||||||
from libretimeapi.permission_constants import GROUPS
|
from libretimeapi.permission_constants import GROUPS
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from libretimeapi.models import Schedule, ShowInstance
|
from libretimeapi.models import Schedule, ShowInstance
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from libretimeapi.models import User
|
from libretimeapi.models import User
|
||||||
from libretimeapi.models.user_constants import DJ, GUEST
|
from libretimeapi.models.user_constants import DJ, GUEST
|
||||||
from libretimeapi.permission_constants import GROUPS
|
from libretimeapi.permission_constants import GROUPS
|
||||||
from rest_framework.test import APITestCase
|
|
||||||
|
|
||||||
|
|
||||||
class TestUserManager(APITestCase):
|
class TestUserManager(APITestCase):
|
||||||
|
|
|
@ -3,6 +3,9 @@ import os
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
|
from model_bakery import baker
|
||||||
|
from rest_framework.test import APIRequestFactory, APITestCase
|
||||||
|
|
||||||
from libretimeapi.models.user_constants import ADMIN, DJ, GUEST, PROGRAM_MANAGER
|
from libretimeapi.models.user_constants import ADMIN, DJ, GUEST, PROGRAM_MANAGER
|
||||||
from libretimeapi.permission_constants import (
|
from libretimeapi.permission_constants import (
|
||||||
DJ_PERMISSIONS,
|
DJ_PERMISSIONS,
|
||||||
|
@ -10,8 +13,6 @@ from libretimeapi.permission_constants import (
|
||||||
PROGRAM_MANAGER_PERMISSIONS,
|
PROGRAM_MANAGER_PERMISSIONS,
|
||||||
)
|
)
|
||||||
from libretimeapi.permissions import IsSystemTokenOrUser
|
from libretimeapi.permissions import IsSystemTokenOrUser
|
||||||
from model_bakery import baker
|
|
||||||
from rest_framework.test import APIRequestFactory, APITestCase
|
|
||||||
|
|
||||||
|
|
||||||
class TestIsSystemTokenOrUser(APITestCase):
|
class TestIsSystemTokenOrUser(APITestCase):
|
||||||
|
|
|
@ -4,10 +4,11 @@ from datetime import datetime, timedelta, timezone
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
from django.utils import dateparse
|
from django.utils import dateparse
|
||||||
from libretimeapi.views import FileViewSet
|
|
||||||
from model_bakery import baker
|
from model_bakery import baker
|
||||||
from rest_framework.test import APIRequestFactory, APITestCase
|
from rest_framework.test import APIRequestFactory, APITestCase
|
||||||
|
|
||||||
|
from libretimeapi.views import FileViewSet
|
||||||
|
|
||||||
|
|
||||||
class TestFileViewSet(APITestCase):
|
class TestFileViewSet(APITestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -8,6 +8,6 @@ MYPY_ARG := api_clients tests
|
||||||
PYTEST_ARG := --cov=api_clients tests
|
PYTEST_ARG := --cov=api_clients tests
|
||||||
|
|
||||||
format: .format
|
format: .format
|
||||||
lint: .pylint .mypy
|
lint: .format-check .pylint .mypy
|
||||||
test: .pytest
|
test: .pytest
|
||||||
clean: .clean
|
clean: .clean
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from api_clients.utils import ApcUrl, IncompleteUrl, UrlBadParam
|
from api_clients.utils import ApcUrl, IncompleteUrl, UrlBadParam
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from api_clients.utils import RequestProvider
|
from api_clients.utils import RequestProvider
|
||||||
from api_clients.version1 import api_config
|
from api_clients.version1 import api_config
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import datetime
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from api_clients import utils
|
from api_clients import utils
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from api_clients.utils import RequestProvider
|
from api_clients.utils import RequestProvider
|
||||||
from api_clients.version2 import AirtimeApiClient, api_config
|
from api_clients.version2 import AirtimeApiClient, api_config
|
||||||
|
|
||||||
|
|
|
@ -7,5 +7,5 @@ PYLINT_ARG := liquidsoap pypo
|
||||||
MYPY_ARG := liquidsoap pypo
|
MYPY_ARG := liquidsoap pypo
|
||||||
|
|
||||||
format: .format
|
format: .format
|
||||||
lint: .pylint .mypy
|
lint: .format-check .pylint .mypy
|
||||||
clean: .clean
|
clean: .clean
|
||||||
|
|
|
@ -8,6 +8,6 @@ MYPY_ARG = .
|
||||||
PYTEST_ARG = .
|
PYTEST_ARG = .
|
||||||
|
|
||||||
format: .format
|
format: .format
|
||||||
lint: .pylint .mypy
|
lint: .format-check .pylint .mypy
|
||||||
test: .pytest
|
test: .pytest
|
||||||
clean: .clean
|
clean: .clean
|
||||||
|
|
|
@ -32,7 +32,13 @@ install: venv
|
||||||
.format: $(VENV)
|
.format: $(VENV)
|
||||||
source $(VENV)/bin/activate
|
source $(VENV)/bin/activate
|
||||||
black .
|
black .
|
||||||
isort --profile black .
|
isort . --profile black
|
||||||
|
|
||||||
|
.PHONY: .format-check
|
||||||
|
.format-check: $(VENV)
|
||||||
|
source $(VENV)/bin/activate
|
||||||
|
black . --check
|
||||||
|
isort . --profile black --check
|
||||||
|
|
||||||
.PHONY: .pylint
|
.PHONY: .pylint
|
||||||
.pylint: $(VENV)
|
.pylint: $(VENV)
|
||||||
|
|
|
@ -7,5 +7,5 @@ PYLINT_ARG := airtime-celery
|
||||||
MYPY_ARG := airtime-celery
|
MYPY_ARG := airtime-celery
|
||||||
|
|
||||||
format: .format
|
format: .format
|
||||||
lint: .pylint .mypy
|
lint: .format-check .pylint .mypy
|
||||||
clean: .clean
|
clean: .clean
|
||||||
|
|
Loading…
Reference in New Issue