diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 12c2721..ac101c0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.7, 3.8] + python-version: ['3.7', '3.8'] steps: - name: Checkout uses: actions/checkout@v2 @@ -73,7 +73,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.10.1] + python-version: ['3.10'] steps: - name: Checkout uses: actions/checkout@v2 @@ -105,10 +105,10 @@ jobs: uses: actions/checkout@v2 with: fetch-depth: 0 - - name: Set up Python '3.10.0' + - name: Set up Python '3.10' uses: actions/setup-python@v2 with: - python-version: '3.10.0' + python-version: ['3.10'] - name: Install dependencies run: | python -m pip install --upgrade pip @@ -145,10 +145,10 @@ jobs: uses: actions/checkout@v2 with: fetch-depth: 0 - - name: Set up Python '3.10.0' + - name: Set up Python '3.10' uses: actions/setup-python@v2 with: - python-version: '3.10.0' + python-version: ['3.10'] - name: Integration tests env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} diff --git a/README.md b/README.md index eb49c52..84246cb 100644 --- a/README.md +++ b/README.md @@ -210,7 +210,10 @@ Development =========== 1. Python 3.7 + -0. Install dependencies `requirements/dev.txt` +2. Install dependencies `requirements/dev.txt` +3. We use `isort` library to order and format our imports, and we check it using `flake8-isort` library (automatically on `flake8` run). +For convenience you may run `isort .` to order imports. + Testing ======= diff --git a/dj_cqrs/__init__.py b/dj_cqrs/__init__.py index 985e802..ac2aebc 100644 --- a/dj_cqrs/__init__.py +++ b/dj_cqrs/__init__.py @@ -2,5 +2,6 @@ import django # pragma: no cover + if django.VERSION < (3, 2): # pragma: no cover default_app_config = 'dj_cqrs.apps.CQRSConfig' diff --git a/dj_cqrs/_validation.py b/dj_cqrs/_validation.py index 9e833b0..2806811 100644 --- a/dj_cqrs/_validation.py +++ b/dj_cqrs/_validation.py @@ -3,6 +3,8 @@ import logging from inspect import getfullargspec, isfunction +from django.utils.module_loading import import_string + from dj_cqrs.constants import ( DEFAULT_MASTER_AUTO_UPDATE_FIELDS, DEFAULT_MASTER_MESSAGE_TTL, @@ -13,8 +15,6 @@ from dj_cqrs.registries import MasterRegistry, ReplicaRegistry from dj_cqrs.transport import BaseTransport -from django.utils.module_loading import import_string - logger = logging.getLogger('django-cqrs') diff --git a/dj_cqrs/apps.py b/dj_cqrs/apps.py index bd0536c..4939340 100644 --- a/dj_cqrs/apps.py +++ b/dj_cqrs/apps.py @@ -1,10 +1,10 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from dj_cqrs._validation import validate_settings - from django.apps import AppConfig from django.conf import settings +from dj_cqrs._validation import validate_settings + class CQRSConfig(AppConfig): name = 'dj_cqrs' diff --git a/dj_cqrs/controller/consumer.py b/dj_cqrs/controller/consumer.py index fc5de0b..d15d2a1 100644 --- a/dj_cqrs/controller/consumer.py +++ b/dj_cqrs/controller/consumer.py @@ -4,11 +4,11 @@ import logging from contextlib import ExitStack +from django.db import Error, close_old_connections, transaction + from dj_cqrs.constants import SignalType from dj_cqrs.registries import ReplicaRegistry -from django.db import Error, close_old_connections, transaction - logger = logging.getLogger('django-cqrs') diff --git a/dj_cqrs/dataclasses.py b/dj_cqrs/dataclasses.py index 2a4b186..3216f50 100644 --- a/dj_cqrs/dataclasses.py +++ b/dj_cqrs/dataclasses.py @@ -1,12 +1,11 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. from dateutil.parser import parse as dateutil_parse +from django.utils import timezone from dj_cqrs.correlation import get_correlation_id from dj_cqrs.utils import get_json_valid_value, get_message_expiration_dt -from django.utils import timezone - class TransportPayload: """Transport message payload. diff --git a/dj_cqrs/management/commands/cqrs_bulk_dump.py b/dj_cqrs/management/commands/cqrs_bulk_dump.py index accd4c4..5856696 100644 --- a/dj_cqrs/management/commands/cqrs_bulk_dump.py +++ b/dj_cqrs/management/commands/cqrs_bulk_dump.py @@ -5,12 +5,11 @@ import sys import time -from dj_cqrs.management.utils import batch_qs -from dj_cqrs.registries import MasterRegistry - +import ujson from django.core.management.base import BaseCommand, CommandError -import ujson +from dj_cqrs.management.utils import batch_qs +from dj_cqrs.registries import MasterRegistry class Command(BaseCommand): diff --git a/dj_cqrs/management/commands/cqrs_bulk_load.py b/dj_cqrs/management/commands/cqrs_bulk_load.py index 81a3266..4b9bb12 100644 --- a/dj_cqrs/management/commands/cqrs_bulk_load.py +++ b/dj_cqrs/management/commands/cqrs_bulk_load.py @@ -3,12 +3,11 @@ import os import sys -from dj_cqrs.registries import ReplicaRegistry - +import ujson from django.core.management.base import BaseCommand, CommandError from django.db import DatabaseError, transaction -import ujson +from dj_cqrs.registries import ReplicaRegistry class Command(BaseCommand): diff --git a/dj_cqrs/management/commands/cqrs_consume.py b/dj_cqrs/management/commands/cqrs_consume.py index 0efdb37..f8ce8b9 100644 --- a/dj_cqrs/management/commands/cqrs_consume.py +++ b/dj_cqrs/management/commands/cqrs_consume.py @@ -2,11 +2,11 @@ import multiprocessing import signal +from django.core.management.base import BaseCommand, CommandError + from dj_cqrs.registries import ReplicaRegistry from dj_cqrs.transport import current_transport -from django.core.management.base import BaseCommand, CommandError - class WorkersManager: diff --git a/dj_cqrs/management/commands/cqrs_dead_letters.py b/dj_cqrs/management/commands/cqrs_dead_letters.py index fea8f93..d400fda 100644 --- a/dj_cqrs/management/commands/cqrs_dead_letters.py +++ b/dj_cqrs/management/commands/cqrs_dead_letters.py @@ -1,5 +1,8 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. +import ujson +from django.core.management.base import BaseCommand, CommandError + from dj_cqrs.constants import DEFAULT_MASTER_MESSAGE_TTL from dj_cqrs.dataclasses import TransportPayload from dj_cqrs.registries import ReplicaRegistry @@ -7,10 +10,6 @@ from dj_cqrs.transport.rabbit_mq import RabbitMQTransport from dj_cqrs.utils import get_message_expiration_dt -from django.core.management.base import BaseCommand, CommandError - -import ujson - class RabbitMQTransportService(RabbitMQTransport): diff --git a/dj_cqrs/management/commands/cqrs_deleted_diff_master.py b/dj_cqrs/management/commands/cqrs_deleted_diff_master.py index cf0157b..5d4ff98 100644 --- a/dj_cqrs/management/commands/cqrs_deleted_diff_master.py +++ b/dj_cqrs/management/commands/cqrs_deleted_diff_master.py @@ -2,11 +2,10 @@ import sys -from dj_cqrs.registries import MasterRegistry - +import ujson from django.core.management.base import BaseCommand, CommandError -import ujson +from dj_cqrs.registries import MasterRegistry class Command(BaseCommand): diff --git a/dj_cqrs/management/commands/cqrs_deleted_diff_replica.py b/dj_cqrs/management/commands/cqrs_deleted_diff_replica.py index ef419f7..c6bbbe9 100644 --- a/dj_cqrs/management/commands/cqrs_deleted_diff_replica.py +++ b/dj_cqrs/management/commands/cqrs_deleted_diff_replica.py @@ -1,13 +1,12 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. -from dj_cqrs.management.utils import batch_qs -from dj_cqrs.registries import ReplicaRegistry - +import ujson from django.core.exceptions import FieldError from django.core.management.base import BaseCommand, CommandError from django.utils.timezone import now -import ujson +from dj_cqrs.management.utils import batch_qs +from dj_cqrs.registries import ReplicaRegistry class Command(BaseCommand): diff --git a/dj_cqrs/management/commands/cqrs_deleted_sync_replica.py b/dj_cqrs/management/commands/cqrs_deleted_sync_replica.py index 21fb4ea..7157b3d 100644 --- a/dj_cqrs/management/commands/cqrs_deleted_sync_replica.py +++ b/dj_cqrs/management/commands/cqrs_deleted_sync_replica.py @@ -2,12 +2,11 @@ import sys -from dj_cqrs.registries import ReplicaRegistry - +import ujson from django.core.management.base import BaseCommand, CommandError from django.db import DatabaseError -import ujson +from dj_cqrs.registries import ReplicaRegistry class Command(BaseCommand): diff --git a/dj_cqrs/management/commands/cqrs_diff_master.py b/dj_cqrs/management/commands/cqrs_diff_master.py index e1f0073..3c40b43 100644 --- a/dj_cqrs/management/commands/cqrs_diff_master.py +++ b/dj_cqrs/management/commands/cqrs_diff_master.py @@ -1,13 +1,12 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. -from dj_cqrs.management.utils import batch_qs -from dj_cqrs.registries import MasterRegistry - +import ujson from django.core.exceptions import FieldError from django.core.management.base import BaseCommand, CommandError from django.utils.timezone import now -import ujson +from dj_cqrs.management.utils import batch_qs +from dj_cqrs.registries import MasterRegistry class Command(BaseCommand): diff --git a/dj_cqrs/management/commands/cqrs_diff_replica.py b/dj_cqrs/management/commands/cqrs_diff_replica.py index edaed27..324e667 100644 --- a/dj_cqrs/management/commands/cqrs_diff_replica.py +++ b/dj_cqrs/management/commands/cqrs_diff_replica.py @@ -2,12 +2,11 @@ import sys -from dj_cqrs.registries import ReplicaRegistry - +import ujson from django.conf import settings from django.core.management.base import BaseCommand, CommandError -import ujson +from dj_cqrs.registries import ReplicaRegistry class Command(BaseCommand): diff --git a/dj_cqrs/management/commands/cqrs_diff_sync.py b/dj_cqrs/management/commands/cqrs_diff_sync.py index 276aeca..9dee4e2 100644 --- a/dj_cqrs/management/commands/cqrs_diff_sync.py +++ b/dj_cqrs/management/commands/cqrs_diff_sync.py @@ -2,16 +2,16 @@ import sys +from django.core.management.base import BaseCommand, CommandError + from dj_cqrs.constants import NO_QUEUE from dj_cqrs.management.commands.cqrs_sync import ( - Command as SyncCommand, DEFAULT_BATCH, DEFAULT_PROGRESS, + Command as SyncCommand, ) from dj_cqrs.registries import MasterRegistry -from django.core.management.base import BaseCommand, CommandError - class Command(BaseCommand): help = 'Diff synchronizer from CQRS replica stream.' diff --git a/dj_cqrs/management/commands/cqrs_sync.py b/dj_cqrs/management/commands/cqrs_sync.py index 4cd6158..1013888 100644 --- a/dj_cqrs/management/commands/cqrs_sync.py +++ b/dj_cqrs/management/commands/cqrs_sync.py @@ -4,14 +4,13 @@ import sys import time -from dj_cqrs.management.utils import batch_qs -from dj_cqrs.registries import MasterRegistry - +import ujson from django.core.exceptions import FieldError from django.core.management.base import BaseCommand, CommandError from django.db import close_old_connections -import ujson +from dj_cqrs.management.utils import batch_qs +from dj_cqrs.registries import MasterRegistry DEFAULT_BATCH = 10000 diff --git a/dj_cqrs/managers.py b/dj_cqrs/managers.py index 24123d4..67d97f4 100644 --- a/dj_cqrs/managers.py +++ b/dj_cqrs/managers.py @@ -2,13 +2,13 @@ import logging -from dj_cqrs.constants import FIELDS_TRACKER_FIELD_NAME, TRACKED_FIELDS_ATTR_NAME - from django.core.exceptions import ValidationError from django.db import Error, transaction from django.db.models import F, Manager from django.utils import timezone +from dj_cqrs.constants import FIELDS_TRACKER_FIELD_NAME, TRACKED_FIELDS_ATTR_NAME + logger = logging.getLogger('django-cqrs') diff --git a/dj_cqrs/metas.py b/dj_cqrs/metas.py index 22cfd84..0eec98e 100644 --- a/dj_cqrs/metas.py +++ b/dj_cqrs/metas.py @@ -1,12 +1,12 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. +from django.db.models import base + from dj_cqrs.constants import ALL_BASIC_FIELDS from dj_cqrs.registries import MasterRegistry, ReplicaRegistry from dj_cqrs.signals import MasterSignals from dj_cqrs.tracker import CQRSTracker -from django.db.models import base - class MasterMeta(base.ModelBase): def __new__(mcs, name, bases, attrs, **kwargs): diff --git a/dj_cqrs/mixins.py b/dj_cqrs/mixins.py index 2fc564f..caded6a 100644 --- a/dj_cqrs/mixins.py +++ b/dj_cqrs/mixins.py @@ -2,21 +2,25 @@ import logging -from dj_cqrs.constants import ( - ALL_BASIC_FIELDS, - FIELDS_TRACKER_FIELD_NAME, - TRACKED_FIELDS_ATTR_NAME, -) -from dj_cqrs.managers import MasterManager, ReplicaManager -from dj_cqrs.metas import MasterMeta, ReplicaMeta -from dj_cqrs.signals import MasterSignals, post_bulk_create, post_update - from django.conf import settings from django.db import router, transaction -from django.db.models import DateField, DateTimeField, F, IntegerField, Manager, Model, UUIDField +from django.db.models import ( + DateField, + DateTimeField, + F, + IntegerField, + Manager, + Model, + UUIDField, +) from django.db.models.expressions import CombinedExpression from django.utils.module_loading import import_string +from dj_cqrs.constants import ALL_BASIC_FIELDS, FIELDS_TRACKER_FIELD_NAME, TRACKED_FIELDS_ATTR_NAME +from dj_cqrs.managers import MasterManager, ReplicaManager +from dj_cqrs.metas import MasterMeta, ReplicaMeta +from dj_cqrs.signals import MasterSignals, post_bulk_create, post_update + logger = logging.getLogger('django-cqrs') diff --git a/dj_cqrs/registries.py b/dj_cqrs/registries.py index 14e9aa0..5b85be8 100644 --- a/dj_cqrs/registries.py +++ b/dj_cqrs/registries.py @@ -4,6 +4,7 @@ from django.conf import settings + logger = logging.getLogger('django-cqrs') diff --git a/dj_cqrs/signals.py b/dj_cqrs/signals.py index d8f8789..976771e 100644 --- a/dj_cqrs/signals.py +++ b/dj_cqrs/signals.py @@ -2,15 +2,15 @@ import logging +from django.db import models, transaction +from django.dispatch import Signal +from django.utils.timezone import now + from dj_cqrs.constants import SignalType from dj_cqrs.controller import producer from dj_cqrs.dataclasses import TransportPayload from dj_cqrs.utils import get_message_expiration_dt -from django.db import models, transaction -from django.dispatch import Signal -from django.utils.timezone import now - logger = logging.getLogger('django-cqrs') diff --git a/dj_cqrs/tracker.py b/dj_cqrs/tracker.py index 69b57f3..dd7dbd5 100644 --- a/dj_cqrs/tracker.py +++ b/dj_cqrs/tracker.py @@ -1,11 +1,11 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. -from dj_cqrs.constants import ALL_BASIC_FIELDS, FIELDS_TRACKER_FIELD_NAME -from dj_cqrs.utils import get_json_valid_value - from model_utils import FieldTracker from model_utils.tracker import FieldInstanceTracker +from dj_cqrs.constants import ALL_BASIC_FIELDS, FIELDS_TRACKER_FIELD_NAME +from dj_cqrs.utils import get_json_valid_value + class _CQRSTrackerInstance(FieldInstanceTracker): diff --git a/dj_cqrs/transport/__init__.py b/dj_cqrs/transport/__init__.py index 296222e..0252997 100644 --- a/dj_cqrs/transport/__init__.py +++ b/dj_cqrs/transport/__init__.py @@ -1,12 +1,12 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. +from django.conf import settings +from django.utils.module_loading import import_string + from dj_cqrs.transport.base import BaseTransport from dj_cqrs.transport.kombu import KombuTransport from dj_cqrs.transport.rabbit_mq import RabbitMQTransport -from django.conf import settings -from django.utils.module_loading import import_string - try: current_transport = import_string(settings.CQRS['transport']) diff --git a/dj_cqrs/transport/kombu.py b/dj_cqrs/transport/kombu.py index 93469b8..d050188 100644 --- a/dj_cqrs/transport/kombu.py +++ b/dj_cqrs/transport/kombu.py @@ -2,6 +2,17 @@ import logging +import ujson +from django.conf import settings +from kombu import ( + Connection, + Exchange, + Producer, + Queue, +) +from kombu.exceptions import KombuError +from kombu.mixins import ConsumerMixin + from dj_cqrs.constants import SignalType from dj_cqrs.controller import consumer from dj_cqrs.dataclasses import TransportPayload @@ -9,14 +20,6 @@ from dj_cqrs.transport import BaseTransport from dj_cqrs.transport.mixins import LoggingMixin -from django.conf import settings - -from kombu import Connection, Exchange, Producer, Queue -from kombu.exceptions import KombuError -from kombu.mixins import ConsumerMixin - -import ujson - logger = logging.getLogger('django-cqrs') diff --git a/dj_cqrs/transport/rabbit_mq.py b/dj_cqrs/transport/rabbit_mq.py index 1f73ed9..5ffdc4a 100644 --- a/dj_cqrs/transport/rabbit_mq.py +++ b/dj_cqrs/transport/rabbit_mq.py @@ -6,6 +6,18 @@ from socket import gaierror from urllib.parse import unquote, urlparse +import ujson +from django.conf import settings +from django.utils import timezone +from pika import ( + BasicProperties, + BlockingConnection, + ConnectionParameters, + credentials, + exceptions, +) +from pika.adapters.utils.connection_workflow import AMQPConnectorException + from dj_cqrs.constants import DEFAULT_DEAD_MESSAGE_TTL, SignalType from dj_cqrs.controller import consumer from dj_cqrs.dataclasses import TransportPayload @@ -15,14 +27,6 @@ from dj_cqrs.transport.mixins import LoggingMixin from dj_cqrs.utils import get_delay_queue_max_size, get_messages_prefetch_count_per_worker -from django.conf import settings -from django.utils import timezone - -from pika import BasicProperties, BlockingConnection, ConnectionParameters, credentials, exceptions -from pika.adapters.utils.connection_workflow import AMQPConnectorException - -import ujson - logger = logging.getLogger('django-cqrs') diff --git a/docs/conf.py b/docs/conf.py index 65a48ec..40d0971 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -5,7 +5,6 @@ from datetime import datetime import django - from setuptools_scm import get_version diff --git a/examples/demo_project/master_service/app/asgi.py b/examples/demo_project/master_service/app/asgi.py index 9f3afcd..d80c2be 100644 --- a/examples/demo_project/master_service/app/asgi.py +++ b/examples/demo_project/master_service/app/asgi.py @@ -13,6 +13,7 @@ from django.core.asgi import get_asgi_application + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'master_service.settings') application = get_asgi_application() diff --git a/examples/demo_project/master_service/app/migrations/0001_initial.py b/examples/demo_project/master_service/app/migrations/0001_initial.py index 56aef11..48e14d0 100644 --- a/examples/demo_project/master_service/app/migrations/0001_initial.py +++ b/examples/demo_project/master_service/app/migrations/0001_initial.py @@ -1,9 +1,9 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from django.conf import settings import django.contrib.auth.validators -from django.db import migrations, models import django.utils.timezone +from django.conf import settings +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/examples/demo_project/master_service/app/models.py b/examples/demo_project/master_service/app/models.py index 1dd677d..6e04d9f 100644 --- a/examples/demo_project/master_service/app/models.py +++ b/examples/demo_project/master_service/app/models.py @@ -1,9 +1,9 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from dj_cqrs.mixins import MasterMixin - from django.contrib.auth.models import AbstractUser from django.db import models +from dj_cqrs.mixins import MasterMixin + class User(MasterMixin, AbstractUser): CQRS_ID = 'user' diff --git a/examples/demo_project/master_service/app/settings.py b/examples/demo_project/master_service/app/settings.py index 1ac3095..ca48e30 100644 --- a/examples/demo_project/master_service/app/settings.py +++ b/examples/demo_project/master_service/app/settings.py @@ -1,6 +1,7 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. from pathlib import Path + # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent diff --git a/examples/demo_project/master_service/app/urls.py b/examples/demo_project/master_service/app/urls.py index a404706..feaa2d3 100644 --- a/examples/demo_project/master_service/app/urls.py +++ b/examples/demo_project/master_service/app/urls.py @@ -3,11 +3,16 @@ from app.views import ( main_view, - product_create_view, product_delete_view, purchase_create_view, + product_create_view, + product_delete_view, + purchase_create_view, purchase_delete_view, - user_create_view, user_delete_view, user_update_view, + user_create_view, + user_delete_view, + user_update_view, ) + urlpatterns = [ path('', main_view), path('users/', user_create_view), diff --git a/examples/demo_project/master_service/app/views.py b/examples/demo_project/master_service/app/views.py index 217d4d5..fb2c13b 100644 --- a/examples/demo_project/master_service/app/views.py +++ b/examples/demo_project/master_service/app/views.py @@ -3,7 +3,12 @@ from django.shortcuts import get_object_or_404, redirect, render from django.views.decorators.http import require_http_methods -from app.models import Product, ProductType, Purchase, User +from app.models import ( + Product, + ProductType, + Purchase, + User, +) def _render_page(request, **kwargs): diff --git a/examples/demo_project/master_service/app/wsgi.py b/examples/demo_project/master_service/app/wsgi.py index a46a74d..ce09fb6 100644 --- a/examples/demo_project/master_service/app/wsgi.py +++ b/examples/demo_project/master_service/app/wsgi.py @@ -12,6 +12,7 @@ from django.core.wsgi import get_wsgi_application + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'master_service.settings') application = get_wsgi_application() diff --git a/examples/demo_project/replica_service/app/asgi.py b/examples/demo_project/replica_service/app/asgi.py index c57aabf..3c18ed3 100644 --- a/examples/demo_project/replica_service/app/asgi.py +++ b/examples/demo_project/replica_service/app/asgi.py @@ -11,6 +11,7 @@ from django.core.asgi import get_asgi_application + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings') application = get_asgi_application() diff --git a/examples/demo_project/replica_service/app/migrations/0001_initial.py b/examples/demo_project/replica_service/app/migrations/0001_initial.py index 7a0cd2a..cdfa479 100644 --- a/examples/demo_project/replica_service/app/migrations/0001_initial.py +++ b/examples/demo_project/replica_service/app/migrations/0001_initial.py @@ -1,8 +1,8 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. import django.contrib.auth.validators -from django.db import migrations, models import django.utils.timezone +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/examples/demo_project/replica_service/app/models.py b/examples/demo_project/replica_service/app/models.py index 9bfe135..ff5ee7b 100644 --- a/examples/demo_project/replica_service/app/models.py +++ b/examples/demo_project/replica_service/app/models.py @@ -1,10 +1,10 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from dj_cqrs.mixins import ReplicaMixin - from django.contrib.auth.models import AbstractUser from django.core.cache import cache from django.db import models +from dj_cqrs.mixins import ReplicaMixin + class User(ReplicaMixin, AbstractUser): """ diff --git a/examples/demo_project/replica_service/app/settings.py b/examples/demo_project/replica_service/app/settings.py index 41049a7..fbb8593 100644 --- a/examples/demo_project/replica_service/app/settings.py +++ b/examples/demo_project/replica_service/app/settings.py @@ -1,6 +1,7 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. from pathlib import Path + # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent diff --git a/examples/demo_project/replica_service/app/urls.py b/examples/demo_project/replica_service/app/urls.py index ca51364..7ba6a30 100644 --- a/examples/demo_project/replica_service/app/urls.py +++ b/examples/demo_project/replica_service/app/urls.py @@ -3,6 +3,7 @@ from app.views import main_page_view + urlpatterns = [ path('', main_page_view), ] diff --git a/examples/demo_project/replica_service/app/wsgi.py b/examples/demo_project/replica_service/app/wsgi.py index a73badc..a0acd74 100644 --- a/examples/demo_project/replica_service/app/wsgi.py +++ b/examples/demo_project/replica_service/app/wsgi.py @@ -11,6 +11,7 @@ from django.core.wsgi import get_wsgi_application + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings') application = get_wsgi_application() diff --git a/integration_tests/manage.py b/integration_tests/manage.py index 2229e55..507ce95 100755 --- a/integration_tests/manage.py +++ b/integration_tests/manage.py @@ -5,6 +5,7 @@ import os import sys + if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "replica_settings") diff --git a/integration_tests/master_settings.py b/integration_tests/master_settings.py index 2b0e78d..8dfd204 100644 --- a/integration_tests/master_settings.py +++ b/integration_tests/master_settings.py @@ -2,6 +2,7 @@ import os + BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = '6^1@%4#qtc+bookwp4w5k-+nbo+clm!skzdhnyl@rf&06b5tl7' diff --git a/integration_tests/replica_settings.py b/integration_tests/replica_settings.py index cffa7da..48dceaa 100644 --- a/integration_tests/replica_settings.py +++ b/integration_tests/replica_settings.py @@ -2,6 +2,7 @@ import os + BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = '6^1@%4#qtc+bookwp4w5k-+nbo+clm!skzdhnyl@rf&06b5tl7' diff --git a/integration_tests/replica_wsgi.py b/integration_tests/replica_wsgi.py index 13d5927..348c62d 100644 --- a/integration_tests/replica_wsgi.py +++ b/integration_tests/replica_wsgi.py @@ -4,6 +4,7 @@ from django.core.wsgi import get_wsgi_application + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'integration_tests.replica_settings') application = get_wsgi_application() diff --git a/integration_tests/tests/conftest.py b/integration_tests/tests/conftest.py index a6c03fa..1d14a33 100644 --- a/integration_tests/tests/conftest.py +++ b/integration_tests/tests/conftest.py @@ -1,16 +1,13 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. +import psycopg2 +import pytest +from pika import BlockingConnection, URLParameters + from dj_cqrs.transport import current_transport from dj_cqrs.transport.rabbit_mq import RabbitMQTransport - from integration_tests.tests.utils import REPLICA_TABLES -from pika import BlockingConnection, URLParameters - -import psycopg2 - -import pytest - @pytest.fixture def replica_cursor(): diff --git a/integration_tests/tests/test_asynchronous_consuming.py b/integration_tests/tests/test_asynchronous_consuming.py index 506046e..e0a9a54 100644 --- a/integration_tests/tests/test_asynchronous_consuming.py +++ b/integration_tests/tests/test_asynchronous_consuming.py @@ -1,5 +1,7 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. +import pytest + from integration_tests.tests.utils import ( REPLICA_BASIC_TABLE, REPLICA_EVENT_TABLE, @@ -7,9 +9,6 @@ get_replica_all, transport_delay, ) - -import pytest - from tests.dj_master.models import BasicFieldsModel diff --git a/integration_tests/tests/test_bulk_operations.py b/integration_tests/tests/test_bulk_operations.py index 495d729..46642e2 100644 --- a/integration_tests/tests/test_bulk_operations.py +++ b/integration_tests/tests/test_bulk_operations.py @@ -1,11 +1,14 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from integration_tests.tests.utils import ( - REPLICA_BASIC_TABLE, count_replica_rows, get_replica_all, get_replica_first, transport_delay, -) - import pytest +from integration_tests.tests.utils import ( + REPLICA_BASIC_TABLE, + count_replica_rows, + get_replica_all, + get_replica_first, + transport_delay, +) from tests.dj_master.models import BasicFieldsModel diff --git a/integration_tests/tests/test_dead_letter.py b/integration_tests/tests/test_dead_letter.py index 792d16d..8336c85 100644 --- a/integration_tests/tests/test_dead_letter.py +++ b/integration_tests/tests/test_dead_letter.py @@ -2,10 +2,9 @@ import json -from integration_tests.tests.utils import transport_delay - import pytest +from integration_tests.tests.utils import transport_delay from tests.dj_master.models import FailModel diff --git a/integration_tests/tests/test_single_basic_instance.py b/integration_tests/tests/test_single_basic_instance.py index 95080d5..a4a81ae 100644 --- a/integration_tests/tests/test_single_basic_instance.py +++ b/integration_tests/tests/test_single_basic_instance.py @@ -1,14 +1,14 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. +import pytest from django.utils.timezone import now from integration_tests.tests.utils import ( - REPLICA_BASIC_TABLE, count_replica_rows, get_replica_first, transport_delay, + REPLICA_BASIC_TABLE, + count_replica_rows, + get_replica_first, + transport_delay, ) - - -import pytest - from tests.dj_master.models import BasicFieldsModel diff --git a/integration_tests/tests/test_sync_to_a_certain_service.py b/integration_tests/tests/test_sync_to_a_certain_service.py index c46009c..11650ba 100644 --- a/integration_tests/tests/test_sync_to_a_certain_service.py +++ b/integration_tests/tests/test_sync_to_a_certain_service.py @@ -1,11 +1,13 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from integration_tests.tests.utils import ( - REPLICA_BASIC_TABLE, count_replica_rows, get_replica_first, transport_delay, -) - import pytest +from integration_tests.tests.utils import ( + REPLICA_BASIC_TABLE, + count_replica_rows, + get_replica_first, + transport_delay, +) from tests.dj_master.models import BasicFieldsModel diff --git a/requirements/test.txt b/requirements/test.txt index 2e905e6..f1033af 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -14,5 +14,6 @@ flake8-commas flake8-comprehensions flake8-debugger flake8-eradicate -flake8-import-order -flake8-string-format \ No newline at end of file +flake8-isort +flake8-string-format +isort diff --git a/tests/dj/settings.py b/tests/dj/settings.py index 6a1b435..6991166 100644 --- a/tests/dj/settings.py +++ b/tests/dj/settings.py @@ -2,6 +2,7 @@ import os + BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = '6^1@%4#qtc+bookwp4w5k-+nbo+clm!skzdhnyl@rf&06b5tl7' diff --git a/tests/dj_master/models.py b/tests/dj_master/models.py index 52f6103..2bb6c0b 100644 --- a/tests/dj_master/models.py +++ b/tests/dj_master/models.py @@ -1,15 +1,14 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from dj_cqrs.constants import ALL_BASIC_FIELDS -from dj_cqrs.metas import MasterMeta -from dj_cqrs.mixins import MasterMixin, RawMasterMixin - from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models - from mptt.models import MPTTModel, TreeForeignKey +from dj_cqrs.constants import ALL_BASIC_FIELDS +from dj_cqrs.metas import MasterMeta +from dj_cqrs.mixins import MasterMixin, RawMasterMixin + class BasicFieldsModel(MasterMixin, models.Model): CQRS_ID = 'basic' diff --git a/tests/dj_replica/models.py b/tests/dj_replica/models.py index f899486..193aecc 100644 --- a/tests/dj_replica/models.py +++ b/tests/dj_replica/models.py @@ -1,10 +1,10 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. +from django.db import models + from dj_cqrs.metas import ReplicaMeta from dj_cqrs.mixins import RawReplicaMixin, ReplicaMixin -from django.db import models - class BasicFieldsModelRef(ReplicaMixin, models.Model): CQRS_ID = 'basic' diff --git a/tests/test_admin.py b/tests/test_admin.py index 3274c4c..a4343f0 100644 --- a/tests/test_admin.py +++ b/tests/test_admin.py @@ -1,10 +1,9 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from dj_cqrs.admin import CQRSAdminMasterSyncMixin - +import pytest from django.contrib import admin -import pytest +from dj_cqrs.admin import CQRSAdminMasterSyncMixin class MockAdminModel(CQRSAdminMasterSyncMixin, admin.ModelAdmin): diff --git a/tests/test_commands/test_bulk_dump.py b/tests/test_commands/test_bulk_dump.py index 87481f0..279fc8c 100644 --- a/tests/test_commands/test_bulk_dump.py +++ b/tests/test_commands/test_bulk_dump.py @@ -1,16 +1,14 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. +import pytest +import ujson from django.core.management import CommandError, call_command from django.db import transaction -import pytest - from tests.dj_master.models import Author, Publisher from tests.test_commands.utils import remove_file from tests.utils import db_error -import ujson - COMMAND_NAME = 'cqrs_bulk_dump' diff --git a/tests/test_commands/test_bulk_flow.py b/tests/test_commands/test_bulk_flow.py index b0c4768..c3c3541 100644 --- a/tests/test_commands/test_bulk_flow.py +++ b/tests/test_commands/test_bulk_flow.py @@ -1,10 +1,9 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. +import pytest from django.core.management import call_command from django.db import transaction -import pytest - from tests.dj_master import models as master_models from tests.dj_replica import models as replica_models from tests.test_commands.utils import remove_file diff --git a/tests/test_commands/test_bulk_load.py b/tests/test_commands/test_bulk_load.py index d4e0adc..d6bf65f 100644 --- a/tests/test_commands/test_bulk_load.py +++ b/tests/test_commands/test_bulk_load.py @@ -1,11 +1,10 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. +import pytest from django.core.management import CommandError, call_command from django.utils.timezone import now -import pytest - from tests.dj_replica.models import AuthorRef from tests.utils import db_error diff --git a/tests/test_commands/test_consume.py b/tests/test_commands/test_consume.py index a9ec21b..b0bddd5 100644 --- a/tests/test_commands/test_consume.py +++ b/tests/test_commands/test_consume.py @@ -2,14 +2,12 @@ from importlib import import_module, reload +import pytest +from django.core.management import CommandError, call_command from dj_cqrs.management.commands.cqrs_consume import WorkersManager from dj_cqrs.transport import current_transport -from django.core.management import CommandError, call_command - -import pytest - COMMAND_NAME = 'cqrs_consume' diff --git a/tests/test_commands/test_dead_letters.py b/tests/test_commands/test_dead_letters.py index 95803cb..548ad17 100644 --- a/tests/test_commands/test_dead_letters.py +++ b/tests/test_commands/test_dead_letters.py @@ -2,15 +2,13 @@ from datetime import datetime -from dj_cqrs.constants import SignalType -from dj_cqrs.management.commands.cqrs_dead_letters import Command, RabbitMQTransport - +import pytest +import ujson from django.core.management import CommandError, call_command from django.utils import timezone -import pytest - -import ujson +from dj_cqrs.constants import SignalType +from dj_cqrs.management.commands.cqrs_dead_letters import Command, RabbitMQTransport COMMAND_NAME = 'cqrs_dead_letters' diff --git a/tests/test_commands/test_deleted_diff_master.py b/tests/test_commands/test_deleted_diff_master.py index 3aa40cd..2e05bf0 100644 --- a/tests/test_commands/test_deleted_diff_master.py +++ b/tests/test_commands/test_deleted_diff_master.py @@ -3,11 +3,10 @@ import sys from io import StringIO +import pytest from django.core.management import CommandError, call_command from django.utils.timezone import now -import pytest - from tests.dj_master.models import Author from tests.dj_replica.models import AuthorRef diff --git a/tests/test_commands/test_deleted_diff_replica.py b/tests/test_commands/test_deleted_diff_replica.py index 7e722c6..64c9103 100644 --- a/tests/test_commands/test_deleted_diff_replica.py +++ b/tests/test_commands/test_deleted_diff_replica.py @@ -1,14 +1,12 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. +import pytest +import ujson from django.core.management import CommandError, call_command from django.utils.timezone import now -import pytest - from tests.dj_replica.models import AuthorRef -import ujson - COMMAND_NAME = 'cqrs_deleted_diff_replica' diff --git a/tests/test_commands/test_deleted_sync_replica.py b/tests/test_commands/test_deleted_sync_replica.py index da9025a..e07c0e6 100644 --- a/tests/test_commands/test_deleted_sync_replica.py +++ b/tests/test_commands/test_deleted_sync_replica.py @@ -3,11 +3,10 @@ import sys from io import StringIO +import pytest from django.core.management import CommandError, call_command from django.utils.timezone import now -import pytest - from tests.dj_master.models import Author from tests.dj_replica.models import AuthorRef diff --git a/tests/test_commands/test_diff_master.py b/tests/test_commands/test_diff_master.py index 67ed399..8dc6e6c 100644 --- a/tests/test_commands/test_diff_master.py +++ b/tests/test_commands/test_diff_master.py @@ -1,13 +1,11 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from django.core.management import CommandError, call_command - import pytest +import ujson +from django.core.management import CommandError, call_command from tests.dj_master.models import Author -import ujson - COMMAND_NAME = 'cqrs_diff_master' diff --git a/tests/test_commands/test_diff_replica.py b/tests/test_commands/test_diff_replica.py index aa94350..2ec9373 100644 --- a/tests/test_commands/test_diff_replica.py +++ b/tests/test_commands/test_diff_replica.py @@ -3,12 +3,11 @@ import sys from io import StringIO +import pytest from django.conf import settings from django.core.management import CommandError, call_command from django.utils.timezone import now -import pytest - from tests.dj_master.models import Author from tests.dj_replica.models import AuthorRef diff --git a/tests/test_commands/test_diff_sync.py b/tests/test_commands/test_diff_sync.py index ed17b8a..520ef9d 100644 --- a/tests/test_commands/test_diff_sync.py +++ b/tests/test_commands/test_diff_sync.py @@ -3,14 +3,12 @@ import sys from io import StringIO -from dj_cqrs.constants import NO_QUEUE -from dj_cqrs.management.commands import cqrs_sync - +import pytest from django.core.management import CommandError, call_command from django.utils.timezone import now -import pytest - +from dj_cqrs.constants import NO_QUEUE +from dj_cqrs.management.commands import cqrs_sync from tests.dj_master.models import Author from tests.dj_replica.models import AuthorRef diff --git a/tests/test_commands/test_sync.py b/tests/test_commands/test_sync.py index 72e98e9..91c96ed 100644 --- a/tests/test_commands/test_sync.py +++ b/tests/test_commands/test_sync.py @@ -1,11 +1,9 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from dj_cqrs.constants import SignalType - -from django.core.management import CommandError, call_command - import pytest +from django.core.management import CommandError, call_command +from dj_cqrs.constants import SignalType from tests.dj_master.models import Author from tests.utils import db_error diff --git a/tests/test_controller.py b/tests/test_controller.py index 05b3b3d..26a3016 100644 --- a/tests/test_controller.py +++ b/tests/test_controller.py @@ -1,15 +1,14 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. +import pytest +from django.conf import settings +from django.utils.timezone import now + from dj_cqrs.constants import SignalType from dj_cqrs.controller.consumer import consume, route_signal_to_replica_model from dj_cqrs.controller.producer import produce from dj_cqrs.dataclasses import TransportPayload -from django.conf import settings -from django.utils.timezone import now - -import pytest - def test_producer(mocker): transport_mock = mocker.patch('tests.dj.transport.TransportStub.produce') diff --git a/tests/test_delay.py b/tests/test_delay.py index 081cd6c..edc9c80 100644 --- a/tests/test_delay.py +++ b/tests/test_delay.py @@ -3,10 +3,10 @@ from datetime import datetime, timedelta, timezone from queue import Full -from dj_cqrs.delay import DelayMessage, DelayQueue - import pytest +from dj_cqrs.delay import DelayMessage, DelayQueue + def test_delay_message(mocker): fake_now = datetime(2020, 1, 1, second=0, tzinfo=timezone.utc) diff --git a/tests/test_flow.py b/tests/test_flow.py index 133ca6f..03eeb55 100644 --- a/tests/test_flow.py +++ b/tests/test_flow.py @@ -1,8 +1,7 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from django.db import transaction - import pytest +from django.db import transaction from tests.dj_master import models as master_models from tests.dj_replica import models as replica_models diff --git a/tests/test_master/test_mixin.py b/tests/test_master/test_mixin.py index 82eea96..a1349e1 100644 --- a/tests/test_master/test_mixin.py +++ b/tests/test_master/test_mixin.py @@ -4,6 +4,13 @@ from time import sleep from uuid import uuid4 +import pytest +from django.conf import settings +from django.contrib.contenttypes.models import ContentType +from django.db import transaction +from django.db.models import CharField, F, IntegerField +from django.utils.timezone import now + from dj_cqrs.constants import ( DEFAULT_MASTER_AUTO_UPDATE_FIELDS, DEFAULT_MASTER_MESSAGE_TTL, @@ -11,15 +18,6 @@ SignalType, ) from dj_cqrs.metas import MasterMeta - -from django.conf import settings -from django.contrib.contenttypes.models import ContentType -from django.db import transaction -from django.db.models import CharField, F, IntegerField -from django.utils.timezone import now - -import pytest - from tests.dj_master import models from tests.dj_master.serializers import AuthorSerializer from tests.utils import ( diff --git a/tests/test_master/test_signals.py b/tests/test_master/test_signals.py index ddba7e5..576f4bf 100644 --- a/tests/test_master/test_signals.py +++ b/tests/test_master/test_signals.py @@ -2,14 +2,12 @@ from datetime import datetime, timezone -from dj_cqrs.constants import SignalType -from dj_cqrs.signals import post_bulk_create, post_update - +import pytest from django.db import transaction from django.db.models.signals import post_delete, post_save -import pytest - +from dj_cqrs.constants import SignalType +from dj_cqrs.signals import post_bulk_create, post_update from tests.dj_master import models from tests.utils import assert_is_sub_dict, assert_publisher_once_called_with_args diff --git a/tests/test_metas.py b/tests/test_metas.py index a307433..fd5f9a8 100644 --- a/tests/test_metas.py +++ b/tests/test_metas.py @@ -1,9 +1,9 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from dj_cqrs.metas import _MetaUtils - import pytest +from dj_cqrs.metas import _MetaUtils + @pytest.mark.django_db def test_no_cqrs_id(): diff --git a/tests/test_registries.py b/tests/test_registries.py index ba2f513..211b9d7 100644 --- a/tests/test_registries.py +++ b/tests/test_registries.py @@ -1,9 +1,8 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from dj_cqrs.registries import MasterRegistry, ReplicaRegistry - import pytest +from dj_cqrs.registries import MasterRegistry, ReplicaRegistry from tests.dj_master import models as master_models from tests.dj_replica import models as replica_models diff --git a/tests/test_replica/test_factory.py b/tests/test_replica/test_factory.py index ea528f4..63306da 100644 --- a/tests/test_replica/test_factory.py +++ b/tests/test_replica/test_factory.py @@ -1,11 +1,11 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. +import pytest + from dj_cqrs.constants import SignalType from dj_cqrs.controller.consumer import route_signal_to_replica_model from dj_cqrs.mixins import ReplicaMixin -import pytest - def test_bad_model(caplog): route_signal_to_replica_model(SignalType.SAVE, 'invalid', {}) diff --git a/tests/test_replica/test_mixin.py b/tests/test_replica/test_mixin.py index 8b88e6e..7ac6ab6 100644 --- a/tests/test_replica/test_mixin.py +++ b/tests/test_replica/test_mixin.py @@ -1,16 +1,14 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. -from dj_cqrs.constants import SignalType -from dj_cqrs.dataclasses import TransportPayload -from dj_cqrs.metas import ReplicaMeta -from dj_cqrs.mixins import RawReplicaMixin - +import pytest from django.conf import settings from django.db.models import CharField, IntegerField, QuerySet from django.utils.timezone import now -import pytest - +from dj_cqrs.constants import SignalType +from dj_cqrs.dataclasses import TransportPayload +from dj_cqrs.metas import ReplicaMeta +from dj_cqrs.mixins import RawReplicaMixin from tests.dj.transport import TransportStub from tests.dj_replica import models from tests.utils import db_error diff --git a/tests/test_transport/test_base.py b/tests/test_transport/test_base.py index 434be71..0a74866 100644 --- a/tests/test_transport/test_base.py +++ b/tests/test_transport/test_base.py @@ -1,9 +1,9 @@ # Copyright © 2021 Ingram Micro Inc. All rights reserved. -from dj_cqrs.transport.base import BaseTransport - import pytest +from dj_cqrs.transport.base import BaseTransport + def test_base_transport_consume(): with pytest.raises(NotImplementedError): diff --git a/tests/test_transport/test_kombu.py b/tests/test_transport/test_kombu.py index e9c35bf..a48ea6e 100644 --- a/tests/test_transport/test_kombu.py +++ b/tests/test_transport/test_kombu.py @@ -3,19 +3,19 @@ import logging from importlib import import_module, reload +import pytest +import ujson +from kombu.exceptions import KombuError + from dj_cqrs.constants import ( - DEFAULT_MASTER_AUTO_UPDATE_FIELDS, DEFAULT_MASTER_MESSAGE_TTL, SignalType, + DEFAULT_MASTER_AUTO_UPDATE_FIELDS, + DEFAULT_MASTER_MESSAGE_TTL, + SignalType, ) from dj_cqrs.dataclasses import TransportPayload from dj_cqrs.registries import ReplicaRegistry from dj_cqrs.transport.kombu import KombuTransport, _KombuConsumer -from kombu.exceptions import KombuError - -import pytest - -import ujson - class PublicKombuTransport(KombuTransport): @classmethod diff --git a/tests/test_transport/test_rabbit_mq.py b/tests/test_transport/test_rabbit_mq.py index 4a8ce00..ffe42b2 100644 --- a/tests/test_transport/test_rabbit_mq.py +++ b/tests/test_transport/test_rabbit_mq.py @@ -4,6 +4,12 @@ from datetime import datetime, timedelta, timezone from importlib import import_module, reload +import pytest +import ujson +from django.db import DatabaseError +from pika.adapters.utils.connection_workflow import AMQPConnectorException +from pika.exceptions import AMQPError, ChannelError, ReentrancyError + from dj_cqrs.constants import ( DEFAULT_MASTER_AUTO_UPDATE_FIELDS, DEFAULT_MASTER_MESSAGE_TTL, @@ -15,18 +21,8 @@ from dj_cqrs.dataclasses import TransportPayload from dj_cqrs.delay import DelayMessage, DelayQueue from dj_cqrs.transport.rabbit_mq import RabbitMQTransport - -from django.db import DatabaseError - -from pika.adapters.utils.connection_workflow import AMQPConnectorException -from pika.exceptions import AMQPError, ChannelError, ReentrancyError - -import pytest - from tests.utils import db_error -import ujson - class PublicRabbitMQTransport(RabbitMQTransport): @classmethod diff --git a/tests/test_utils.py b/tests/test_utils.py index 17695f6..6dfcc8b 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,8 +1,15 @@ # Copyright © 2022 Ingram Micro Inc. All rights reserved. -from datetime import date, datetime, timedelta, timezone +from datetime import ( + date, + datetime, + timedelta, + timezone, +) from uuid import UUID +import pytest + from dj_cqrs.utils import ( get_delay_queue_max_size, get_json_valid_value, @@ -10,8 +17,6 @@ get_messages_prefetch_count_per_worker, ) -import pytest - def test_get_message_expiration_dt_fixed(mocker, settings): settings.CQRS['master']['CQRS_MESSAGE_TTL'] = 3600 diff --git a/tests/test_validation.py b/tests/test_validation.py index 814e02c..3babf06 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -2,10 +2,10 @@ from unittest.mock import MagicMock -from dj_cqrs._validation import validate_settings - import pytest +from dj_cqrs._validation import validate_settings + def test_full_configuration(): def f(*a, **kw): diff --git a/tox.ini b/tox.ini index 7ebd31e..b1dd817 100644 --- a/tox.ini +++ b/tox.ini @@ -9,3 +9,15 @@ pythonpath = . src DJANGO_SETTINGS_MODULE = tests.dj.settings addopts = --cov-report=xml --cov=./dj_cqrs --reuse-db --no-migrations testpaths = tests + +[isort] +src_paths = *, ./examples/demo_project/replica_service/app +sections = FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER +group_by_package = True +multi_line_output = 3 +force_grid_wrap = 4 +combine_as_imports = True +use_parentheses = True +include_trailing_comma = True +line_length = 100 +lines_after_imports = 2