diff --git a/inventory_management_system_api/core/database.py b/inventory_management_system_api/core/database.py index e3a5ac42..2283d1dc 100644 --- a/inventory_management_system_api/core/database.py +++ b/inventory_management_system_api/core/database.py @@ -2,6 +2,9 @@ Module for connecting to a MongoDB database. """ +from typing import Annotated + +from fastapi import Depends from pymongo import MongoClient from pymongo.database import Database @@ -23,3 +26,6 @@ def get_database() -> Database: :return: The MongoDB database object. """ return mongodb_client[db_config.name.get_secret_value()] + + +DatabaseDep = Annotated[Database, Depends(get_database)] diff --git a/inventory_management_system_api/repositories/catalogue_category.py b/inventory_management_system_api/repositories/catalogue_category.py index 5324ed46..62dd2249 100644 --- a/inventory_management_system_api/repositories/catalogue_category.py +++ b/inventory_management_system_api/repositories/catalogue_category.py @@ -6,13 +6,11 @@ from datetime import datetime, timezone from typing import List, Optional -from fastapi import Depends from pymongo.client_session import ClientSession from pymongo.collection import Collection -from pymongo.database import Database from inventory_management_system_api.core.custom_object_id import CustomObjectId -from inventory_management_system_api.core.database import get_database +from inventory_management_system_api.core.database import DatabaseDep from inventory_management_system_api.core.exceptions import ( ChildElementsExistError, DuplicateRecordError, @@ -36,7 +34,7 @@ class CatalogueCategoryRepo: Repository for managing catalogue categories in a MongoDB database. """ - def __init__(self, database: Database = Depends(get_database)) -> None: + def __init__(self, database: DatabaseDep) -> None: """ Initialize the `CatalogueCategoryRepo` with a MongoDB database instance. diff --git a/inventory_management_system_api/repositories/catalogue_item.py b/inventory_management_system_api/repositories/catalogue_item.py index c421142d..0781674f 100644 --- a/inventory_management_system_api/repositories/catalogue_item.py +++ b/inventory_management_system_api/repositories/catalogue_item.py @@ -7,13 +7,11 @@ from typing import List, Optional from bson import ObjectId -from fastapi import Depends from pymongo.client_session import ClientSession from pymongo.collection import Collection -from pymongo.database import Database from inventory_management_system_api.core.custom_object_id import CustomObjectId -from inventory_management_system_api.core.database import get_database +from inventory_management_system_api.core.database import DatabaseDep from inventory_management_system_api.core.exceptions import ChildElementsExistError, MissingRecordError from inventory_management_system_api.models.catalogue_item import CatalogueItemIn, CatalogueItemOut, PropertyIn @@ -25,7 +23,7 @@ class CatalogueItemRepo: Repository for managing catalogue items in a MongoDB database. """ - def __init__(self, database: Database = Depends(get_database)) -> None: + def __init__(self, database: DatabaseDep) -> None: """ Initialize the `CatalogueItemRepo` with a MongoDB database instance. diff --git a/inventory_management_system_api/repositories/item.py b/inventory_management_system_api/repositories/item.py index 879aa4bb..1be73f30 100644 --- a/inventory_management_system_api/repositories/item.py +++ b/inventory_management_system_api/repositories/item.py @@ -7,13 +7,11 @@ from typing import List, Optional from bson import ObjectId -from fastapi import Depends from pymongo.client_session import ClientSession from pymongo.collection import Collection -from pymongo.database import Database from inventory_management_system_api.core.custom_object_id import CustomObjectId -from inventory_management_system_api.core.database import get_database +from inventory_management_system_api.core.database import DatabaseDep from inventory_management_system_api.core.exceptions import MissingRecordError from inventory_management_system_api.models.catalogue_item import PropertyIn from inventory_management_system_api.models.item import ItemIn, ItemOut @@ -26,7 +24,7 @@ class ItemRepo: Repository for managing items in a MongoDB database. """ - def __init__(self, database: Database = Depends(get_database)) -> None: + def __init__(self, database: DatabaseDep) -> None: """ Initialize the `ItemRepo` with a MongoDB database instance. diff --git a/inventory_management_system_api/repositories/manufacturer.py b/inventory_management_system_api/repositories/manufacturer.py index 977c16da..4b962650 100644 --- a/inventory_management_system_api/repositories/manufacturer.py +++ b/inventory_management_system_api/repositories/manufacturer.py @@ -5,13 +5,11 @@ import logging from typing import List, Optional -from fastapi import Depends from pymongo.client_session import ClientSession from pymongo.collection import Collection -from pymongo.database import Database from inventory_management_system_api.core.custom_object_id import CustomObjectId -from inventory_management_system_api.core.database import get_database +from inventory_management_system_api.core.database import DatabaseDep from inventory_management_system_api.core.exceptions import ( DuplicateRecordError, MissingRecordError, @@ -25,7 +23,7 @@ class ManufacturerRepo: """Repository for managing manufacturer in MongoDb database""" - def __init__(self, database: Database = Depends(get_database)) -> None: + def __init__(self, database: DatabaseDep) -> None: """Initialize the `ManufacturerRepo` with MongoDB database instance :param database: The database to use. diff --git a/inventory_management_system_api/repositories/system.py b/inventory_management_system_api/repositories/system.py index 6521b3c8..9e238c8e 100644 --- a/inventory_management_system_api/repositories/system.py +++ b/inventory_management_system_api/repositories/system.py @@ -5,13 +5,11 @@ import logging from typing import Optional -from fastapi import Depends from pymongo.client_session import ClientSession from pymongo.collection import Collection -from pymongo.database import Database from inventory_management_system_api.core.custom_object_id import CustomObjectId -from inventory_management_system_api.core.database import get_database +from inventory_management_system_api.core.database import DatabaseDep from inventory_management_system_api.core.exceptions import ( ChildElementsExistError, DuplicateRecordError, @@ -30,7 +28,7 @@ class SystemRepo: Repository for managing Systems in a MongoDB database """ - def __init__(self, database: Database = Depends(get_database)) -> None: + def __init__(self, database: DatabaseDep) -> None: """ Initialise the `SystemRepo` with a MongoDB database instance diff --git a/inventory_management_system_api/repositories/unit.py b/inventory_management_system_api/repositories/unit.py index 5524c713..2dc8d997 100644 --- a/inventory_management_system_api/repositories/unit.py +++ b/inventory_management_system_api/repositories/unit.py @@ -5,13 +5,11 @@ import logging from typing import Optional -from fastapi import Depends from pymongo.client_session import ClientSession from pymongo.collection import Collection -from pymongo.database import Database from inventory_management_system_api.core.custom_object_id import CustomObjectId -from inventory_management_system_api.core.database import get_database +from inventory_management_system_api.core.database import DatabaseDep from inventory_management_system_api.core.exceptions import ( DuplicateRecordError, MissingRecordError, @@ -27,7 +25,7 @@ class UnitRepo: Repository for managing Units in a MongoDB database """ - def __init__(self, database: Database = Depends(get_database)) -> None: + def __init__(self, database: DatabaseDep) -> None: """ Initialise the `UnitRepo` with a MongoDB database instance :param database: Database to use diff --git a/inventory_management_system_api/repositories/usage_status.py b/inventory_management_system_api/repositories/usage_status.py index 5066d24c..aed3bcaa 100644 --- a/inventory_management_system_api/repositories/usage_status.py +++ b/inventory_management_system_api/repositories/usage_status.py @@ -5,14 +5,11 @@ import logging from typing import Optional -from fastapi import Depends - from pymongo.client_session import ClientSession from pymongo.collection import Collection -from pymongo.database import Database from inventory_management_system_api.core.custom_object_id import CustomObjectId -from inventory_management_system_api.core.database import get_database +from inventory_management_system_api.core.database import DatabaseDep from inventory_management_system_api.core.exceptions import DuplicateRecordError, MissingRecordError, PartOfItemError from inventory_management_system_api.models.usage_status import UsageStatusIn, UsageStatusOut @@ -25,7 +22,7 @@ class UsageStatusRepo: Repository for managing Usage statuses in a MongoDB database """ - def __init__(self, database: Database = Depends(get_database)) -> None: + def __init__(self, database: DatabaseDep) -> None: """ Initialise the `UsageStatusRepo` with a MongoDB database instance diff --git a/inventory_management_system_api/routers/v1/catalogue_category.py b/inventory_management_system_api/routers/v1/catalogue_category.py index 9517fd14..a829287e 100644 --- a/inventory_management_system_api/routers/v1/catalogue_category.py +++ b/inventory_management_system_api/routers/v1/catalogue_category.py @@ -34,11 +34,17 @@ router = APIRouter(prefix="/v1/catalogue-categories", tags=["catalogue categories"]) +CatalogueCategoryServiceDep = Annotated[CatalogueCategoryService, Depends(CatalogueCategoryService)] + +CatalogueCategoryPropertyServiceDep = Annotated[ + CatalogueCategoryPropertyService, Depends(CatalogueCategoryPropertyService) +] + @router.get(path="", summary="Get catalogue categories", response_description="List of catalogue categories") def get_catalogue_categories( + catalogue_category_service: CatalogueCategoryServiceDep, parent_id: Annotated[Optional[str], Query(description="Filter catalogue categories by parent ID")] = None, - catalogue_category_service: CatalogueCategoryService = Depends(), ) -> List[CatalogueCategorySchema]: # pylint: disable=missing-function-docstring logger.info("Getting catalogue categories") @@ -62,8 +68,8 @@ def get_catalogue_categories( response_description="Single catalogue category", ) def get_catalogue_category( - catalogue_category_id: str = Path(description="The ID of the catalogue category to get"), - catalogue_category_service: CatalogueCategoryService = Depends(), + catalogue_category_id: Annotated[str, Path(description="The ID of the catalogue category to get")], + catalogue_category_service: CatalogueCategoryServiceDep, ) -> CatalogueCategorySchema: # pylint: disable=missing-function-docstring logger.info("Getting catalogue category with ID: %s", catalogue_category_id) @@ -80,8 +86,10 @@ def get_catalogue_category( @router.get(path="/{catalogue_category_id}/breadcrumbs", summary="Get breadcrumbs data for a catalogue category") def get_catalogue_category_breadcrumbs( - catalogue_category_id: str = Path(description="The ID of the catalogue category to get the breadcrumbs for"), - catalogue_category_service: CatalogueCategoryService = Depends(), + catalogue_category_id: Annotated[ + str, Path(description="The ID of the catalogue category to get the breadcrumbs for") + ], + catalogue_category_service: CatalogueCategoryServiceDep, ) -> BreadcrumbsGetSchema: # pylint: disable=missing-function-docstring logger.info("Getting breadcrumbs for catalogue category with ID: %s", catalogue_category_id) @@ -107,8 +115,7 @@ def get_catalogue_category_breadcrumbs( status_code=status.HTTP_201_CREATED, ) def create_catalogue_category( - catalogue_category: CatalogueCategoryPostSchema, - catalogue_category_service: CatalogueCategoryService = Depends(), + catalogue_category: CatalogueCategoryPostSchema, catalogue_category_service: CatalogueCategoryServiceDep ) -> CatalogueCategorySchema: # pylint: disable=missing-function-docstring logger.info("Creating a new catalogue category") @@ -148,8 +155,8 @@ def create_catalogue_category( ) def partial_update_catalogue_category( catalogue_category: CatalogueCategoryPatchSchema, - catalogue_category_id: str = Path(description="The ID of the catalogue category to update"), - catalogue_category_service: CatalogueCategoryService = Depends(), + catalogue_category_id: Annotated[str, Path(description="The ID of the catalogue category to update")], + catalogue_category_service: CatalogueCategoryServiceDep, ) -> CatalogueCategorySchema: # pylint: disable=missing-function-docstring logger.info("Partially updating catalogue category with ID: %s", catalogue_category_id) @@ -205,8 +212,8 @@ def partial_update_catalogue_category( status_code=status.HTTP_204_NO_CONTENT, ) def delete_catalogue_category( - catalogue_category_id: str = Path(description="The ID of the catalogue category to delete"), - catalogue_category_service: CatalogueCategoryService = Depends(), + catalogue_category_id: Annotated[str, Path(description="The ID of the catalogue category to delete")], + catalogue_category_service: CatalogueCategoryServiceDep, ) -> None: # pylint: disable=missing-function-docstring logger.info("Deleting catalogue category with ID: %s", catalogue_category_id) @@ -230,8 +237,8 @@ def delete_catalogue_category( ) def create_property( catalogue_category_property: CatalogueCategoryPropertyPostSchema, - catalogue_category_id: str = Path(description="The ID of the catalogue category to add a property to"), - catalogue_category_property_service: CatalogueCategoryPropertyService = Depends(), + catalogue_category_id: Annotated[str, Path(description="The ID of the catalogue category to add a property to")], + catalogue_category_property_service: CatalogueCategoryPropertyServiceDep, ) -> CatalogueCategoryPropertySchema: # pylint: disable=missing-function-docstring logger.info("Creating a new property at the catalogue category level") @@ -271,9 +278,11 @@ def create_property( ) def partial_update_property( catalogue_category_property: CatalogueCategoryPropertyPatchSchema, - catalogue_category_id: str = Path(description="The ID of the catalogue category containing the property to patch"), - property_id: str = Path(description="The ID of the property to patch"), - catalogue_category_property_service: CatalogueCategoryPropertyService = Depends(), + catalogue_category_id: Annotated[ + str, Path(description="The ID of the catalogue category containing the property to patch") + ], + property_id: Annotated[str, Path(description="The ID of the property to patch")], + catalogue_category_property_service: CatalogueCategoryPropertyServiceDep, ) -> CatalogueCategoryPropertySchema: # pylint: disable=missing-function-docstring logger.info( diff --git a/inventory_management_system_api/routers/v1/catalogue_item.py b/inventory_management_system_api/routers/v1/catalogue_item.py index 1ea79d15..624b54de 100644 --- a/inventory_management_system_api/routers/v1/catalogue_item.py +++ b/inventory_management_system_api/routers/v1/catalogue_item.py @@ -11,8 +11,8 @@ from inventory_management_system_api.core.exceptions import ( ChildElementsExistError, InvalidActionError, - InvalidPropertyTypeError, InvalidObjectIdError, + InvalidPropertyTypeError, MissingMandatoryProperty, MissingRecordError, NonLeafCatalogueCategoryError, @@ -28,13 +28,15 @@ router = APIRouter(prefix="/v1/catalogue-items", tags=["catalogue items"]) +CatalogueItemServiceDep = Annotated[CatalogueItemService, Depends(CatalogueItemService)] + @router.get(path="", summary="Get catalogue items", response_description="List of catalogue items") def get_catalogue_items( + catalogue_item_service: CatalogueItemServiceDep, catalogue_category_id: Annotated[ Optional[str], Query(description="Filter catalogue items by catalogue category ID") ] = None, - catalogue_item_service: CatalogueItemService = Depends(), ) -> List[CatalogueItemSchema]: # pylint: disable=missing-function-docstring logger.info("Getting catalogue items") @@ -53,8 +55,8 @@ def get_catalogue_items( path="/{catalogue_item_id}", summary="Get a catalogue item by ID", response_description="Single catalogue item" ) def get_catalogue_item( - catalogue_item_id: str = Path(description="The ID of the catalogue item to get"), - catalogue_item_service: CatalogueItemService = Depends(), + catalogue_item_id: Annotated[str, Path(description="The ID of the catalogue item to get")], + catalogue_item_service: CatalogueItemServiceDep, ) -> CatalogueItemSchema: # pylint: disable=missing-function-docstring logger.info("Getting catalogue item with ID: %s", catalogue_item_id) @@ -76,7 +78,7 @@ def get_catalogue_item( status_code=status.HTTP_201_CREATED, ) def create_catalogue_item( - catalogue_item: CatalogueItemPostSchema, catalogue_item_service: CatalogueItemService = Depends() + catalogue_item: CatalogueItemPostSchema, catalogue_item_service: CatalogueItemServiceDep ) -> CatalogueItemSchema: # pylint: disable=missing-function-docstring logger.info("Creating a new catalogue item") @@ -113,8 +115,8 @@ def create_catalogue_item( ) def partial_update_catalogue_item( catalogue_item: CatalogueItemPatchSchema, - catalogue_item_id: str = Path(description="The ID of the catalogue item to update"), - catalogue_item_service: CatalogueItemService = Depends(), + catalogue_item_id: Annotated[str, Path(description="The ID of the catalogue item to update")], + catalogue_item_service: CatalogueItemServiceDep, ) -> CatalogueItemSchema: # pylint: disable=missing-function-docstring logger.info("Partially updating catalogue item with ID: %s", catalogue_item_id) @@ -175,8 +177,8 @@ def partial_update_catalogue_item( status_code=status.HTTP_204_NO_CONTENT, ) def delete_catalogue_item( - catalogue_item_id: str = Path(description="The ID of the catalogue item to delete"), - catalogue_item_service: CatalogueItemService = Depends(), + catalogue_item_id: Annotated[str, Path(description="The ID of the catalogue item to delete")], + catalogue_item_service: CatalogueItemServiceDep, ) -> None: # pylint: disable=missing-function-docstring logger.info("Deleting catalogue item with ID: %s", catalogue_item_id) diff --git a/inventory_management_system_api/routers/v1/item.py b/inventory_management_system_api/routers/v1/item.py index 362aa365..e806d402 100644 --- a/inventory_management_system_api/routers/v1/item.py +++ b/inventory_management_system_api/routers/v1/item.py @@ -5,15 +5,15 @@ import logging from typing import Annotated, List, Optional -from fastapi import APIRouter, Query, status, HTTPException, Depends, Path +from fastapi import APIRouter, Depends, HTTPException, Path, Query, status from inventory_management_system_api.core.exceptions import ( + DatabaseIntegrityError, InvalidActionError, InvalidObjectIdError, + InvalidPropertyTypeError, MissingMandatoryProperty, MissingRecordError, - DatabaseIntegrityError, - InvalidPropertyTypeError, ) from inventory_management_system_api.schemas.item import ItemPatchSchema, ItemPostSchema, ItemSchema from inventory_management_system_api.services.item import ItemService @@ -22,6 +22,8 @@ router = APIRouter(prefix="/v1/items", tags=["items"]) +ItemServiceDep = Annotated[ItemService, Depends(ItemService)] + @router.post( path="", @@ -29,10 +31,7 @@ response_description="The created item", status_code=status.HTTP_201_CREATED, ) -def create_item( - item: ItemPostSchema, - item_service: Annotated[ItemService, Depends(ItemService)], -) -> ItemSchema: +def create_item(item: ItemPostSchema, item_service: ItemServiceDep) -> ItemSchema: # pylint: disable=missing-function-docstring logger.info("Creating a new item") logger.debug("Item data: %s", item) @@ -68,8 +67,7 @@ def create_item( status_code=status.HTTP_204_NO_CONTENT, ) def delete_item( - item_id: Annotated[str, Path(description="The ID of the item to delete")], - item_service: Annotated[ItemService, Depends(ItemService)], + item_id: Annotated[str, Path(description="The ID of the item to delete")], item_service: ItemServiceDep ) -> None: # pylint: disable=missing-function-docstring logger.info("Deleting item with ID: %s", item_id) @@ -83,7 +81,7 @@ def delete_item( @router.get(path="", summary="Get items", response_description="List of items") def get_items( - item_service: Annotated[ItemService, Depends(ItemService)], + item_service: ItemServiceDep, system_id: Annotated[Optional[str], Query(description="Filter items by system ID")] = None, catalogue_item_id: Annotated[Optional[str], Query(description="Filter items by catalogue item ID")] = None, ) -> List[ItemSchema]: @@ -109,8 +107,7 @@ def get_items( @router.get(path="/{item_id}", summary="Get an item by ID", response_description="Single item") def get_item( - item_id: Annotated[str, Path(description="The ID of the item to get")], - item_service: Annotated[ItemService, Depends(ItemService)], + item_id: Annotated[str, Path(description="The ID of the item to get")], item_service: ItemServiceDep ) -> ItemSchema: # pylint: disable=missing-function-docstring logger.info("Getting item with ID %s", item_id) @@ -133,7 +130,7 @@ def get_item( def partial_update_item( item: ItemPatchSchema, item_id: Annotated[str, Path(description="The ID of the item to update")], - item_service: Annotated[ItemService, Depends(ItemService)], + item_service: ItemServiceDep, ) -> ItemSchema: # pylint: disable=missing-function-docstring logger.info("Partially updating item with ID: %s", item_id) diff --git a/inventory_management_system_api/routers/v1/manufacturer.py b/inventory_management_system_api/routers/v1/manufacturer.py index 4903d978..cb84689c 100644 --- a/inventory_management_system_api/routers/v1/manufacturer.py +++ b/inventory_management_system_api/routers/v1/manufacturer.py @@ -4,15 +4,16 @@ """ import logging -from typing import List -from fastapi import APIRouter, status, Depends, HTTPException, Path +from typing import Annotated, List + +from fastapi import APIRouter, Depends, HTTPException, Path, status + from inventory_management_system_api.core.exceptions import ( DuplicateRecordError, InvalidObjectIdError, MissingRecordError, PartOfCatalogueItemError, ) - from inventory_management_system_api.schemas.manufacturer import ( ManufacturerPatchSchema, ManufacturerPostSchema, @@ -20,11 +21,12 @@ ) from inventory_management_system_api.services.manufacturer import ManufacturerService - logger = logging.getLogger() router = APIRouter(prefix="/v1/manufacturers", tags=["manufacturers"]) +ManufacturerServiceDep = Annotated[ManufacturerService, Depends(ManufacturerService)] + @router.post( path="", @@ -33,8 +35,7 @@ status_code=status.HTTP_201_CREATED, ) def create_manufacturer( - manufacturer: ManufacturerPostSchema, - manufacturer_service: ManufacturerService = Depends(), + manufacturer: ManufacturerPostSchema, manufacturer_service: ManufacturerServiceDep ) -> ManufacturerSchema: # pylint: disable=missing-function-docstring logger.info("Creating a new manufacturer") @@ -55,7 +56,7 @@ def create_manufacturer( summary="Get all manufacturers", response_description="List of manufacturers", ) -def get_all_manufacturers(manufacturer_service: ManufacturerService = Depends()) -> List[ManufacturerSchema]: +def get_all_manufacturers(manufacturer_service: ManufacturerServiceDep) -> List[ManufacturerSchema]: # pylint: disable=missing-function-docstring logger.info("Getting manufacturers") @@ -69,8 +70,8 @@ def get_all_manufacturers(manufacturer_service: ManufacturerService = Depends()) response_description="Single manufacturer", ) def get_one_manufacturer( - manufacturer_id: str = Path(description="The ID of the manufacturer to be retrieved"), - manufacturer_service: ManufacturerService = Depends(), + manufacturer_id: Annotated[str, Path(description="The ID of the manufacturer to be retrieved")], + manufacturer_service: ManufacturerServiceDep, ) -> ManufacturerSchema: # pylint: disable=missing-function-docstring logger.info("Getting manufacturer with ID %s", manufacturer_id) @@ -93,8 +94,8 @@ def get_one_manufacturer( ) def edit_manufacturer( manufacturer: ManufacturerPatchSchema, - manufacturer_id: str = Path(description="The ID of the manufacturer that is to be updated"), - manufacturer_service: ManufacturerService = Depends(), + manufacturer_id: Annotated[str, Path(description="The ID of the manufacturer that is to be updated")], + manufacturer_service: ManufacturerServiceDep, ) -> ManufacturerSchema: # pylint: disable=missing-function-docstring logger.info("Updating manufacturer with ID %s", manufacturer_id) @@ -118,8 +119,8 @@ def edit_manufacturer( status_code=status.HTTP_204_NO_CONTENT, ) def delete_manufacturer( - manufacturer_id: str = Path(description="The ID of the manufacturer that is to be deleted"), - manufacturer_service: ManufacturerService = Depends(), + manufacturer_id: Annotated[str, Path(description="The ID of the manufacturer that is to be deleted")], + manufacturer_service: ManufacturerServiceDep, ) -> None: # pylint: disable=missing-function-docstring logger.info("Deleting manufacturer with ID: %s", manufacturer_id) diff --git a/inventory_management_system_api/routers/v1/system.py b/inventory_management_system_api/routers/v1/system.py index c1523100..101baf84 100644 --- a/inventory_management_system_api/routers/v1/system.py +++ b/inventory_management_system_api/routers/v1/system.py @@ -24,6 +24,8 @@ router = APIRouter(prefix="/v1/systems", tags=["systems"]) +SystemServiceDep = Annotated[SystemService, Depends(SystemService)] + @router.post( path="", @@ -31,9 +33,7 @@ response_description="The created System", status_code=status.HTTP_201_CREATED, ) -def create_system( - system: SystemPostSchema, system_service: Annotated[SystemService, Depends(SystemService)] -) -> SystemSchema: +def create_system(system: SystemPostSchema, system_service: SystemServiceDep) -> SystemSchema: # pylint: disable=missing-function-docstring logger.info("Creating a new System") logger.debug("System data: %s", system) @@ -52,7 +52,7 @@ def create_system( @router.get(path="", summary="Get Systems", response_description="List of Systems") def get_systems( - system_service: Annotated[SystemService, Depends(SystemService)], + system_service: SystemServiceDep, parent_id: Annotated[Optional[str], Query(description="Filter Systems by parent ID")] = None, ) -> list[SystemSchema]: # pylint: disable=missing-function-docstring @@ -71,8 +71,7 @@ def get_systems( @router.get(path="/{system_id}", summary="Get a System by ID", response_description="Single System") def get_system( - system_id: Annotated[str, Path(description="ID of the System to get")], - system_service: Annotated[SystemService, Depends(SystemService)], + system_id: Annotated[str, Path(description="ID of the System to get")], system_service: SystemServiceDep ) -> SystemSchema: # pylint: disable=missing-function-docstring logger.info("Getting System with ID: %s", system_service) @@ -90,7 +89,7 @@ def get_system( @router.get(path="/{system_id}/breadcrumbs", summary="Get breadcrumbs data for a system") def get_system_breadcrumbs( system_id: Annotated[str, Path(description="The ID of the system to get the breadcrumbs for")], - system_service: Annotated[SystemService, Depends(SystemService)], + system_service: SystemServiceDep, ) -> BreadcrumbsGetSchema: # pylint: disable=missing-function-docstring # pylint: disable=duplicate-code @@ -112,9 +111,7 @@ def get_system_breadcrumbs( @router.patch(path="/{system_id}", summary="Update a System by ID", response_description="System updated successfully") -def partial_update_system( - system_id: str, system: SystemPatchSchema, system_service: Annotated[SystemService, Depends(SystemService)] -) -> SystemSchema: +def partial_update_system(system_id: str, system: SystemPatchSchema, system_service: SystemServiceDep) -> SystemSchema: # pylint: disable=missing-function-docstring logger.info("Partially updating system with ID: %s", system_id) logger.debug("System data: %s", system) @@ -150,8 +147,7 @@ def partial_update_system( status_code=status.HTTP_204_NO_CONTENT, ) def delete_system( - system_id: Annotated[str, Path(description="ID of the system to delete")], - system_service: Annotated[SystemService, Depends(SystemService)], + system_id: Annotated[str, Path(description="ID of the system to delete")], system_service: SystemServiceDep ) -> None: # pylint: disable=missing-function-docstring logger.info("Deleting system with ID: %s", system_id) diff --git a/inventory_management_system_api/routers/v1/unit.py b/inventory_management_system_api/routers/v1/unit.py index b5721b0c..f4aaab63 100644 --- a/inventory_management_system_api/routers/v1/unit.py +++ b/inventory_management_system_api/routers/v1/unit.py @@ -6,7 +6,7 @@ import logging from typing import Annotated -from fastapi import APIRouter, Depends, status, HTTPException, Path +from fastapi import APIRouter, Depends, HTTPException, Path, status from inventory_management_system_api.core.exceptions import ( DuplicateRecordError, @@ -21,6 +21,8 @@ router = APIRouter(prefix="/v1/units", tags=["units"]) +UnitServiceDep = Annotated[UnitService, Depends(UnitService)] + @router.post( path="", @@ -28,10 +30,7 @@ response_description="The created unit", status_code=status.HTTP_201_CREATED, ) -def create_unit( - unit: UnitPostSchema, - unit_service: Annotated[UnitService, Depends(UnitService)], -) -> UnitSchema: +def create_unit(unit: UnitPostSchema, unit_service: UnitServiceDep) -> UnitSchema: # pylint: disable=missing-function-docstring logger.info("Creating a new unit") logger.debug("Unit data: %s", unit) @@ -51,8 +50,7 @@ def create_unit( response_description="Single unit", ) def get_unit( - unit_id: Annotated[str, Path(description="The ID of the unit to be retrieved")], - unit_service: Annotated[UnitService, Depends(UnitService)], + unit_id: Annotated[str, Path(description="The ID of the unit to be retrieved")], unit_service: UnitServiceDep ) -> UnitSchema: # pylint: disable=missing-function-docstring logger.info("Getting unit with ID %s", unit_id) @@ -69,7 +67,7 @@ def get_unit( @router.get(path="", summary="Get Units", response_description="List of Units") -def get_units(unit_service: Annotated[UnitService, Depends(UnitService)]) -> list[UnitSchema]: +def get_units(unit_service: UnitServiceDep) -> list[UnitSchema]: # pylint: disable=missing-function-docstring logger.info("Getting Units") @@ -84,8 +82,7 @@ def get_units(unit_service: Annotated[UnitService, Depends(UnitService)]) -> lis status_code=status.HTTP_204_NO_CONTENT, ) def delete_unit( - unit_id: Annotated[str, Path(description="ID of the unit to delete")], - unit_service: Annotated[UnitService, Depends(UnitService)], + unit_id: Annotated[str, Path(description="ID of the unit to delete")], unit_service: UnitServiceDep ) -> None: # pylint: disable=missing-function-docstring logger.info("Deleting unit with ID: %s", unit_id) diff --git a/inventory_management_system_api/routers/v1/usage_status.py b/inventory_management_system_api/routers/v1/usage_status.py index 929a74ea..c6c556d4 100644 --- a/inventory_management_system_api/routers/v1/usage_status.py +++ b/inventory_management_system_api/routers/v1/usage_status.py @@ -6,7 +6,7 @@ import logging from typing import Annotated -from fastapi import APIRouter, Depends, status, HTTPException, Path +from fastapi import APIRouter, Depends, HTTPException, Path, status from inventory_management_system_api.core.exceptions import ( DuplicateRecordError, @@ -21,6 +21,8 @@ router = APIRouter(prefix="/v1/usage-statuses", tags=["usage statuses"]) +UsageStatusServiceDep = Annotated[UsageStatusService, Depends(UsageStatusService)] + @router.post( path="", @@ -29,8 +31,7 @@ status_code=status.HTTP_201_CREATED, ) def create_usage_status( - usage_status: UsageStatusPostSchema, - usage_status_service: Annotated[UsageStatusService, Depends(UsageStatusService)], + usage_status: UsageStatusPostSchema, usage_status_service: UsageStatusServiceDep ) -> UsageStatusSchema: # pylint: disable=missing-function-docstring logger.info("Creating a new usage status") @@ -53,7 +54,7 @@ def create_usage_status( ) def get_usage_status( usage_status_id: Annotated[str, Path(description="The ID of the usage status to be retrieved")], - usage_status_service: Annotated[UsageStatusService, Depends(UsageStatusService)], + usage_status_service: UsageStatusServiceDep, ) -> UsageStatusSchema: # pylint: disable=missing-function-docstring logger.info("Getting usage status with ID %s", usage_status_id) @@ -70,9 +71,7 @@ def get_usage_status( @router.get(path="", summary="Get usage statuses", response_description="List of usage statuses") -def get_usage_statuses( - usage_status_service: Annotated[UsageStatusService, Depends(UsageStatusService)] -) -> list[UsageStatusSchema]: +def get_usage_statuses(usage_status_service: UsageStatusServiceDep) -> list[UsageStatusSchema]: # pylint: disable=missing-function-docstring logger.info("Getting Usage statuses") @@ -88,7 +87,7 @@ def get_usage_statuses( ) def delete_usage_status( usage_status_id: Annotated[str, Path(description="ID of the usage status to delete")], - usage_status_service: Annotated[UsageStatusService, Depends(UsageStatusService)], + usage_status_service: UsageStatusServiceDep, ) -> None: # pylint: disable=missing-function-docstring logger.info("Deleting usage status with ID: %s", usage_status_id) diff --git a/inventory_management_system_api/services/catalogue_category.py b/inventory_management_system_api/services/catalogue_category.py index 99857030..b9627c9c 100644 --- a/inventory_management_system_api/services/catalogue_category.py +++ b/inventory_management_system_api/services/catalogue_category.py @@ -3,7 +3,7 @@ """ import logging -from typing import Any, List, Optional +from typing import Annotated, Any, List, Optional from fastapi import Depends @@ -35,8 +35,8 @@ class CatalogueCategoryService: def __init__( self, - catalogue_category_repository: CatalogueCategoryRepo = Depends(CatalogueCategoryRepo), - unit_repository: UnitRepo = Depends(UnitRepo), + catalogue_category_repository: Annotated[CatalogueCategoryRepo, Depends(CatalogueCategoryRepo)], + unit_repository: Annotated[UnitRepo, Depends(UnitRepo)], ) -> None: """ Initialise the `CatalogueCategoryService` with a `CatalogueCategoryRepo` and `UnitRepo` repository. diff --git a/inventory_management_system_api/services/catalogue_category_property.py b/inventory_management_system_api/services/catalogue_category_property.py index abc3111a..0771252e 100644 --- a/inventory_management_system_api/services/catalogue_category_property.py +++ b/inventory_management_system_api/services/catalogue_category_property.py @@ -4,7 +4,7 @@ """ import logging -from typing import Optional +from typing import Annotated, Optional from fastapi import Depends @@ -38,10 +38,10 @@ class CatalogueCategoryPropertyService: def __init__( self, - catalogue_category_repository: CatalogueCategoryRepo = Depends(CatalogueCategoryRepo), - catalogue_item_repository: CatalogueItemRepo = Depends(CatalogueItemRepo), - item_repository: ItemRepo = Depends(ItemRepo), - unit_repository: UnitRepo = Depends(UnitRepo), + catalogue_category_repository: Annotated[CatalogueCategoryRepo, Depends(CatalogueCategoryRepo)], + catalogue_item_repository: Annotated[CatalogueItemRepo, Depends(CatalogueItemRepo)], + item_repository: Annotated[ItemRepo, Depends(ItemRepo)], + unit_repository: Annotated[UnitRepo, Depends(UnitRepo)], ): """ Initialise the `PropertyService` with a `CatalogueCategoryRepo`, `CatalogueItemRepo`, diff --git a/inventory_management_system_api/services/catalogue_item.py b/inventory_management_system_api/services/catalogue_item.py index 519972e3..19c92626 100644 --- a/inventory_management_system_api/services/catalogue_item.py +++ b/inventory_management_system_api/services/catalogue_item.py @@ -4,7 +4,7 @@ """ import logging -from typing import List, Optional +from typing import Annotated, List, Optional from fastapi import Depends @@ -36,9 +36,9 @@ class CatalogueItemService: def __init__( self, - catalogue_item_repository: CatalogueItemRepo = Depends(CatalogueItemRepo), - catalogue_category_repository: CatalogueCategoryRepo = Depends(CatalogueCategoryRepo), - manufacturer_repository: ManufacturerRepo = Depends(ManufacturerRepo), + catalogue_item_repository: Annotated[CatalogueItemRepo, Depends(CatalogueItemRepo)], + catalogue_category_repository: Annotated[CatalogueCategoryRepo, Depends(CatalogueCategoryRepo)], + manufacturer_repository: Annotated[ManufacturerRepo, Depends(ManufacturerRepo)], ) -> None: """ Initialise the `CatalogueItemService` with a `CatalogueItemRepo`, `CatalogueCategoryRepo` diff --git a/inventory_management_system_api/services/item.py b/inventory_management_system_api/services/item.py index 24f40cf1..0fc755da 100644 --- a/inventory_management_system_api/services/item.py +++ b/inventory_management_system_api/services/item.py @@ -4,7 +4,7 @@ """ import logging -from typing import List, Optional +from typing import Annotated, List, Optional from fastapi import Depends @@ -35,11 +35,11 @@ class ItemService: def __init__( self, - item_repository: ItemRepo = Depends(ItemRepo), - catalogue_category_repository: CatalogueCategoryRepo = Depends(CatalogueCategoryRepo), - catalogue_item_repository: CatalogueItemRepo = Depends(CatalogueItemRepo), - system_repository: SystemRepo = Depends(SystemRepo), - usage_status_repository: UsageStatusRepo = Depends(UsageStatusRepo), + item_repository: Annotated[ItemRepo, Depends(ItemRepo)], + catalogue_category_repository: Annotated[CatalogueCategoryRepo, Depends(CatalogueCategoryRepo)], + catalogue_item_repository: Annotated[CatalogueItemRepo, Depends(CatalogueItemRepo)], + system_repository: Annotated[SystemRepo, Depends(SystemRepo)], + usage_status_repository: Annotated[UsageStatusRepo, Depends(UsageStatusRepo)], # pylint: disable=too-many-arguments ) -> None: """ diff --git a/inventory_management_system_api/services/manufacturer.py b/inventory_management_system_api/services/manufacturer.py index 7e1fde13..aba02a08 100644 --- a/inventory_management_system_api/services/manufacturer.py +++ b/inventory_management_system_api/services/manufacturer.py @@ -4,7 +4,7 @@ import logging -from typing import List, Optional +from typing import Annotated, List, Optional from fastapi import Depends from inventory_management_system_api.core.exceptions import MissingRecordError from inventory_management_system_api.models.manufacturer import ManufacturerIn, ManufacturerOut @@ -23,7 +23,7 @@ class ManufacturerService: def __init__( self, - manufacturer_repository: ManufacturerRepo = Depends(ManufacturerRepo), + manufacturer_repository: Annotated[ManufacturerRepo, Depends(ManufacturerRepo)], ) -> None: """ Initialise the manufacturer service with a ManufacturerRepo diff --git a/inventory_management_system_api/services/system.py b/inventory_management_system_api/services/system.py index 52cc8ef9..9c3a6e9f 100644 --- a/inventory_management_system_api/services/system.py +++ b/inventory_management_system_api/services/system.py @@ -3,7 +3,7 @@ """ import logging -from typing import Optional +from typing import Annotated, Optional from fastapi import Depends @@ -22,7 +22,7 @@ class SystemService: Service for managing Systems """ - def __init__(self, system_repository: SystemRepo = Depends(SystemRepo)) -> None: + def __init__(self, system_repository: Annotated[SystemRepo, Depends(SystemRepo)]) -> None: """ Initialise the `SystemService` with a `SystemRepo` repository diff --git a/inventory_management_system_api/services/unit.py b/inventory_management_system_api/services/unit.py index 97c4a0f0..dd44d703 100644 --- a/inventory_management_system_api/services/unit.py +++ b/inventory_management_system_api/services/unit.py @@ -2,7 +2,7 @@ Module for providing a service for managing Units using the `UnitRepo` repository """ -from typing import Optional +from typing import Annotated, Optional from fastapi import Depends from inventory_management_system_api.models.unit import UnitIn, UnitOut from inventory_management_system_api.repositories.unit import UnitRepo @@ -16,7 +16,7 @@ class UnitService: Service for managing Units """ - def __init__(self, unit_repository: UnitRepo = Depends(UnitRepo)) -> None: + def __init__(self, unit_repository: Annotated[UnitRepo, Depends(UnitRepo)]) -> None: """ Initialise the `UnitService` with a `UnitRepo` repository diff --git a/inventory_management_system_api/services/usage_status.py b/inventory_management_system_api/services/usage_status.py index fdabf8d3..603c8f99 100644 --- a/inventory_management_system_api/services/usage_status.py +++ b/inventory_management_system_api/services/usage_status.py @@ -2,7 +2,7 @@ Module for providing a service for managing Usage statuses using the `UsageStatusRepo` repository """ -from typing import Optional +from typing import Annotated, Optional from fastapi import Depends @@ -17,7 +17,7 @@ class UsageStatusService: Service for managing Usage statuses """ - def __init__(self, usage_status_repository: UsageStatusRepo = Depends(UsageStatusRepo)) -> None: + def __init__(self, usage_status_repository: Annotated[UsageStatusRepo, Depends(UsageStatusRepo)]) -> None: """ Initialise the `UsageStatusService` with a `UsageStatusRepo` repository