From d05566acf6d1e50c930ec1fd26ab18ac608e3f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20G=C3=B3recki?= Date: Fri, 18 Nov 2022 17:47:44 +0100 Subject: [PATCH] apply pre-commit to all files --- .pre-commit-config.yaml | 26 ++++++++-- migrations/env.py | 3 +- src/alembic/env.py | 4 +- .../d6c2334f4816_initial_listing_model.py | 3 +- src/api/__init__.py | 2 +- src/api/__main__.py | 1 + src/api/dependencies.py | 3 +- src/api/main.py | 11 ++-- src/api/models.py | 4 +- src/api/routers/catalog.py | 10 ++-- src/api/routers/iam.py | 10 ++-- src/api/shared.py | 2 +- src/cli/__init__.py | 2 +- src/cli/__main__.py | 24 +++------ src/config/api_config.py | 2 - src/config/container.py | 9 ++-- src/conftest.py | 2 +- .../bidding/application/command/place_bid.py | 3 +- .../application/command/retract_bid.py | 3 +- .../application/query/get_pastdue_listings.py | 7 +-- src/modules/bidding/domain/entities.py | 19 +++---- src/modules/bidding/domain/rules.py | 7 +-- src/modules/bidding/domain/test_listing.py | 11 ++-- src/modules/bidding/domain/value_objects.py | 6 ++- src/modules/bidding/module.py | 6 +-- src/modules/bidding/test_module.py | 4 +- .../command/create_listing_draft.py | 8 +-- .../application/command/publish_listing.py | 9 ++-- .../command/update_listing_draft.py | 14 +++-- .../application/query/get_all_listings.py | 5 +- .../application/query/get_listing_details.py | 7 ++- .../query/get_listings_of_seller.py | 6 +-- src/modules/catalog/domain/entities.py | 19 ++++--- src/modules/catalog/domain/events.py | 1 - src/modules/catalog/domain/rules.py | 1 + src/modules/catalog/domain/value_objects.py | 2 +- .../infrastructure/listing_repository.py | 23 ++++----- src/modules/catalog/module.py | 27 ++++------ .../application/test_command_handlers.py | 11 ++-- .../catalog/tests/domain/test_entities.py | 5 +- .../catalog/tests/domain/test_rules.py | 2 +- .../infrastructure/test_listing_repository.py | 51 ++++++++++--------- .../iam/application/command/create_user.py | 2 +- src/modules/iam/domain/entities.py | 5 +- src/modules/iam/domain/value_objects.py | 3 +- .../iam/infrastructure/user_repository.py | 13 +++-- src/modules/iam/module.py | 3 +- src/seedwork/application/command_handlers.py | 8 +-- src/seedwork/application/commands.py | 2 - src/seedwork/application/decorators.py | 5 +- src/seedwork/application/modules.py | 3 +- src/seedwork/application/queries.py | 2 +- src/seedwork/domain/entities.py | 3 +- src/seedwork/domain/events.py | 1 + src/seedwork/domain/mixins.py | 2 +- src/seedwork/domain/repositories.py | 1 + src/seedwork/domain/type_hints.py | 1 + src/seedwork/domain/value_objects.py | 4 +- src/seedwork/infrastructure/data_mapper.py | 6 +-- .../infrastructure/json_data_mapper.py | 4 +- src/seedwork/infrastructure/logging.py | 9 ++-- src/seedwork/infrastructure/repository.py | 20 ++++---- .../infrastructure/request_context.py | 1 + .../infrastructure/test_repository.py | 3 +- src/seedwork/tests/domain/test_entity.py | 2 +- .../tests/infrastructure/test_data_mapper.py | 3 +- src/seedwork/utils/functional.py | 2 - 67 files changed, 253 insertions(+), 230 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9fcec06..91c4481 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,11 +1,31 @@ +default_language_version: + python: python3.10 + repos: - - repo: https://github.com/ambv/black - rev: 22.3.0 + # native hints instead of `from typing` | List -> list + - repo: https://github.com/sondrelg/pep585-upgrade + rev: 'v1.0' # Version to check hooks: - - id: black + - id: upgrade-type-hints + + # Only for removing unused imports > Other staff done by Black + - repo: https://github.com/myint/autoflake + rev: "v1.4" # Version to check + hooks: + - id: autoflake + args: + - --in-place + - --remove-all-unused-imports + - --ignore-init-module-imports + - repo: https://github.com/pycqa/isort rev: 5.10.1 hooks: - id: isort name: isort (python) args: ["--profile", "black"] + + - repo: https://github.com/ambv/black + rev: 22.3.0 + hooks: + - id: black diff --git a/migrations/env.py b/migrations/env.py index c4affea..4d69434 100644 --- a/migrations/env.py +++ b/migrations/env.py @@ -3,8 +3,7 @@ from logging.config import fileConfig -from sqlalchemy import engine_from_config -from sqlalchemy import pool +from sqlalchemy import engine_from_config, pool from alembic import context diff --git a/src/alembic/env.py b/src/alembic/env.py index 8c9eac7..b723bd0 100644 --- a/src/alembic/env.py +++ b/src/alembic/env.py @@ -1,7 +1,6 @@ from logging.config import fileConfig -from sqlalchemy import engine_from_config -from sqlalchemy import pool +from sqlalchemy import engine_from_config, pool from alembic import context @@ -16,7 +15,6 @@ # add your model's MetaData object here # for 'autogenerate' support from modules.catalog.infrastructure.listing_repository import CatalogListingModel -from seedwork.infrastructure.database import Base # from myapp import mymodel # target_metadata = mymodel.Base.metadata diff --git a/src/alembic/versions/d6c2334f4816_initial_listing_model.py b/src/alembic/versions/d6c2334f4816_initial_listing_model.py index 67cb99f..42de88a 100644 --- a/src/alembic/versions/d6c2334f4816_initial_listing_model.py +++ b/src/alembic/versions/d6c2334f4816_initial_listing_model.py @@ -5,10 +5,11 @@ Create Date: 2021-09-27 17:33:02.166128 """ -from alembic import op import sqlalchemy as sa from sqlalchemy.dialects import postgresql +from alembic import op + # revision identifiers, used by Alembic. revision = "d6c2334f4816" down_revision = None diff --git a/src/api/__init__.py b/src/api/__init__.py index ce9d2aa..38ed7e6 100644 --- a/src/api/__init__.py +++ b/src/api/__init__.py @@ -1,5 +1,5 @@ -from pathlib import Path import sys +from pathlib import Path # add base project path to PYTHONPATH BASE_DIR = Path(__file__).resolve().parent.parent diff --git a/src/api/__main__.py b/src/api/__main__.py index ad572de..091f58a 100644 --- a/src/api/__main__.py +++ b/src/api/__main__.py @@ -1,4 +1,5 @@ import uvicorn + from api.main import app uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/src/api/dependencies.py b/src/api/dependencies.py index 7b89dbe..b13f989 100644 --- a/src/api/dependencies.py +++ b/src/api/dependencies.py @@ -1,6 +1,5 @@ -from fastapi import Header, HTTPException from pydantic import BaseModel -from dataclasses import dataclass + from seedwork.domain.value_objects import UUID diff --git a/src/api/main.py b/src/api/main.py index f02e2c9..3dc5526 100644 --- a/src/api/main.py +++ b/src/api/main.py @@ -1,15 +1,14 @@ import time -from fastapi import FastAPI, Request, Depends, HTTPException, status -from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm -from seedwork.infrastructure.request_context import request_context -from seedwork.infrastructure.logging import logger, LoggerFactory +from fastapi import FastAPI, Request -from api.routers import catalog, iam +import api.routers.catalog from api.models import CurrentUser +from api.routers import catalog, iam from config.api_config import ApiConfig from config.container import Container -import api.routers.catalog +from seedwork.infrastructure.logging import LoggerFactory, logger +from seedwork.infrastructure.request_context import request_context # configure logger prior to first usage LoggerFactory.configure(logger_name="cli") diff --git a/src/api/models.py b/src/api/models.py index 61b3469..ca65beb 100644 --- a/src/api/models.py +++ b/src/api/models.py @@ -1,5 +1,5 @@ -from typing import List from uuid import UUID, uuid4 + from pydantic import BaseModel @@ -22,4 +22,4 @@ class ListingReadModel(BaseModel): class ListingIndexModel(BaseModel): - data: List[ListingReadModel] + data: list[ListingReadModel] diff --git a/src/api/routers/catalog.py b/src/api/routers/catalog.py index a452495..e664b4d 100644 --- a/src/api/routers/catalog.py +++ b/src/api/routers/catalog.py @@ -1,15 +1,15 @@ from fastapi import APIRouter -from seedwork.infrastructure.request_context import request_context -from modules.catalog.module import CatalogModule +from api.models import ListingIndexModel, ListingReadModel, ListingWriteModel +from api.shared import dependency +from config.container import Container, inject from modules.catalog.application.command.create_listing_draft import ( CreateListingDraftCommand, ) from modules.catalog.application.query.get_all_listings import GetAllListings from modules.catalog.application.query.get_listing_details import GetListingDetails -from config.container import Container, inject -from api.models import ListingReadModel, ListingWriteModel, ListingIndexModel -from api.shared import dependency +from modules.catalog.module import CatalogModule +from seedwork.infrastructure.request_context import request_context router = APIRouter() diff --git a/src/api/routers/iam.py b/src/api/routers/iam.py index 42581bb..f61343f 100644 --- a/src/api/routers/iam.py +++ b/src/api/routers/iam.py @@ -1,14 +1,14 @@ -from fastapi import APIRouter, Depends -from fastapi import FastAPI, Request, Depends, HTTPException, status +from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm + +from api.shared import dependency from config.container import Container, inject -from modules.iam.module import IdentityAndAccessModule from modules.iam.application.exceptions import ( - UserNotFoundException, UsernamePasswordMismatchException, + UserNotFoundException, ) from modules.iam.domain.entities import User -from api.shared import dependency +from modules.iam.module import IdentityAndAccessModule oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") router = APIRouter() diff --git a/src/api/shared.py b/src/api/shared.py index 236fc7c..d75a094 100644 --- a/src/api/shared.py +++ b/src/api/shared.py @@ -1,5 +1,5 @@ -from fastapi import Depends from dependency_injector.wiring import Provide +from fastapi import Depends def dependency(provider): diff --git a/src/cli/__init__.py b/src/cli/__init__.py index ce9d2aa..38ed7e6 100644 --- a/src/cli/__init__.py +++ b/src/cli/__init__.py @@ -1,5 +1,5 @@ -from pathlib import Path import sys +from pathlib import Path # add base project path to PYTHONPATH BASE_DIR = Path(__file__).resolve().parent.parent diff --git a/src/cli/__main__.py b/src/cli/__main__.py index 9588563..a8fcf4b 100644 --- a/src/cli/__main__.py +++ b/src/cli/__main__.py @@ -1,28 +1,20 @@ -from seedwork.infrastructure.request_context import request_context -from seedwork.infrastructure.logging import logger, LoggerFactory -from config.container import Container -from modules.catalog.domain.repositories import SellerRepository -from modules.catalog.application.query.get_all_listings import GetAllListings -from modules.catalog.application.query.get_listings_of_seller import GetListingsOfSeller -from modules.catalog.application.command.create_listing_draft import ( - CreateListingDraftCommand, -) - - -# a sample command line script to print all listings -# run with "cd src && python -m cli" - # configure logger prior to first usage import uuid + from sqlalchemy.orm import Session +from config.container import Container +from modules.catalog.domain.entities import Listing, Money from modules.catalog.infrastructure.listing_repository import ( - PostgresJsonListingRepository, Base, + PostgresJsonListingRepository, ) +from seedwork.infrastructure.logging import LoggerFactory, logger +from seedwork.infrastructure.request_context import request_context +# a sample command line script to print all listings +# run with "cd src && python -m cli" -from modules.catalog.domain.entities import Listing, Money LoggerFactory.configure(logger_name="cli") diff --git a/src/config/api_config.py b/src/config/api_config.py index 744f7fb..df361c2 100644 --- a/src/config/api_config.py +++ b/src/config/api_config.py @@ -1,5 +1,3 @@ -from typing import cast -import os from pydantic import BaseSettings, Field # env_filename = os.getenv("ENV_FILENAME", ".env") diff --git a/src/config/container.py b/src/config/container.py index e6e8e86..349eba4 100644 --- a/src/config/container.py +++ b/src/config/container.py @@ -1,17 +1,14 @@ -import uuid -import logging -from sqlalchemy import create_engine from dependency_injector import containers, providers from dependency_injector.wiring import inject # noqa +from sqlalchemy import create_engine -from modules.catalog.module import CatalogModule from modules.catalog.infrastructure.listing_repository import ( PostgresJsonListingRepository, ) -from modules.iam.module import IdentityAndAccessModule +from modules.catalog.module import CatalogModule from modules.iam.application.services import AuthenticationService from modules.iam.infrastructure.user_repository import PostgresJsonUserRepository - +from modules.iam.module import IdentityAndAccessModule from seedwork.infrastructure.request_context import RequestContext diff --git a/src/conftest.py b/src/conftest.py index c7797e8..951aeb9 100644 --- a/src/conftest.py +++ b/src/conftest.py @@ -1,9 +1,9 @@ import pytest from sqlalchemy import create_engine from sqlalchemy.orm import Session -from seedwork.infrastructure.database import Base from config.api_config import ApiConfig +from seedwork.infrastructure.database import Base @pytest.fixture diff --git a/src/modules/bidding/application/command/place_bid.py b/src/modules/bidding/application/command/place_bid.py index 823b549..39edb1a 100644 --- a/src/modules/bidding/application/command/place_bid.py +++ b/src/modules/bidding/application/command/place_bid.py @@ -1,9 +1,10 @@ from decimal import Decimal + from seedwork.application.command_handlers import CommandResult from seedwork.application.decorators import command_handler from src.modules.bidding.domain.entities import Listing -from src.modules.bidding.domain.value_objects import Bid, Bidder, Money from src.modules.bidding.domain.repositories import ListingRepository +from src.modules.bidding.domain.value_objects import Bid, Bidder, Money class PlaceBidCommand: diff --git a/src/modules/bidding/application/command/retract_bid.py b/src/modules/bidding/application/command/retract_bid.py index 407777e..1b8cec9 100644 --- a/src/modules/bidding/application/command/retract_bid.py +++ b/src/modules/bidding/application/command/retract_bid.py @@ -1,9 +1,10 @@ from decimal import Decimal + from seedwork.application.command_handlers import CommandResult from seedwork.application.decorators import command_handler from src.modules.bidding.domain.entities import Listing -from src.modules.bidding.domain.value_objects import Bidder from src.modules.bidding.domain.repositories import ListingRepository +from src.modules.bidding.domain.value_objects import Bidder class RetractBidCommand: diff --git a/src/modules/bidding/application/query/get_pastdue_listings.py b/src/modules/bidding/application/query/get_pastdue_listings.py index 7021a24..7f7c7cd 100644 --- a/src/modules/bidding/application/query/get_pastdue_listings.py +++ b/src/modules/bidding/application/query/get_pastdue_listings.py @@ -1,8 +1,9 @@ from datetime import datetime -from seedwork.application.queries import Query, Field -from seedwork.application.query_handlers import QueryResult -from seedwork.application.decorators import query_handler + from modules.bidding.domain.repositories import ListingRepository +from seedwork.application.decorators import query_handler +from seedwork.application.queries import Field, Query +from seedwork.application.query_handlers import QueryResult class GetPastdueListingsQuery(Query): diff --git a/src/modules/bidding/domain/entities.py b/src/modules/bidding/domain/entities.py index 4b57e7e..15a986f 100644 --- a/src/modules/bidding/domain/entities.py +++ b/src/modules/bidding/domain/entities.py @@ -1,15 +1,16 @@ from dataclasses import dataclass, field from datetime import datetime, timedelta -from typing import List, Optional -from modules.bidding.domain.value_objects import Bid, Bidder, Seller +from typing import Optional + from modules.bidding.domain.rules import ( - PlacedBidMustBeGreaterThanCurrentWinningBid, BidCanBeRetracted, ListingCanBeCancelled, + PlacedBidMustBeGreaterThanCurrentWinningBid, ) +from modules.bidding.domain.value_objects import Bid, Bidder, Seller from seedwork.domain.entities import AggregateRoot -from seedwork.domain.exceptions import DomainException from seedwork.domain.events import DomainEvent +from seedwork.domain.exceptions import DomainException from seedwork.domain.value_objects import Money @@ -42,14 +43,14 @@ class Listing(AggregateRoot): seller: Seller initial_price: Money ends_at: datetime - bids: List[Bid] = field(default_factory=list) + bids: list[Bid] = field(default_factory=list) current_price: Money = field(init=False) def __post_init__(self) -> None: self.current_price = self.initial_price # public commands - def place_bid(self, bid: Bid) -> List[DomainEvent]: + def place_bid(self, bid: Bid) -> list[DomainEvent]: """Public method""" self.check_rule( PlacedBidMustBeGreaterThanCurrentWinningBid( @@ -64,7 +65,7 @@ def place_bid(self, bid: Bid) -> List[DomainEvent]: return [BidPlacedEvent(listing_id=self.id, bidder=bid.bidder, price=bid.price)] - def retract_bid_of(self, bidder: Bidder) -> List[DomainEvent]: + def retract_bid_of(self, bidder: Bidder) -> list[DomainEvent]: """Public method""" bid = self.get_bid_of(bidder) self.check_rule( @@ -74,7 +75,7 @@ def retract_bid_of(self, bidder: Bidder) -> List[DomainEvent]: self._remove_bid_of(bidder=bidder) return [BidRetractedEvent(listing_id=self.id, bidder_id=bidder.uuid)] - def cancel_listing(self) -> List[DomainEvent]: + def cancel_listing(self) -> list[DomainEvent]: self.check_rule( ListingCanBeCancelled( time_left_in_listing=self.time_left_in_listing, @@ -84,7 +85,7 @@ def cancel_listing(self) -> List[DomainEvent]: self.ends_at = datetime.utcnow() return [ListingCancelledEvent(listing_id=self.id)] - def end_bidding(self) -> List[DomainEvent]: + def end_bidding(self) -> list[DomainEvent]: raise NotImplementedError() return [] diff --git a/src/modules/bidding/domain/rules.py b/src/modules/bidding/domain/rules.py index 6cc6b14..bbb4a28 100644 --- a/src/modules/bidding/domain/rules.py +++ b/src/modules/bidding/domain/rules.py @@ -1,8 +1,9 @@ +from datetime import datetime, timedelta + from pydantic import Field -from typing import Optional -from datetime import date, datetime, timedelta -from seedwork.domain.rules import BusinessRule + from modules.bidding.domain.value_objects import Bid +from seedwork.domain.rules import BusinessRule from seedwork.domain.value_objects import Money diff --git a/src/modules/bidding/domain/test_listing.py b/src/modules/bidding/domain/test_listing.py index 9a2d7fb..90d087f 100644 --- a/src/modules/bidding/domain/test_listing.py +++ b/src/modules/bidding/domain/test_listing.py @@ -1,10 +1,11 @@ -from freezegun import freeze_time -import pytest from datetime import datetime, timedelta -from modules.bidding.domain.entities import Seller, Listing, Money -from modules.bidding.domain.value_objects import Bidder, Bid -from seedwork.domain.value_objects import UUID + +import pytest + +from modules.bidding.domain.entities import Listing, Money, Seller +from modules.bidding.domain.value_objects import Bid, Bidder from seedwork.domain.exceptions import BusinessRuleValidationException +from seedwork.domain.value_objects import UUID def test_listing_initial_price(): diff --git a/src/modules/bidding/domain/value_objects.py b/src/modules/bidding/domain/value_objects.py index 22e4c74..233fdb0 100644 --- a/src/modules/bidding/domain/value_objects.py +++ b/src/modules/bidding/domain/value_objects.py @@ -1,6 +1,8 @@ from datetime import datetime -from pydantic.dataclasses import dataclass, Field -from seedwork.domain.value_objects import ValueObject, Money, UUID + +from pydantic.dataclasses import Field, dataclass + +from seedwork.domain.value_objects import UUID, Money, ValueObject @dataclass diff --git a/src/modules/bidding/module.py b/src/modules/bidding/module.py index 3517aa9..81800f6 100644 --- a/src/modules/bidding/module.py +++ b/src/modules/bidding/module.py @@ -1,10 +1,10 @@ -from seedwork.application.modules import BusinessModule -from seedwork.domain.events import EventPublisher -from modules.bidding.domain.repositories import ListingRepository from modules.bidding.application.query.get_pastdue_listings import ( GetPastdueListingsQuery, get_past_due_listings, ) +from modules.bidding.domain.repositories import ListingRepository +from seedwork.application.modules import BusinessModule +from seedwork.domain.events import EventPublisher class BiddingModule(BusinessModule): diff --git a/src/modules/bidding/test_module.py b/src/modules/bidding/test_module.py index 437e06b..95dbaeb 100644 --- a/src/modules/bidding/test_module.py +++ b/src/modules/bidding/test_module.py @@ -1,8 +1,8 @@ -from seedwork.infrastructure.repository import InMemoryRepository -from modules.bidding.module import BiddingModule from modules.bidding.application.query.get_pastdue_listings import ( GetPastdueListingsQuery, ) +from modules.bidding.module import BiddingModule +from seedwork.infrastructure.repository import InMemoryRepository class DummyEventPublisher: diff --git a/src/modules/catalog/application/command/create_listing_draft.py b/src/modules/catalog/application/command/create_listing_draft.py index 0d8f7aa..0de4b4c 100644 --- a/src/modules/catalog/application/command/create_listing_draft.py +++ b/src/modules/catalog/application/command/create_listing_draft.py @@ -1,12 +1,12 @@ from dataclasses import dataclass -from seedwork.application.commands import Command -from seedwork.domain.value_objects import UUID, Money -from seedwork.application.command_handlers import CommandResult -from seedwork.application.decorators import command_handler from modules.catalog.domain.entities import Listing from modules.catalog.domain.events import ListingDraftCreatedEvent from modules.catalog.domain.repositories import ListingRepository +from seedwork.application.command_handlers import CommandResult +from seedwork.application.commands import Command +from seedwork.application.decorators import command_handler +from seedwork.domain.value_objects import UUID, Money @dataclass diff --git a/src/modules/catalog/application/command/publish_listing.py b/src/modules/catalog/application/command/publish_listing.py index a22349f..7b6e425 100644 --- a/src/modules/catalog/application/command/publish_listing.py +++ b/src/modules/catalog/application/command/publish_listing.py @@ -1,11 +1,12 @@ from dataclasses import dataclass -from seedwork.application.commands import Command -from seedwork.application.command_handlers import CommandResult -from seedwork.application.decorators import command_handler from modules.catalog.domain.entities import Listing, Seller -from modules.catalog.domain.value_objects import ListingId, SellerId from modules.catalog.domain.repositories import ListingRepository, SellerRepository +from modules.catalog.domain.value_objects import ListingId, SellerId +from seedwork.application.command_handlers import CommandResult +from seedwork.application.commands import Command +from seedwork.application.decorators import command_handler + @dataclass class PublishListingCommand(Command): diff --git a/src/modules/catalog/application/command/update_listing_draft.py b/src/modules/catalog/application/command/update_listing_draft.py index 6d4cfd6..cd2071d 100644 --- a/src/modules/catalog/application/command/update_listing_draft.py +++ b/src/modules/catalog/application/command/update_listing_draft.py @@ -1,10 +1,12 @@ from dataclasses import dataclass -from seedwork.application.commands import Command -from seedwork.application.command_handlers import CommandResult -from seedwork.application.decorators import command_handler -from seedwork.domain.value_objects import Money, UUID + from modules.catalog.domain.entities import Listing from modules.catalog.domain.repositories import ListingRepository +from seedwork.application.command_handlers import CommandResult +from seedwork.application.commands import Command +from seedwork.application.decorators import command_handler +from seedwork.domain.value_objects import UUID, Money + @dataclass class UpdateListingDraftCommand(Command): @@ -23,6 +25,8 @@ def update_listing_draft( ) -> CommandResult: listing: Listing = repository.get_by_id(command.listing_id) events = listing.change_main_attributes( - title=command.title, description=command.description, ask_price=command.ask_price + title=command.title, + description=command.description, + ask_price=command.ask_price, ) return CommandResult.ok(events=events) diff --git a/src/modules/catalog/application/query/get_all_listings.py b/src/modules/catalog/application/query/get_all_listings.py index 28f1374..69c98de 100644 --- a/src/modules/catalog/application/query/get_all_listings.py +++ b/src/modules/catalog/application/query/get_all_listings.py @@ -1,8 +1,7 @@ -from seedwork.domain.value_objects import UUID +from modules.catalog.domain.repositories import ListingRepository +from seedwork.application.decorators import query_handler from seedwork.application.queries import Query from seedwork.application.query_handlers import QueryResult -from seedwork.application.decorators import query_handler -from modules.catalog.domain.repositories import ListingRepository class GetAllListings(Query): diff --git a/src/modules/catalog/application/query/get_listing_details.py b/src/modules/catalog/application/query/get_listing_details.py index c1be430..0a07f5a 100644 --- a/src/modules/catalog/application/query/get_listing_details.py +++ b/src/modules/catalog/application/query/get_listing_details.py @@ -1,9 +1,8 @@ -from seedwork.domain.value_objects import UUID +from modules.catalog.domain.repositories import ListingRepository +from seedwork.application.decorators import query_handler from seedwork.application.queries import Query from seedwork.application.query_handlers import QueryResult -from seedwork.application.decorators import query_handler - -from modules.catalog.domain.repositories import ListingRepository +from seedwork.domain.value_objects import UUID class GetListingDetails(Query): diff --git a/src/modules/catalog/application/query/get_listings_of_seller.py b/src/modules/catalog/application/query/get_listings_of_seller.py index 120b066..e833d78 100644 --- a/src/modules/catalog/application/query/get_listings_of_seller.py +++ b/src/modules/catalog/application/query/get_listings_of_seller.py @@ -1,8 +1,8 @@ -from seedwork.domain.value_objects import UUID +from modules.catalog.domain.repositories import ListingRepository +from seedwork.application.decorators import query_handler from seedwork.application.queries import Query from seedwork.application.query_handlers import QueryResult -from seedwork.application.decorators import query_handler -from modules.catalog.domain.repositories import ListingRepository +from seedwork.domain.value_objects import UUID class GetListingsOfSeller(Query): diff --git a/src/modules/catalog/domain/entities.py b/src/modules/catalog/domain/entities.py index 3b2f17e..ee21969 100644 --- a/src/modules/catalog/domain/entities.py +++ b/src/modules/catalog/domain/entities.py @@ -1,13 +1,14 @@ from dataclasses import dataclass -from typing import List -from seedwork.domain.entities import AggregateRoot -from seedwork.domain.value_objects import Money, UUID + from modules.catalog.domain.events import ( + DomainEvent, ListingDraftUpdatedEvent, ListingPublishedEvent, - DomainEvent, ) from modules.catalog.domain.rules import ListingAskPriceMustBeGreaterThanZero +from seedwork.domain.entities import AggregateRoot +from seedwork.domain.value_objects import UUID, Money + from .value_objects import ListingStatus @@ -21,14 +22,14 @@ class Listing(AggregateRoot): def change_main_attributes( self, title: str, description: str, ask_price: Money - ) -> List[DomainEvent]: + ) -> list[DomainEvent]: self.title = title self.description = description self.ask_price = ask_price return [ListingDraftUpdatedEvent(listing_id=self.id)] - def publish(self) -> List[DomainEvent]: + def publish(self) -> list[DomainEvent]: """Instantly publish listing for sale""" self.check_rule(ListingAskPriceMustBeGreaterThanZero(ask_price=self.ask_price)) self.status = ListingStatus.PUBLISHED @@ -41,8 +42,10 @@ class Seller(AggregateRoot): is_new: bool = True currently_published_listings_count: int = 0 - def publish_listing(self, listing) -> List[DomainEvent]: - self.check_rule(ListingAskPriceMustBeGreaterThanZero(ask_price=listing.ask_price)) + def publish_listing(self, listing) -> list[DomainEvent]: + self.check_rule( + ListingAskPriceMustBeGreaterThanZero(ask_price=listing.ask_price) + ) # self.check_rule(ListingMustBeInDraftState(listing.status)) # self.check_rule(SellerMustBeEligibleForAddingNextListing(self)) return listing.publish() diff --git a/src/modules/catalog/domain/events.py b/src/modules/catalog/domain/events.py index bd14321..25a70ce 100644 --- a/src/modules/catalog/domain/events.py +++ b/src/modules/catalog/domain/events.py @@ -1,4 +1,3 @@ -from dataclasses import dataclass from seedwork.domain.events import DomainEvent from seedwork.domain.value_objects import UUID diff --git a/src/modules/catalog/domain/rules.py b/src/modules/catalog/domain/rules.py index 3c70d76..217a393 100644 --- a/src/modules/catalog/domain/rules.py +++ b/src/modules/catalog/domain/rules.py @@ -1,5 +1,6 @@ from seedwork.domain.rules import BusinessRule from seedwork.domain.value_objects import Money + from .value_objects import ListingStatus # import modules.catalog.domain.entities as entities diff --git a/src/modules/catalog/domain/value_objects.py b/src/modules/catalog/domain/value_objects.py index d32743d..202bcfd 100644 --- a/src/modules/catalog/domain/value_objects.py +++ b/src/modules/catalog/domain/value_objects.py @@ -1,4 +1,4 @@ -from seedwork.domain.value_objects import ValueObject, UUID +from seedwork.domain.value_objects import UUID, ValueObject # some aliases to fight primitive obsession ListingId = UUID diff --git a/src/modules/catalog/infrastructure/listing_repository.py b/src/modules/catalog/infrastructure/listing_repository.py index f644b05..4d12c15 100644 --- a/src/modules/catalog/infrastructure/listing_repository.py +++ b/src/modules/catalog/infrastructure/listing_repository.py @@ -1,16 +1,15 @@ +import uuid + +from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.sql.schema import Column from sqlalchemy_json import mutable_json_type from sqlalchemy_utils import UUIDType -from sqlalchemy.dialects.postgresql import JSONB -import uuid - +from modules.catalog.domain.entities import Listing, Money +from modules.catalog.domain.repositories import ListingRepository from seedwork.infrastructure.database import Base from seedwork.infrastructure.repository import SqlAlchemyGenericRepository -from modules.catalog.domain.repositories import ListingRepository -from modules.catalog.domain.entities import Listing, Money - """ References: "Introduction to SQLAlchemy 2020 (Tutorial)" by: Mike Bayer @@ -31,10 +30,10 @@ def model_to_entity(self, instance: ListingModel) -> Listing: d = instance.data return Listing( id=instance.id, - title=d['title'], - description=d['description'], - ask_price=Money(**d['ask_price']), - seller_id=uuid.UUID(d['seller_id']), + title=d["title"], + description=d["description"], + ask_price=Money(**d["ask_price"]), + seller_id=uuid.UUID(d["seller_id"]), ) def entity_to_model(self, entity: Listing) -> ListingModel: @@ -44,8 +43,8 @@ def entity_to_model(self, entity: Listing) -> ListingModel: "title": entity.title, "description": entity.description, "ask_price": { - 'amount': entity.ask_price.amount, - 'currency': entity.ask_price.currency, + "amount": entity.ask_price.amount, + "currency": entity.ask_price.currency, }, "seller_id": str(entity.seller_id), "status": entity.status, diff --git a/src/modules/catalog/module.py b/src/modules/catalog/module.py index edb9920..7603f4e 100644 --- a/src/modules/catalog/module.py +++ b/src/modules/catalog/module.py @@ -1,29 +1,22 @@ -from seedwork.application.modules import BusinessModule - -from .domain.repositories import ListingRepository - +from modules.catalog.application.command.create_listing_draft import ( + CreateListingDraftCommand, + create_listing_draft, +) from modules.catalog.application.query.get_all_listings import ( GetAllListings, get_all_listings, ) - -from modules.catalog.application.query.get_listings_of_seller import ( - GetListingsOfSeller, - get_listings_of_seller, -) - from modules.catalog.application.query.get_listing_details import ( GetListingDetails, get_listing_details, ) - -from modules.catalog.application.command.create_listing_draft import ( - CreateListingDraftCommand, - create_listing_draft, -) -from modules.catalog.infrastructure.listing_repository import ( - PostgresJsonListingRepository, +from modules.catalog.application.query.get_listings_of_seller import ( + GetListingsOfSeller, + get_listings_of_seller, ) +from seedwork.application.modules import BusinessModule + +from .domain.repositories import ListingRepository class BusinessTransaction: diff --git a/src/modules/catalog/tests/application/test_command_handlers.py b/src/modules/catalog/tests/application/test_command_handlers.py index 21feecc..a1e9b94 100644 --- a/src/modules/catalog/tests/application/test_command_handlers.py +++ b/src/modules/catalog/tests/application/test_command_handlers.py @@ -2,19 +2,18 @@ CreateListingDraftCommand, create_listing_draft, ) -from modules.catalog.application.command.update_listing_draft import ( - UpdateListingDraftCommand, - update_listing_draft, -) from modules.catalog.application.command.publish_listing import ( PublishListingCommand, publish_listing, ) - +from modules.catalog.application.command.update_listing_draft import ( + UpdateListingDraftCommand, + update_listing_draft, +) from modules.catalog.domain.entities import Listing, Seller from modules.catalog.domain.value_objects import ListingStatus -from seedwork.infrastructure.repository import InMemoryRepository from seedwork.domain.value_objects import UUID, Money +from seedwork.infrastructure.repository import InMemoryRepository def test_create_listing_draft(): diff --git a/src/modules/catalog/tests/domain/test_entities.py b/src/modules/catalog/tests/domain/test_entities.py index f79a5c9..93b653f 100644 --- a/src/modules/catalog/tests/domain/test_entities.py +++ b/src/modules/catalog/tests/domain/test_entities.py @@ -1,8 +1,9 @@ import pytest + +from modules.catalog.domain.entities import Listing, Seller +from modules.catalog.domain.value_objects import ListingStatus from seedwork.domain.exceptions import BusinessRuleValidationException from seedwork.domain.value_objects import Money -from modules.catalog.domain.entities import Seller, Listing -from modules.catalog.domain.value_objects import ListingStatus def test_seller_publishes_listing_happy_path(): diff --git a/src/modules/catalog/tests/domain/test_rules.py b/src/modules/catalog/tests/domain/test_rules.py index b05762a..dfcdcaf 100644 --- a/src/modules/catalog/tests/domain/test_rules.py +++ b/src/modules/catalog/tests/domain/test_rules.py @@ -1,5 +1,5 @@ -from seedwork.domain.value_objects import Money from modules.catalog.domain.rules import ListingAskPriceMustBeGreaterThanZero +from seedwork.domain.value_objects import Money def test_AuctionItemPriceMustBeGreaterThanZero_rule(): diff --git a/src/modules/catalog/tests/infrastructure/test_listing_repository.py b/src/modules/catalog/tests/infrastructure/test_listing_repository.py index acc6535..291d976 100644 --- a/src/modules/catalog/tests/infrastructure/test_listing_repository.py +++ b/src/modules/catalog/tests/infrastructure/test_listing_repository.py @@ -1,11 +1,10 @@ -from sqlalchemy import engine -from seedwork.domain.value_objects import UUID from modules.catalog.domain.entities import Listing, Money from modules.catalog.infrastructure.listing_repository import ( - ListingModel, ListingDataMapper, + ListingModel, PostgresJsonListingRepository, ) +from seedwork.domain.value_objects import UUID # engine = sqlalchemy.create_engine("") @@ -24,34 +23,40 @@ def test_listing_data_mapper_maps_entity_to_model(): seller_id=UUID("00000000000000000000000000000002"), ) mapper = ListingDataMapper() - + actual = mapper.entity_to_model(listing) - - expected = ListingModel(id=UUID("00000000000000000000000000000001"), data={ - 'title': 'Foo', - 'description': '...', - 'ask_price': { - 'amount': 10, - 'currency': 'USD', + + expected = ListingModel( + id=UUID("00000000000000000000000000000001"), + data={ + "title": "Foo", + "description": "...", + "ask_price": { + "amount": 10, + "currency": "USD", + }, + "seller_id": "00000000-0000-0000-0000-000000000002", + "status": "draft", }, - 'seller_id': '00000000-0000-0000-0000-000000000002', - 'status': 'draft', - }) + ) assert actual.id == expected.id assert actual.data == expected.data def test_listing_data_mapper_maps_model_to_entity(): - instance = ListingModel(id=UUID("00000000000000000000000000000001"), data={ - 'title': 'Foo', - 'description': '...', - 'ask_price': { - 'amount': 10, - 'currency': 'USD', + instance = ListingModel( + id=UUID("00000000000000000000000000000001"), + data={ + "title": "Foo", + "description": "...", + "ask_price": { + "amount": 10, + "currency": "USD", + }, + "seller_id": "00000000-0000-0000-0000-000000000002", + "status": "draft", }, - 'seller_id': '00000000-0000-0000-0000-000000000002', - 'status': 'draft', - }) + ) mapper = ListingDataMapper() actual = mapper.model_to_entity(instance) diff --git a/src/modules/iam/application/command/create_user.py b/src/modules/iam/application/command/create_user.py index 24f2bb2..2455dee 100644 --- a/src/modules/iam/application/command/create_user.py +++ b/src/modules/iam/application/command/create_user.py @@ -1,7 +1,7 @@ -from seedwork.application.commands import Command from modules.iam.domain.entities import User from modules.iam.domain.repository import UserRepository from seedwork.application.command_handlers import CommandResult +from seedwork.application.commands import Command from seedwork.application.decorators import command_handler diff --git a/src/modules/iam/domain/entities.py b/src/modules/iam/domain/entities.py index ecf6c9a..a83f8c9 100644 --- a/src/modules/iam/domain/entities.py +++ b/src/modules/iam/domain/entities.py @@ -1,8 +1,7 @@ -from typing import Optional, List +from typing import Optional + from seedwork.domain.entities import AggregateRoot from seedwork.domain.value_objects import UUID -from modules.iam.domain.value_objects import Session - ANONYMOUS_ID = UUID("00000000-0000-0000-0000-000000000000") diff --git a/src/modules/iam/domain/value_objects.py b/src/modules/iam/domain/value_objects.py index ae3c961..0fb4190 100644 --- a/src/modules/iam/domain/value_objects.py +++ b/src/modules/iam/domain/value_objects.py @@ -1,5 +1,6 @@ from datetime import datetime -from seedwork.domain.value_objects import ValueObject, UUID + +from seedwork.domain.value_objects import UUID, ValueObject class Session(ValueObject): diff --git a/src/modules/iam/infrastructure/user_repository.py b/src/modules/iam/infrastructure/user_repository.py index 5aff7e8..84149d9 100644 --- a/src/modules/iam/infrastructure/user_repository.py +++ b/src/modules/iam/infrastructure/user_repository.py @@ -1,17 +1,16 @@ +import uuid from contextvars import ContextVar -from sqlalchemy.sql.schema import Column + +from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import Session +from sqlalchemy.sql.schema import Column from sqlalchemy_json import mutable_json_type -from sqlalchemy.dialects.postgresql import UUID, JSONB -from typing import Type -import uuid +from modules.iam.domain.entities import User +from modules.iam.domain.repositories import UserRepository from seedwork.infrastructure.database import Base from seedwork.infrastructure.json_data_mapper import JSONDataMapper -from modules.iam.domain.repositories import UserRepository -from modules.iam.domain.entities import User - class UserModel(Base): __tablename__ = "user" diff --git a/src/modules/iam/module.py b/src/modules/iam/module.py index f477a30..9a19bd3 100644 --- a/src/modules/iam/module.py +++ b/src/modules/iam/module.py @@ -1,6 +1,5 @@ -from seedwork.application.modules import BusinessModule - from modules.iam.application.services import AuthenticationService +from seedwork.application.modules import BusinessModule class IdentityAndAccessModule(BusinessModule): diff --git a/src/seedwork/application/command_handlers.py b/src/seedwork/application/command_handlers.py index 831361b..c1915ea 100644 --- a/src/seedwork/application/command_handlers.py +++ b/src/seedwork/application/command_handlers.py @@ -1,13 +1,15 @@ import sys -from typing import Any, List +from typing import Any + from pydantic import BaseModel + from seedwork.domain.type_hints import DomainEvent class CommandResult(BaseModel): result: Any = None - events: List[DomainEvent] = [] - errors: List[Any] = [] + events: list[DomainEvent] = [] + errors: list[Any] = [] # # commands # def add_error(self, message, exception=None, exception_info=None): diff --git a/src/seedwork/application/commands.py b/src/seedwork/application/commands.py index fbd68af..f50b2c1 100644 --- a/src/seedwork/application/commands.py +++ b/src/seedwork/application/commands.py @@ -3,5 +3,3 @@ class Command(ABC): """Abstract base class for all commands""" - - pass diff --git a/src/seedwork/application/decorators.py b/src/seedwork/application/decorators.py index f4c1d06..6ec365f 100644 --- a/src/seedwork/application/decorators.py +++ b/src/seedwork/application/decorators.py @@ -1,8 +1,11 @@ import functools + from pydantic.error_wrappers import ValidationError -from seedwork.application.queries import Query + from seedwork.application.commands import Command +from seedwork.application.queries import Query from seedwork.domain.exceptions import BusinessRuleValidationException + from .command_handlers import CommandResult from .query_handlers import QueryResult diff --git a/src/seedwork/application/modules.py b/src/seedwork/application/modules.py index fd6f88d..1550632 100644 --- a/src/seedwork/application/modules.py +++ b/src/seedwork/application/modules.py @@ -1,7 +1,8 @@ from seedwork.infrastructure.logging import logger + +from .command_handlers import CommandResult from .commands import Command from .queries import Query -from .command_handlers import CommandResult def logging_handler(fn): diff --git a/src/seedwork/application/queries.py b/src/seedwork/application/queries.py index 767715b..da5b389 100644 --- a/src/seedwork/application/queries.py +++ b/src/seedwork/application/queries.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel, Field +from pydantic import BaseModel class Query(BaseModel): diff --git a/src/seedwork/domain/entities.py b/src/seedwork/domain/entities.py index 3755d1d..511c4f0 100644 --- a/src/seedwork/domain/entities.py +++ b/src/seedwork/domain/entities.py @@ -1,6 +1,7 @@ from dataclasses import dataclass, field -from .value_objects import UUID + from .mixins import BusinessRuleValidationMixin +from .value_objects import UUID @dataclass diff --git a/src/seedwork/domain/events.py b/src/seedwork/domain/events.py index 09a26fc..a5fedb0 100644 --- a/src/seedwork/domain/events.py +++ b/src/seedwork/domain/events.py @@ -1,4 +1,5 @@ from abc import ABCMeta, abstractmethod + from pydantic import BaseModel diff --git a/src/seedwork/domain/mixins.py b/src/seedwork/domain/mixins.py index 876282d..d365a26 100644 --- a/src/seedwork/domain/mixins.py +++ b/src/seedwork/domain/mixins.py @@ -1,5 +1,5 @@ -from .rules import BusinessRule from .exceptions import BusinessRuleValidationException +from .rules import BusinessRule class BusinessRuleValidationMixin: diff --git a/src/seedwork/domain/repositories.py b/src/seedwork/domain/repositories.py index 9cf3e48..f9e604d 100644 --- a/src/seedwork/domain/repositories.py +++ b/src/seedwork/domain/repositories.py @@ -1,4 +1,5 @@ import abc + from seedwork.domain.entities import Entity from seedwork.domain.value_objects import UUID diff --git a/src/seedwork/domain/type_hints.py b/src/seedwork/domain/type_hints.py index 12fc20d..e4964a1 100644 --- a/src/seedwork/domain/type_hints.py +++ b/src/seedwork/domain/type_hints.py @@ -1,4 +1,5 @@ from typing import List + from seedwork.domain.events import DomainEvent DomainEvents = List[DomainEvent] diff --git a/src/seedwork/domain/value_objects.py b/src/seedwork/domain/value_objects.py index 937bd7f..8ac29a8 100644 --- a/src/seedwork/domain/value_objects.py +++ b/src/seedwork/domain/value_objects.py @@ -1,7 +1,7 @@ -import uuid import functools -from pydantic.dataclasses import dataclass +import uuid +from pydantic.dataclasses import dataclass UUID = uuid.UUID UUID.v4 = uuid.uuid4 diff --git a/src/seedwork/infrastructure/data_mapper.py b/src/seedwork/infrastructure/data_mapper.py index 16dcb5c..df0c408 100644 --- a/src/seedwork/infrastructure/data_mapper.py +++ b/src/seedwork/infrastructure/data_mapper.py @@ -1,5 +1,5 @@ import uuid -from typing import Type + from seedwork.domain.entities import Entity @@ -7,7 +7,7 @@ class JSONDataMapper: entity_class = None model_class = None - def map_model_to_entity(self, instance) -> Type[Entity]: + def map_model_to_entity(self, instance) -> type[Entity]: entity_id = uuid.UUID(instance.get("id")) entity_dict = { "id": entity_id, @@ -15,7 +15,7 @@ def map_model_to_entity(self, instance) -> Type[Entity]: } return self.entity_class(**entity_dict) - def map_entity_to_model(self, entity: Type[Entity]): + def map_entity_to_model(self, entity: type[Entity]): data = dict(**entity.__dict__) entity_id = str(data.pop("id")) return self.model_class( diff --git a/src/seedwork/infrastructure/json_data_mapper.py b/src/seedwork/infrastructure/json_data_mapper.py index 0189282..af09e79 100644 --- a/src/seedwork/infrastructure/json_data_mapper.py +++ b/src/seedwork/infrastructure/json_data_mapper.py @@ -1,12 +1,12 @@ -from typing import Type import uuid + from seedwork.domain.entities import Entity class JSONDataMapper: """Used to serialize/deserialize entities from/to JSON data format""" - def data_to_entity(self, data: dict, entity_class: Type[Entity]) -> Entity: + def data_to_entity(self, data: dict, entity_class: type[Entity]) -> Entity: """Creates business entity from dictionary with a `data` attribute""" entity_id = uuid.UUID(data.pop("id")) entity_dict = { diff --git a/src/seedwork/infrastructure/logging.py b/src/seedwork/infrastructure/logging.py index 1bb9d60..af5960f 100644 --- a/src/seedwork/infrastructure/logging.py +++ b/src/seedwork/infrastructure/logging.py @@ -1,10 +1,11 @@ -from pythonjsonlogger import jsonlogger -from datetime import datetime import logging -from logging import Logger +from datetime import datetime from logging.config import dictConfig -from seedwork.utils.functional import SimpleLazyObject + +from pythonjsonlogger import jsonlogger + from seedwork.infrastructure.request_context import request_context +from seedwork.utils.functional import SimpleLazyObject class RequestContextFilter(logging.Filter): diff --git a/src/seedwork/infrastructure/repository.py b/src/seedwork/infrastructure/repository.py index 342ed00..b5eb0b3 100644 --- a/src/seedwork/infrastructure/repository.py +++ b/src/seedwork/infrastructure/repository.py @@ -1,25 +1,25 @@ from abc import ABC, abstractmethod + from sqlalchemy.orm import Session -from contextvars import ContextVar -from typing import Type +from seedwork.application.exceptions import EntityNotFoundException from seedwork.domain.entities import Entity from seedwork.domain.value_objects import UUID -from seedwork.application.exceptions import EntityNotFoundException class Repository(ABC): """Base class for all repositories""" + @abstractmethod - def add(self, entity: Type[Entity]): + def add(self, entity: type[Entity]): ... @abstractmethod - def remove(self, entity: Type[Entity]): + def remove(self, entity: type[Entity]): ... @abstractmethod - def get_by_id(self, id: Type[UUID]): + def get_by_id(self, id: type[UUID]): ... @abstractmethod @@ -34,17 +34,17 @@ class InMemoryRepository(Repository): def __init__(self) -> None: self.objects = {} - def get_by_id(self, id: Type[UUID]) -> Type[Entity]: + def get_by_id(self, id: type[UUID]) -> type[Entity]: try: return self.objects[id] except KeyError: raise EntityNotFoundException - def add(self, entity: Type[Entity]): + def add(self, entity: type[Entity]): assert issubclass(entity.__class__, Entity) self.objects[entity.id] = entity - def remove(self, entity: Type[Entity]): + def remove(self, entity: type[Entity]): del self.objects[entity.id] def count(self): @@ -65,7 +65,7 @@ def __str__(self): class SqlAlchemyGenericRepository(Repository): data_mapper = None - model_class: Type[Entity] = None + model_class: type[Entity] = None def __init__(self, db_session: Session, identity_map=None): self._session = db_session diff --git a/src/seedwork/infrastructure/request_context.py b/src/seedwork/infrastructure/request_context.py index 0b9e546..596d0ab 100644 --- a/src/seedwork/infrastructure/request_context.py +++ b/src/seedwork/infrastructure/request_context.py @@ -1,5 +1,6 @@ import uuid from contextvars import ContextVar + from sqlalchemy.orm import Session diff --git a/src/seedwork/infrastructure/test_repository.py b/src/seedwork/infrastructure/test_repository.py index 7ab1969..44e1bdb 100644 --- a/src/seedwork/infrastructure/test_repository.py +++ b/src/seedwork/infrastructure/test_repository.py @@ -1,6 +1,7 @@ from dataclasses import dataclass -from seedwork.infrastructure.repository import InMemoryRepository + from seedwork.domain.entities import Entity +from seedwork.infrastructure.repository import InMemoryRepository @dataclass diff --git a/src/seedwork/tests/domain/test_entity.py b/src/seedwork/tests/domain/test_entity.py index 92876f9..b1c498f 100644 --- a/src/seedwork/tests/domain/test_entity.py +++ b/src/seedwork/tests/domain/test_entity.py @@ -1,6 +1,6 @@ from dataclasses import dataclass -from seedwork.domain.entities import Entity, AggregateRoot +from seedwork.domain.entities import AggregateRoot, Entity @dataclass diff --git a/src/seedwork/tests/infrastructure/test_data_mapper.py b/src/seedwork/tests/infrastructure/test_data_mapper.py index b941e2c..b4583be 100644 --- a/src/seedwork/tests/infrastructure/test_data_mapper.py +++ b/src/seedwork/tests/infrastructure/test_data_mapper.py @@ -1,5 +1,6 @@ -from uuid import UUID from dataclasses import dataclass +from uuid import UUID + from seedwork.domain.entities import Entity from seedwork.infrastructure.data_mapper import JSONDataMapper diff --git a/src/seedwork/utils/functional.py b/src/seedwork/utils/functional.py index 40ae84d..705b30d 100644 --- a/src/seedwork/utils/functional.py +++ b/src/seedwork/utils/functional.py @@ -77,8 +77,6 @@ class Promise: It's used to recognize promises in code. """ - pass - def lazy(func, *resultclasses): """