diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 265c65be..a884c6b7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,6 +15,7 @@ jobs: DB_DATABASE: database_app_test DB_USERNAME: app DB_PASSWORD: secret + POSTGRES_PORT: 15432 steps: - uses: actions/checkout@v4 @@ -33,7 +34,7 @@ jobs: # ── fastapi_startkit package ────────────────────────────────────────── - name: Install dependencies (fastapi_startkit) working-directory: fastapi_startkit - run: uv sync --group dev --extra database --extra sqlite --extra fastapi --extra vite + run: uv sync --group dev --extra database --extra sqlite --extra fastapi --extra vite --extra postgres - name: Run tests (fastapi_startkit) working-directory: fastapi_startkit diff --git a/bin/test.sh b/bin/test.sh index c2286ba2..b04d9f4c 100755 --- a/bin/test.sh +++ b/bin/test.sh @@ -3,6 +3,13 @@ set -e ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +# ── Lint ────────────────────────────────────────────────────────────────────── +echo "============================================================" +echo " Running: ruff lint checks" +echo "============================================================" +(cd "$ROOT/fastapi_startkit" && uv run ruff format --check src/ tests/) +(cd "$ROOT/fastapi_startkit" && uv run ruff check src/ tests/) + # ── Start MySQL via Docker Compose ──────────────────────────────────────────── echo "Starting test services..." docker compose -f "$ROOT/docker-compose.yml" down --remove-orphans @@ -14,6 +21,7 @@ trap 'echo "Stopping test services..."; docker compose -f "$ROOT/docker-compose. # ── Common DB env vars (match docker-compose.test.yml) ─────────────────────── export DB_HOST=127.0.0.1 export DB_PORT=3306 +export POSTGRES_PORT=15432 export DB_DATABASE=database_app_test export DB_USERNAME=app export DB_PASSWORD=secret diff --git a/docker-compose.yml b/docker-compose.yml index d2920ab8..7c9f4ec4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,7 +22,7 @@ services: POSTGRES_USER: app POSTGRES_PASSWORD: secret ports: - - "5432:5432" + - "15432:5432" healthcheck: test: [ "CMD", "pg_isready", "-U", "app", "-d", "database_app_test" ] interval: 5s diff --git a/example/config-app/uv.lock b/example/config-app/uv.lock index 3923cfba..8a3ed7e4 100644 --- a/example/config-app/uv.lock +++ b/example/config-app/uv.lock @@ -162,7 +162,7 @@ wheels = [ [[package]] name = "fastapi-startkit" -version = "0.25.0" +version = "0.26.0" source = { editable = "../../fastapi_startkit" } dependencies = [ { name = "cleo" }, diff --git a/example/database-app/uv.lock b/example/database-app/uv.lock index bcd11761..4fe12172 100644 --- a/example/database-app/uv.lock +++ b/example/database-app/uv.lock @@ -498,7 +498,7 @@ wheels = [ [[package]] name = "fastapi-startkit" -version = "0.25.0" +version = "0.26.0" source = { editable = "../../fastapi_startkit" } dependencies = [ { name = "cleo" }, diff --git a/fastapi_startkit/pyproject.toml b/fastapi_startkit/pyproject.toml index 625ad118..87b96944 100644 --- a/fastapi_startkit/pyproject.toml +++ b/fastapi_startkit/pyproject.toml @@ -55,6 +55,11 @@ dev = [ "ruff>=0.9.0", "twine>=6.2.0", "itsdangerous>=2.2.0", + "asyncpg>=0.29.0", + "aiosqlite>=0.22.1", + "aiomysql>=0.2.0", + "sqlalchemy[asyncio]>=2.0.38", + "fastapi[standard]>=0.124.4", ] diff --git a/fastapi_startkit/src/fastapi_startkit/application.py b/fastapi_startkit/src/fastapi_startkit/application.py index 1c0d8a7a..175aa753 100644 --- a/fastapi_startkit/src/fastapi_startkit/application.py +++ b/fastapi_startkit/src/fastapi_startkit/application.py @@ -74,9 +74,7 @@ def load_environment(self): return self def configure_exception_handler(self): - self.exception_manager: ExceptionHandler = self._exception_handler_class( - application=self - ) + self.exception_manager: ExceptionHandler = self._exception_handler_class(application=self) self.exception_manager.register() self.exception_manager.install() self.bind("exception_manager", self.exception_manager) @@ -163,9 +161,7 @@ def mount(self, path: str, app_instance: "FastAPI", **kwargs): return self # Add custom exception handlers - def add_exception_handler( - self, exc_class_or_status_code: Any, handler: Callable[..., Any] - ): + def add_exception_handler(self, exc_class_or_status_code: Any, handler: Callable[..., Any]): self._fastapi.add_exception_handler(exc_class_or_status_code, handler) return self @@ -175,9 +171,7 @@ def fastapi(self) -> "FastAPI": try: from fastapi import FastAPI except ImportError: - raise RuntimeError( - "FastAPI is not installed. Install it with: pip install fastapi" - ) + raise RuntimeError("FastAPI is not installed. Install it with: pip install fastapi") self._fastapi = FastAPI() # Making the type hint work assert self._fastapi is not None diff --git a/fastapi_startkit/src/fastapi_startkit/collection/collection.py b/fastapi_startkit/src/fastapi_startkit/collection/collection.py index 39385c88..84960a6a 100644 --- a/fastapi_startkit/src/fastapi_startkit/collection/collection.py +++ b/fastapi_startkit/src/fastapi_startkit/collection/collection.py @@ -276,9 +276,7 @@ def pluck(self, value, key=None, keep_nulls=True): if k == value: if key: - attributes[self._data_get(item, key)] = self._data_get( - item, value - ) + attributes[self._data_get(item, key)] = self._data_get(item, value) else: attributes.append(v) diff --git a/fastapi_startkit/src/fastapi_startkit/config/app.py b/fastapi_startkit/src/fastapi_startkit/config/app.py index 2bea07f8..a60bc631 100644 --- a/fastapi_startkit/src/fastapi_startkit/config/app.py +++ b/fastapi_startkit/src/fastapi_startkit/config/app.py @@ -5,9 +5,7 @@ @dataclass class AppConfig: - name: str = field( - default_factory=lambda: os.getenv("APP_NAME", "FastAPI starter kit") - ) + name: str = field(default_factory=lambda: os.getenv("APP_NAME", "FastAPI starter kit")) env: str = field(default_factory=lambda: os.getenv("APP_ENV", "development")) debug: bool = field(default_factory=lambda: env("APP_DEBUG", "true")) timezone: str = field(default_factory=lambda: os.getenv("APP_TIMEZONE", "UTC")) diff --git a/fastapi_startkit/src/fastapi_startkit/configuration/Configuration.py b/fastapi_startkit/src/fastapi_startkit/configuration/Configuration.py index ebf8d42a..849efb39 100644 --- a/fastapi_startkit/src/fastapi_startkit/configuration/Configuration.py +++ b/fastapi_startkit/src/fastapi_startkit/configuration/Configuration.py @@ -26,9 +26,7 @@ def __init__(self, application): def load(self): """At boot load configuration from all files and store them in here.""" config_root = self.application.make("config.location") - for module_name, module in ( - Loader().get_modules(config_root, raise_exception=True).items() - ): + for module_name, module in Loader().get_modules(config_root, raise_exception=True).items(): params = Loader().get_parameters(module) for name, value in params.items(): self._config[f"{module_name}.{name.lower()}"] = value @@ -42,9 +40,7 @@ def merge_with(self, path, external_config): (such as 'application'). """ if path in self.reserved_keys: - raise InvalidConfigurationSetup( - f"{path} is a reserved configuration key name. Please use an other key." - ) + raise InvalidConfigurationSetup(f"{path} is a reserved configuration key name. Please use an other key.") if isinstance(external_config, str): # config is a path and should be loaded params = Loader().get_parameters(external_config) diff --git a/fastapi_startkit/src/fastapi_startkit/console/__init__.py b/fastapi_startkit/src/fastapi_startkit/console/__init__.py index c98daee3..75bd83da 100644 --- a/fastapi_startkit/src/fastapi_startkit/console/__init__.py +++ b/fastapi_startkit/src/fastapi_startkit/console/__init__.py @@ -1,7 +1,4 @@ from .application import ConsoleApplication from .command import Command -__all__ = [ - "ConsoleApplication", - "Command" -] +__all__ = ["ConsoleApplication", "Command"] diff --git a/fastapi_startkit/src/fastapi_startkit/console/publish_command.py b/fastapi_startkit/src/fastapi_startkit/console/publish_command.py index 928e0516..736bdaa4 100644 --- a/fastapi_startkit/src/fastapi_startkit/console/publish_command.py +++ b/fastapi_startkit/src/fastapi_startkit/console/publish_command.py @@ -37,9 +37,7 @@ def handle(self): if provider_arg: target = Str.slugify(provider_arg) resources = { - name: files - for name, files in application.published_resources.items() - if Str.slugify(name) == target + name: files for name, files in application.published_resources.items() if Str.slugify(name) == target } if not resources: self.line(f"No provider found matching '{provider_arg}'.") diff --git a/fastapi_startkit/src/fastapi_startkit/container/container.py b/fastapi_startkit/src/fastapi_startkit/container/container.py index 8268b8be..c3549b27 100644 --- a/fastapi_startkit/src/fastapi_startkit/container/container.py +++ b/fastapi_startkit/src/fastapi_startkit/container/container.py @@ -54,14 +54,10 @@ def bind(self, name, class_obj): """ if inspect.ismodule(class_obj): raise StrictContainerException( - "Cannot bind module '{}' with key '{}' into the container".format( - class_obj, name - ) + "Cannot bind module '{}' with key '{}' into the container".format(class_obj, name) ) if self.strict and name in self.objects: - raise StrictContainerException( - "You cannot override a key inside a strict container" - ) + raise StrictContainerException("You cannot override a key inside a strict container") if self.override or name not in self.objects: self.fire_hook("bind", name, class_obj) @@ -145,9 +141,7 @@ def make(self, name, *arguments): obj = self.resolve(name, *arguments) return obj - raise MissingContainerBindingNotFound( - "{0} key was not found in the container".format(name) - ) + raise MissingContainerBindingNotFound("{0} key was not found in the container".format(name)) def has(self, name): """Check if a key exists in the container. @@ -200,14 +194,9 @@ def resolve(self, obj, *resolving_arguments): self.remember and not passing_arguments and inspect.ismethod(obj) - and "{}.{}.{}".format( - obj.__module__, obj.__self__.__class__.__name__, obj.__name__ - ) - in self._remembered + and "{}.{}.{}".format(obj.__module__, obj.__self__.__class__.__name__, obj.__name__) in self._remembered ): - location = "{}.{}.{}".format( - obj.__module__, obj.__self__.__class__.__name__, obj.__name__ - ) + location = "{}.{}.{}".format(obj.__module__, obj.__self__.__class__.__name__, obj.__name__) objects = self._remembered[location] try: return obj(*objects) @@ -271,9 +260,7 @@ def resolve(self, obj, *resolving_arguments): if not inspect.ismethod(obj): self._remembered[obj] = objects else: - signature = "{}.{}.{}".format( - obj.__module__, obj.__self__.__class__.__name__, obj.__name__ - ) + signature = "{}.{}.{}".format(obj.__module__, obj.__self__.__class__.__name__, obj.__name__) self._remembered[signature] = objects return obj(*objects) @@ -305,20 +292,15 @@ def collect(self, search): providers.update({key: value}) elif "*" in search: split_search = search.split("*") - if key.startswith(split_search[0]) and key.endswith( - split_search[1] - ): + if key.startswith(split_search[0]) and key.endswith(split_search[1]): providers.update({key: value}) else: - raise AttributeError( - "There is no '*' in your collection search" - ) + raise AttributeError("There is no '*' in your collection search") else: for provider_key, provider_class in self.objects.items(): - if ( - inspect.isclass(provider_class) - and issubclass(provider_class, search) - ) or isinstance(provider_class, search): + if (inspect.isclass(provider_class) and issubclass(provider_class, search)) or isinstance( + provider_class, search + ): providers.update({provider_key: provider_class}) return providers @@ -344,10 +326,7 @@ def _find_annotated_parameter(self, parameter): return obj for _, provider_class in self.objects.items(): - if ( - parameter.annotation == provider_class - or parameter.annotation == provider_class.__class__ - ): + if parameter.annotation == provider_class or parameter.annotation == provider_class.__class__: obj = provider_class self.fire_hook("resolve", parameter, obj) @@ -362,9 +341,7 @@ def _find_annotated_parameter(self, parameter): return obj raise ContainerError( - "The dependency with the {0} annotation could not be resolved by the container".format( - parameter - ) + "The dependency with the {0} annotation could not be resolved by the container".format(parameter) ) def get_parameters(self, obj): @@ -392,9 +369,7 @@ def _find_parameter(self, keyword): return keyword.default raise ContainerError( - "The parameter dependency with the key of {0} could not be found in the container".format( - parameter - ) + "The parameter dependency with the key of {0} could not be found in the container".format(parameter) ) def on_bind(self, key, obj): @@ -503,9 +478,7 @@ def _find_obj(self, obj): return return_obj raise MissingContainerBindingNotFound( - "The dependency with the {0} annotation could not be resolved by the container".format( - obj - ) + "The dependency with the {0} annotation could not be resolved by the container".format(obj) ) def __contains__(self, obj): diff --git a/fastapi_startkit/src/fastapi_startkit/exceptions.backup/ExceptionHandler.py b/fastapi_startkit/src/fastapi_startkit/exceptions.backup/ExceptionHandler.py index d0036aa6..43aefb4a 100644 --- a/fastapi_startkit/src/fastapi_startkit/exceptions.backup/ExceptionHandler.py +++ b/fastapi_startkit/src/fastapi_startkit/exceptions.backup/ExceptionHandler.py @@ -31,9 +31,7 @@ def handle(self, exception): response = self.application.make("response") request = self.application.make("request") - self.application.make("event").fire( - f"masonite.exception.{exception.__class__.__name__}", exception - ) + self.application.make("event").fire(f"masonite.exception.{exception.__class__.__name__}", exception) # add headers to response if any if hasattr(exception, "get_headers"): @@ -47,17 +45,13 @@ def handle(self, exception): response.with_headers(headers) if self.application.has(f"{exception.__class__.__name__}Handler"): - return self.application.make( - f"{exception.__class__.__name__}Handler" - ).handle(exception) + return self.application.make(f"{exception.__class__.__name__}Handler").handle(exception) # handle exception in production if not self.application.is_debug(): # for HTTP error codes (500, 404, 403...) a specific page should be displayed # if a renderable exception is raised let it be displayed - if hasattr(exception, "is_http_exception") or hasattr( - exception, "get_response" - ): + if hasattr(exception, "is_http_exception") or hasattr(exception, "get_response"): return self.application.make("HttpExceptionHandler").handle(exception) # else fallback to an unknown exception that should be displayed as a 500 error diff --git a/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/DumpExceptionHandler.py b/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/DumpExceptionHandler.py index 1c686cbb..3a75182b 100644 --- a/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/DumpExceptionHandler.py +++ b/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/DumpExceptionHandler.py @@ -37,9 +37,7 @@ class DumpExceptionHandler: def __init__(self, application): self.application = application - self.assets_path = os.path.join( - get_module_dir(__file__), "../../templates/assets" - ) + self.assets_path = os.path.join(get_module_dir(__file__), "../../templates/assets") self.styles = [] self.scripts = [] diff --git a/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/HttpExceptionHandler.py b/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/HttpExceptionHandler.py index e88bd22c..a6f57385 100644 --- a/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/HttpExceptionHandler.py +++ b/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/HttpExceptionHandler.py @@ -18,9 +18,7 @@ def handle(self, exception): # Renders HTTP exception as HTML with predefined error page if exists if self.application.make("view").exists(view_name): return response.view( - self.application.make("view").render( - f"errors/{status_code}", {"message": exception.get_response()} - ), + self.application.make("view").render(f"errors/{status_code}", {"message": exception.get_response()}), status_code, ) else: diff --git a/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/ModelNotFoundHandler.py b/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/ModelNotFoundHandler.py index 7d6880eb..68d53106 100644 --- a/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/ModelNotFoundHandler.py +++ b/fastapi_startkit/src/fastapi_startkit/exceptions.backup/handlers/ModelNotFoundHandler.py @@ -6,8 +6,6 @@ def __init__(self, application): self.application = application def handle(self, exception): - masonite_exception = ModelNotFoundException( - "No record found with the given primary key" - ) + masonite_exception = ModelNotFoundException("No record found with the given primary key") self.application.make("response").status(404) self.application.make("exception_handler").handle(masonite_exception) diff --git a/fastapi_startkit/src/fastapi_startkit/exceptions/handler.py b/fastapi_startkit/src/fastapi_startkit/exceptions/handler.py index f7ae5ee6..0f3132c5 100644 --- a/fastapi_startkit/src/fastapi_startkit/exceptions/handler.py +++ b/fastapi_startkit/src/fastapi_startkit/exceptions/handler.py @@ -3,7 +3,6 @@ from typing import Any, Callable, Dict, List, Optional, Type - class ExceptionHandler: def __init__(self, application=None): self.app = application @@ -74,11 +73,7 @@ def _build_context(self, exception: Exception) -> str: context = f"{type(exception).__name__}: {exception}" if self.app and self.app.is_debug(): - context += "\n" + "".join( - traceback.format_exception( - type(exception), exception, exception.__traceback__ - ) - ) + context += "\n" + "".join(traceback.format_exception(type(exception), exception, exception.__traceback__)) return context async def handle(self, exception: Exception, context: Optional[Dict] = None) -> Any: diff --git a/fastapi_startkit/src/fastapi_startkit/facades/Hash.pyi b/fastapi_startkit/src/fastapi_startkit/facades/Hash.pyi index 55d74729..fca84bab 100644 --- a/fastapi_startkit/src/fastapi_startkit/facades/Hash.pyi +++ b/fastapi_startkit/src/fastapi_startkit/facades/Hash.pyi @@ -20,9 +20,7 @@ class Hash: ) -> bool: """Verify that a given string matches its hashed version (based on configured hashing protocol).""" ... - def needs_rehash( - hashed_string: str, options: dict = {}, driver: str = None - ) -> bool: + def needs_rehash(hashed_string: str, options: dict = {}, driver: str = None) -> bool: """Verify that a given hash needs to be hashed again because parameters for generating the hash have changed.""" ... diff --git a/fastapi_startkit/src/fastapi_startkit/facades/Loader.pyi b/fastapi_startkit/src/fastapi_startkit/facades/Loader.pyi index 04aa5661..7ce200ed 100644 --- a/fastapi_startkit/src/fastapi_startkit/facades/Loader.pyi +++ b/fastapi_startkit/src/fastapi_startkit/facades/Loader.pyi @@ -10,12 +10,8 @@ class Loader: class_name: str, raise_exception: bool = False, ) -> "None|Any": ... - def find_all( - class_instance: Any, paths: list, raise_exception: bool = False - ) -> dict: ... - def get_object( - path_or_module: "str|Any", object_name: str, raise_exception: bool = False - ) -> Any: + def find_all(class_instance: Any, paths: list, raise_exception: bool = False) -> dict: ... + def get_object(path_or_module: "str|Any", object_name: str, raise_exception: bool = False) -> Any: """Load the given object from a Python module located at path and returns a default value if not found. If no object name is provided, returns the loaded module.""" ... diff --git a/fastapi_startkit/src/fastapi_startkit/facades/RateLimiter.pyi b/fastapi_startkit/src/fastapi_startkit/facades/RateLimiter.pyi index 9b9609ce..0858415c 100644 --- a/fastapi_startkit/src/fastapi_startkit/facades/RateLimiter.pyi +++ b/fastapi_startkit/src/fastapi_startkit/facades/RateLimiter.pyi @@ -15,9 +15,7 @@ class RateLimiter: def get_limiter(self, name: str) -> "Limiter": """Get rate limiter registered with the given name.""" ... - def attempt( - key: str, callback: Callable, max_attempts: int, delay: int = 60 - ) -> Any: + def attempt(key: str, callback: Callable, max_attempts: int, delay: int = 60) -> Any: """Try to execute the given callback if not limited by the 'key' rate limiter.""" ... def too_many_attempts(self, key: str, max_attempts: int) -> bool: diff --git a/fastapi_startkit/src/fastapi_startkit/fastapi/commands/serve_command.py b/fastapi_startkit/src/fastapi_startkit/fastapi/commands/serve_command.py index d24f9e69..be268cd5 100644 --- a/fastapi_startkit/src/fastapi_startkit/fastapi/commands/serve_command.py +++ b/fastapi_startkit/src/fastapi_startkit/fastapi/commands/serve_command.py @@ -75,9 +75,7 @@ def handle(self): if cfg_reload_excludes is not None: kwargs["reload_excludes"] = cfg_reload_excludes - self.line( - f"Starting Uvicorn server on {host}:{port} [{app}]..." - ) + self.line(f"Starting Uvicorn server on {host}:{port} [{app}]...") else: self.line(f"Starting Uvicorn server on {host}:{port}...") @@ -101,8 +99,6 @@ def is_app_exist(self) -> "bool": except (ImportError, ValueError): pass - self.line( - "Unable to detect the application, run the command with --app={app}" - ) + self.line("Unable to detect the application, run the command with --app={app}") return False diff --git a/fastapi_startkit/src/fastapi_startkit/fastapi/exceptions.py b/fastapi_startkit/src/fastapi_startkit/fastapi/exceptions.py index 0a5cd54b..320d4aba 100644 --- a/fastapi_startkit/src/fastapi_startkit/fastapi/exceptions.py +++ b/fastapi_startkit/src/fastapi_startkit/fastapi/exceptions.py @@ -17,10 +17,7 @@ async def render(self, request, exc): "exception": f"{type(exc).__module__}.{type(exc).__qualname__}", "file": frames[-1].filename if frames else None, "line": frames[-1].lineno if frames else None, - "trace": [ - {"file": f.filename, "line": f.lineno, "function": f.name} - for f in frames - ], + "trace": [{"file": f.filename, "line": f.lineno, "function": f.name} for f in frames], } else: content = {"message": "Server Error"} @@ -44,10 +41,7 @@ async def render(self, request, exc): accept = request.headers.get("accept", "") content_type = request.headers.get("content-type", "") - wants_json = ( - "application/json" in accept - or content_type.startswith("application/json") - ) + wants_json = "application/json" in accept or content_type.startswith("application/json") errors = {} for err in exc.errors(): diff --git a/fastapi_startkit/src/fastapi_startkit/fastapi/providers/fastapi_provider.py b/fastapi_startkit/src/fastapi_startkit/fastapi/providers/fastapi_provider.py index 79eadab5..8639e782 100644 --- a/fastapi_startkit/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +++ b/fastapi_startkit/src/fastapi_startkit/fastapi/providers/fastapi_provider.py @@ -27,9 +27,7 @@ def boot(self): self.commands([ServeCommand]) self._register_exception_handlers() - source = os.path.abspath( - os.path.join(os.path.dirname(__file__), "../config/fastapi.py") - ) + source = os.path.abspath(os.path.join(os.path.dirname(__file__), "../config/fastapi.py")) self.publishes({source: "config/fastapi.py"}) def _register_exception_handlers(self): diff --git a/fastapi_startkit/src/fastapi_startkit/fastapi/routers/router.py b/fastapi_startkit/src/fastapi_startkit/fastapi/routers/router.py index 741da5fb..e5e9a187 100644 --- a/fastapi_startkit/src/fastapi_startkit/fastapi/routers/router.py +++ b/fastapi_startkit/src/fastapi_startkit/fastapi/routers/router.py @@ -78,39 +78,25 @@ def _add_route( **kwargs, ) - def get( - self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions] - ) -> None: + def get(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None: self._add_route(path, endpoint, ["GET"], **kwargs) - def post( - self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions] - ) -> None: + def post(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None: self._add_route(path, endpoint, ["POST"], **kwargs) - def put( - self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions] - ) -> None: + def put(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None: self._add_route(path, endpoint, ["PUT"], **kwargs) - def patch( - self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions] - ) -> None: + def patch(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None: self._add_route(path, endpoint, ["PATCH"], **kwargs) - def delete( - self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions] - ) -> None: + def delete(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None: self._add_route(path, endpoint, ["DELETE"], **kwargs) - def head( - self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions] - ) -> None: + def head(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None: self._add_route(path, endpoint, ["HEAD"], **kwargs) - def options( - self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions] - ) -> None: + def options(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None: self._add_route(path, endpoint, ["OPTIONS"], **kwargs) def resource( @@ -154,9 +140,7 @@ def fn(method: str) -> Callable[..., Any]: ) if include("store") and hasattr(controller, "store"): - self.post( - f"/{name}", fn("store"), name=route_name("store", f"{name}.store") - ) + self.post(f"/{name}", fn("store"), name=route_name("store", f"{name}.store")) if include("show") and hasattr(controller, "show"): self.get( diff --git a/fastapi_startkit/src/fastapi_startkit/fastapi/testing/__init__.py b/fastapi_startkit/src/fastapi_startkit/fastapi/testing/__init__.py index 48fec2e7..a0c62bc7 100644 --- a/fastapi_startkit/src/fastapi_startkit/fastapi/testing/__init__.py +++ b/fastapi_startkit/src/fastapi_startkit/fastapi/testing/__init__.py @@ -1,5 +1,3 @@ from fastapi_startkit.fastapi.testing.test_case import HttpTestCase -__all__= [ - 'HttpTestCase' -] +__all__ = ["HttpTestCase"] diff --git a/fastapi_startkit/src/fastapi_startkit/fastapi/testing/test_case.py b/fastapi_startkit/src/fastapi_startkit/fastapi/testing/test_case.py index 22478a29..782b22be 100644 --- a/fastapi_startkit/src/fastapi_startkit/fastapi/testing/test_case.py +++ b/fastapi_startkit/src/fastapi_startkit/fastapi/testing/test_case.py @@ -28,4 +28,4 @@ async def put(self, url, **kwargs): return await self.client.put(url, **kwargs) async def delete(self, url, **kwargs): - return await self.client.delete(url, **kwargs) \ No newline at end of file + return await self.client.delete(url, **kwargs) diff --git a/fastapi_startkit/src/fastapi_startkit/helpers/app.py b/fastapi_startkit/src/fastapi_startkit/helpers/app.py index f4c6c455..df9f1ae5 100644 --- a/fastapi_startkit/src/fastapi_startkit/helpers/app.py +++ b/fastapi_startkit/src/fastapi_startkit/helpers/app.py @@ -1,9 +1,12 @@ def storage_path(path: str = "") -> str: """Get the path to the storage directory.""" from fastapi_startkit.application import app + return app().storage_path(path) + def public_path(path: str = "") -> str: """Get the path to the public directory.""" from fastapi_startkit.application import app + return app().public_path(path) diff --git a/fastapi_startkit/src/fastapi_startkit/helpers/dataclass.py b/fastapi_startkit/src/fastapi_startkit/helpers/dataclass.py index 54a71b11..742b7965 100644 --- a/fastapi_startkit/src/fastapi_startkit/helpers/dataclass.py +++ b/fastapi_startkit/src/fastapi_startkit/helpers/dataclass.py @@ -9,10 +9,7 @@ def to_dict(obj: Any): if hasattr(obj, "model_dump") and callable(obj.model_dump): return obj.model_dump() if dataclasses.is_dataclass(obj): - return { - f.name: Dataclass.to_dict(getattr(obj, f.name)) - for f in dataclasses.fields(obj) - } + return {f.name: Dataclass.to_dict(getattr(obj, f.name)) for f in dataclasses.fields(obj)} if isinstance(obj, dict): return {k: Dataclass.to_dict(v) for k, v in obj.items()} if isinstance(obj, (list, tuple)): diff --git a/fastapi_startkit/src/fastapi_startkit/inertia/context.py b/fastapi_startkit/src/fastapi_startkit/inertia/context.py index 7f52ffa3..f9c5218e 100644 --- a/fastapi_startkit/src/fastapi_startkit/inertia/context.py +++ b/fastapi_startkit/src/fastapi_startkit/inertia/context.py @@ -5,6 +5,4 @@ # Set by InertiaMiddleware before calling the next handler so InertiaResponse # can access the current request without it being passed explicitly. -current_request: ContextVar[Optional[Request]] = ContextVar( - "inertia_request", default=None -) +current_request: ContextVar[Optional[Request]] = ContextVar("inertia_request", default=None) diff --git a/fastapi_startkit/src/fastapi_startkit/inertia/inertia.py b/fastapi_startkit/src/fastapi_startkit/inertia/inertia.py index c0b7c57a..0c97ef1e 100644 --- a/fastapi_startkit/src/fastapi_startkit/inertia/inertia.py +++ b/fastapi_startkit/src/fastapi_startkit/inertia/inertia.py @@ -63,9 +63,7 @@ def __init__( self.root_view = root_view self.version = version - def with_( - self, key: Union[str, Dict[str, Any]], value: Any = None - ) -> "InertiaResponse": + def with_(self, key: Union[str, Dict[str, Any]], value: Any = None) -> "InertiaResponse": if isinstance(key, dict): self.props = {**self.props, **key} else: @@ -125,9 +123,7 @@ async def to_response(self, request: Request): from fastapi_startkit.application import app as container if not container().has("templates"): - raise RuntimeError( - "Inertia requires 'templates' to be bound in the container for initial rendering." - ) + raise RuntimeError("Inertia requires 'templates' to be bound in the container for initial rendering.") return ( container() @@ -187,7 +183,5 @@ def optional(callback) -> OptionalProp: return OptionalProp(callback) @staticmethod - def render( - component: str, props: Optional[Dict[str, Any]] = None - ) -> InertiaResponse: + def render(component: str, props: Optional[Dict[str, Any]] = None) -> InertiaResponse: return Inertia.instance().render(component, props or {}) diff --git a/fastapi_startkit/src/fastapi_startkit/inertia/middleware.py b/fastapi_startkit/src/fastapi_startkit/inertia/middleware.py index 52e9bb8d..ee86459c 100644 --- a/fastapi_startkit/src/fastapi_startkit/inertia/middleware.py +++ b/fastapi_startkit/src/fastapi_startkit/inertia/middleware.py @@ -33,9 +33,7 @@ def root_view(cls, request: Request) -> str: """Return the root template name for the first page visit.""" return cls._root_view - async def dispatch( - self, request: Request, call_next: RequestResponseEndpoint - ) -> Response: + async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) -> Response: Inertia.version(lambda: self.version(request)) Inertia.share(self.share(request)) Inertia.set_root_view(self.root_view(request)) @@ -56,9 +54,7 @@ async def dispatch( return response # Version conflict — ask client to do a full page reload - if request.method == "GET" and request.headers.get( - Header.INERTIA_VERSION, "" - ) != (Inertia.get_version() or ""): + if request.method == "GET" and request.headers.get(Header.INERTIA_VERSION, "") != (Inertia.get_version() or ""): return self.on_version_change(request, response) # 302 → 303 for PUT/PATCH/DELETE so browser issues a GET diff --git a/fastapi_startkit/src/fastapi_startkit/inertia/provider.py b/fastapi_startkit/src/fastapi_startkit/inertia/provider.py index 6c10332e..fe2f8b11 100644 --- a/fastapi_startkit/src/fastapi_startkit/inertia/provider.py +++ b/fastapi_startkit/src/fastapi_startkit/inertia/provider.py @@ -25,4 +25,3 @@ def inertia_helper(page): templates.env.globals["inertia"] = inertia_helper templates.env.globals["Inertia"] = self.app.make("inertia") - diff --git a/fastapi_startkit/src/fastapi_startkit/loader/Loader.py b/fastapi_startkit/src/fastapi_startkit/loader/Loader.py index a292a6f1..c243b3cd 100644 --- a/fastapi_startkit/src/fastapi_startkit/loader/Loader.py +++ b/fastapi_startkit/src/fastapi_startkit/loader/Loader.py @@ -33,9 +33,7 @@ def find(self, class_instance, paths, class_name, raise_exception=False): if name == class_name: return obj if raise_exception: - raise LoaderNotFound( - f"No {class_instance} named {class_name} has been found in {paths}" - ) + raise LoaderNotFound(f"No {class_instance} named {class_name} has been found in {paths}") return None def find_all(self, class_instance, paths, raise_exception=False): diff --git a/fastapi_startkit/src/fastapi_startkit/logging/channels/DailyChannel.py b/fastapi_startkit/src/fastapi_startkit/logging/channels/DailyChannel.py index 988e3079..a263ab2e 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/channels/DailyChannel.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/channels/DailyChannel.py @@ -11,9 +11,9 @@ def __init__(self, driver=None, path=None): path = os.path.join(path, self.get_time().to_date_string() + ".log") self.max_level = Config.get("logging.channels.daily.level") make_directory(path) - self.driver = DriverFactory.make( - driver or Config.get("logging.channels.daily.driver") - )(path=path, max_level=self.max_level) + self.driver = DriverFactory.make(driver or Config.get("logging.channels.daily.driver"))( + path=path, max_level=self.max_level + ) def debug(self, message, *args, **kwargs): return self.driver.debug(message, *args, **kwargs) diff --git a/fastapi_startkit/src/fastapi_startkit/logging/channels/SingleChannel.py b/fastapi_startkit/src/fastapi_startkit/logging/channels/SingleChannel.py index a45e366f..69b9513c 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/channels/SingleChannel.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/channels/SingleChannel.py @@ -9,6 +9,6 @@ def __init__(self, driver=None, path=None): path = path or Config.get("logging.channels.single.path") make_directory(path) self.max_level = Config.get("logging.channels.single.level") - self.driver = DriverFactory.make( - driver or Config.get("logging.channels.single.driver") - )(path=path, max_level=self.max_level) + self.driver = DriverFactory.make(driver or Config.get("logging.channels.single.driver"))( + path=path, max_level=self.max_level + ) diff --git a/fastapi_startkit/src/fastapi_startkit/logging/channels/SlackChannel.py b/fastapi_startkit/src/fastapi_startkit/logging/channels/SlackChannel.py index 3adb0151..c329a663 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/channels/SlackChannel.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/channels/SlackChannel.py @@ -12,9 +12,9 @@ def __init__(self, driver=None, path=None): emoji = Config.get("logging.channels.slack.emoji") username = Config.get("logging.channels.slack.username") self.max_level = Config.get("logging.channels.slack.level") - self.driver = DriverFactory.make( - driver or Config.get("logging.channels.slack.driver") - )(emoji=emoji, username=username, token=token, channel=channel) + self.driver = DriverFactory.make(driver or Config.get("logging.channels.slack.driver"))( + emoji=emoji, username=username, token=token, channel=channel + ) def debug(self, message, *args, **kwargs): return self.driver.debug(message, *args, **kwargs) diff --git a/fastapi_startkit/src/fastapi_startkit/logging/channels/SyslogChannel.py b/fastapi_startkit/src/fastapi_startkit/logging/channels/SyslogChannel.py index a9a1eeb5..a20c1a7d 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/channels/SyslogChannel.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/channels/SyslogChannel.py @@ -9,6 +9,6 @@ def __init__(self, driver=None, path=None): path = path or Config.get("logging.channels.syslog.path") make_directory(path) self.max_level = Config.get("logging.channels.syslog.level") - self.driver = DriverFactory.make( - driver or Config.get("logging.channels.syslog.driver") - )(path=path, max_level=self.max_level) + self.driver = DriverFactory.make(driver or Config.get("logging.channels.syslog.driver"))( + path=path, max_level=self.max_level + ) diff --git a/fastapi_startkit/src/fastapi_startkit/logging/channels/TerminalChannel.py b/fastapi_startkit/src/fastapi_startkit/logging/channels/TerminalChannel.py index 8e20d69e..40fa5ea7 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/channels/TerminalChannel.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/channels/TerminalChannel.py @@ -1,4 +1,3 @@ - from fastapi_startkit.facades import Config from ..factory import DriverFactory @@ -8,6 +7,6 @@ class TerminalChannel(BaseChannel): def __init__(self, driver=None, path=None): self.max_level = Config.get("logging.channels.terminal.level", "debug") - self.driver = DriverFactory.make( - driver or Config.get("logging.channels.terminal.driver") - )(path=path, max_level=self.max_level) + self.driver = DriverFactory.make(driver or Config.get("logging.channels.terminal.driver"))( + path=path, max_level=self.max_level + ) diff --git a/fastapi_startkit/src/fastapi_startkit/logging/config/logging.py b/fastapi_startkit/src/fastapi_startkit/logging/config/logging.py index 3bfc57e6..553a7426 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/config/logging.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/config/logging.py @@ -6,9 +6,7 @@ @dataclasses.dataclass class LoggingConfig: - default: str = dataclasses.field( - default_factory=lambda: env("LOG_CHANNEL", "stack") - ) + default: str = dataclasses.field(default_factory=lambda: env("LOG_CHANNEL", "stack")) channels: dict = dataclasses.field( default_factory=lambda: { diff --git a/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSingleDriver.py b/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSingleDriver.py index bb6bfb72..3490b272 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSingleDriver.py @@ -9,11 +9,7 @@ def __init__(self, *args, **kwargs): self.log = logging.getLogger("root") handler = logging.FileHandler(self.path, "a") - formatter = logging.Formatter( - "{} - %(levelname)s - %(message)s".format( - self.get_time().to_datetime_string() - ) - ) + formatter = logging.Formatter("{} - %(levelname)s - %(message)s".format(self.get_time().to_datetime_string())) handler.setFormatter(formatter) self.log.addHandler(handler) @@ -31,70 +27,40 @@ def change_format(self, changed_format): def emergency(self, message, *args, **kwargs): self.log.setLevel(logging.CRITICAL) - self.change_format( - "{} - {} - %(message)s".format( - self.get_time().to_datetime_string(), "EMERGENCY" - ) - ) + self.change_format("{} - {} - %(message)s".format(self.get_time().to_datetime_string(), "EMERGENCY")) return self.log.critical(message) def alert(self, message, *args, **kwargs): self.log.setLevel(logging.CRITICAL) - self.change_format( - "{} - {} - %(message)s".format( - self.get_time().to_datetime_string(), "ALERT" - ) - ) + self.change_format("{} - {} - %(message)s".format(self.get_time().to_datetime_string(), "ALERT")) return self.log.critical(message) def critical(self, message, *args, **kwargs): self.log.setLevel(logging.CRITICAL) - self.change_format( - "{} - {} - %(message)s".format( - self.get_time().to_datetime_string(), "CRITICAL" - ) - ) + self.change_format("{} - {} - %(message)s".format(self.get_time().to_datetime_string(), "CRITICAL")) return self.log.critical(message) def error(self, message, *args, **kwargs): self.log.setLevel(logging.ERROR) - self.change_format( - "{} - {} - %(message)s".format( - self.get_time().to_datetime_string(), "ERROR" - ) - ) + self.change_format("{} - {} - %(message)s".format(self.get_time().to_datetime_string(), "ERROR")) return self.log.error(message) def warning(self, message, *args, **kwargs): self.log.setLevel(logging.WARNING) - self.change_format( - "{} - {} - %(message)s".format( - self.get_time().to_datetime_string(), "WARNING" - ) - ) + self.change_format("{} - {} - %(message)s".format(self.get_time().to_datetime_string(), "WARNING")) return self.log.warning(message) def notice(self, message, *args, **kwargs): self.log.setLevel(logging.INFO) - self.change_format( - "{} - {} - %(message)s".format( - self.get_time().to_datetime_string(), "NOTICE" - ) - ) + self.change_format("{} - {} - %(message)s".format(self.get_time().to_datetime_string(), "NOTICE")) return self.log.info(message) def info(self, message, *args, **kwargs): self.log.setLevel(logging.INFO) - self.change_format( - "{} - {} - %(message)s".format(self.get_time().to_datetime_string(), "INFO") - ) + self.change_format("{} - {} - %(message)s".format(self.get_time().to_datetime_string(), "INFO")) return self.log.info(message) def debug(self, message, *args, **kwargs): self.log.setLevel(logging.DEBUG) - self.change_format( - "{} - {} - %(message)s".format( - self.get_time().to_datetime_string(), "DEBUG" - ) - ) + self.change_format("{} - {} - %(message)s".format(self.get_time().to_datetime_string(), "DEBUG")) return self.log.debug(message) diff --git a/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSlackDriver.py b/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSlackDriver.py index 257b9f3e..3d01b590 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSlackDriver.py @@ -66,9 +66,7 @@ def find_channel(self, name): Returns: self """ - response = requests.post( - "https://slack.com/api/channels.list", {"token": self.token} - ) + response = requests.post("https://slack.com/api/channels.list", {"token": self.token}) for channel in response.json()["channels"]: if channel["name"] == name.split("#")[1]: diff --git a/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py b/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py index a814065f..afb5d387 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py @@ -10,11 +10,7 @@ def __init__(self, *args, **kwargs): handler = logging.handlers.SysLogHandler(address=path) - formatter = logging.Formatter( - "{} - %(levelname)s - %(message)s".format( - self.get_time().to_datetime_string() - ) - ) + formatter = logging.Formatter("{} - %(levelname)s - %(message)s".format(self.get_time().to_datetime_string())) handler.setFormatter(formatter) self.log.addHandler(handler) diff --git a/fastapi_startkit/src/fastapi_startkit/logging/listeners.py b/fastapi_startkit/src/fastapi_startkit/logging/listeners.py index 97bdd2c5..77c72517 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/listeners.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/listeners.py @@ -8,6 +8,4 @@ def __init__(self, logger: Logger): self.logger = logger def handle(self, exception, file, line): - self.logger.error( - "{} in {} on line {}".format(exception.__class__.__name__, file, line) - ) + self.logger.error("{} in {} on line {}".format(exception.__class__.__name__, file, line)) diff --git a/fastapi_startkit/src/fastapi_startkit/logging/providers/log_provider.py b/fastapi_startkit/src/fastapi_startkit/logging/providers/log_provider.py index 94e531cf..338f5039 100644 --- a/fastapi_startkit/src/fastapi_startkit/logging/providers/log_provider.py +++ b/fastapi_startkit/src/fastapi_startkit/logging/providers/log_provider.py @@ -20,13 +20,7 @@ def register(self): self.app.bind("LoggingManager", LoggingManager(ChannelFactory, DriverFactory)) def boot(self): - self.publishes( - { - Path(__file__) - .resolve() - .parent.parent.joinpath("config/logging.py"): "config/logging.py" - } - ) + self.publishes({Path(__file__).resolve().parent.parent.joinpath("config/logging.py"): "config/logging.py"}) config = self.app.make("config") if not config.get("logging.default"): return diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/config.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/config.py index 2d6f2578..2a5228ff 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/config.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/config.py @@ -16,15 +16,11 @@ def load_config(config_path=None): os.environ["DB_CONFIG_PATH"] = selected_config_path # format path as python module if needed - selected_config_path = ( - selected_config_path.replace("/", ".").replace("\\", ".").rstrip(".py") - ) + selected_config_path = selected_config_path.replace("/", ".").replace("\\", ".").rstrip(".py") config_module = pydoc.locate(selected_config_path) if config_module is None: - raise ConfigurationNotFound( - f"ORM configuration file has not been found in {selected_config_path}" - ) + raise ConfigurationNotFound(f"ORM configuration file has not been found in {selected_config_path}") return config_module @@ -95,9 +91,7 @@ def db_url(database_url=None, prefix="", options={}, log_queries=False): # lookup specified driver driver = DRIVERS_MAP[url.scheme] - port = ( - str(url.port) if url.port and driver in [DRIVERS_MAP["mssql"]] else url.port - ) + port = str(url.port) if url.port and driver in [DRIVERS_MAP["mssql"]] else url.port # build final configuration config = { diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/factories/Factory.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/factories/Factory.py index 83f24115..aed8fcdb 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/factories/Factory.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/factories/Factory.py @@ -11,9 +11,7 @@ def faker(self): try: from faker import Faker except ImportError: - raise ImportError( - "Could not find the 'faker' library. Run 'pip install faker' to fix this." - ) + raise ImportError("Could not find the 'faker' library. Run 'pip install faker' to fix this.") if not Factory._faker: Factory._faker = Faker() diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/schema/Schema.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/schema/Schema.py index b6e0c4ab..3779ffcf 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/schema/Schema.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/schema/Schema.py @@ -98,9 +98,7 @@ def on(self, connection_key): if connection_detail: self._connection_driver = connection_detail.get("driver") else: - raise ConnectionNotRegistered( - f"Could not find the '{connection_key}' connection details" - ) + raise ConnectionNotRegistered(f"Could not find the '{connection_key}' connection details") self.connection_class = resolver._drivers.get(self._connection_driver) @@ -186,18 +184,12 @@ async def table(self, table): def get_connection_information(self): return { "host": self.connection_details.get(self.connection, {}).get("host"), - "database": self.connection_details.get(self.connection, {}).get( - "database" - ), + "database": self.connection_details.get(self.connection, {}).get("database"), "user": self.connection_details.get(self.connection, {}).get("user"), "port": self.connection_details.get(self.connection, {}).get("port"), - "password": self.connection_details.get(self.connection, {}).get( - "password" - ), + "password": self.connection_details.get(self.connection, {}).get("password"), "prefix": self.connection_details.get(self.connection, {}).get("prefix"), - "options": self.connection_details.get(self.connection, {}).get( - "options", {} - ), + "options": self.connection_details.get(self.connection, {}).get("options", {}), "full_details": self.connection_details.get(self.connection), } @@ -208,9 +200,7 @@ async def new_connection(self): # TODO: review if not self._connection: connection_details = self.get_connection_information().get("full_details") - self._connection = self.connection_class( - connection_details=connection_details, name=self.connection - ) + self._connection = self.connection_class(connection_details=connection_details, name=self.connection) if hasattr(self._connection, "set_schema"): self._connection.set_schema(self.schema) await self._connection.make_connection() @@ -235,9 +225,7 @@ async def has_column(self, table, column, query_only=False): return bool(await (await self.new_connection()).query(sql, ())) async def get_columns(self, table, dict=True): - table = self.platform().get_current_schema( - await self.new_connection(), table, schema=self.get_schema() - ) + table = self.platform().get_current_schema(await self.new_connection(), table, schema=self.get_schema()) result = {} if dict: for column in table.get_added_columns().items(): @@ -292,9 +280,7 @@ async def truncate(self, table, foreign_keys=False): def get_schema(self): """Gets the schema set on the migration class""" - return self.schema or self.get_connection_information().get("full_details").get( - "schema" - ) + return self.schema or self.get_connection_information().get("full_details").get("schema") async def get_all_tables(self): """Gets all tables in the database""" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeleteScope.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeleteScope.py index c53df3d1..2b6ea510 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeleteScope.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeleteScope.py @@ -24,9 +24,7 @@ def on_remove(self, builder): builder.remove_global_scope("_query_set_null_on_delete", action="delete") def _where_null(self, builder): - return builder.where_null( - f"{builder.get_table_name()}.{self.deleted_at_column}" - ) + return builder.where_null(f"{builder.get_table_name()}.{self.deleted_at_column}") def _with_trashed(self, model, builder): builder.remove_global_scope("_where_null", action="select") diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyScope.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyScope.py index 96e26b7c..30b4bee4 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyScope.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyScope.py @@ -7,9 +7,7 @@ class UUIDPrimaryKeyScope(BaseScope): """Global scope class to use UUID4 as primary key.""" def on_boot(self, builder): - builder.set_global_scope( - "_UUID_primary_key", self.set_uuid_create, action="insert" - ) + builder.set_global_scope("_UUID_primary_key", self.set_uuid_create, action="insert") builder.set_global_scope( "_UUID_primary_key", self.set_bulk_uuid_create, @@ -34,11 +32,7 @@ def generate_uuid(self, builder, uuid_version, bytes=False): def build_uuid_pk(self, builder): uuid_version = getattr(builder._model, "__uuid_version__", 4) uuid_bytes = getattr(builder._model, "__uuid_bytes__", False) - return { - builder._model.__primary_key__: self.generate_uuid( - builder, uuid_version, uuid_bytes - ) - } + return {builder._model.__primary_key__: self.generate_uuid(builder, uuid_version, uuid_bytes)} def set_uuid_create(self, builder): # if there is already a primary key, no need to set a new one diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/testing/BaseTestCaseSelectGrammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/testing/BaseTestCaseSelectGrammar.py index 7ca3a9db..b3035306 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/testing/BaseTestCaseSelectGrammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/testing/BaseTestCaseSelectGrammar.py @@ -25,205 +25,131 @@ def setUp(self): def test_can_compile_select(self): to_sql = self.builder.to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_order_by_and_first(self): to_sql = self.builder.order_by("id", "asc").first(query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_columns(self): to_sql = self.builder.select("username", "password").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_where(self): to_sql = self.builder.select("username", "password").where("id", 1).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_or_where(self): to_sql = self.builder.where("name", 2).or_where("name", 3).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_grouped_where(self): - to_sql = self.builder.where( - lambda query: query.where("age", 2).where("name", "Joe") - ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.where(lambda query: query.where("age", 2).where("name", "Joe")).to_sql() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_several_where(self): - to_sql = ( - self.builder.select("username", "password") - .where("id", 1) - .where("username", "joe") - .to_sql() - ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.select("username", "password").where("id", 1).where("username", "joe").to_sql() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_several_where_and_limit(self): - to_sql = ( - self.builder.select("username", "password") - .where("id", 1) - .where("username", "joe") - .limit(10) - .to_sql() - ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.select("username", "password").where("id", 1).where("username", "joe").limit(10).to_sql() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_sum(self): to_sql = self.builder.sum("age").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_max(self): to_sql = self.builder.max("age").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_max_and_columns(self): to_sql = self.builder.select("username").max("age").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_max_and_columns_different_order(self): to_sql = self.builder.max("age").select("username").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_order_by(self): to_sql = self.builder.select("username").order_by("age", "desc").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_multiple_order_by(self): - to_sql = ( - self.builder.select("username") - .order_by("age", "desc") - .order_by("name") - .to_sql() - ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.select("username").order_by("age", "desc").order_by("name").to_sql() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_with_group_by(self): to_sql = self.builder.select("username").group_by("age").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_where_in(self): to_sql = self.builder.select("username").where_in("age", [1, 2, 3]).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_where_in_empty(self): to_sql = self.builder.where_in("age", []).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_where_not_in(self): to_sql = self.builder.select("username").where_not_in("age", [1, 2, 3]).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_where_null(self): to_sql = self.builder.select("username").where_null("age").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_where_not_null(self): to_sql = self.builder.select("username").where_not_null("age").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_count(self): to_sql = self.builder.count("*").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_count_column(self): to_sql = self.builder.count("money").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_where_column(self): to_sql = self.builder.where_column("name", "email").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_sub_select(self): - to_sql = self.builder.where_in( - "name", self.builder.new().select("age") - ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.where_in("name", self.builder.new().select("age")).to_sql() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_complex_sub_select(self): to_sql = self.builder.where_in( "name", - ( - self.builder.new() - .select("age") - .where_in("email", self.builder.new().select("email")) - ), + (self.builder.new().select("age").where_in("email", self.builder.new().select("email"))), ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_sub_select_where(self): @@ -231,9 +157,7 @@ def test_can_compile_sub_select_where(self): "age", self.builder.new().select("age").where("age", 2).where("name", "Joe"), ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_sub_select_from_lambda(self): @@ -250,61 +174,41 @@ def test_can_compile_sub_select_from_lambda(self): def test_can_compile_sub_select_value(self): to_sql = self.builder.where("name", self.builder.new().sum("age")).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_exists(self): to_sql = ( - self.builder.select("age") - .where_exists(self.builder.new().select("username").where("age", 12)) - .to_sql() + self.builder.select("age").where_exists(self.builder.new().select("username").where("age", 12)).to_sql() ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_not_exists(self): to_sql = ( - self.builder.select("age") - .where_not_exists(self.builder.new().select("username").where("age", 12)) - .to_sql() + self.builder.select("age").where_not_exists(self.builder.new().select("username").where("age", 12)).to_sql() ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_having(self): to_sql = self.builder.sum("age").group_by("age").having("age").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_having_with_expression(self): to_sql = self.builder.sum("age").group_by("age").having("age", 10).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_having_with_greater_than_expression(self): to_sql = self.builder.sum("age").group_by("age").having("age", ">", 10).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_join(self): - to_sql = self.builder.join( - "contacts", "users.id", "=", "contacts.user_id" - ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.join("contacts", "users.id", "=", "contacts.user_id").to_sql() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_join_clause(self): @@ -317,50 +221,30 @@ def test_can_compile_join_clause(self): ) to_sql = self.builder.join(clause).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_join_clause_with_value(self): - clause = ( - JoinClause("report_groups as rg") - .on_value("bgt.active", "=", "1") - .or_on_value("bgt.acct", "=", "1234") - ) + clause = JoinClause("report_groups as rg").on_value("bgt.active", "=", "1").or_on_value("bgt.acct", "=", "1234") to_sql = self.builder.join(clause).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_join_clause_with_null(self): - clause = ( - JoinClause("report_groups as rg") - .on_null("bgt.acct") - .or_on_null("bgt.dept") - .on_value("rg.abc", 10) - ) + clause = JoinClause("report_groups as rg").on_null("bgt.acct").or_on_null("bgt.dept").on_value("rg.abc", 10) to_sql = self.builder.join(clause).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_join_clause_with_not_null(self): clause = ( - JoinClause("report_groups as rg") - .on_not_null("bgt.acct") - .or_on_not_null("bgt.dept") - .on_value("rg.abc", 10) + JoinClause("report_groups as rg").on_not_null("bgt.acct").or_on_not_null("bgt.dept").on_value("rg.abc", 10) ) to_sql = self.builder.join(clause).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_join_clause_with_lambda(self): @@ -369,9 +253,7 @@ def test_can_compile_join_clause_with_lambda(self): lambda clause: clause.on("bgt.fund", "=", "rg.fund").on_null("bgt"), ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_left_join_clause_with_lambda(self): @@ -380,9 +262,7 @@ def test_can_compile_left_join_clause_with_lambda(self): lambda clause: clause.on("bgt.fund", "=", "rg.fund").or_on_null("bgt"), ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_right_join_clause_with_lambda(self): @@ -391,18 +271,12 @@ def test_can_compile_right_join_clause_with_lambda(self): lambda clause: clause.on("bgt.fund", "=", "rg.fund").or_on_null("bgt"), ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_left_join(self): - to_sql = self.builder.left_join( - "contacts", "users.id", "=", "contacts.user_id" - ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.left_join("contacts", "users.id", "=", "contacts.user_id").to_sql() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_multiple_join(self): @@ -411,135 +285,93 @@ def test_can_compile_multiple_join(self): .join("posts", "comments.post_id", "=", "posts.id") .to_sql() ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_limit_and_offset(self): to_sql = self.builder.limit(10).offset(10).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_between(self): to_sql = self.builder.between("age", 18, 21).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_not_between(self): to_sql = self.builder.not_between("age", 18, 21).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_user_where_raw_and_where(self): - to_sql = ( - self.builder.where_raw("age = '18'").where("name", "=", "James").to_sql() - ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.where_raw("age = '18'").where("name", "=", "James").to_sql() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_where_raw_and_where_with_multiple_bindings(self): - query = self.builder.where_raw( - "`age` = ? AND `is_admin` = ?", [18, True] - ).where("email", "test@example.com") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + query = self.builder.where_raw("`age` = ? AND `is_admin` = ?", [18, True]).where("email", "test@example.com") + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(query.to_qmark(), sql) self.assertEqual(query._bindings, [18, True, "test@example.com"]) def test_can_compile_first_or_fail(self): - to_sql = ( - self.builder.where("is_admin", "=", True).first_or_fail(query=True).to_sql() - ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.where("is_admin", "=", True).first_or_fail(query=True).to_sql() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_where_like(self): to_sql = self.builder.where("age", "like", "%name%").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_where_regexp(self): to_sql = self.builder.where("age", "regexp", "Joe").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_where_exists_with_lambda(self): to_sql = self.builder.where_exists(lambda q: q.where("age", 1)).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() print(to_sql) self.assertEqual(to_sql, sql) def test_where_not_exists_with_lambda(self): to_sql = self.builder.where_not_exists(lambda q: q.where("age", 1)).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() print(to_sql) self.assertEqual(to_sql, sql) def test_where_not_regexp(self): to_sql = self.builder.where("age", "not regexp", "Joe").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_where_not_like(self): to_sql = self.builder.where("age", "not like", "%name%").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_shared_lock(self): to_sql = self.builder.where("votes", ">=", 100).shared_lock().to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_update_lock(self): to_sql = self.builder.where("votes", ">=", 100).lock_for_update().to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_where_date(self): to_sql = self.builder.where_date("created_at", "2022-06-01").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_or_where_null(self): to_sql = self.builder.where_null("column1").or_where_null("column2").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_select_distinct(self): to_sql = self.builder.select("group").distinct().to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/eagers/test_eager.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/eagers/test_eager.py index b162c180..759f64bb 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/eagers/test_eager.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/eagers/test_eager.py @@ -5,9 +5,7 @@ class TestEagerRelation(unittest.TestCase): def test_can_register_string_eager_load(self): - self.assertEqual( - EagerRelations().register("profile").get_eagers(), [["profile"]] - ) + self.assertEqual(EagerRelations().register("profile").get_eagers(), [["profile"]]) self.assertEqual(EagerRelations().register("profile").is_nested, False) self.assertEqual( EagerRelations().register("profile.user").get_eagers(), @@ -18,9 +16,7 @@ def test_can_register_string_eager_load(self): [{"profile": ["user", "logo"]}], ) self.assertEqual( - EagerRelations() - .register("profile.user", "profile.logo", "profile.bio") - .get_eagers(), + EagerRelations().register("profile.user", "profile.logo", "profile.bio").get_eagers(), [{"profile": ["user", "logo", "bio"]}], ) self.assertEqual( @@ -29,9 +25,7 @@ def test_can_register_string_eager_load(self): ) def test_can_register_tuple_eager_load(self): - self.assertEqual( - EagerRelations().register(("profile",)).get_eagers(), [["profile"]] - ) + self.assertEqual(EagerRelations().register(("profile",)).get_eagers(), [["profile"]]) self.assertEqual( EagerRelations().register(("profile", "user")).get_eagers(), [["profile", "user"]], @@ -42,9 +36,7 @@ def test_can_register_tuple_eager_load(self): ) def test_can_register_list_eager_load(self): - self.assertEqual( - EagerRelations().register(["profile"]).get_eagers(), [["profile"]] - ) + self.assertEqual(EagerRelations().register(["profile"]).get_eagers(), [["profile"]]) self.assertEqual( EagerRelations().register(["profile", "user"]).get_eagers(), [["profile", "user"]], @@ -62,8 +54,6 @@ def test_can_register_list_eager_load(self): [["logo"], {"profile": ["name"]}], ) self.assertEqual( - EagerRelations() - .register(["profile.name", "logo", "profile.user"]) - .get_eagers(), + EagerRelations().register(["profile.name", "logo", "profile.user"]).get_eagers(), [["logo"], {"profile": ["name", "user"]}], ) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/integrations/test_model.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/integrations/test_model.py index b516bd10..f6c7696e 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/integrations/test_model.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/integrations/test_model.py @@ -3,18 +3,14 @@ class TestModelCast(TestCase): - migration_directory = ( - "src/fastapi_startkit/masoniteorm/tests/integrations/databases/migrations" - ) + migration_directory = "src/fastapi_startkit/masoniteorm/tests/integrations/databases/migrations" async def test_database_is_isolated(self): user = await User.first() self.assertIsNone(user) async def test_first_record_can_be_fetch(self): - await User.create( - name="Joe", username="joe", email="joe@test.com", password="password" - ) + await User.create(name="Joe", username="joe", email="joe@test.com", password="password") user = await User.first() self.assertEqual(user.name, "Joe") diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/models/test_models.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/models/test_models.py index 59d7a65b..a1e518f7 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/models/test_models.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/models/test_models.py @@ -61,22 +61,14 @@ def test_model_can_access_str_dates_as_pendulum_from_correct_datetimes( ): model = ModelTest() - self.assertEqual( - model.get_new_date(datetime.datetime(2021, 1, 1, 7, 10)).hour, 7 - ) + self.assertEqual(model.get_new_date(datetime.datetime(2021, 1, 1, 7, 10)).hour, 7) self.assertEqual(model.get_new_date(datetime.date(2021, 1, 1)).hour, 0) self.assertEqual(model.get_new_date(datetime.time(1, 1, 1)).hour, 1) self.assertEqual(model.get_new_date("2020-11-28 11:42:07").hour, 11) def test_model_can_access_str_dates_on_relationships(self): model = ModelTest.hydrate({"user": "joe", "due_date": "2020-11-28 11:42:07"}) - model.add_relation( - { - "profile": ModelTest.hydrate( - {"name": "bob", "due_date": "2020-11-28 11:42:07"} - ) - } - ) + model.add_relation({"profile": ModelTest.hydrate({"name": "bob", "due_date": "2020-11-28 11:42:07"})}) self.assertEqual(model.profile.name, "bob") self.assertTrue(model.profile.due_date.is_past()) @@ -85,9 +77,7 @@ def test_model_original_and_dirty_attributes(self): model = ModelTest.hydrate({"username": "joe", "admin": True}) self.assertEqual(model.username, "joe") - self.assertEqual( - model.__original_attributes__, {"username": "joe", "admin": True} - ) + self.assertEqual(model.__original_attributes__, {"username": "joe", "admin": True}) model.username = "bob" @@ -97,9 +87,7 @@ def test_model_original_and_dirty_attributes(self): self.assertEqual(model.__dirty_attributes__["username"], "bob") self.assertEqual(model.get_dirty_keys(), ["username"]) self.assertTrue(model.is_dirty() is True) - self.assertEqual( - model.__original_attributes__, {"username": "joe", "admin": True} - ) + self.assertEqual(model.__original_attributes__, {"username": "joe", "admin": True}) def test_model_creates_when_new(self): model = ModelTest.hydrate({"id": 1, "username": "joe", "admin": True}) @@ -173,21 +161,15 @@ def test_model_can_cast_dict_attributes(self): self.assertEqual(type(model.d), Decimal) def test_valid_json_cast(self): - model = ModelTest.hydrate( - {"payload": {"this": "dict", "is": "usable", "as": "json"}} - ) + model = ModelTest.hydrate({"payload": {"this": "dict", "is": "usable", "as": "json"}}) self.assertEqual(type(model.payload), dict) - model = ModelTest.hydrate( - {"payload": {"this": "dict", "is": "invalid", "as": "json"}} - ) + model = ModelTest.hydrate({"payload": {"this": "dict", "is": "invalid", "as": "json"}}) self.assertEqual(type(model.payload), dict) - model = ModelTest.hydrate( - {"payload": '{"this": "dict", "is": "usable", "as": "json"}'} - ) + model = ModelTest.hydrate({"payload": '{"this": "dict", "is": "usable", "as": "json"}'}) self.assertEqual(type(model.payload), dict) @@ -204,9 +186,7 @@ def test_valid_json_cast(self): model.save() def test_model_update_without_changes(self): - model = ModelTest.hydrate( - {"id": 1, "username": "joe", "name": "Joe", "admin": True} - ) + model = ModelTest.hydrate({"id": 1, "username": "joe", "name": "Joe", "admin": True}) model.username = "joe" model.name = "Bill" @@ -215,9 +195,7 @@ def test_model_update_without_changes(self): self.assertNotIn("username", sql) def test_force_update_on_model_class(self): - model = ModelTestForced.hydrate( - {"id": 1, "username": "joe", "name": "Joe", "admin": True} - ) + model = ModelTestForced.hydrate({"id": 1, "username": "joe", "name": "Joe", "admin": True}) model.username = "joe" model.name = "Bill" @@ -227,17 +205,13 @@ def test_force_update_on_model_class(self): self.assertIn("name", sql) def test_only_method(self): - model = ModelTestForced.hydrate( - {"id": 1, "username": "joe", "name": "Joe", "admin": True} - ) + model = ModelTestForced.hydrate({"id": 1, "username": "joe", "name": "Joe", "admin": True}) self.assertEqual({"username": "joe"}, model.only("username")) self.assertEqual({"username": "joe"}, model.only(["username"])) def test_model_update_without_changes_at_all(self): - model = ModelTest.hydrate( - {"id": 1, "username": "joe", "name": "Joe", "admin": True} - ) + model = ModelTest.hydrate({"id": 1, "username": "joe", "name": "Joe", "admin": True}) model.username = "joe" model.name = "Joe" @@ -258,11 +232,7 @@ def test_model_using_or_where_and_chaining_wheres(self): sql = ( model.where("name", "=", "joe") - .or_where( - lambda query: query.where("username", "Joseph").or_where( - "age", ">=", 18 - ) - ) + .or_where(lambda query: query.where("username", "Joseph").or_where("age", ">=", 18)) .to_sql() ) @@ -302,9 +272,7 @@ def test_model_can_provide_default_select(self): ) def test_model_can_override_to_default_select(self): - sql = ModelWithBaseModel.select( - ["products.name", "products.id", "store.name"] - ).to_sql() + sql = ModelWithBaseModel.select(["products.name", "products.id", "store.name"]).to_sql() self.assertEqual( sql, """SELECT `products`.`name`, `products`.`id`, `store`.`name` FROM `users`""", diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder.py index 206f72b5..bdc51648 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder.py @@ -38,9 +38,7 @@ def test_sum(self): builder = self.get_builder() builder.sum("age") - self.assertEqual( - builder.to_sql(), "SELECT SUM([users].[age]) AS age FROM [users]" - ) + self.assertEqual(builder.to_sql(), "SELECT SUM([users].[age]) AS age FROM [users]") def test_where_like(self): builder = self.get_builder() @@ -64,25 +62,19 @@ def test_max(self): builder = self.get_builder() builder.max("age") - self.assertEqual( - builder.to_sql(), "SELECT MAX([users].[age]) AS age FROM [users]" - ) + self.assertEqual(builder.to_sql(), "SELECT MAX([users].[age]) AS age FROM [users]") def test_min(self): builder = self.get_builder() builder.min("age") - self.assertEqual( - builder.to_sql(), "SELECT MIN([users].[age]) AS age FROM [users]" - ) + self.assertEqual(builder.to_sql(), "SELECT MIN([users].[age]) AS age FROM [users]") def test_avg(self): builder = self.get_builder() builder.avg("age") - self.assertEqual( - builder.to_sql(), "SELECT AVG([users].[age]) AS age FROM [users]" - ) + self.assertEqual(builder.to_sql(), "SELECT AVG([users].[age]) AS age FROM [users]") def test_all(self): builder = self.get_builder() @@ -130,9 +122,7 @@ def test_select_raw(self): builder = self.get_builder() builder.select_raw("count(email) as email_count") - self.assertEqual( - builder.to_sql(), "SELECT count(email) as email_count FROM [users]" - ) + self.assertEqual(builder.to_sql(), "SELECT count(email) as email_count FROM [users]") def test_create(self): builder = self.get_builder().without_global_scopes() @@ -209,9 +199,7 @@ def test_right_join(self): ) def test_update(self): - builder = self.get_builder().update( - {"name": "Joe", "email": "joe@yopmail.com"}, dry=True - ) + builder = self.get_builder().update({"name": "Joe", "email": "joe@yopmail.com"}, dry=True) self.assertEqual( builder.to_sql(), "UPDATE [users] SET [users].[name] = 'Joe', [users].[email] = 'joe@yopmail.com'", @@ -234,9 +222,7 @@ def test_update(self): def test_count(self): builder = self.get_builder() builder.count("id") - self.assertEqual( - builder.to_sql(), "SELECT COUNT([users].[id]) AS id FROM [users]" - ) + self.assertEqual(builder.to_sql(), "SELECT COUNT([users].[id]) AS id FROM [users]") def test_order_by_asc(self): builder = self.get_builder() @@ -246,9 +232,7 @@ def test_order_by_asc(self): def test_order_by_desc(self): builder = self.get_builder() builder.order_by("email", "desc") - self.assertEqual( - builder.to_sql(), "SELECT * FROM [users] ORDER BY [email] DESC" - ) + self.assertEqual(builder.to_sql(), "SELECT * FROM [users] ORDER BY [email] DESC") def test_where_column(self): builder = self.get_builder() @@ -311,9 +295,7 @@ def test_where_not_null(self): def test_having(self): builder = self.get_builder(table="payments") - builder.select("user_id").avg("salary").group_by("user_id").having( - "salary", ">=", "1000" - ) + builder.select("user_id").avg("salary").group_by("user_id").having("salary", ">=", "1000") self.assertEqual( builder.to_sql(), @@ -400,12 +382,7 @@ def test_or_where(self): def test_can_call_with_schema(self): builder = self.get_builder() - sql = ( - builder.table("information_schema.columns") - .select("table_name") - .where("table_name", "users") - .to_sql() - ) + sql = builder.table("information_schema.columns").select("table_name").where("table_name", "users").to_sql() self.assertEqual( sql, """SELECT [information_schema].[columns].[table_name] FROM [information_schema].[columns] WHERE [information_schema].[columns].[table_name] = 'users'""", @@ -424,9 +401,7 @@ def test_truncate_without_foreign_keys(self): def test_latest(self): builder = self.get_builder() builder.latest("email") - self.assertEqual( - builder.to_sql(), "SELECT * FROM [users] ORDER BY [email] DESC" - ) + self.assertEqual(builder.to_sql(), "SELECT * FROM [users] ORDER BY [email] DESC") def test_latest_multiple(self): builder = self.get_builder() diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_delete_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_delete_grammar.py index 1e5007a0..07a44114 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_delete_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_delete_grammar.py @@ -15,15 +15,7 @@ def test_can_compile_delete(self): self.assertEqual(to_sql, sql) def test_can_compile_delete_with_where(self): - to_sql = ( - self.builder.where("age", 20) - .where("profile", 1) - .set_action("delete") - .delete(query=True) - .to_sql() - ) + to_sql = self.builder.where("age", 20).where("profile", 1).set_action("delete").delete(query=True).to_sql() - sql = ( - "DELETE FROM [users] WHERE [users].[age] = '20' AND [users].[profile] = '1'" - ) + sql = "DELETE FROM [users] WHERE [users].[age] = '20' AND [users].[profile] = '1'" self.assertEqual(to_sql, sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_insert_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_insert_grammar.py index 8980db78..ca69af6c 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_insert_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_insert_grammar.py @@ -29,9 +29,7 @@ def test_can_compile_bulk_create(self): self.assertEqual(to_sql, sql) def test_can_compile_bulk_create_qmark(self): - to_sql = self.builder.bulk_create( - [{"name": "Joe"}, {"name": "Bill"}, {"name": "John"}], query=True - ).to_qmark() + to_sql = self.builder.bulk_create([{"name": "Joe"}, {"name": "Bill"}, {"name": "John"}], query=True).to_qmark() sql = "INSERT INTO [users] ([name]) VALUES (?), (?), (?)" self.assertEqual(to_sql, sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_select_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_select_grammar.py index a0595df8..7860c318 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_select_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_select_grammar.py @@ -117,9 +117,7 @@ def can_compile_where_raw(self): return "SELECT * FROM [users] WHERE [users].[age] = '18'" def test_can_compile_where_raw_and_where_with_multiple_bindings(self): - query = self.builder.where_raw( - "[age] = ? AND [is_admin] = ?", [18, True] - ).where("email", "test@example.com") + query = self.builder.where_raw("[age] = ? AND [is_admin] = ?", [18, True]).where("email", "test@example.com") self.assertEqual( query.to_qmark(), "SELECT * FROM [users] WHERE [age] = ? AND [is_admin] = ? AND [users].[email] = ?", @@ -175,9 +173,7 @@ def can_compile_or_where(self): """ self.builder.where('name', 2).or_where('name', 3).to_sql() """ - return ( - "SELECT * FROM [users] WHERE [users].[name] = '2' OR [users].[name] = '3'" - ) + return "SELECT * FROM [users] WHERE [users].[name] = '2' OR [users].[name] = '3'" def can_grouped_where(self): """ @@ -304,21 +300,12 @@ def test_can_compile_where_raw(self): self.assertEqual(to_sql, "SELECT * FROM [users] WHERE [age] = '18'") def test_can_compile_having_raw(self): - to_sql = ( - self.builder.select_raw("COUNT(*) as counts") - .having_raw("counts > 10") - .to_sql() - ) - self.assertEqual( - to_sql, "SELECT COUNT(*) as counts FROM [users] HAVING counts > 10" - ) + to_sql = self.builder.select_raw("COUNT(*) as counts").having_raw("counts > 10").to_sql() + self.assertEqual(to_sql, "SELECT COUNT(*) as counts FROM [users] HAVING counts > 10") def test_can_compile_having_raw_order(self): to_sql = ( - self.builder.select_raw("COUNT(*) as counts") - .having_raw("counts > 10") - .order_by_raw("counts DESC") - .to_sql() + self.builder.select_raw("COUNT(*) as counts").having_raw("counts > 10").order_by_raw("counts DESC").to_sql() ) self.assertEqual( to_sql, @@ -327,16 +314,12 @@ def test_can_compile_having_raw_order(self): def test_can_compile_select_raw(self): to_sql = self.builder.select_raw("COUNT(*)").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_select_raw_with_select(self): to_sql = self.builder.select("id").select_raw("COUNT(*)").to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def can_compile_first_or_fail(self): @@ -397,7 +380,9 @@ def can_compile_join_clause_with_value(self): ) builder.join(clause).to_sql() """ - return "SELECT * FROM [users] INNER JOIN [report_groups] AS [rg] ON [bgt].[active] = '1' OR [bgt].[acct] = '1234'" + return ( + "SELECT * FROM [users] INNER JOIN [report_groups] AS [rg] ON [bgt].[active] = '1' OR [bgt].[acct] = '1234'" + ) def can_compile_join_clause_with_null(self): """ @@ -436,7 +421,9 @@ def can_compile_join_clause_with_lambda(self): ), ).to_sql() """ - return "SELECT * FROM [users] INNER JOIN [report_groups] AS [rg] ON [bgt].[fund] = [rg].[fund] AND [bgt] IS NULL" + return ( + "SELECT * FROM [users] INNER JOIN [report_groups] AS [rg] ON [bgt].[fund] = [rg].[fund] AND [bgt] IS NULL" + ) def can_compile_left_join_clause_with_lambda(self): """ @@ -491,9 +478,7 @@ def where_not_exists_with_lambda(self): return """SELECT * FROM [users] WHERE NOT EXISTS (SELECT * FROM [users] WHERE [users].[age] = '1')""" def where_date(self): - return ( - """SELECT * FROM [users] WHERE DATE([users].[created_at]) = '2022-06-01'""" - ) + return """SELECT * FROM [users] WHERE DATE([users].[created_at]) = '2022-06-01'""" def or_where_null(self): return """SELECT * FROM [users] WHERE [users].[column1] IS NULL OR [users].[column2] IS NULL""" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_update_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_update_grammar.py index 49c6e4ab..d9e3bbe6 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_update_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_update_grammar.py @@ -10,20 +10,13 @@ def setUp(self): self.builder = QueryBuilder(MSSQLGrammar, table="users") def test_can_compile_update(self): - to_sql = ( - self.builder.where("name", "bob").update({"name": "Joe"}, dry=True).to_sql() - ) + to_sql = self.builder.where("name", "bob").update({"name": "Joe"}, dry=True).to_sql() sql = "UPDATE [users] SET [users].[name] = 'Joe' WHERE [users].[name] = 'bob'" self.assertEqual(to_sql, sql) def test_can_compile_update_with_multiple_where(self): - to_sql = ( - self.builder.where("name", "bob") - .where("age", 20) - .update({"name": "Joe"}, dry=True) - .to_sql() - ) + to_sql = self.builder.where("name", "bob").where("age", 20).update({"name": "Joe"}, dry=True).to_sql() sql = "UPDATE [users] SET [users].[name] = 'Joe' WHERE [users].[name] = 'bob' AND [users].[age] = '20'" self.assertEqual(to_sql, sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder.py index 4205bc7e..78a1c0c1 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder.py @@ -169,9 +169,7 @@ def test_can_advanced_table_creation2(self): blueprint.string("thumbnail").nullable() blueprint.integer("premium") blueprint.integer("author_id").unsigned().nullable() - blueprint.foreign("author_id").references("id").on("users").on_delete( - "CASCADE" - ) + blueprint.foreign("author_id").references("id").on("users").on_delete("CASCADE") blueprint.text("description") blueprint.timestamps() @@ -192,9 +190,7 @@ def test_can_advanced_table_creation2(self): def test_can_add_columns_with_foreign_key_constraint_name(self): with self.schema.create("users") as blueprint: blueprint.integer("profile_id") - blueprint.foreign("profile_id", name="profile_foreign").references("id").on( - "profiles" - ) + blueprint.foreign("profile_id", name="profile_foreign").references("id").on("profiles") self.assertEqual(len(blueprint.table.added_columns), 1) self.assertEqual( diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder_alter.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder_alter.py index f1b323e2..e98d1766 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder_alter.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder_alter.py @@ -26,9 +26,7 @@ def test_can_add_columns(self): self.assertEqual(len(blueprint.table.added_columns), 2) - sql = [ - "ALTER TABLE [users] ADD [name] VARCHAR(255) NOT NULL, [age] INT NOT NULL" - ] + sql = ["ALTER TABLE [users] ADD [name] VARCHAR(255) NOT NULL, [age] INT NOT NULL"] self.assertEqual(blueprint.to_sql(), sql) @@ -81,9 +79,7 @@ def test_alter_drop1(self): def test_alter_add_column_and_foreign_key(self): with self.schema.table("users") as blueprint: blueprint.unsigned_integer("playlist_id").nullable() - blueprint.foreign("playlist_id").references("id").on("playlists").on_delete( - "cascade" - ) + blueprint.foreign("playlist_id").references("id").on("playlists").on_delete("cascade") sql = [ "ALTER TABLE [users] ADD [playlist_id] INT NULL", @@ -132,9 +128,7 @@ def test_alter_add_primary(self): with self.schema.table("users") as blueprint: blueprint.primary("playlist_id") - sql = [ - "ALTER TABLE [users] ADD CONSTRAINT users_playlist_id_primary PRIMARY KEY (playlist_id)" - ] + sql = ["ALTER TABLE [users] ADD CONSTRAINT users_playlist_id_primary PRIMARY KEY (playlist_id)"] self.assertEqual(blueprint.to_sql(), sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_mysql_builder_transaction.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_mysql_builder_transaction.py index 9ee7950a..67f3de9a 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_mysql_builder_transaction.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_mysql_builder_transaction.py @@ -18,9 +18,7 @@ class BaseTestQueryRelationships(unittest.TestCase): def get_builder(self, table="users"): connection = ConnectionFactory().make("mysql") - return QueryBuilder( - grammar=MySQLGrammar, connection=connection, table=table - ).on("mysql") + return QueryBuilder(grammar=MySQLGrammar, connection=connection, table=table).on("mysql") def test_transaction(self): builder = self.get_builder() diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder.py index 6bbd662b..b274311b 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder.py @@ -41,94 +41,72 @@ def test_sum(self): builder = self.get_builder() builder.sum("age") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_sum_chained(self): builder = self.get_builder() builder.sum("age").max("salary") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_with_(self): builder = self.get_builder() builder.with_("articles").sum("age") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_like(self): builder = self.get_builder() builder.where("age", "like", "%name%") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_not_like(self): builder = self.get_builder() builder.where("age", "not like", "%name%") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_max(self): builder = self.get_builder() builder.max("age") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_min(self): builder = self.get_builder() builder.min("age") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_avg(self): builder = self.get_builder() builder.avg("age") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_all(self): builder = self.get_builder() builder.all() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_get(self): builder = self.get_builder() builder.get() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_first(self): builder = self.get_builder().first(query=True) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_find_with_model(self): @@ -172,41 +150,31 @@ def test_find_with_builder_without_column(self): def test_select(self): builder = self.get_builder() builder.select("name", "email") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_select_with_table(self): builder = self.get_builder() builder.select("users.*") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_select_with_table_raw(self): builder = self.get_builder() builder.select("users.*").from_raw("orders, customers") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_select_with_alias(self): builder = self.get_builder() builder.select("users.username as name") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_select_raw(self): builder = self.get_builder() builder.select_raw("count(email) as email_count") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_add_select(self): @@ -217,9 +185,7 @@ def test_add_select(self): .add_select("salary", lambda q: q.count("*").table("salary")) .to_sql() ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_add_select_no_table(self): @@ -235,9 +201,7 @@ def test_add_select_no_table(self): ) .to_sql() ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_create(self): @@ -246,82 +210,60 @@ def test_create(self): {"name": "Corentin All", "email": "corentin@yopmail.com"}, query=True, ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_delete(self): builder = self.get_builder() builder.delete("name", "Joe", query=True) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where(self): builder = self.get_builder() builder.where("name", "Joe") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_exists(self): builder = self.get_builder() builder.where_exists("name") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_limit(self): builder = self.get_builder() builder.limit(5) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_offset(self): builder = self.get_builder() builder.offset(5) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_join(self): builder = self.get_builder() builder.join("profiles", "users.id", "=", "profiles.user_id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_left_join(self): builder = self.get_builder() builder.left_join("profiles", "users.id", "=", "profiles.user_id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_right_join(self): builder = self.get_builder() builder.right_join("profiles", "users.id", "=", "profiles.user_id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_update(self): - builder = self.get_builder().update( - {"name": "Joe", "email": "joe@yopmail.com"}, dry=True - ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + builder = self.get_builder().update({"name": "Joe", "email": "joe@yopmail.com"}, dry=True) + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) # def test_increment(self): @@ -343,104 +285,78 @@ def test_update(self): def test_count(self): builder = self.get_builder() builder.count("id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_order_by_asc(self): builder = self.get_builder() builder.order_by("email", "asc") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_order_by_desc(self): builder = self.get_builder() builder.order_by("email", "desc") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_column(self): builder = self.get_builder() builder.where_column("name", "username") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_not_in(self): builder = self.get_builder() builder.where_not_in("id", [1, 2, 3]) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_between(self): builder = self.get_builder() builder.between("id", 2, 5) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_not_between(self): builder = self.get_builder() builder.not_between("id", 2, 5) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_in(self): builder = self.get_builder() builder.where_in("id", [1, 2, 3]) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_null(self): builder = self.get_builder() builder.where_null("name") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_not_null(self): builder = self.get_builder() builder.where_not_null("name") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_having(self): builder = self.get_builder(table="payments") - builder.select("user_id").avg("salary").group_by("user_id").having( - "salary", ">=", "1000" - ) + builder.select("user_id").avg("salary").group_by("user_id").having("salary", ">=", "1000") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_group_by(self): builder = self.get_builder(table="payments") builder.select("user_id").min("salary").group_by("user_id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_builder_alone(self): @@ -467,57 +383,43 @@ def test_builder_alone(self): def test_where_lt(self): builder = self.get_builder() builder.where("age", "<", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_lte(self): builder = self.get_builder() builder.where("age", "<=", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_gt(self): builder = self.get_builder() builder.where("age", ">", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_gte(self): builder = self.get_builder() builder.where("age", ">=", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_ne(self): builder = self.get_builder() builder.where("age", "!=", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_or_where(self): builder = self.get_builder() builder.where("age", "20").or_where("age", "<", 20) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_or_where(self): builder = self.get_builder() builder.where("age", "20").or_where("age", "<", 20) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_like_as_operator(self): @@ -546,12 +448,7 @@ def test_where_not_like(self): def test_can_call_with_multi_tables(self): builder = self.get_builder() - sql = ( - builder.table("information_schema.columns") - .select("table_name") - .where("table_name", "users") - .to_sql() - ) + sql = builder.table("information_schema.columns").select("table_name").where("table_name", "users").to_sql() self.assertEqual( sql, """SELECT `information_schema`.`columns`.`table_name` FROM `information_schema`.`columns` WHERE `information_schema`.`columns`.`table_name` = 'users'""", @@ -560,33 +457,25 @@ def test_can_call_with_multi_tables(self): def test_truncate(self): builder = self.get_builder(dry=True) sql = builder.truncate() - sql_ref = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql_ref = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(sql, sql_ref) def test_truncate_without_foreign_keys(self): builder = self.get_builder(dry=True) sql = builder.truncate(foreign_keys=True) - sql_ref = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql_ref = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(sql, sql_ref) def test_shared_lock(self): builder = self.get_builder(dry=True) sql = builder.where("votes", ">=", 100).shared_lock().to_sql() - sql_ref = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql_ref = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(sql, sql_ref) def test_update_lock(self): builder = self.get_builder(dry=True) sql = builder.where("votes", ">=", 100).lock_for_update().to_sql() - sql_ref = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql_ref = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(sql, sql_ref) @@ -899,9 +788,7 @@ def or_where(self): builder = self.get_builder() builder.where('age', '20').or_where('age','<', 20) """ - return ( - "SELECT * FROM `users` WHERE `users`.`age` = '20' OR `users`.`age` < '20'" - ) + return "SELECT * FROM `users` WHERE `users`.`age` = '20' OR `users`.`age` < '20'" def where_like(self): """ @@ -952,17 +839,13 @@ def update_lock(self): def test_latest(self): builder = self.get_builder() builder.latest("email") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_oldest(self): builder = self.get_builder() builder.oldest("email") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def latest(self): diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder_scopes.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder_scopes.py index 50339a02..bba513a3 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder_scopes.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder_scopes.py @@ -21,9 +21,7 @@ def get_builder(self, table="users"): ) def test_scopes(self): - builder = self.get_builder().set_scope( - "gender", lambda model, q: q.where("gender", "w") - ) + builder = self.get_builder().set_scope("gender", lambda model, q: q.where("gender", "w")) self.assertEqual( builder.gender().where("id", 1).to_sql(), @@ -51,11 +49,7 @@ def test_global_scope_from_class(self): ) def test_global_scope_remove_from_class(self): - builder = ( - self.get_builder() - .set_global_scope(SoftDeleteScope()) - .remove_global_scope(SoftDeleteScope()) - ) + builder = self.get_builder().set_global_scope(SoftDeleteScope()).remove_global_scope(SoftDeleteScope()) self.assertEqual( builder.where("id", 1).to_sql(), diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_delete_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_delete_grammar.py index c17acee7..93a73a94 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_delete_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_delete_grammar.py @@ -12,31 +12,19 @@ def setUp(self): def test_can_compile_delete(self): to_sql = self.builder.delete("id", 1, query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_delete_in(self): to_sql = self.builder.delete("id", [1, 2, 3], query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_delete_with_where(self): - to_sql = ( - self.builder.where("age", 20) - .where("profile", 1) - .set_action("delete") - .delete(query=True) - .to_sql() - ) + to_sql = self.builder.where("age", 20).where("profile", 1).set_action("delete").delete(query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) @@ -74,6 +62,4 @@ def can_compile_delete_with_where(self): .to_sql() ) """ - return ( - "DELETE FROM `users` WHERE `users`.`age` = '20' AND `users`.`profile` = '1'" - ) + return "DELETE FROM `users` WHERE `users`.`age` = '20' AND `users`.`profile` = '1'" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_insert_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_insert_grammar.py index 0089ba2c..7d3e727b 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_insert_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_insert_grammar.py @@ -12,17 +12,13 @@ def setUp(self): def test_can_compile_insert(self): to_sql = self.builder.create({"name": "Joe"}, query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_insert_with_keywords(self): to_sql = self.builder.create(name="Joe", query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_bulk_create(self): @@ -36,19 +32,13 @@ def test_can_compile_bulk_create(self): query=True, ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_bulk_create_qmark(self): - to_sql = self.builder.bulk_create( - [{"name": "Joe"}, {"name": "Bill"}, {"name": "John"}], query=True - ).to_qmark() + to_sql = self.builder.bulk_create([{"name": "Joe"}, {"name": "Bill"}, {"name": "John"}], query=True).to_qmark() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_bulk_create_multiple(self): @@ -61,9 +51,7 @@ def test_can_compile_bulk_create_multiple(self): query=True, ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_qmark.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_qmark.py index f276101d..532a22cf 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_qmark.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_qmark.py @@ -12,104 +12,78 @@ def setUp(self): def test_can_compile_select(self): mark = self.builder.select("username").where("name", "Joe") - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(mark.to_qmark(), sql) self.assertEqual(mark._bindings, bindings) def test_can_compile_delete(self): mark = self.builder.where("name", "Joe").delete(query=True) - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(mark.to_qmark(), sql) self.assertEqual(mark._bindings, bindings) def test_can_compile_update(self): mark = self.builder.update({"name": "Bob"}, dry=True).where("name", "Joe") - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(mark.to_qmark(), sql) self.assertEqual(mark._bindings, bindings) def test_can_compile_where_in(self): mark = self.builder.where_in("id", [1, 2, 3]) - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(mark.to_qmark(), sql) self.assertEqual(mark._bindings, bindings) def test_can_compile_where_not_null(self): mark = self.builder.where_not_null("id") - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(mark.to_qmark(), sql) self.assertEqual(mark._bindings, []) def test_can_compile_where_with_falsy_values(self): mark = self.builder.where("name", 0) - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(mark.to_qmark(), sql) self.assertEqual(mark._bindings, bindings) def test_can_compile_where_with_true_value(self): mark = self.builder.where("is_admin", True) - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(mark.to_qmark(), sql) self.assertEqual(mark._bindings, bindings) def test_can_compile_where_with_false_value(self): mark = self.builder.where("is_admin", False) - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(mark.to_qmark(), sql) self.assertEqual(mark._bindings, bindings) def test_can_compile_sub_group_bindings(self): mark = self.builder.where( - lambda query: ( - query.where("challenger", 1) - .or_where("proposer", 1) - .or_where("referee", 1) - ) + lambda query: query.where("challenger", 1).or_where("proposer", 1).or_where("referee", 1) ) - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(mark.to_qmark(), sql) self.assertEqual(mark._bindings, bindings) def test_can_increment(self): builder = self.builder.increment("age", dry=True) - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_qmark(), sql) self.assertEqual(builder._bindings, bindings) def test_can_decrement(self): builder = self.builder.decrement("age", dry=True) - sql, bindings = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql, bindings = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_qmark(), sql) self.assertEqual(builder._bindings, bindings) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_select_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_select_grammar.py index a87dd772..0d6ccb2c 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_select_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_select_grammar.py @@ -176,9 +176,7 @@ def can_compile_or_where(self): """ self.builder.where('name', 2).or_where('name', 3).to_sql() """ - return ( - "SELECT * FROM `users` WHERE `users`.`name` = '2' OR `users`.`name` = '3'" - ) + return "SELECT * FROM `users` WHERE `users`.`name` = '2' OR `users`.`name` = '3'" def can_grouped_where(self): """ @@ -299,21 +297,12 @@ def test_can_compile_where_raw(self): self.assertEqual(to_sql, "SELECT * FROM `users` WHERE `age` = '18'") def test_can_compile_having_raw(self): - to_sql = ( - self.builder.select_raw("COUNT(*) as counts") - .having_raw("counts > 10") - .to_sql() - ) - self.assertEqual( - to_sql, "SELECT COUNT(*) as counts FROM `users` HAVING counts > 10" - ) + to_sql = self.builder.select_raw("COUNT(*) as counts").having_raw("counts > 10").to_sql() + self.assertEqual(to_sql, "SELECT COUNT(*) as counts FROM `users` HAVING counts > 10") def test_can_compile_having_raw_order(self): to_sql = ( - self.builder.select_raw("COUNT(*) as counts") - .having_raw("counts > 10") - .order_by_raw("counts DESC") - .to_sql() + self.builder.select_raw("COUNT(*) as counts").having_raw("counts > 10").order_by_raw("counts DESC").to_sql() ) self.assertEqual( to_sql, @@ -386,7 +375,9 @@ def can_compile_join_clause_with_value(self): ) builder.join(clause).to_sql() """ - return "SELECT * FROM `users` INNER JOIN `report_groups` AS `rg` ON `bgt`.`active` = '1' OR `bgt`.`acct` = '1234'" + return ( + "SELECT * FROM `users` INNER JOIN `report_groups` AS `rg` ON `bgt`.`active` = '1' OR `bgt`.`acct` = '1234'" + ) def can_compile_join_clause_with_null(self): """ @@ -425,7 +416,9 @@ def can_compile_join_clause_with_lambda(self): ), ).to_sql() """ - return "SELECT * FROM `users` INNER JOIN `report_groups` AS `rg` ON `bgt`.`fund` = `rg`.`fund` AND `bgt` IS NULL" + return ( + "SELECT * FROM `users` INNER JOIN `report_groups` AS `rg` ON `bgt`.`fund` = `rg`.`fund` AND `bgt` IS NULL" + ) def can_compile_left_join_clause_with_lambda(self): """ @@ -480,9 +473,7 @@ def where_not_exists_with_lambda(self): return """SELECT * FROM `users` WHERE NOT EXISTS (SELECT * FROM `users` WHERE `users`.`age` = '1')""" def where_date(self): - return ( - """SELECT * FROM `users` WHERE DATE(`users`.`created_at`) = '2022-06-01'""" - ) + return """SELECT * FROM `users` WHERE DATE(`users`.`created_at`) = '2022-06-01'""" def or_where_null(self): return """SELECT * FROM `users` WHERE `users`.`column1` IS NULL OR `users`.`column2` IS NULL""" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_update_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_update_grammar.py index 0212ec8f..713410b8 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_update_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_update_grammar.py @@ -11,36 +11,21 @@ def setUp(self): self.builder = QueryBuilder(self.grammar, table="users") def test_can_compile_update(self): - to_sql = ( - self.builder.where("name", "bob").update({"name": "Joe"}, dry=True).to_sql() - ) + to_sql = self.builder.where("name", "bob").update({"name": "Joe"}, dry=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_multiple_update(self): - to_sql = self.builder.update( - {"name": "Joe", "email": "user@email.com"}, dry=True - ).to_sql() + to_sql = self.builder.update({"name": "Joe", "email": "user@email.com"}, dry=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_update_with_multiple_where(self): - to_sql = ( - self.builder.where("name", "bob") - .where("age", 20) - .update({"name": "Joe"}, dry=True) - .to_sql() - ) - - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.where("name", "bob").where("age", 20).update({"name": "Joe"}, dry=True).to_sql() + + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) # def test_can_compile_increment(self): @@ -62,9 +47,7 @@ def test_can_compile_update_with_multiple_where(self): def test_raw_expression(self): to_sql = self.builder.update({"name": Raw("`username`")}, dry=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_accessors_and_mutators.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_accessors_and_mutators.py index 609785b2..c18f25a7 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_accessors_and_mutators.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_accessors_and_mutators.py @@ -22,9 +22,7 @@ def set_name_attribute(self, attribute): class TestAccessor(unittest.TestCase): def test_can_get_accessor(self): - user = User.hydrate( - {"name": "joe", "email": "joe@masoniteproject.com", "is_admin": 1} - ) + user = User.hydrate({"name": "joe", "email": "joe@masoniteproject.com", "is_admin": 1}) self.assertEqual(user.email, "joe@masoniteproject.com") self.assertEqual(user.name, "Hello, joe") self.assertTrue(user.is_admin is True, f"{user.is_admin} is not True") diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_model.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_model.py index 60a06502..daacb17d 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_model.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_model.py @@ -79,18 +79,12 @@ class ProductNames(Model): class TestModel(unittest.TestCase): def test_create_can_use_fillable(self): - sql = ProfileFillable.create( - {"name": "Joe", "email": "user@example.com"}, query=True - ).to_sql() + sql = ProfileFillable.create({"name": "Joe", "email": "user@example.com"}, query=True).to_sql() - self.assertEqual( - sql, "INSERT INTO `profiles` (`profiles`.`name`) VALUES ('Joe')" - ) + self.assertEqual(sql, "INSERT INTO `profiles` (`profiles`.`name`) VALUES ('Joe')") def test_create_can_use_fillable_asterisk(self): - sql = ProfileFillAsterisk.create( - {"name": "Joe", "email": "user@example.com"}, query=True - ).to_sql() + sql = ProfileFillAsterisk.create({"name": "Joe", "email": "user@example.com"}, query=True).to_sql() self.assertEqual( sql, @@ -98,18 +92,12 @@ def test_create_can_use_fillable_asterisk(self): ) def test_create_can_use_guarded(self): - sql = ProfileGuarded.create( - {"name": "Joe", "email": "user@example.com"}, query=True - ).to_sql() + sql = ProfileGuarded.create({"name": "Joe", "email": "user@example.com"}, query=True).to_sql() - self.assertEqual( - sql, "INSERT INTO `profiles` (`profiles`.`name`) VALUES ('Joe')" - ) + self.assertEqual(sql, "INSERT INTO `profiles` (`profiles`.`name`) VALUES ('Joe')") def test_create_can_use_guarded_asterisk(self): - sql = ProfileGuardedAsterisk.create( - {"name": "Joe", "email": "user@example.com"}, query=True - ).to_sql() + sql = ProfileGuardedAsterisk.create({"name": "Joe", "email": "user@example.com"}, query=True).to_sql() # An asterisk guarded attribute excludes all fields from mass-assignment. # This would raise a DB error if there are any required fields. @@ -169,14 +157,10 @@ def test_bulk_create_can_use_guarded_asterisk(self): # An asterisk guarded attribute excludes all fields from mass-assignment. # This would obviously raise an invalid SQL syntax error. # TODO: Raise a clearer error? - self.assertEqual( - query_builder.to_sql(), "INSERT INTO `profiles` () VALUES (), ()" - ) + self.assertEqual(query_builder.to_sql(), "INSERT INTO `profiles` () VALUES (), ()") def test_update_can_use_fillable(self): - query_builder = ProfileFillable().update( - {"name": "Joe", "email": "user@example.com"}, dry=True - ) + query_builder = ProfileFillable().update({"name": "Joe", "email": "user@example.com"}, dry=True) self.assertEqual( query_builder.to_sql(), @@ -184,9 +168,7 @@ def test_update_can_use_fillable(self): ) def test_update_can_use_fillable_asterisk(self): - query_builder = ProfileFillAsterisk().update( - {"name": "Joe", "email": "user@example.com"}, dry=True - ) + query_builder = ProfileFillAsterisk().update({"name": "Joe", "email": "user@example.com"}, dry=True) self.assertEqual( query_builder.to_sql(), @@ -194,9 +176,7 @@ def test_update_can_use_fillable_asterisk(self): ) def test_update_can_use_guarded(self): - query_builder = ProfileGuarded().update( - {"name": "Joe", "email": "user@example.com"}, dry=True - ) + query_builder = ProfileGuarded().update({"name": "Joe", "email": "user@example.com"}, dry=True) self.assertEqual( query_builder.to_sql(), @@ -206,9 +186,7 @@ def test_update_can_use_guarded(self): def test_update_can_use_guarded_asterisk(self): profile = ProfileGuardedAsterisk() initial_sql = profile.get_builder().to_sql() - query_builder = profile.update( - {"name": "Joe", "email": "user@example.com"}, dry=True - ) + query_builder = profile.update({"name": "Joe", "email": "user@example.com"}, dry=True) # An asterisk guarded attribute excludes all fields from mass-assignment. # The query builder's sql should not have been altered in any way. @@ -235,9 +213,7 @@ def test_json(self): self.assertEqual(profile.to_json(), '{"name": "Joe", "id": 1}') def test_serialize_with_hidden(self): - profile = ProfileSerialize.hydrate( - {"name": "Joe", "id": 1, "password": "secret"} - ) + profile = ProfileSerialize.hydrate({"name": "Joe", "id": 1, "password": "secret"}) self.assertTrue(profile.serialize().get("name")) self.assertTrue(profile.serialize().get("id")) @@ -252,9 +228,7 @@ def test_serialize_with_visible(self): "email": "joe@masonite.com", } ) - self.assertTrue( - {"name": "Joe", "email": "joe@masonite.com"}, profile.serialize() - ) + self.assertTrue({"name": "Joe", "email": "joe@masonite.com"}, profile.serialize()) def test_serialize_with_visible_and_hidden_raise_error(self): profile = ProfileSerializeWithVisibleAndHidden.hydrate( diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_belongs_to_many.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_belongs_to_many.py index 69494f9b..f28055e9 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_belongs_to_many.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_belongs_to_many.py @@ -47,9 +47,7 @@ class MySQLRelationships(unittest.TestCase): maxDiff = None def test_belongs_to_many(self): - sql = Permission.where_has( - "role", lambda query: query.where("slug", "users") - ).to_sql() + sql = Permission.where_has("role", lambda query: query.where("slug", "users")).to_sql() self.assertEqual( sql, @@ -74,9 +72,7 @@ def test_belongs_to_many_or_has(self): def test_belongs_to_many_or_where_has(self): sql = ( - Role.where("name", "role_name") - .or_where_has("permissions", lambda q: q.where("permission_id", 1)) - .to_sql() + Role.where("name", "role_name").or_where_has("permissions", lambda q: q.where("permission_id", 1)).to_sql() ) self.assertEqual( @@ -95,9 +91,7 @@ def test_belongs_to_many_or_doesnt_have(self): def test_where_doesnt_have(self): sql = ( Role.where("name", "role_name") - .where_doesnt_have( - "permissions", lambda q: q.where("name", "Creates Users") - ) + .where_doesnt_have("permissions", lambda q: q.where("name", "Creates Users")) .to_sql() ) @@ -109,9 +103,7 @@ def test_where_doesnt_have(self): def test_or_where_doesnt_have(self): sql = ( Role.where("name", "role_name") - .or_where_doesnt_have( - "permissions", lambda q: q.where("name", "Creates Users") - ) + .or_where_doesnt_have("permissions", lambda q: q.where("name", "Creates Users")) .to_sql() ) @@ -121,9 +113,7 @@ def test_or_where_doesnt_have(self): ) def test_belongs_to_many_where_has(self): - sql = Role.where_has( - "permissions", lambda q: q.where("name", "Creates Users") - ).to_sql() + sql = Role.where_has("permissions", lambda q: q.where("name", "Creates Users")).to_sql() self.assertEqual( sql, diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_many_through.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_many_through.py index 3c6d5b7e..f4f93bc3 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_many_through.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_many_through.py @@ -43,9 +43,7 @@ def test_or_has(self): ) def test_where_has_query(self): - sql = InboundShipment.where_has( - "from_country", lambda query: query.where("name", "USA") - ).to_sql() + sql = InboundShipment.where_has("from_country", lambda query: query.where("name", "USA")).to_sql() self.assertEqual( sql, @@ -75,9 +73,7 @@ def test_doesnt_have(self): def test_or_where_doesnt_have(self): sql = ( InboundShipment.where("name", "Joe") - .or_where_doesnt_have( - "from_country", lambda query: query.where("name", "USA") - ) + .or_where_doesnt_have("from_country", lambda query: query.where("name", "USA")) .to_sql() ) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_one_through.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_one_through.py index 4337dc83..73fdadaa 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_one_through.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_one_through.py @@ -43,9 +43,7 @@ def test_or_has(self): ) def test_where_has_query(self): - sql = InboundShipment.where_has( - "from_country", lambda query: query.where("name", "USA") - ).to_sql() + sql = InboundShipment.where_has("from_country", lambda query: query.where("name", "USA")).to_sql() self.assertEqual( sql, @@ -75,9 +73,7 @@ def test_doesnt_have(self): def test_or_where_doesnt_have(self): sql = ( InboundShipment.where("name", "Joe") - .or_where_doesnt_have( - "from_country", lambda query: query.where("name", "USA") - ) + .or_where_doesnt_have("from_country", lambda query: query.where("name", "USA")) .to_sql() ) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_relationships.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_relationships.py index a1eddcf0..d0d742bb 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_relationships.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_relationships.py @@ -60,11 +60,7 @@ def test_or_has_nested(self): ) def test_relationship_where_has(self): - sql = ( - User.where("name", "Joe") - .where_has("profile", lambda q: q.where("profile_id", 1)) - .to_sql() - ) + sql = User.where("name", "Joe").where_has("profile", lambda q: q.where("profile_id", 1)).to_sql() self.assertEqual( sql, @@ -87,11 +83,7 @@ def test_relationship_where_has_nested(self): ) def test_relationship_or_where_has(self): - sql = ( - User.where("name", "Joe") - .or_where_has("profile", lambda q: q.where("profile_id", 1)) - .to_sql() - ) + sql = User.where("name", "Joe").or_where_has("profile", lambda q: q.where("profile_id", 1)).to_sql() self.assertEqual( sql, @@ -130,9 +122,7 @@ def test_relationship_doesnt_have_nested(self): ) def test_relationship_where_doesnt_have(self): - sql = User.where_doesnt_have( - "profile", lambda q: q.where("profile_id", 1) - ).to_sql() + sql = User.where_doesnt_have("profile", lambda q: q.where("profile_id", 1)).to_sql() self.assertEqual( sql, @@ -140,9 +130,7 @@ def test_relationship_where_doesnt_have(self): ) def test_relationship_where_doesnt_have_nested(self): - sql = User.where_doesnt_have( - "profile.identification", lambda q: q.where("identification_id", 1) - ).to_sql() + sql = User.where_doesnt_have("profile.identification", lambda q: q.where("identification_id", 1)).to_sql() self.assertEqual( sql, @@ -150,9 +138,7 @@ def test_relationship_where_doesnt_have_nested(self): ) def test_relationship_or_where_doesnt_have(self): - sql = User.or_where_doesnt_have( - "profile", lambda q: q.where("profile_id", 1) - ).to_sql() + sql = User.or_where_doesnt_have("profile", lambda q: q.where("profile_id", 1)).to_sql() self.assertEqual( sql, @@ -160,9 +146,7 @@ def test_relationship_or_where_doesnt_have(self): ) def test_relationship_or_where_doesnt_have_nested(self): - sql = User.or_where_doesnt_have( - "profile.identification", lambda q: q.where("identification_id", 1) - ).to_sql() + sql = User.or_where_doesnt_have("profile.identification", lambda q: q.where("identification_id", 1)).to_sql() self.assertEqual( sql, diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder.py index 09c2ecc8..39fab42f 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder.py @@ -34,9 +34,7 @@ def test_can_add_columns1(self): self.assertEqual(len(blueprint.table.added_columns), 2) self.assertEqual( blueprint.to_sql(), - [ - "CREATE TABLE `users` (`name` VARCHAR(255) NOT NULL, `age` INT(11) NOT NULL)" - ], + ["CREATE TABLE `users` (`name` VARCHAR(255) NOT NULL, `age` INT(11) NOT NULL)"], ) def test_can_add_tiny_text(self): @@ -67,9 +65,7 @@ def test_can_create_table_if_not_exists(self): self.assertEqual(len(blueprint.table.added_columns), 2) self.assertEqual( blueprint.to_sql(), - [ - "CREATE TABLE IF NOT EXISTS `users` (`name` VARCHAR(255) NOT NULL, `age` INT(11) NOT NULL)" - ], + ["CREATE TABLE IF NOT EXISTS `users` (`name` VARCHAR(255) NOT NULL, `age` INT(11) NOT NULL)"], ) def test_can_add_columns_with_constaint(self): @@ -94,9 +90,7 @@ def test_add_column_comment(self): self.assertEqual(len(blueprint.table.added_columns), 1) self.assertEqual( blueprint.to_sql(), - [ - "CREATE TABLE `users` (`name` VARCHAR(255) NOT NULL COMMENT 'A users username')" - ], + ["CREATE TABLE `users` (`name` VARCHAR(255) NOT NULL COMMENT 'A users username')"], ) def test_can_add_table_comment(self): @@ -107,9 +101,7 @@ def test_can_add_table_comment(self): self.assertEqual(len(blueprint.table.added_columns), 1) self.assertEqual( blueprint.to_sql(), - [ - "CREATE TABLE `users` (`name` VARCHAR(255) NOT NULL) COMMENT 'A users table'" - ], + ["CREATE TABLE `users` (`name` VARCHAR(255) NOT NULL) COMMENT 'A users table'"], ) def test_can_add_columns_with_foreign_key_constaint(self): @@ -193,11 +185,7 @@ def test_can_add_primary_constraint_without_column_name(self): self.assertEqual(len(blueprint.table.added_columns), 3) self.assertEqual(len(blueprint.table.added_constraints), 1) - self.assertTrue( - blueprint.to_sql()[0].startswith( - "CREATE TABLE `users` (`user_id` INT(11) NOT NULL" - ) - ) + self.assertTrue(blueprint.to_sql()[0].startswith("CREATE TABLE `users` (`user_id` INT(11) NOT NULL")) def test_can_advanced_table_creation2(self): with self.schema.create("users") as blueprint: @@ -212,9 +200,7 @@ def test_can_advanced_table_creation2(self): blueprint.string("thumbnail").nullable() blueprint.integer("premium") blueprint.integer("author_id").unsigned().nullable() - blueprint.foreign("author_id").references("id").on("users").on_delete( - "CASCADE" - ) + blueprint.foreign("author_id").references("id").on("users").on_delete("CASCADE") blueprint.text("description") blueprint.timestamps() @@ -233,9 +219,7 @@ def test_can_advanced_table_creation2(self): def test_can_add_columns_with_foreign_key_constraint_name(self): with self.schema.create("users") as blueprint: blueprint.integer("profile_id") - blueprint.foreign("profile_id", name="profile_foreign").references("id").on( - "profiles" - ) + blueprint.foreign("profile_id", name="profile_foreign").references("id").on("profiles") self.assertEqual(len(blueprint.table.added_columns), 1) self.assertEqual( @@ -392,7 +376,5 @@ def test_can_add_enum(self): self.assertEqual(len(blueprint.table.added_columns), 1) self.assertEqual( blueprint.to_sql(), - [ - "CREATE TABLE `users` (`status` ENUM('active', 'inactive') NOT NULL DEFAULT 'active')" - ], + ["CREATE TABLE `users` (`status` ENUM('active', 'inactive') NOT NULL DEFAULT 'active')"], ) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder_alter.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder_alter.py index a437f0d5..c48ecf62 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder_alter.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder_alter.py @@ -26,9 +26,7 @@ def test_can_add_columns(self): self.assertEqual(len(blueprint.table.added_columns), 2) - sql = [ - "ALTER TABLE `users` ADD `name` VARCHAR(255) NOT NULL, ADD `age` INT(11) NOT NULL" - ] + sql = ["ALTER TABLE `users` ADD `name` VARCHAR(255) NOT NULL, ADD `age` INT(11) NOT NULL"] self.assertEqual(blueprint.to_sql(), sql) @@ -128,9 +126,7 @@ def test_alter_drop1(self): def test_alter_add_column_and_foreign_key(self): with self.schema.table("users") as blueprint: blueprint.unsigned_integer("playlist_id").nullable() - blueprint.foreign("playlist_id").references("id").on("playlists").on_delete( - "cascade" - ) + blueprint.foreign("playlist_id").references("id").on("playlists").on_delete("cascade") sql = [ "ALTER TABLE `users` ADD `playlist_id` INT UNSIGNED NULL", @@ -183,9 +179,7 @@ def test_alter_add_primary(self): with self.schema.table("users") as blueprint: blueprint.primary("playlist_id") - sql = [ - "ALTER TABLE `users` ADD CONSTRAINT users_playlist_id_primary PRIMARY KEY (playlist_id)" - ] + sql = ["ALTER TABLE `users` ADD CONSTRAINT users_playlist_id_primary PRIMARY KEY (playlist_id)"] self.assertEqual(blueprint.to_sql(), sql) @@ -300,9 +294,7 @@ def test_can_add_column_enum(self): self.assertEqual(len(blueprint.table.added_columns), 1) - sql = [ - "ALTER TABLE `users` ADD `status` ENUM('active', 'inactive') NOT NULL DEFAULT 'active'" - ] + sql = ["ALTER TABLE `users` ADD `status` ENUM('active', 'inactive') NOT NULL DEFAULT 'active'"] self.assertEqual(blueprint.to_sql(), sql) @@ -312,8 +304,6 @@ def test_can_change_column_enum(self): self.assertEqual(len(blueprint.table.changed_columns), 1) - sql = [ - "ALTER TABLE `users` MODIFY `status` ENUM('active', 'inactive') NOT NULL DEFAULT 'active'" - ] + sql = ["ALTER TABLE `users` MODIFY `status` ENUM('active', 'inactive') NOT NULL DEFAULT 'active'"] self.assertEqual(blueprint.to_sql(), sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_global_scopes.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_global_scopes.py index 89b94d19..0d881582 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_global_scopes.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_global_scopes.py @@ -31,9 +31,7 @@ def test_can_use_global_scopes_on_select(self): def test_can_use_global_scopes_on_time(self): sql = "INSERT INTO `users` (`users`.`name`, `users`.`updated_at`, `users`.`created_at`) VALUES ('Joe'" - self.assertTrue( - User.create({"name": "Joe"}, query=True).to_sql().startswith(sql) - ) + self.assertTrue(User.create({"name": "Joe"}, query=True).to_sql().startswith(sql)) # def test_can_use_global_scopes_on_inherit(self): # sql = "SELECT * FROM `user_softs` WHERE `user_softs`.`deleted_at` IS NULL" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_soft_delete.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_soft_delete.py index 7d6689b4..f8289abc 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_soft_delete.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_soft_delete.py @@ -48,9 +48,7 @@ def test_restore(self): def test_force_delete_with_wheres(self): sql = "DELETE FROM `users` WHERE `users`.`active` = '1'" - self.assertEqual( - sql, UserSoft.where("active", 1).force_delete(query=True).to_sql() - ) + self.assertEqual(sql, UserSoft.where("active", 1).force_delete(query=True).to_sql()) def test_that_trashed_users_are_not_returned_by_default(self): sql = "SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_query_builder.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_query_builder.py index 93dc273e..d77f82d4 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_query_builder.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_query_builder.py @@ -38,84 +38,64 @@ def test_sum(self): builder = self.get_builder() builder.sum("age") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_like(self): builder = self.get_builder() builder.where("age", "like", "%name%") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_not_like(self): builder = self.get_builder() builder.where("age", "not like", "%name%") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_max(self): builder = self.get_builder() builder.max("age") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_min(self): builder = self.get_builder() builder.min("age") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_avg(self): builder = self.get_builder() builder.avg("age") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_all(self): builder = self.get_builder() builder.all() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_get(self): builder = self.get_builder() builder.get() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_first(self): builder = self.get_builder().first(query=True) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_select(self): builder = self.get_builder() builder.select("name", "email") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_add_select_no_table(self): @@ -131,17 +111,13 @@ def test_add_select_no_table(self): ) .to_sql() ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_select_raw(self): builder = self.get_builder() builder.select_raw("count(email) as email_count") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_create(self): @@ -150,82 +126,60 @@ def test_create(self): {"name": "Corentin All", "email": "corentin@yopmail.com"}, query=True, ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_delete(self): builder = self.get_builder() builder.delete("name", "Joe", query=True) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where(self): builder = self.get_builder() builder.where("name", "Joe") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_exists(self): builder = self.get_builder() builder.where_exists("name") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_limit(self): builder = self.get_builder() builder.limit(5) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_offset(self): builder = self.get_builder() builder.offset(5) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_join(self): builder = self.get_builder() builder.join("profiles", "users.id", "=", "profiles.user_id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_left_join(self): builder = self.get_builder() builder.left_join("profiles", "users.id", "=", "profiles.user_id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_right_join(self): builder = self.get_builder() builder.right_join("profiles", "users.id", "=", "profiles.user_id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_update(self): - builder = self.get_builder().update( - {"name": "Joe", "email": "joe@yopmail.com"}, dry=True - ) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + builder = self.get_builder().update({"name": "Joe", "email": "joe@yopmail.com"}, dry=True) + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) # def test_increment(self): @@ -247,104 +201,78 @@ def test_update(self): def test_count(self): builder = self.get_builder() builder.count("id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_order_by_asc(self): builder = self.get_builder() builder.order_by("email", "asc") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_order_by_desc(self): builder = self.get_builder() builder.order_by("email", "desc") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_column(self): builder = self.get_builder() builder.where_column("name", "username") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_not_in(self): builder = self.get_builder() builder.where_not_in("id", [1, 2, 3]) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_between(self): builder = self.get_builder() builder.between("id", 2, 5) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_not_between(self): builder = self.get_builder() builder.not_between("id", 2, 5) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_in(self): builder = self.get_builder() builder.where_in("id", [1, 2, 3]) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_null(self): builder = self.get_builder() builder.where_null("name") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_not_null(self): builder = self.get_builder() builder.where_not_null("name") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_having(self): builder = self.get_builder(table="payments") - builder.select("user_id").avg("salary").group_by("user_id").having( - "salary", ">=", "1000" - ) + builder.select("user_id").avg("salary").group_by("user_id").having("salary", ">=", "1000") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_group_by(self): builder = self.get_builder(table="payments") builder.select("user_id").min("salary").group_by("user_id") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_builder_alone(self): @@ -371,59 +299,42 @@ def test_builder_alone(self): def test_where_lt(self): builder = self.get_builder() builder.where("age", "<", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_lte(self): builder = self.get_builder() builder.where("age", "<=", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_gt(self): builder = self.get_builder() builder.where("age", ">", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_gte(self): builder = self.get_builder() builder.where("age", ">=", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_where_ne(self): builder = self.get_builder() builder.where("age", "!=", "20") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_or_where(self): builder = self.get_builder() builder.where("age", "20").or_where("age", "<", 20) - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_can_call_with_schema(self): builder = self.get_builder() - sql = ( - builder.table("information_schema.columns") - .select("table_name") - .where("table_name", "users") - .to_sql() - ) + sql = builder.table("information_schema.columns").select("table_name").where("table_name", "users").to_sql() self.assertEqual( sql, """SELECT "information_schema"."columns"."table_name" FROM "information_schema"."columns" WHERE "information_schema"."columns"."table_name" = 'users'""", @@ -432,33 +343,25 @@ def test_can_call_with_schema(self): def test_truncate(self): builder = self.get_builder(dry=True) sql = builder.truncate() - sql_ref = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql_ref = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(sql, sql_ref) def test_truncate_without_foreign_keys(self): builder = self.get_builder(dry=True) sql = builder.truncate(foreign_keys=True) - sql_ref = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql_ref = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(sql, sql_ref) def test_shared_lock(self): builder = self.get_builder(dry=True) sql = builder.where("votes", ">=", 100).shared_lock().to_sql() - sql_ref = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql_ref = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(sql, sql_ref) def test_update_lock(self): builder = self.get_builder(dry=True) sql = builder.where("votes", ">=", 100).lock_for_update().to_sql() - sql_ref = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql_ref = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(sql, sql_ref) @@ -776,17 +679,13 @@ def shared_lock(self): def test_latest(self): builder = self.get_builder() builder.latest("email") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def test_oldest(self): builder = self.get_builder() builder.oldest("email") - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(builder.to_sql(), sql) def oldest(self): diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_delete_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_delete_grammar.py index 690e7253..3a1b5398 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_delete_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_delete_grammar.py @@ -12,31 +12,19 @@ def setUp(self): def test_can_compile_delete(self): to_sql = self.builder.delete("id", 1, query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_delete_in(self): to_sql = self.builder.delete("id", [1, 2, 3], query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_delete_with_where(self): - to_sql = ( - self.builder.where("age", 20) - .where("profile", 1) - .set_action("delete") - .delete(query=True) - .to_sql() - ) + to_sql = self.builder.where("age", 20).where("profile", 1).set_action("delete").delete(query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_insert_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_insert_grammar.py index 6404d2e3..85ec9138 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_insert_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_insert_grammar.py @@ -12,17 +12,13 @@ def setUp(self): def test_can_compile_insert(self): to_sql = self.builder.create({"name": "Joe"}, query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_insert_with_keywords(self): to_sql = self.builder.create(name="Joe", query=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_bulk_create(self): @@ -36,19 +32,13 @@ def test_can_compile_bulk_create(self): query=True, ).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_bulk_create_qmark(self): - to_sql = self.builder.bulk_create( - [{"name": "Joe"}, {"name": "Bill"}, {"name": "John"}], query=True - ).to_qmark() + to_sql = self.builder.bulk_create([{"name": "Joe"}, {"name": "Bill"}, {"name": "John"}], query=True).to_qmark() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_select_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_select_grammar.py index 475d6eee..81e7bda8 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_select_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_select_grammar.py @@ -71,9 +71,7 @@ def can_compile_with_multiple_order_by(self): """ self.builder.select('username').order_by('age', 'desc').order_by('name').to_sql() """ - return ( - """SELECT "users"."username" FROM "users" ORDER BY "age" DESC, "name" ASC""" - ) + return """SELECT "users"."username" FROM "users" ORDER BY "age" DESC, "name" ASC""" def can_compile_with_group_by(self): """ @@ -109,9 +107,7 @@ def can_compile_where_not_null(self): """ self.builder.select('username').where_not_null('age').to_sql() """ - return ( - """SELECT "users"."username" FROM "users" WHERE "users"."age" IS NOT NULL""" - ) + return """SELECT "users"."username" FROM "users" WHERE "users"."age" IS NOT NULL""" def can_compile_where_raw(self): """ @@ -304,11 +300,7 @@ def test_can_compile_where_raw(self): self.assertEqual(to_sql, """SELECT * FROM "users" WHERE "age" = '18'""") def test_can_compile_having_raw(self): - to_sql = ( - self.builder.select_raw("COUNT(*) as counts") - .having_raw("counts > 10") - .to_sql() - ) + to_sql = self.builder.select_raw("COUNT(*) as counts").having_raw("counts > 10").to_sql() self.assertEqual( to_sql, """SELECT COUNT(*) as counts FROM "users" HAVING counts > 10""", @@ -316,10 +308,7 @@ def test_can_compile_having_raw(self): def test_can_compile_having_raw_order(self): to_sql = ( - self.builder.select_raw("COUNT(*) as counts") - .having_raw("counts > 10") - .order_by_raw("counts DESC") - .to_sql() + self.builder.select_raw("COUNT(*) as counts").having_raw("counts > 10").order_by_raw("counts DESC").to_sql() ) self.assertEqual( to_sql, @@ -327,9 +316,9 @@ def test_can_compile_having_raw_order(self): ) def test_can_compile_where_raw_and_where_with_multiple_bindings(self): - query = self.builder.where_raw( - """ "age" = ? AND "is_admin" = ?""", [18, True] - ).where("email", "test@example.com") + query = self.builder.where_raw(""" "age" = ? AND "is_admin" = ?""", [18, True]).where( + "email", "test@example.com" + ) self.assertEqual( query.to_qmark(), """SELECT * FROM "users" WHERE "age" = ? AND "is_admin" = ? AND "users"."email" = ?""", @@ -454,7 +443,9 @@ def can_compile_left_join_clause_with_lambda(self): ), ).to_sql() """ - return """SELECT * FROM "users" LEFT JOIN "report_groups" AS "rg" ON "bgt"."fund" = "rg"."fund" OR "bgt" IS NULL""" + return ( + """SELECT * FROM "users" LEFT JOIN "report_groups" AS "rg" ON "bgt"."fund" = "rg"."fund" OR "bgt" IS NULL""" + ) def can_compile_right_join_clause_with_lambda(self): """ @@ -496,9 +487,7 @@ def where_not_exists_with_lambda(self): return """SELECT * FROM "users" WHERE NOT EXISTS (SELECT * FROM "users" WHERE "users"."age" = '1')""" def where_date(self): - return ( - """SELECT * FROM "users" WHERE DATE("users"."created_at") = '2022-06-01'""" - ) + return """SELECT * FROM "users" WHERE DATE("users"."created_at") = '2022-06-01'""" def or_where_null(self): return """SELECT * FROM "users" WHERE "users"."column1" IS NULL OR "users"."column2" IS NULL""" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_update_grammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_update_grammar.py index 76d19f7f..a2c8a546 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_update_grammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_update_grammar.py @@ -9,41 +9,24 @@ class BaseTestCaseUpdateGrammar: def setUp(self): - self.builder = QueryBuilder( - PostgresGrammar, connection_class=PostgresConnection, table="users" - ) + self.builder = QueryBuilder(PostgresGrammar, connection_class=PostgresConnection, table="users") def test_can_compile_update(self): - to_sql = ( - self.builder.where("name", "bob").update({"name": "Joe"}, dry=True).to_sql() - ) + to_sql = self.builder.where("name", "bob").update({"name": "Joe"}, dry=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_multiple_update(self): - to_sql = self.builder.update( - {"name": "Joe", "email": "user@email.com"}, dry=True - ).to_sql() + to_sql = self.builder.update({"name": "Joe", "email": "user@email.com"}, dry=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) def test_can_compile_update_with_multiple_where(self): - to_sql = ( - self.builder.where("name", "bob") - .where("age", 20) - .update({"name": "Joe"}, dry=True) - .to_sql() - ) - - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + to_sql = self.builder.where("name", "bob").where("age", 20).update({"name": "Joe"}, dry=True).to_sql() + + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) # def test_can_compile_increment(self): @@ -65,9 +48,7 @@ def test_can_compile_update_with_multiple_where(self): def test_raw_expression(self): to_sql = self.builder.update({"name": Raw('"username"')}, dry=True).to_sql() - sql = getattr( - self, inspect.currentframe().f_code.co_name.replace("test_", "") - )() + sql = getattr(self, inspect.currentframe().f_code.co_name.replace("test_", ""))() self.assertEqual(to_sql, sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder.py index 1dd4b761..5a27c3d3 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder.py @@ -26,9 +26,7 @@ def test_can_add_columns(self): self.assertEqual(len(blueprint.table.added_columns), 2) self.assertEqual( blueprint.to_sql(), - [ - 'CREATE TABLE "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL)' - ], + ['CREATE TABLE "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL)'], ) def test_can_add_tiny_text(self): @@ -36,9 +34,7 @@ def test_can_add_tiny_text(self): blueprint.tiny_text("description") self.assertEqual(len(blueprint.table.added_columns), 1) - self.assertEqual( - blueprint.to_sql(), ['CREATE TABLE "users" ("description" TEXT NOT NULL)'] - ) + self.assertEqual(blueprint.to_sql(), ['CREATE TABLE "users" ("description" TEXT NOT NULL)']) def test_can_add_unsigned_decimal(self): with self.schema.create("users") as blueprint: @@ -58,9 +54,7 @@ def test_can_create_table_if_not_exists(self): self.assertEqual(len(blueprint.table.added_columns), 2) self.assertEqual( blueprint.to_sql(), - [ - 'CREATE TABLE IF NOT EXISTS "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL)' - ], + ['CREATE TABLE IF NOT EXISTS "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL)'], ) def test_can_add_column_comment(self): @@ -137,9 +131,7 @@ def test_can_add_columns_with_long_text(self): blueprint.long_text("description") self.assertEqual(len(blueprint.table.added_columns), 1) - self.assertEqual( - blueprint.to_sql(), ['CREATE TABLE "users" ("description" TEXT NOT NULL)'] - ) + self.assertEqual(blueprint.to_sql(), ['CREATE TABLE "users" ("description" TEXT NOT NULL)']) def test_can_have_unsigned_columns(self): with self.schema.create("users") as blueprint: @@ -219,9 +211,7 @@ def test_can_advanced_table_creation2(self): blueprint.integer("premium") blueprint.double("amount").default(0.0) blueprint.integer("author_id").unsigned().nullable() - blueprint.foreign("author_id").references("id").on("authors").on_delete( - "CASCADE" - ) + blueprint.foreign("author_id").references("id").on("authors").on_delete("CASCADE") blueprint.text("description") blueprint.timestamps() @@ -261,9 +251,7 @@ def test_can_add_uuid_column(self): def test_can_add_columns_with_foreign_key_constraint_name(self): with self.schema.create("users") as blueprint: blueprint.integer("profile_id") - blueprint.foreign("profile_id", name="profile_foreign").references("id").on( - "profiles" - ) + blueprint.foreign("profile_id", name="profile_foreign").references("id").on("profiles") self.assertEqual(len(blueprint.table.added_columns), 1) self.assertEqual( diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder_alter.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder_alter.py index 32a16b55..a37e423d 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder_alter.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder_alter.py @@ -26,9 +26,7 @@ def test_can_add_columns(self): self.assertEqual(len(blueprint.table.added_columns), 2) - sql = [ - 'ALTER TABLE "users" ADD COLUMN "name" VARCHAR(255) NOT NULL, ADD COLUMN "age" INTEGER NOT NULL' - ] + sql = ['ALTER TABLE "users" ADD COLUMN "name" VARCHAR(255) NOT NULL, ADD COLUMN "age" INTEGER NOT NULL'] self.assertEqual(blueprint.to_sql(), sql) @@ -98,9 +96,7 @@ def test_alter_drop(self): def test_alter_add_column_and_foreign_key(self): with self.schema.table("users") as blueprint: blueprint.unsigned_integer("playlist_id").nullable() - blueprint.foreign("playlist_id").references("id").on("playlists").on_delete( - "cascade" - ) + blueprint.foreign("playlist_id").references("id").on("playlists").on_delete("cascade") sql = [ 'ALTER TABLE "users" ADD COLUMN "playlist_id" INTEGER NULL', @@ -164,9 +160,7 @@ def test_alter_add_primary(self): with self.schema.table("users") as blueprint: blueprint.primary("playlist_id") - sql = [ - 'ALTER TABLE "users" ADD CONSTRAINT users_playlist_id_primary PRIMARY KEY (playlist_id)' - ] + sql = ['ALTER TABLE "users" ADD CONSTRAINT users_playlist_id_primary PRIMARY KEY (playlist_id)'] self.assertEqual(blueprint.to_sql(), sql) @@ -245,9 +239,7 @@ def test_change_string(self): blueprint.table.from_table = table - sql = [ - 'ALTER TABLE "users" ALTER COLUMN "name" TYPE VARCHAR(93), ALTER COLUMN "name" SET NOT NULL' - ] + sql = ['ALTER TABLE "users" ALTER COLUMN "name" TYPE VARCHAR(93), ALTER COLUMN "name" SET NOT NULL'] self.assertEqual(blueprint.to_sql(), sql) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py index 2d3e790e..c443bd81 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py @@ -66,10 +66,10 @@ async def handle_async(self): await migration.migrate(migration=migration_name) def resolve_migration_path(self) -> str: - path = self.option('directory') + path = self.option("directory") - config = self.container.make('config').get('database.migrations') - default_directory = config.get('directory') + config = self.container.make("config").get("database.migrations") + default_directory = config.get("directory") migration_directory = path or default_directory return self.container.use_base_path(migration_directory) @@ -79,9 +79,7 @@ def confirm_to_proceed(self) -> None: if os.getenv("APP_ENV") == "production" and not self.option("force"): answer = "" while answer not in ["y", "n"]: - answer = input( - "Do you want to run migrations in PRODUCTION ? (y/n)\n" - ).lower() + answer = input("Do you want to run migrations in PRODUCTION ? (y/n)\n").lower() if answer != "y": self.info("Migrations cancelled") exit(0) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py index ed6a2610..92c39155 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py @@ -73,9 +73,7 @@ async def handle_async(self): seeder_seeded = seeder_file.split(".")[-1] elif table != "None": - seeder_file = ( - f"{underscore(table)}_table_seeder.{camelize(table)}TableSeeder" - ) + seeder_file = f"{underscore(table)}_table_seeder.{camelize(table)}TableSeeder" await seeder.run_specific_seed(seeder_file) seeder_seeded = f"{camelize(table)}TableSeeder" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py index 4e32b378..0aa17efb 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py @@ -14,12 +14,8 @@ class MakeMigrationCommand(Command): arguments = [argument("name", description="The name of the migration")] options = [ - option( - "create", "c", flag=False, default="None", description="The table to create" - ), - option( - "table", "t", flag=False, default="None", description="The table to alter" - ), + option("create", "c", flag=False, default="None", description="The table to create"), + option("table", "t", flag=False, default="None", description="The table to alter"), option( "directory", "d", @@ -63,6 +59,4 @@ def handle(self): with open(os.path.join(os.getcwd(), migration_directory, file_name), "w") as fp: fp.write(output) - self.info( - f"Migration file created: {os.path.join(migration_directory, file_name)}" - ) + self.info(f"Migration file created: {os.path.join(migration_directory, file_name)}") diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py index d0fafecb..a0662274 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py @@ -31,9 +31,7 @@ class MakeModelCommand(Command): description="If the migration file should modify an existing table", flag=True, ), - option( - "pep", "p", description="Makes the file into pep 8 standards", flag=True - ), + option("pep", "p", description="Makes the file into pep 8 standards", flag=True), option( "directory", "d", @@ -62,9 +60,7 @@ def handle(self): model_directory = self.option("directory") - with open( - os.path.join(pathlib.Path(__file__).parent.absolute(), "stubs/model.stub") - ) as fp: + with open(os.path.join(pathlib.Path(__file__).parent.absolute(), "stubs/model.stub")) as fp: output = fp.read() output = output.replace("__CLASS__", camelize(name)) @@ -76,9 +72,7 @@ def handle(self): full_directory_path = os.path.join(os.getcwd(), model_directory) if os.path.exists(os.path.join(full_directory_path, file_name)): - self.line( - f'Model "{name}" Already Exists ({full_directory_path}/{file_name})' - ) + self.line(f'Model "{name}" Already Exists ({full_directory_path}/{file_name})') return os.makedirs(os.path.dirname(os.path.join(full_directory_path)), exist_ok=True) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py index 38401ea6..d938706d 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py @@ -37,9 +37,7 @@ def handle(self): schema = DB.get_schema_builder(self.option("connection")) if not schema.has_table(table): - return self.line_error( - f"There is no such table {table} for this connection." - ) + return self.line_error(f"There is no such table {table} for this connection.") self.info(f"Model Docstring for table: {table}") print('"""') diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py index da2ea3e8..0ff982ea 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py @@ -36,11 +36,7 @@ def handle(self): observer_directory = self.option("directory") - with open( - os.path.join( - pathlib.Path(__file__).parent.absolute(), "stubs/observer.stub" - ) - ) as fp: + with open(os.path.join(pathlib.Path(__file__).parent.absolute(), "stubs/observer.stub")) as fp: output = fp.read() output = output.replace("__CLASS__", camelize(name)) output = output.replace("__MODEL_VARIABLE__", underscore(model)) @@ -51,9 +47,7 @@ def handle(self): full_directory_path = os.path.join(os.getcwd(), observer_directory) if os.path.exists(os.path.join(full_directory_path, file_name)): - self.line( - f'Observer "{name}" Already Exists ({full_directory_path}/{file_name})' - ) + self.line(f'Observer "{name}" Already Exists ({full_directory_path}/{file_name})') return os.makedirs(os.path.join(full_directory_path), exist_ok=True) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py index 4aa8d494..c0d0040f 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py @@ -72,10 +72,10 @@ async def handle_async(self): ) def resolve_migration_path(self) -> str: - path = self.option('directory') + path = self.option("directory") - config = self.container.make('config').get('database.migrations') - default_directory = config.get('directory') + config = self.container.make("config").get("database.migrations") + default_directory = config.get("directory") migration_directory = path or default_directory return self.container.use_base_path(migration_directory) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py index fcfd369f..6be6bc41 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py @@ -73,10 +73,10 @@ async def handle_async(self): ) def resolve_migration_path(self) -> str: - path = self.option('directory') + path = self.option("directory") - config = self.container.make('config').get('database.migrations') - default_directory = config.get('directory') + config = self.container.make("config").get("database.migrations") + default_directory = config.get("directory") migration_directory = path or default_directory return self.container.use_base_path(migration_directory) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py index 8aac6687..1832aa9b 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py @@ -48,10 +48,10 @@ async def handle_async(self): await migration.reset(self.option("migration")) def resolve_migration_path(self) -> str: - path = self.option('directory') + path = self.option("directory") - config = self.container.make('config').get('database.migrations') - default_directory = config.get('directory') + config = self.container.make("config").get("database.migrations") + default_directory = config.get("directory") migration_directory = path or default_directory - return self.container.use_base_path(migration_directory) \ No newline at end of file + return self.container.use_base_path(migration_directory) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py index 1d359163..7eab0728 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py @@ -48,10 +48,10 @@ async def handle_async(self): await migration.rollback(migration=self.option("migration")) def resolve_migration_path(self) -> str: - path = self.option('directory') + path = self.option("directory") - config = self.container.make('config').get('database.migrations') - default_directory = config.get('directory') + config = self.container.make("config").get("database.migrations") + default_directory = config.get("directory") migration_directory = path or default_directory - return self.container.use_base_path(migration_directory) \ No newline at end of file + return self.container.use_base_path(migration_directory) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py index 6f8ed8dd..5ac18f86 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py @@ -71,10 +71,10 @@ async def handle_async(self): table.render() def resolve_migration_path(self) -> str: - path = self.option('directory') + path = self.option("directory") - config = self.container.make('config').get('database.migrations') - default_directory = config.get('directory') + config = self.container.make("config").get("database.migrations") + default_directory = config.get("directory") migration_directory = path or default_directory - return self.container.use_base_path(migration_directory) \ No newline at end of file + return self.container.use_base_path(migration_directory) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py index b13b7eea..c23ca80f 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py @@ -42,9 +42,7 @@ def handle(self): connection = resolver.get_connection_details()["default"] config = resolver.get_connection_information(connection) if not config.get("full_details"): - self.line( - f"Connection configuration for '{connection}' not found !" - ) + self.line(f"Connection configuration for '{connection}' not found !") exit(-1) command, env = self.get_command(config) @@ -78,19 +76,14 @@ def get_command(self, config): try: get_driver_args = getattr(self, f"get_{driver}_args") except AttributeError: - self.line( - f"Connecting with driver '{driver}' is not implemented !" - ) + self.line(f"Connecting with driver '{driver}' is not implemented !") exit(-1) args, options = get_driver_args(config) # process positional arguments args = " ".join(args) # process optional arguments options = self.remove_empty_options(options) - options_string = " ".join( - f"{option} {value}" if value else option - for option, value in options.items() - ) + options_string = " ".join(f"{option} {value}" if value else option for option, value in options.items()) # finally build command string command = program if args: diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/connections/factory.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/connections/factory.py index 2494b112..6c2b1586 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/connections/factory.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/connections/factory.py @@ -38,6 +38,7 @@ def create_engine(cls, cfg: dict) -> AsyncEngine: url = cls.build_url(cfg) kwargs: dict[str, Any] = {"echo": True} from fastapi_startkit.application import app + if app().is_testing(): kwargs["poolclass"] = NullPool elif cfg["driver"] == "sqlite": @@ -57,4 +58,3 @@ def make(self, config: dict, name: str) -> type[Connection]: return MySQLConnection(engine, config) raise ValueError(f"Unsupported driver: {driver}") - diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/expressions/expressions.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/expressions/expressions.py index 7eb77699..4bef40c4 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/expressions/expressions.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/expressions/expressions.py @@ -168,9 +168,7 @@ def on_value(self, column, *args): def or_on_value(self, column, *args): equality, value = self._extract_operator_value(*args) - self.on_clauses += ( - (OnValueClause(column, equality, value, "value", operator="or")), - ) + self.on_clauses += ((OnValueClause(column, equality, value, "value", operator="or")),) return self def on_null(self, column): @@ -218,9 +216,7 @@ def or_on_not_null(self, column: str): Returns: self """ - self.on_clauses += ( - (OnValueClause(column, "=", True, "NOT NULL", operator="or")), - ) + self.on_clauses += ((OnValueClause(column, "=", True, "NOT NULL", operator="or")),) return self @deprecated("Using where() in a Join clause has been superceded by on_value()") @@ -241,10 +237,7 @@ def _extract_operator_value(self, *args): value = args[0] if operator not in operators: - raise ValueError( - "Invalid comparison operator. The operator can be %s" - % ", ".join(operators) - ) + raise ValueError("Invalid comparison operator. The operator can be %s" % ", ".join(operators)) return operator, value diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/migrations/Migrator.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/migrations/Migrator.py index 37870bc1..719d5a8b 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/migrations/Migrator.py @@ -16,10 +16,10 @@ class Migrator: db_manager: "DatabaseManager" def __init__( - self, - migration_directory: str, - connection="default", - command_class=None, + self, + migration_directory: str, + connection="default", + command_class=None, ): self.connection = connection self.migration_directory = migration_directory @@ -42,9 +42,7 @@ async def get_unran_migrations(self): all_migrations = [ f.replace(".py", "") for f in listdir(directory_path) - if isfile(join(directory_path, f)) - and f != "__init__.py" - and not f.startswith(".") + if isfile(join(directory_path, f)) and f != "__init__.py" and not f.startswith(".") ] all_migrations.sort() unran_migrations = [] @@ -57,16 +55,12 @@ async def get_unran_migrations(self): async def get_rollback_migrations(self): all_migrations = await self.migration_model.all() return ( - await self.migration_model.where("batch", all_migrations.max("batch")) - .order_by("id", "desc") - .get() + await self.migration_model.where("batch", all_migrations.max("batch")).order_by("id", "desc").get() ).pluck("migration") async def get_all_migrations(self, reverse=False): if reverse: - return ( - await self.migration_model.new_query().order_by("id", "desc").get() - ).pluck("migration") + return (await self.migration_model.new_query().order_by("id", "desc").get()).pluck("migration") return (await self.migration_model.all()).pluck("migration") @@ -78,12 +72,13 @@ async def delete_migration(self, file_path): def locate(self, file_name): import sys + migration_name = camelize("_".join(file_name.split("_")[4:]).replace(".py", "")) file_name = file_name.replace(".py", "") migration_directory = str(self.migration_directory) for sys_path in sorted(sys.path, key=len, reverse=True): if sys_path and migration_directory.startswith(sys_path): - migration_directory = migration_directory[len(sys_path):].lstrip("/\\") + migration_directory = migration_directory[len(sys_path) :].lstrip("/\\") break migration_directory = migration_directory.replace("/", ".").replace("\\", ".") return locate(f"{migration_directory}.{file_name}.{migration_name}") @@ -93,18 +88,14 @@ async def get_ran_migrations(self): all_migrations = [ f.replace(".py", "") for f in listdir(directory_path) - if isfile(join(directory_path, f)) - and f != "__init__.py" - and not f.startswith(".") + if isfile(join(directory_path, f)) and f != "__init__.py" and not f.startswith(".") ] all_migrations.sort() ran = [] database_migrations = await self.migration_model.all() for migration in all_migrations: - matched_migration = database_migrations.where( - "migration", migration - ).first() + matched_migration = database_migrations.where("migration", migration).first() if matched_migration: ran.append( { @@ -133,9 +124,7 @@ async def migrate(self, migration="all", output=False): self.last_migrations_ran.append(migration) if self.command_class: - self.command_class.line( - f"Migrating: {migration}" - ) + self.command_class.line(f"Migrating: {migration}") migration_class = migration_class(connection=self.connection, schema=self.schema) @@ -159,13 +148,9 @@ async def migrate(self, migration="all", output=False): print(migration_class.schema._blueprint.to_sql()) if self.command_class: - self.command_class.line( - f"Migrated: {migration} ({duration}s)" - ) + self.command_class.line(f"Migrated: {migration} ({duration}s)") - await self.migration_model.create( - {"batch": batch, "migration": migration.replace(".py", "")} - ) + await self.migration_model.create({"batch": batch, "migration": migration.replace(".py", "")}) async def rollback(self, migration="all", output=False): default_migrations = await self.get_rollback_migrations() @@ -176,9 +161,7 @@ async def rollback(self, migration="all", output=False): migration = migration.replace(".py", "") if self.command_class: - self.command_class.line( - f"Rolling back: {migration}" - ) + self.command_class.line(f"Rolling back: {migration}") try: migration_class = self.locate(migration) @@ -186,9 +169,7 @@ async def rollback(self, migration="all", output=False): self.command_class.line(f"Not Found: {migration}") continue - migration_class = migration_class( - connection=self.connection, schema=self.schema - ) + migration_class = migration_class(connection=self.connection, schema=self.schema) if output: migration_class.schema.dry() @@ -201,10 +182,7 @@ async def rollback(self, migration="all", output=False): if self.command_class: table = self.command_class.table() table.set_headers(["SQL"]) - if ( - hasattr(migration_class.schema, "_blueprint") - and migration_class.schema._blueprint - ): + if hasattr(migration_class.schema, "_blueprint") and migration_class.schema._blueprint: sql = migration_class.schema._blueprint.to_sql() if isinstance(sql, list): sql = ",".join(sql) @@ -220,19 +198,13 @@ async def rollback(self, migration="all", output=False): await self.delete_migration(migration) if self.command_class: - self.command_class.line( - f"Rolled back: {migration} ({duration}s)" - ) + self.command_class.line(f"Rolled back: {migration} ({duration}s)") async def delete_migrations(self, migrations=None): - return await self.migration_model.where_in( - "migration", migrations or [] - ).delete() + return await self.migration_model.where_in("migration", migrations or []).delete() async def delete_last_batch(self): - return await self.migration_model.where( - "batch", await self.get_last_batch_number() - ).delete() + return await self.migration_model.where("batch", await self.get_last_batch_number()).delete() async def reset(self, migration="all"): default_migrations = await self.get_all_migrations(reverse=True) @@ -246,14 +218,10 @@ async def reset(self, migration="all"): for migration in migrations: if self.command_class: - self.command_class.line( - f"Rolling back: {migration}" - ) + self.command_class.line(f"Rolling back: {migration}") try: - migration_instance = self.locate(migration)( - connection=self.connection, schema=self.schema - ) + migration_instance = self.locate(migration)(connection=self.connection, schema=self.schema) await migration_instance.down() except TypeError: self.command_class.line(f"Not Found: {migration}") @@ -264,9 +232,7 @@ async def reset(self, migration="all"): await self.delete_migration(migration) if self.command_class: - self.command_class.line( - f"Rolled back: {migration}" - ) + self.command_class.line(f"Rolled back: {migration}") await self.delete_migrations([migration]) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/attribute.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/attribute.py index fd59ae18..a0249f1e 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/attribute.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/attribute.py @@ -29,11 +29,7 @@ def __init__(self, attributes: dict = None, **kwargs): def __setattr__(self, key: str, value): # Before _dirty_attributes is initialised (early __init__), or for # internal/meta attributes, fall back to normal object assignment. - if ( - key.startswith("_") - or key in self._META_ATTRIBUTES - or "_dirty_attributes" not in self.__dict__ - ): + if key.startswith("_") or key in self._META_ATTRIBUTES or "_dirty_attributes" not in self.__dict__: super().__setattr__(key, value) else: self.set_attribute(key, value) @@ -65,10 +61,7 @@ def get_attribute(self, key: str): if "_attributes" in self.__dict__ and key in self.__dict__["_attributes"]: value = self.__dict__["_attributes"][key] - if ( - "_dirty_attributes" in self.__dict__ - and key in self.__dict__["_dirty_attributes"] - ): + if "_dirty_attributes" in self.__dict__ and key in self.__dict__["_dirty_attributes"]: value = self.__dict__["_dirty_attributes"][key] return self.caster.get(key, value) @@ -98,11 +91,7 @@ def is_dirty(self) -> bool: return bool(self.get_dirty()) def get_dirty(self) -> dict: - return { - key: value - for key, value in self.get_attributes().items() - if not self.original_is_equivalent(key) - } + return {key: value for key, value in self.get_attributes().items() if not self.original_is_equivalent(key)} def get_attributes_for_insert(self) -> dict: # _dirty_attributes already went through set_attribute (casts applied on assignment). diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/builder.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/builder.py index 37071585..d888e25b 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/builder.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/builder.py @@ -105,11 +105,7 @@ async def get_models(self, columns=None): models = await self.connection.select(self.to_qmark(), self.get_bindings()) collection = self._model.hydrate(models) - if ( - self._eager_relation.eagers - or self._eager_relation.nested_eagers - or self._eager_relation.callback_eagers - ): + if self._eager_relation.eagers or self._eager_relation.nested_eagers or self._eager_relation.callback_eagers: await self._load_eagers(collection, self._model) return collection @@ -285,9 +281,9 @@ async def insert(self, values: dict | list) -> int | None: return await self.connection.insert(sql, bindings) async def insert_get_id( - self, - values: dict[str, Any] | list[dict[str, Any]], - sequences: str | None = None, + self, + values: dict[str, Any] | list[dict[str, Any]], + sequences: str | None = None, ) -> int | None: sql = self.grammar().compile_insert_get_id(self, values, sequences) bindings = self.clean_bindings(values) @@ -342,25 +338,19 @@ def where(self, column, *args): if inspect.isfunction(column): builder = column(self.new()) - self._wheres += ( - (QueryExpression(None, operator, SubGroupExpression(builder))), - ) + self._wheres += ((QueryExpression(None, operator, SubGroupExpression(builder))),) elif isinstance(column, dict): for key, value in column.items(): self._wheres += ((QueryExpression(key, "=", value, "value")),) elif isinstance(value, QueryBuilder): - self._wheres += ( - (QueryExpression(column, operator, SubSelectExpression(value))), - ) + self._wheres += ((QueryExpression(column, operator, SubSelectExpression(value))),) else: self._wheres += ((QueryExpression(column, operator, value, "value")),) return self def or_where(self, column, *args) -> "QueryBuilder": operator, value = self._extract_operator_value(*args) - self._wheres += ( - (QueryExpression(column, operator, value, "value", keyword="or")), - ) + self._wheres += ((QueryExpression(column, operator, value, "value", keyword="or")),) return self def join(self, table: str, column1: str, equality: str, column2: str, clause: str = "join") -> "QueryBuilder": @@ -383,9 +373,7 @@ def where_exists(self, builder: "QueryBuilder") -> "QueryBuilder": return self def or_where_exists(self, builder: "QueryBuilder") -> "QueryBuilder": - self._wheres += ( - QueryExpression(None, "EXISTS", SubSelectExpression(builder), keyword="or"), - ) + self._wheres += (QueryExpression(None, "EXISTS", SubSelectExpression(builder), keyword="or"),) return self def where_has(self, relation: str, callback=None) -> "QueryBuilder": diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/caster.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/caster.py index 3153cc08..7f2172d9 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/caster.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/caster.py @@ -209,15 +209,11 @@ def build_casts(cls, model): annotations[name] = hint annotations = { - k: v - for k, v in annotations.items() - if not isinstance(getattr(model, k, None), BaseRelationship) + k: v for k, v in annotations.items() if not isinstance(getattr(model, k, None), BaseRelationship) } # Ignore the builder - annotations = { - k: v for k, v in annotations.items() if k not in cls.IGNORE_CASTS - } + annotations = {k: v for k, v in annotations.items() if k not in cls.IGNORE_CASTS} from .fields import ModelField, FieldDescriptor # 1. Collect all potential fields (annotations + descriptors) @@ -238,11 +234,7 @@ def build_casts(cls, model): casts[field_name] = ModelCast(model_class=typ) continue - field_info = ( - descriptor.field_info - if isinstance(descriptor, FieldDescriptor) - else None - ) + field_info = descriptor.field_info if isinstance(descriptor, FieldDescriptor) else None caster = Caster.normalize_type(typ) if caster in Caster.cast_class_map: @@ -264,12 +256,7 @@ def normalize_type(t): return "bool" if t is dict or t is list: return "json" - if ( - t is pendulum.DateTime - or t is datetime.datetime - or t is datetime.date - or t is Carbon - ): + if t is pendulum.DateTime or t is datetime.datetime or t is datetime.date or t is Carbon: return "date" if t is datetime.time: return "time" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/model.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/model.py index 66c99176..6099aa8a 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/model.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/model.py @@ -174,15 +174,11 @@ def query(cls): return cls().new_query() @classmethod - async def first_or_create( - cls, search: dict, attributes: dict | None = None - ) -> "Model": + async def first_or_create(cls, search: dict, attributes: dict | None = None) -> "Model": return await cls.query().first_or_create(search, attributes) @classmethod - async def update_or_create( - cls, search: dict, attributes: dict | None = None - ) -> "Model": + async def update_or_create(cls, search: dict, attributes: dict | None = None) -> "Model": return await cls.query().update_or_create(search, attributes) @classmethod diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/observer.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/observer.py index 0ce5a7ca..d1ed499e 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/observer.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/observer.py @@ -25,6 +25,4 @@ def creating(self, model): def updating(self, model): if model.__timestamps__: - model.builder._updates += ( - UpdateQueryExpression({self.field_name: pendulum.now(self.tz)}), - ) + model.builder._updates += (UpdateQueryExpression({self.field_name: pendulum.now(self.tz)}),) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/registry.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/registry.py index 81dfca0d..a5827762 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/registry.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/models/registry.py @@ -6,9 +6,7 @@ class Registry: @classmethod def register(cls, model: type): name = model.__name__ - morph_name = ( - model.get_morph_class() if hasattr(model, "get_morph_class") else name - ) + morph_name = model.get_morph_class() if hasattr(model, "get_morph_class") else name cls._models[name] = model diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py index 15d4b7b8..9f81a926 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py @@ -33,13 +33,7 @@ def register(self): Migrator.db_manager = db def boot(self) -> None: - self.publishes( - { - Path(__file__) - .resolve() - .parent.parent.joinpath("config/database.py"): "config/database.py" - } - ) + self.publishes({Path(__file__).resolve().parent.parent.joinpath("config/database.py"): "config/database.py"}) self.commands( [ diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py index e0721662..fde3a887 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py @@ -52,9 +52,7 @@ async def _load_eagers(self, models, model): relation_key=eager, ) - async def _register_relationships_to_model( - self, related, related_result, models, relation_key - ): + async def _register_relationships_to_model(self, related, related_result, models, relation_key): if related_result and isinstance(models, Collection): map_related = self._map_related(related_result, related) for model in models: diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py index 7e79575b..44822a51 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py @@ -165,7 +165,7 @@ def _compile_insert(self, qmark=False): return self - def compile_insert(self, query: QueryBuilder, values:dict[str, Any] | list[dict[str, Any]]): + def compile_insert(self, query: QueryBuilder, values: dict[str, Any] | list[dict[str, Any]]): table = self.wrap_table(query._table) if not values: @@ -178,10 +178,7 @@ def compile_insert(self, query: QueryBuilder, values:dict[str, Any] | list[dict[ columns = self.columnize_bulk_columns(list(values[0].keys())) - parameters = ", ".join( - "({})".format(", ".join("?" for _ in record)) - for record in values - ) + parameters = ", ".join("({})".format(", ".join("?" for _ in record)) for record in values) return f"INSERT INTO {table} ({columns}) VALUES {parameters}" @@ -193,7 +190,6 @@ def compile_insert_get_id( ) -> str: return self.compile_insert(query, values) - def _compile_bulk_create(self, qmark=False): """Compiles an insert expression. @@ -211,9 +207,7 @@ def _compile_bulk_create(self, qmark=False): return self def columnize_bulk_columns(self, columns=[]): - return ", ".join( - self.column_string().format(column=x, separator="") for x in columns - ).rstrip(",") + return ", ".join(self.column_string().format(column=x, separator="") for x in columns).rstrip(",") def columnize_bulk_values(self, columns=[], qmark=False): sql = "" @@ -223,24 +217,14 @@ def columnize_bulk_values(self, columns=[], qmark=False): for y in x: if qmark: self.add_binding(y) - inner += ( - "?, " - if qmark - else self.value_string().format(value=y, separator=", ") - ) + inner += "?, " if qmark else self.value_string().format(value=y, separator=", ") inner = inner.rstrip(", ") sql += self.process_value_string().format(value=inner, separator=", ") else: if qmark: self.add_binding(x) - sql += ( - "?, " - if qmark - else self.process_value_string().format( - value="?" if qmark else x, separator=", " - ) - ) + sql += "?, " if qmark else self.process_value_string().format(value="?" if qmark else x, separator=", ") return sql.rstrip(", ") @@ -313,13 +297,13 @@ def process_joins(self, qmark=False): self.add_binding(clause.value) else: value = self._compile_value(clause.value) - on_string += f"{keyword} {self._table_column_string(clause.column)} {clause.equality} {value} " + on_string += ( + f"{keyword} {self._table_column_string(clause.column)} {clause.equality} {value} " + ) sql += self.join_string().format( foreign_table=self.process_table(join.table), - alias=( - f" AS {self.process_table(join.alias)}" if join.alias else "" - ), + alias=(f" AS {self.process_table(join.alias)}" if join.alias else ""), on=on_string, keyword=self.join_keywords[join.clause], ) @@ -359,11 +343,7 @@ def _compile_key_value_equals(self, qmark=False): else: sql += sql_string.format( column=self._table_column_string(key), - value=( - self.value_string().format(value=value, separator="") - if not qmark - else "?" - ), + value=(self.value_string().format(value=value, separator="") if not qmark else "?"), separator=", ", ) @@ -372,11 +352,7 @@ def _compile_key_value_equals(self, qmark=False): else: sql += sql_string.format( column=self._table_column_string(column), - value=( - self.value_string().format(value=value, separator=", ") - if not qmark - else "?" - ), + value=(self.value_string().format(value=value, separator=", ") if not qmark else "?"), separator=", ", ) if qmark: @@ -404,9 +380,7 @@ def process_aggregates(self): sql += ( aggregate_string.format( aggregate_function=aggregate_function, - column=( - "*" if column == "*" else self._table_column_string(column) - ), + column=("*" if column == "*" else self._table_column_string(column)), alias=self.process_alias(aggregates.alias or column), ) + ", " @@ -427,9 +401,7 @@ def process_order_by(self): if order_bys.raw: order_crit += order_bys.column if not isinstance(order_bys.bindings, (list, tuple)): - raise ValueError( - f"Bindings must be tuple or list. Received {type(order_bys.bindings)}" - ) + raise ValueError(f"Bindings must be tuple or list. Received {type(order_bys.bindings)}") if order_bys.bindings: self.add_binding(*order_bys.bindings) @@ -443,12 +415,8 @@ def process_order_by(self): if "." in column: column_string = self._table_column_string(column) else: - column_string = self.column_string().format( - column=column, separator="" - ) - order_crit += self.order_by_format().format( - column=column_string, direction=direction.upper() - ) + column_string = self.column_string().format(column=column, separator="") + order_crit += self.order_by_format().format(column=column_string, direction=direction.upper()) sql += self.order_by_string().format(order_columns=order_crit) return sql @@ -618,14 +586,10 @@ def process_wheres(self, query=None, qmark=False, strip_first_where=False): """If we have a raw query we just want to use the query supplied and don't need to compile anything. """ - sql += self.raw_query_string().format( - keyword=keyword, query=where.column - ) + sql += self.raw_query_string().format(keyword=keyword, query=where.column) if not isinstance(where.bindings, (list, tuple)): - raise ValueError( - f"Bindings must be tuple or list. Received {type(where.bindings)}" - ) + raise ValueError(f"Bindings must be tuple or list. Received {type(where.bindings)}") if where.bindings: self.add_binding(*where.bindings) @@ -670,9 +634,7 @@ def process_wheres(self, query=None, qmark=False, strip_first_where=False): keyword=keyword, ) elif value_type == "value_equals": - sql_string = self.value_equal_string().format( - value1=where.column, value2=where.value, keyword=keyword - ) + sql_string = self.value_equal_string().format(value1=where.column, value2=where.value, keyword=keyword) elif value_type == "NULL": sql_string = self.where_null_string() elif value_type == "DATE": @@ -700,11 +662,7 @@ def process_wheres(self, query=None, qmark=False, strip_first_where=False): grammar = value.builder.get_grammar() query_value = ( self.subquery_string() - .format( - query=grammar.process_wheres( - qmark=qmark, strip_first_where=True - ) - ) + .format(query=grammar.process_wheres(qmark=qmark, strip_first_where=True)) .replace("( ", "(") ) if grammar._bindings: @@ -725,9 +683,7 @@ def process_wheres(self, query=None, qmark=False, strip_first_where=False): query_value += "?, " self.add_binding(val) else: - query_value += self.value_string().format( - value=val, separator="," - ) + query_value += self.value_string().format(value=val, separator=",") query_value = query_value.rstrip(",").rstrip(", ") + ")" elif value is True and value_type != "NOT NULL": sql_string = self.get_true_column_string() @@ -932,9 +888,7 @@ def process_column(self, column, separator=""): table = None if column and "." in column: table, column = column.split(".") - return self.column_string().format( - column=column, separator=separator, table=table or self.table - ) + return self.column_string().format(column=column, separator=separator, table=table or self.table) def _table_column_string(self, column, alias=None, separator=""): """Compiles a column into the column syntax. @@ -1003,9 +957,7 @@ def drop_table_if_exists(self, table): Returns: self """ - self._sql = self.drop_table_if_exists_string().format( - table=self.process_column(table) - ) + self._sql = self.drop_table_if_exists_string().format(table=self.process_column(table)) return self def rename_table(self, current_table_name, new_table_name): @@ -1033,9 +985,7 @@ def truncate_table(self, table, foreign_keys=False): Returns: self """ - raise NotImplementedError( - f"'{self.__class__.__name__}' does not support truncating" - ) + raise NotImplementedError(f"'{self.__class__.__name__}' does not support truncating") def where_regexp_string(self): return "{keyword} {column} REGEXP {value}" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py index e8eb6a53..4ee2c167 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py @@ -120,14 +120,10 @@ def process_table(self, table): if not table: return "" if isinstance(table, str): - return ".".join( - self.table_string().format(table=t) for t in table.split(".") - ) + return ".".join(self.table_string().format(table=t) for t in table.split(".")) if table.raw: return table.name - return ".".join( - self.table_string().format(table=t) for t in table.name.split(".") - ) + return ".".join(self.table_string().format(table=t) for t in table.name.split(".")) def subquery_alias_string(self): return "AS {alias}" @@ -151,7 +147,9 @@ def column_exists_string(self): return "SHOW COLUMNS FROM {table} LIKE {value}" def table_exists_string(self): - return "SELECT * from information_schema.tables where table_name='{clean_table}' AND table_schema = '{database}'" + return ( + "SELECT * from information_schema.tables where table_name='{clean_table}' AND table_schema = '{database}'" + ) def create_column_length(self, column_type): return "({length})" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py index f40ba826..b4416353 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py @@ -6,6 +6,7 @@ if TYPE_CHECKING: from ...models.builder import QueryBuilder + class PostgresGrammar(BaseGrammar): """Postgres grammar class.""" @@ -110,9 +111,7 @@ def column_exists_string(self): return "SELECT column_name FROM information_schema.columns WHERE table_name='{clean_table}' AND column_name={value}" def table_exists_string(self): - return ( - "SELECT * FROM information_schema.tables WHERE table_name='{clean_table}'" - ) + return "SELECT * FROM information_schema.tables WHERE table_name='{clean_table}'" def create_column_length(self, column_type): if column_type in self.types_without_lengths: @@ -209,15 +208,12 @@ def truncate_table(self, table, foreign_keys=False): return f"TRUNCATE TABLE {self.wrap_table(table)}" def compile_insert_get_id( - self, - query: "QueryBuilder", - values: dict[str, Any] | list[dict[str, Any]], - sequences: str | None = None, + self, + query: "QueryBuilder", + values: dict[str, Any] | list[dict[str, Any]], + sequences: str | None = None, ) -> str: - return ( - self.compile_insert(query, values) - + f" RETURNING {self.wrap_table(sequences or 'id')}" - ) + return self.compile_insert(query, values) + f" RETURNING {self.wrap_table(sequences or 'id')}" def compile_random(self): return "random()" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py index 2853ea3a..191c1591 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py @@ -107,9 +107,7 @@ def column_exists_string(self): return "SELECT column_name FROM information_schema.columns WHERE table_name='{clean_table}' and column_name={value}" def table_exists_string(self): - return ( - "SELECT name FROM sqlite_master WHERE type='table' AND name='{clean_table}'" - ) + return "SELECT name FROM sqlite_master WHERE type='table' AND name='{clean_table}'" def to_sql(self): """Cleans up the SQL string and returns the SQL diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/support.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/support.py index 04f884a6..e6829ece 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/support.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/query/support.py @@ -29,9 +29,6 @@ def _extract_operator_value(*args): value = args[0] if operator not in operators: - raise ValueError( - "Invalid comparison operator. The operator can be %s" - % ", ".join(operators) - ) + raise ValueError("Invalid comparison operator. The operator can be %s" % ", ".join(operators)) return operator, value diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py index fb16e4c7..e6123e2b 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py @@ -4,9 +4,7 @@ class BaseRelationship: def __init__(self, fn: str | list[str], local_key=None, foreign_key=None): if not isinstance(fn, str): - raise TypeError( - f"Relationship {self.__class__.__name__} expects a string as the first argument" - ) + raise TypeError(f"Relationship {self.__class__.__name__} expects a string as the first argument") fn_str: str = fn # For type checking self.fn = lambda: registry.Registry.resolve(fn_str) @@ -61,16 +59,12 @@ def apply_query(self, foreign, owner): dict -- A dictionary of data which will be hydrated. """ klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'apply_query' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'apply_query' method") def query_where_exists(self, builder, callback, method="where_exists"): """Adds a criteria clause to the query filter for existing related records""" klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'query_where_exists' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'query_where_exists' method") def joins(self, builder, clause=None): """Helper method for adding join clauses to a relationship""" @@ -87,59 +81,41 @@ def joins(self, builder, clause=None): def get_with_count_query(self, builder, callback): """Adds a clause to the query to get the record count of the relationship""" klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'get_with_count_query' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'get_with_count_query' method") def attach(self, current_model, related_record): """Link a related model to the current model""" klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'attach' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'attach' method") def get_related(self, query, relation, eagers=None, callback=None): klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'get_related' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'get_related' method") def relate(self, related_record): klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'relate' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'relate' method") def detach(self, current_model, related_record): """Unlink a related model from the current model""" klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'detach' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'detach' method") def attach_related(self, current_model, related_record): """Unlink a related model from the current model""" klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'attach_related' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'attach_related' method") def detach_related(self, current_model, related_record): """Unlink a related model from the current model""" klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'detach_related' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'detach_related' method") def query_has(self, current_query_builder, method="where_exists"): """Adds a clause to the query to check if a relation exists""" klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'query_has' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'query_has' method") def map_related(self, related_result): klass = self.__class__.__name__ - raise NotImplementedError( - f"{klass} relationship does not implement the 'map_related' method" - ) + raise NotImplementedError(f"{klass} relationship does not implement the 'map_related' method") diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py index b2dfe25a..c25d9577 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py @@ -1,4 +1,3 @@ - from ..collection import Collection from . import BaseRelationship from fastapi_startkit.masoniteorm.models import registry @@ -29,9 +28,7 @@ def apply_query(self, foreign, owner): Returns: dict -- A dictionary of data which will be hydrated. """ - return foreign.where( - self.foreign_key, owner.__attributes__[self.local_key] - ).first() + return foreign.where(self.foreign_key, owner.__attributes__[self.local_key]).first() def query_has(self, current_query_builder, method="where_exists"): related_builder = self.get_builder() @@ -108,7 +105,5 @@ def relate(self, related_record): return ( self.get_builder() .where(self.foreign_key, related_record.__attributes__[self.local_key]) - ._set_creates_related( - {self.foreign_key: related_record.__attributes__[self.local_key]} - ) + ._set_creates_related({self.foreign_key: related_record.__attributes__[self.local_key]}) ) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py index eb4dcc59..61c6a3c9 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py @@ -100,9 +100,7 @@ async def apply_query(self, query, owner): ) if hasattr(owner, self.local_owner_key): - result.where( - f"{table1}.{self.local_owner_key}", getattr(owner, self.local_owner_key) - ) + result.where(f"{table1}.{self.local_owner_key}", getattr(owner, self.local_owner_key)) if self.with_fields: for field in self.with_fields: @@ -237,14 +235,10 @@ async def make_query(self, query, relation, eagers=None, callback=None): Collection(relation._get_value(self.local_owner_key)).unique(), ).get() else: - return await result.where( - self.local_owner_key, getattr(relation, self.local_owner_key) - ).get() + return await result.where(self.local_owner_key, getattr(relation, self.local_owner_key)).get() async def get_related(self, query, relation, eagers=None, callback=None): - final_result = await self.make_query( - query, relation, eagers=eagers, callback=callback - ) + final_result = await self.make_query(query, relation, eagers=eagers, callback=callback) builder = self.make_builder(eagers) for model in final_result: @@ -335,9 +329,7 @@ def relate(self, related_record): ) if hasattr(owner, self.local_owner_key): - result.where( - f"{table1}.{self.local_owner_key}", getattr(owner, self.local_owner_key) - ) + result.where(f"{table1}.{self.local_owner_key}", getattr(owner, self.local_owner_key)) if self.with_fields: for field in self.with_fields: @@ -349,13 +341,7 @@ def map_related(self, related_result): return related_result def register_related(self, key, model, collection): - model.add_relation( - { - key: collection.where( - f"{self._table}_id", getattr(model, self.local_owner_key) - ) - } - ) + model.add_relation({key: collection.where(f"{self._table}_id", getattr(model, self.local_owner_key))}) def joins(self, builder, clause=None): if not self._table: @@ -437,9 +423,7 @@ def query_where_exists(self, builder, callback, method="where_exists"): f"{pivot_table}.{self.local_key}", f"{builder.get_table_name()}.{self.local_owner_key}", ) - .where_in( - self.other_owner_key, callback(query.select(self.other_owner_key)) - ) + .where_in(self.other_owner_key, callback(query.select(self.other_owner_key))) ) def query_has(self, builder, method="where_exists"): @@ -503,9 +487,7 @@ def attach(self, current_model, related_record): self.foreign_key: getattr(related_record, self.other_owner_key), } - self._table = self._table or self.get_pivot_table_name( - current_model, related_record - ) + self._table = self._table or self.get_pivot_table_name(current_model, related_record) if self.with_timestamps: data.update( @@ -515,12 +497,7 @@ def attach(self, current_model, related_record): } ) - return ( - Pivot.on(current_model.get_builder().connection) - .table(self._table) - .without_global_scopes() - .create(data) - ) + return Pivot.on(current_model.get_builder().connection).table(self._table).without_global_scopes().create(data) def detach(self, current_model, related_record): data = { @@ -528,9 +505,7 @@ def detach(self, current_model, related_record): self.foreign_key: getattr(related_record, self.other_owner_key), } - self._table = self._table or self.get_pivot_table_name( - current_model, related_record - ) + self._table = self._table or self.get_pivot_table_name(current_model, related_record) return ( Pivot.on(current_model.get_builder().connection) @@ -546,9 +521,7 @@ def attach_related(self, current_model, related_record): self.foreign_key: getattr(related_record, self.other_owner_key), } - self._table = self._table or self.get_pivot_table_name( - current_model, related_record - ) + self._table = self._table or self.get_pivot_table_name(current_model, related_record) if self.with_timestamps: data.update( @@ -571,9 +544,7 @@ def detach_related(self, current_model, related_record): self.foreign_key: getattr(related_record, self.other_owner_key), } - self._table = self._table or self.get_pivot_table_name( - current_model, related_record - ) + self._table = self._table or self.get_pivot_table_name(current_model, related_record) if self.with_timestamps: data.update( diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasMany.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasMany.py index b35e2501..5e4d200d 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasMany.py @@ -15,9 +15,7 @@ def apply_query(self, foreign, owner): Returns: dict -- A dictionary of data which will be hydrated. """ - result = foreign.where( - self.foreign_key, owner.__attributes__[self.local_key] - ).get() + result = foreign.where(self.foreign_key, owner.__attributes__[self.local_key]).get() return result @@ -28,9 +26,7 @@ def set_keys(self, owner, attribute): return self def register_related(self, key, model, collection): - model.add_relation( - {key: collection.get(getattr(model, self.local_key)) or Collection()} - ) + model.add_relation({key: collection.get(getattr(model, self.local_key)) or Collection()}) def map_related(self, related_result): return related_result.group_by(self.foreign_key) @@ -39,9 +35,7 @@ async def attach(self, current_model, related_record): local_key_value = getattr(current_model, self.local_key) if not related_record.is_created(): related_record.fill({self.foreign_key: local_key_value}) - return await related_record.create( - related_record.all_attributes(), cast=True - ) + return await related_record.create(related_record.all_attributes(), cast=True) return await related_record.update({self.foreign_key: local_key_value}) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py index 4c664e93..ed9ace29 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py @@ -7,12 +7,12 @@ class HasManyThrough(BaseRelationship): """HasManyThrough Relationship Class.""" def __init__( - self, - fn=list[str], - local_foreign_key=None, - other_foreign_key=None, - local_owner_key=None, - other_owner_key=None, + self, + fn=list[str], + local_foreign_key=None, + other_foreign_key=None, + local_owner_key=None, + other_owner_key=None, ): self.fn = fn @@ -61,9 +61,7 @@ def apply_related_query(self, distant_builder, intermediary_builder, owner): intermediate_table = intermediary_builder.get_table_name() return ( - distant_builder.select( - f"{distant_table}.*, {intermediate_table}.{self.local_key}" - ) + distant_builder.select(f"{distant_table}.*, {intermediate_table}.{self.local_key}") .join( f"{intermediate_table}", f"{intermediate_table}.{self.foreign_key}", @@ -113,9 +111,7 @@ async def get_related(self, current_builder, relation, eagers=None, callback=Non if callback: callback(current_builder) - distant_builder.select( - f"{distant_table}.*, {intermediate_table}.{self.local_key}" - ).join( + distant_builder.select(f"{distant_table}.*, {intermediate_table}.{self.local_key}").join( f"{intermediate_table}", f"{intermediate_table}.{self.foreign_key}", "=", diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasOne.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasOne.py index cfb966bd..0422cc57 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasOne.py @@ -1,4 +1,3 @@ - from ..collection import Collection from .BaseRelationship import BaseRelationship from fastapi_startkit.masoniteorm.models import registry @@ -20,9 +19,7 @@ def set_keys(self, owner, attribute): return self def apply_query(self, foreign, owner): - return foreign.where( - self.foreign_key, owner.__attributes__[self.local_key] - ).first() + return foreign.where(self.foreign_key, owner.__attributes__[self.local_key]).first() async def get_related(self, query, relation, eagers=(), callback=None): builder = self.get_builder().with_(eagers) @@ -57,9 +54,7 @@ def query_has(self, current_query_builder, method="where_exists"): return related_builder def register_related(self, key, model, collection): - related = collection.where( - self.foreign_key, getattr(model, self.local_key) - ).first() + related = collection.where(self.foreign_key, getattr(model, self.local_key)).first() model.add_relation({key: related or None}) @@ -79,9 +74,7 @@ async def attach(self, current_model, related_record): local_key_value = getattr(current_model, self.local_key) if not related_record.is_created(): related_record.fill({self.foreign_key: local_key_value}) - return await related_record.create( - related_record.all_attributes(), cast=True - ) + return await related_record.create(related_record.all_attributes(), cast=True) return await related_record.update({self.foreign_key: local_key_value}) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py index c18f8373..2cb07761 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py @@ -63,9 +63,7 @@ def apply_relation_query(self, distant_builder, intermediary_builder, owner): int_table = intermediary_builder.get_table_name() return ( - distant_builder.select( - f"{dist_table}.*, {int_table}.{self.local_owner_key} as {self.local_key}" - ) + distant_builder.select(f"{dist_table}.*, {int_table}.{self.local_owner_key} as {self.local_key}") .join( f"{int_table}", f"{int_table}.{self.foreign_key}", @@ -139,9 +137,7 @@ async def get_related(self, current_builder, relation, eagers=None, callback=Non if callback: callback(current_builder) - distant_builder.select( - f"{dist_table}.*, {int_table}.{self.local_owner_key} as {self.local_key}" - ).join( + distant_builder.select(f"{dist_table}.*, {int_table}.{self.local_owner_key} as {self.local_key}").join( f"{int_table}", f"{int_table}.{self.foreign_key}", "=", diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py index ca0e60c5..af655ed5 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py @@ -75,9 +75,7 @@ def get_related(self, query, relation, eagers=None, callback=None): record_type, ).where_in( self.morph_id, - relation.pluck( - relation.first().get_primary_key(), keep_nulls=False - ).unique(), + relation.pluck(relation.first().get_primary_key(), keep_nulls=False).unique(), ) ).get() return ( @@ -87,9 +85,7 @@ def get_related(self, query, relation, eagers=None, callback=None): ) .where_in( self.morph_id, - relation.pluck( - relation.first().get_primary_key(), keep_nulls=False - ).unique(), + relation.pluck(relation.first().get_primary_key(), keep_nulls=False).unique(), ) .get() ) @@ -111,9 +107,7 @@ def get_related(self, query, relation, eagers=None, callback=None): def register_related(self, key, model, collection): record_type = self.get_record_key_lookup(model) - related = collection.where(self.morph_key, record_type).where( - self.morph_id, model.get_primary_key_value() - ) + related = collection.where(self.morph_key, record_type).where(self.morph_id, model.get_primary_key_value()) model.add_relation({key: related}) @@ -128,8 +122,6 @@ def get_record_key_lookup(self, relation): break if not record_type: - raise ValueError( - f"Could not find the record type key for the {relation} class" - ) + raise ValueError(f"Could not find the record type key for the {relation} class") return record_type diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py index 219a27fb..72ce6b48 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py @@ -91,9 +91,7 @@ def get_related(self, query, relation, eagers=None, callback=None): record_type, ).where_in( self.morph_id, - relation.pluck( - relation.first().get_primary_key(), keep_nulls=False - ).unique(), + relation.pluck(relation.first().get_primary_key(), keep_nulls=False).unique(), ) ).get() @@ -104,9 +102,7 @@ def get_related(self, query, relation, eagers=None, callback=None): ) .where_in( self.morph_id, - relation.pluck( - relation.first().get_primary_key(), keep_nulls=False - ).unique(), + relation.pluck(relation.first().get_primary_key(), keep_nulls=False).unique(), ) .get() ) @@ -129,9 +125,7 @@ def get_related(self, query, relation, eagers=None, callback=None): def register_related(self, key, model, collection): record_type = self.get_record_key_lookup(model) related = ( - collection.where(self.morph_key, record_type) - .where(self.morph_id, model.get_primary_key_value()) - .first() + collection.where(self.morph_key, record_type).where(self.morph_id, model.get_primary_key_value()).first() ) model.add_relation({key: related}) @@ -147,8 +141,6 @@ def get_record_key_lookup(self, relation): break if not record_type: - raise ValueError( - f"Could not find the record type key for the {relation} class" - ) + raise ValueError(f"Could not find the record type key for the {relation} class") return record_type diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py index bdc7270a..45f27d1e 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py @@ -32,10 +32,7 @@ def __get__(self, instance, owner): if instance.relationship_loaded(self.attribute): return instance.get_relationship(self.attribute) - return self.apply_query( - self._related_builder, - instance - ) + return self.apply_query(self._related_builder, instance) def __getattr__(self, attribute): relationship = registry.Registry.resolve(self.fn)() @@ -55,9 +52,7 @@ async def get_related(self, query, relation, eagers=None, callback=None): relations.merge( await morphed_model.where_in( f"{morphed_model.__table__}.{morphed_model.__primary_key__}", - Collection(items) - .pluck(self.morph_id, keep_nulls=False) - .unique(), + Collection(items).pluck(self.morph_id, keep_nulls=False).unique(), ).get() ) return relations @@ -69,9 +64,7 @@ async def get_related(self, query, relation, eagers=None, callback=None): def register_related(self, key, model, collection): morphed_model = self.morph_map().get(getattr(model, self.morph_key)) - related = collection.where( - morphed_model.__primary_key__, getattr(model, self.morph_id) - ).first() + related = collection.where(morphed_model.__primary_key__, getattr(model, self.morph_id)).first() model.add_relation({key: related}) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py index afda028b..f647f250 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py @@ -83,9 +83,7 @@ def get_related(self, query, relation, eagers=None, callback=None): relations.merge( morphed_model.where_in( f"{morphed_model.get_table_name()}.{morphed_model.get_primary_key()}", - Collection(items) - .pluck(self.morph_id, keep_nulls=False) - .unique(), + Collection(items).pluck(self.morph_id, keep_nulls=False).unique(), ).get() ) return relations @@ -97,9 +95,7 @@ def get_related(self, query, relation, eagers=None, callback=None): def register_related(self, key, model, collection): morphed_model = self.morph_map().get(getattr(model, self.morph_key)) - related = collection.where( - morphed_model.get_primary_key(), getattr(model, self.morph_id) - ) + related = collection.where(morphed_model.get_primary_key(), getattr(model, self.morph_id)) model.add_relation({key: related}) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/Blueprint.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/Blueprint.py index 0acccff1..6301abfa 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/Blueprint.py @@ -37,9 +37,7 @@ def string(self, column, length=255, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "string", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "string", length=length, nullable=nullable) return self @@ -56,9 +54,7 @@ def tiny_integer(self, column, length=1, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "tiny_integer", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "tiny_integer", length=length, nullable=nullable) return self def small_integer(self, column, length=5, nullable=False): @@ -74,9 +70,7 @@ def small_integer(self, column, length=5, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "small_integer", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "small_integer", length=length, nullable=nullable) return self def medium_integer(self, column, length=7, nullable=False): @@ -92,9 +86,7 @@ def medium_integer(self, column, length=7, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "medium_integer", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "medium_integer", length=length, nullable=nullable) return self def integer(self, column, length=11, nullable=False): @@ -110,9 +102,7 @@ def integer(self, column, length=11, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "integer", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "integer", length=length, nullable=nullable) return self def big_integer(self, column, length=32, nullable=False): @@ -128,9 +118,7 @@ def big_integer(self, column, length=32, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "big_integer", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "big_integer", length=length, nullable=nullable) return self def unsigned_big_integer(self, column, length=32, nullable=False): @@ -166,9 +154,7 @@ def increments(self, column, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "increments", nullable=nullable - ) + self._last_column = self.table.add_column(column, "increments", nullable=nullable) self.primary(column) return self @@ -185,9 +171,7 @@ def tiny_increments(self, column, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "tiny_increments", nullable=nullable - ) + self._last_column = self.table.add_column(column, "tiny_increments", nullable=nullable) self.primary(column) return self @@ -215,9 +199,7 @@ def uuid(self, column, nullable=False, length=36): Returns: self """ - self._last_column = self.table.add_column( - column, "uuid", nullable=nullable, length=length - ) + self._last_column = self.table.add_column(column, "uuid", nullable=nullable, length=length) return self def big_increments(self, column, nullable=False): @@ -232,9 +214,7 @@ def big_increments(self, column, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "big_increments", nullable=nullable - ) + self._last_column = self.table.add_column(column, "big_increments", nullable=nullable) self.primary(column) return self @@ -291,9 +271,7 @@ def char(self, column, length=1, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "char", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "char", length=length, nullable=nullable) return self def date(self, column, nullable=False): @@ -361,9 +339,7 @@ def timestamp(self, column, nullable=False, now=False): self """ - self._last_column = self.table.add_column( - column, "timestamp", nullable=nullable - ) + self._last_column = self.table.add_column(column, "timestamp", nullable=nullable) if now: self._last_column.use_current() @@ -461,9 +437,7 @@ def enum(self, column, options=None, nullable=False): for option in options: new_options += "'{}',".format(option) new_options = new_options.rstrip(",") - self._last_column = self.table.add_column( - column, "enum", length="255", values=options, nullable=nullable - ) + self._last_column = self.table.add_column(column, "enum", length="255", values=options, nullable=nullable) return self def text(self, column, length=None, nullable=False): @@ -479,9 +453,7 @@ def text(self, column, length=None, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "text", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "text", length=length, nullable=nullable) return self def tiny_text(self, column, length=None, nullable=False): @@ -497,9 +469,7 @@ def tiny_text(self, column, length=None, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "tiny_text", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "tiny_text", length=length, nullable=nullable) return self def unsigned_decimal(self, column, length=17, precision=6, nullable=False): @@ -537,9 +507,7 @@ def long_text(self, column, length=None, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "long_text", length=length, nullable=nullable - ) + self._last_column = self.table.add_column(column, "long_text", length=length, nullable=nullable) return self def json(self, column, nullable=False): @@ -584,9 +552,7 @@ def inet(self, column, length=255, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "inet", length=255, nullable=nullable - ) + self._last_column = self.table.add_column(column, "inet", length=255, nullable=nullable) return self def cidr(self, column, length=255, nullable=False): @@ -601,9 +567,7 @@ def cidr(self, column, length=255, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "cidr", length=255, nullable=nullable - ) + self._last_column = self.table.add_column(column, "cidr", length=255, nullable=nullable) return self def macaddr(self, column, length=255, nullable=False): @@ -618,9 +582,7 @@ def macaddr(self, column, length=255, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "macaddr", length=255, nullable=nullable - ) + self._last_column = self.table.add_column(column, "macaddr", length=255, nullable=nullable) return self def point(self, column, nullable=False): @@ -665,9 +627,7 @@ def year(self, column, length=4, default=None, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "year", length=length, nullable=nullable, default=default - ) + self._last_column = self.table.add_column(column, "year", length=length, nullable=nullable, default=default) return self def unsigned(self, column=None, length=None, nullable=False): @@ -687,9 +647,7 @@ def unsigned(self, column=None, length=None, nullable=False): self._last_column.unsigned() return self - self._last_column = self.table.add_column( - column, "unsigned", length=length, nullable=nullable - ).unsigned() + self._last_column = self.table.add_column(column, "unsigned", length=length, nullable=nullable).unsigned() return self def unsigned_integer(self, column, nullable=False): @@ -704,9 +662,7 @@ def unsigned_integer(self, column, nullable=False): Returns: self """ - self._last_column = self.table.add_column( - column, "integer", nullable=nullable - ).unsigned() + self._last_column = self.table.add_column(column, "integer", nullable=nullable).unsigned() return self def morphs(self, column, nullable=False, indexes=True): @@ -722,11 +678,7 @@ def morphs(self, column, nullable=False, indexes=True): self """ _columns = [] - _columns.append( - self.table.add_column( - "{}_id".format(column), "integer", nullable=nullable - ).unsigned() - ) + _columns.append(self.table.add_column("{}_id".format(column), "integer", nullable=nullable).unsigned()) _columns.append( self.table.add_column( "{}_type".format(column), @@ -869,9 +821,7 @@ def fulltext(self, column=None, name=None): if not isinstance(column, list): column = [column] - self.table.add_constraint( - name or f"{'_'.join(column)}_fulltext", "fulltext", column - ) + self.table.add_constraint(name or f"{'_'.join(column)}_fulltext", "fulltext", column) return self @@ -907,9 +857,7 @@ def add_foreign(self, columns, name=None): columns {string} -- The name of the from_column . to_column . table """ if len(columns.split(".")) != 3: - raise Exception( - "Wrong add_foreign argument, the struncture is from_column.to_column.table" - ) + raise Exception("Wrong add_foreign argument, the struncture is from_column.to_column.table") from_column, to_column, table = columns.split(".") return self.foreign(from_column, name=name).references(to_column).on(table) @@ -922,9 +870,7 @@ def foreign(self, column, name=None): Returns: self """ - self._last_foreign = self.table.add_foreign_key( - column, name=name or f"{self.table.name}_{column}_foreign" - ) + self._last_foreign = self.table.add_foreign_key(column, name=name or f"{self.table.name}_{column}_foreign") return self def foreign_id(self, column): @@ -960,11 +906,7 @@ def foreign_id_for(self, model, column=None): """ clm = column if column else model.get_foreign_key() - return ( - self.foreign_id(clm) - if model.get_primary_key_type() == "int" - else self.foreign_uuid(column) - ) + return self.foreign_id(clm) if model.get_primary_key_type() == "int" else self.foreign_uuid(column) def references(self, column): """Sets the other column on the foreign table that the local column will use to reference. diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/Table.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/Table.py index d010c92a..419eeb62 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/Table.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/Table.py @@ -47,9 +47,7 @@ def add_column( return column def add_constraint(self, name, constraint_type, columns=None): - self.added_constraints.update( - {name: Constraint(name, constraint_type, columns=columns or [])} - ) + self.added_constraints.update({name: Constraint(name, constraint_type, columns=columns or [])}) def add_foreign_key(self, column, table=None, foreign_column=None, name=None): foreign_key = ForeignKeyConstraint( diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py index a33eaebc..87d822d2 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py @@ -63,30 +63,18 @@ class MSSQLPlatform(Platform): def compile_create_sql(self, table, if_not_exists=False): sql = [] - table_create_format = ( - self.create_if_not_exists_format() - if if_not_exists - else self.create_format() - ) + table_create_format = self.create_if_not_exists_format() if if_not_exists else self.create_format() sql.append( table_create_format.format( table=self.wrap_table(table.name), columns=", ".join(self.columnize(table.get_added_columns())).strip(), constraints=( - ", " - + ", ".join( - self.constraintize(table.get_added_constraints(), table) - ) + ", " + ", ".join(self.constraintize(table.get_added_constraints(), table)) if table.get_added_constraints() else "" ), foreign_keys=( - ", " - + ", ".join( - self.foreign_key_constraintize( - table.name, table.added_foreign_keys - ) - ) + ", " + ", ".join(self.foreign_key_constraintize(table.name, table.added_foreign_keys)) if table.added_foreign_keys else "" ), @@ -112,8 +100,7 @@ def compile_alter_sql(self, table): sql.append( self.alter_format().format( table=self.wrap_table(table.name), - columns="ADD " - + ", ".join(self.columnize(table.added_columns)).strip(), + columns="ADD " + ", ".join(self.columnize(table.added_columns)).strip(), ) ) @@ -121,16 +108,13 @@ def compile_alter_sql(self, table): sql.append( self.alter_format().format( table=self.wrap_table(table.name), - columns="ALTER COLUMN " - + ", ".join(self.columnize(table.changed_columns)).strip(), + columns="ALTER COLUMN " + ", ".join(self.columnize(table.changed_columns)).strip(), ) ) if table.renamed_columns: for name, column in table.get_renamed_columns().items(): - sql.append( - self.rename_column_string(table.name, name, column.name).strip() - ) + sql.append(self.rename_column_string(table.name, name, column.name).strip()) if table.dropped_columns: dropped_sql = [] @@ -152,21 +136,21 @@ def compile_alter_sql(self, table): ) in table.get_added_foreign_keys().items(): cascade = "" if foreign_key_constraint.delete_action: - cascade += f" ON DELETE {self.foreign_key_actions.get(foreign_key_constraint.delete_action.lower())}" + cascade += ( + f" ON DELETE {self.foreign_key_actions.get(foreign_key_constraint.delete_action.lower())}" + ) if foreign_key_constraint.update_action: - cascade += f" ON UPDATE {self.foreign_key_actions.get(foreign_key_constraint.update_action.lower())}" + cascade += ( + f" ON UPDATE {self.foreign_key_actions.get(foreign_key_constraint.update_action.lower())}" + ) sql.append( f"ALTER TABLE {self.wrap_table(table.name)} ADD " + self.get_foreign_key_constraint_string().format( constraint_name=foreign_key_constraint.constraint_name, column=self.wrap_column(column), table=self.wrap_table(table.name), - foreign_table=self.wrap_table( - foreign_key_constraint.foreign_table - ), - foreign_column=self.wrap_column( - foreign_key_constraint.foreign_column - ), + foreign_table=self.wrap_table(foreign_key_constraint.foreign_table), + foreign_column=self.wrap_column(foreign_key_constraint.foreign_column), cascade=cascade, ) ) @@ -174,9 +158,7 @@ def compile_alter_sql(self, table): if table.dropped_foreign_keys: constraints = table.dropped_foreign_keys for constraint in constraints: - sql.append( - f"ALTER TABLE {self.wrap_table(table.name)} DROP CONSTRAINT {constraint}" - ) + sql.append(f"ALTER TABLE {self.wrap_table(table.name)} DROP CONSTRAINT {constraint}") if table.added_indexes: for name, index in table.added_indexes.items(): @@ -188,18 +170,12 @@ def compile_alter_sql(self, table): ) ) - if ( - table.removed_indexes - or table.removed_unique_indexes - or table.dropped_primary_keys - ): + if table.removed_indexes or table.removed_unique_indexes or table.dropped_primary_keys: constraints = table.removed_indexes constraints += table.removed_unique_indexes constraints += table.dropped_primary_keys for constraint in constraints: - sql.append( - f"DROP INDEX {self.wrap_table(table.name)}.{self.wrap_table(constraint)}" - ) + sql.append(f"DROP INDEX {self.wrap_table(table.name)}.{self.wrap_table(constraint)}") if table.added_constraints: for name, constraint in table.added_constraints.items(): @@ -228,9 +204,7 @@ def columnize(self, columns): sql = [] for name, column in columns.items(): if column.length: - length = self.create_column_length(column.column_type).format( - length=column.length - ) + length = self.create_column_length(column.column_type).format(length=column.length) else: length = "" @@ -280,9 +254,7 @@ def constraintize(self, constraints, table): sql = [] for name, constraint in constraints.items(): sql.append( - getattr( - self, f"get_{constraint.constraint_type}_constraint_string" - )().format( + getattr(self, f"get_{constraint.constraint_type}_constraint_string")().format( columns=", ".join(constraint._columns), name_columns="_".join(constraint._columns), constraint_name=constraint.name, @@ -302,15 +274,15 @@ def create_format(self): return "CREATE TABLE {table} ({columns}{constraints}{foreign_keys})" def create_if_not_exists_format(self): - return ( - "CREATE TABLE IF NOT EXISTS {table} ({columns}{constraints}{foreign_keys})" - ) + return "CREATE TABLE IF NOT EXISTS {table} ({columns}{constraints}{foreign_keys})" def alter_format(self): return "ALTER TABLE {table} {columns}" def get_foreign_key_constraint_string(self): - return "CONSTRAINT {constraint_name} FOREIGN KEY ({column}) REFERENCES {foreign_table}({foreign_column}){cascade}" + return ( + "CONSTRAINT {constraint_name} FOREIGN KEY ({column}) REFERENCES {foreign_table}({foreign_column}){cascade}" + ) def get_primary_key_constraint_string(self): return "CONSTRAINT {constraint_name} PRIMARY KEY ({columns})" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py index e21764ef..d204b961 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py @@ -63,9 +63,7 @@ def columnize(self, columns): sql = [] for name, column in columns.items(): if column.length: - length = self.create_column_length(column.column_type).format( - length=column.length - ) + length = self.create_column_length(column.column_type).format(length=column.length) else: length = "" @@ -101,12 +99,8 @@ def columnize(self, columns): constraint=constraint, nullable=self.premapped_nulls.get(column.is_null) or "", default=default, - signed=( - " " + self.signed.get(column._signed) if column._signed else "" - ), - comment=( - "COMMENT '" + column.comment + "'" if column.comment else "" - ), + signed=(" " + self.signed.get(column._signed) if column._signed else ""), + comment=("COMMENT '" + column.comment + "'" if column.comment else ""), ) .strip() ) @@ -115,30 +109,18 @@ def columnize(self, columns): def compile_create_sql(self, table, if_not_exists=False): sql = [] - table_create_format = ( - self.create_if_not_exists_format() - if if_not_exists - else self.create_format() - ) + table_create_format = self.create_if_not_exists_format() if if_not_exists else self.create_format() sql.append( table_create_format.format( table=self.get_table_string().format(table=table.name), columns=", ".join(self.columnize(table.get_added_columns())).strip(), constraints=( - ", " - + ", ".join( - self.constraintize(table.get_added_constraints(), table) - ) + ", " + ", ".join(self.constraintize(table.get_added_constraints(), table)) if table.get_added_constraints() else "" ), foreign_keys=( - ", " - + ", ".join( - self.foreign_key_constraintize( - table.name, table.added_foreign_keys - ) - ) + ", " + ", ".join(self.foreign_key_constraintize(table.name, table.added_foreign_keys)) if table.added_foreign_keys else "" ), @@ -166,9 +148,7 @@ def compile_alter_sql(self, table): for name, column in table.get_added_columns().items(): if column.length: - length = self.create_column_length(column.column_type).format( - length=column.length - ) + length = self.create_column_length(column.column_type).format(length=column.length) else: length = "" @@ -199,21 +179,9 @@ def compile_alter_sql(self, table): constraint="PRIMARY KEY" if column.primary else "", nullable="NULL" if column.is_null else "NOT NULL", default=default, - signed=( - " " + self.signed.get(column._signed) - if column._signed - else "" - ), - after=( - (" AFTER " + self.wrap_column(column._after)) - if column._after - else "" - ), - comment=( - " COMMENT '" + column.comment + "'" - if column.comment - else "" - ), + signed=(" " + self.signed.get(column._signed) if column._signed else ""), + after=((" AFTER " + self.wrap_column(column._after)) if column._after else ""), + comment=(" COMMENT '" + column.comment + "'" if column.comment else ""), ) .strip() ) @@ -231,9 +199,7 @@ def compile_alter_sql(self, table): for name, column in table.get_renamed_columns().items(): if column.length: - length = self.create_column_length(column.column_type).format( - length=column.length - ) + length = self.create_column_length(column.column_type).format(length=column.length) else: length = "" @@ -257,9 +223,7 @@ def compile_alter_sql(self, table): sql.append( self.alter_format().format( table=self.wrap_table(table.name), - columns=", ".join( - f"MODIFY {x}" for x in self.columnize(table.changed_columns) - ), + columns=", ".join(f"MODIFY {x}" for x in self.columnize(table.changed_columns)), ) ) @@ -268,9 +232,7 @@ def compile_alter_sql(self, table): for name in table.get_dropped_columns(): dropped_sql.append( - self.drop_column_string() - .format(name=self.get_column_string().format(column=name)) - .strip() + self.drop_column_string().format(name=self.get_column_string().format(column=name)).strip() ) sql.append( @@ -287,9 +249,13 @@ def compile_alter_sql(self, table): ) in table.get_added_foreign_keys().items(): cascade = "" if foreign_key_constraint.delete_action: - cascade += f" ON DELETE {self.foreign_key_actions.get(foreign_key_constraint.delete_action.lower())}" + cascade += ( + f" ON DELETE {self.foreign_key_actions.get(foreign_key_constraint.delete_action.lower())}" + ) if foreign_key_constraint.update_action: - cascade += f" ON UPDATE {self.foreign_key_actions.get(foreign_key_constraint.update_action.lower())}" + cascade += ( + f" ON UPDATE {self.foreign_key_actions.get(foreign_key_constraint.update_action.lower())}" + ) sql.append( f"ALTER TABLE {self.wrap_table(table.name)} ADD " + self.get_foreign_key_constraint_string().format( @@ -305,9 +271,7 @@ def compile_alter_sql(self, table): if table.dropped_foreign_keys: constraints = table.dropped_foreign_keys for constraint in constraints: - sql.append( - f"ALTER TABLE {self.wrap_table(table.name)} DROP FOREIGN KEY {constraint}" - ) + sql.append(f"ALTER TABLE {self.wrap_table(table.name)} DROP FOREIGN KEY {constraint}") if table.added_indexes: for name, index in table.added_indexes.items(): @@ -334,22 +298,14 @@ def compile_alter_sql(self, table): f"ALTER TABLE {self.wrap_table(table.name)} ADD CONSTRAINT {constraint.name} PRIMARY KEY ({','.join(constraint._columns)})" ) - if ( - table.removed_indexes - or table.removed_unique_indexes - or table.dropped_primary_keys - ): + if table.removed_indexes or table.removed_unique_indexes or table.dropped_primary_keys: constraints = table.removed_indexes constraints += table.removed_unique_indexes constraints += table.dropped_primary_keys for constraint in constraints: - sql.append( - f"ALTER TABLE {self.wrap_table(table.name)} DROP INDEX {constraint}" - ) + sql.append(f"ALTER TABLE {self.wrap_table(table.name)} DROP INDEX {constraint}") if table.comment: - sql.append( - f"ALTER TABLE {self.wrap_table(table.name)} COMMENT '{table.comment}'" - ) + sql.append(f"ALTER TABLE {self.wrap_table(table.name)} COMMENT '{table.comment}'") return sql def add_column_string(self): @@ -371,9 +327,7 @@ def constraintize(self, constraints, table): sql = [] for name, constraint in constraints.items(): sql.append( - getattr( - self, f"get_{constraint.constraint_type}_constraint_string" - )().format( + getattr(self, f"get_{constraint.constraint_type}_constraint_string")().format( columns=", ".join(constraint._columns), name_columns="_".join(constraint._columns), table=table.name, @@ -399,7 +353,9 @@ def alter_format(self): return "ALTER TABLE {table} {columns}" def get_foreign_key_constraint_string(self): - return "CONSTRAINT {constraint_name} FOREIGN KEY ({column}) REFERENCES {foreign_table}({foreign_column}){cascade}" + return ( + "CONSTRAINT {constraint_name} FOREIGN KEY ({column}) REFERENCES {foreign_table}({foreign_column}){cascade}" + ) def get_primary_key_constraint_string(self): return "CONSTRAINT {constraint_name} PRIMARY KEY ({columns})" @@ -430,7 +386,9 @@ def compile_drop_table(self, table): return f"DROP TABLE {self.wrap_table(table)}" def compile_column_exists(self, table, column): - return f"SELECT column_name FROM information_schema.columns WHERE table_name='{table}' and column_name='{column}'" + return ( + f"SELECT column_name FROM information_schema.columns WHERE table_name='{table}' and column_name='{column}'" + ) def compile_get_all_tables(self, database, schema=None): return f"SELECT table_name FROM information_schema.tables WHERE table_schema = '{database}'" @@ -442,9 +400,7 @@ async def get_current_schema(self, connection, table_name, schema=None): reversed_type_map = {v: k for k, v in self.type_map.items()} for column in result: - column_type = self.get_column_type( - reversed_type_map, column["Type"].upper() - ) + column_type = self.get_column_type(reversed_type_map, column["Type"].upper()) length = self.get_column_length(column["Type"]) default = column.get("Default") diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py index 4b3ae2b7..2f311aa5 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py @@ -14,9 +14,7 @@ def columnize(self, columns): sql = [] for name, column in columns.items(): if column.length: - length = self.create_column_length(column.column_type).format( - length=column.length - ) + length = self.create_column_length(column.column_type).format(length=column.length) else: length = "" @@ -79,9 +77,9 @@ def constraintize(self, constraints): sql = [] for name, constraint in constraints.items(): sql.append( - getattr( - self, f"get_{constraint.constraint_type}_constraint_string" - )().format(columns=", ".join(constraint._columns)) + getattr(self, f"get_{constraint.constraint_type}_constraint_string")().format( + columns=", ".join(constraint._columns) + ) ) return sql diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py index 5f0a7716..36058664 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py @@ -75,30 +75,18 @@ class PostgresPlatform(Platform): def compile_create_sql(self, table, if_not_exists=False): sql = [] - table_create_format = ( - self.create_if_not_exists_format() - if if_not_exists - else self.create_format() - ) + table_create_format = self.create_if_not_exists_format() if if_not_exists else self.create_format() sql.append( table_create_format.format( table=self.wrap_table(table.name), columns=", ".join(self.columnize(table.get_added_columns())).strip(), constraints=( - ", " - + ", ".join( - self.constraintize(table.get_added_constraints(), table) - ) + ", " + ", ".join(self.constraintize(table.get_added_constraints(), table)) if table.get_added_constraints() else "" ), foreign_keys=( - ", " - + ", ".join( - self.foreign_key_constraintize( - table.name, table.added_foreign_keys - ) - ) + ", " + ", ".join(self.foreign_key_constraintize(table.name, table.added_foreign_keys)) if table.added_foreign_keys else "" ), @@ -117,9 +105,7 @@ def compile_create_sql(self, table, if_not_exists=False): for name, column in table.get_added_columns().items(): if column.comment: - sql.append( - f"""COMMENT ON COLUMN "{table.name}"."{name}" is '{column.comment}'""" - ) + sql.append(f"""COMMENT ON COLUMN "{table.name}"."{name}" is '{column.comment}'""") if table.comment: sql.append(f"""COMMENT ON TABLE "{table.name}" is '{table.comment}'""") @@ -130,9 +116,7 @@ def columnize(self, columns): sql = [] for name, column in columns.items(): if column.length: - length = self.create_column_length(column.column_type).format( - length=column.length - ) + length = self.create_column_length(column.column_type).format(length=column.length) else: length = "" @@ -183,9 +167,7 @@ def compile_alter_sql(self, table): for name, column in table.get_added_columns().items(): if column.length: - length = self.create_column_length(column.column_type).format( - length=column.length - ) + length = self.create_column_length(column.column_type).format(length=column.length) else: length = "" @@ -240,9 +222,7 @@ def compile_alter_sql(self, table): for name, column in table.get_renamed_columns().items(): if column.length: - length = self.create_column_length(column.column_type).format( - length=column.length - ) + length = self.create_column_length(column.column_type).format(length=column.length) else: length = "" @@ -266,11 +246,7 @@ def compile_alter_sql(self, table): dropped_sql = [] for name in table.get_dropped_columns(): - dropped_sql.append( - self.drop_column_string() - .format(name=self.wrap_column(name)) - .strip() - ) + dropped_sql.append(self.drop_column_string().format(name=self.wrap_column(name)).strip()) sql.append( self.alter_format().format( @@ -305,18 +281,12 @@ def compile_alter_sql(self, table): ) if column.is_null: - changed_sql.append( - f"ALTER COLUMN {self.wrap_column(name)} DROP NOT NULL" - ) + changed_sql.append(f"ALTER COLUMN {self.wrap_column(name)} DROP NOT NULL") else: - changed_sql.append( - f"ALTER COLUMN {self.wrap_column(name)} SET NOT NULL" - ) + changed_sql.append(f"ALTER COLUMN {self.wrap_column(name)} SET NOT NULL") if column.default is not None: - changed_sql.append( - f"ALTER COLUMN {self.wrap_column(name)} SET DEFAULT {column.default}" - ) + changed_sql.append(f"ALTER COLUMN {self.wrap_column(name)} SET DEFAULT {column.default}") sql.append( self.alter_format().format( @@ -331,21 +301,21 @@ def compile_alter_sql(self, table): ) in table.get_added_foreign_keys().items(): cascade = "" if foreign_key_constraint.delete_action: - cascade += f" ON DELETE {self.foreign_key_actions.get(foreign_key_constraint.delete_action.lower())}" + cascade += ( + f" ON DELETE {self.foreign_key_actions.get(foreign_key_constraint.delete_action.lower())}" + ) if foreign_key_constraint.update_action: - cascade += f" ON UPDATE {self.foreign_key_actions.get(foreign_key_constraint.update_action.lower())}" + cascade += ( + f" ON UPDATE {self.foreign_key_actions.get(foreign_key_constraint.update_action.lower())}" + ) sql.append( f"ALTER TABLE {self.wrap_table(table.name)} ADD " + self.get_foreign_key_constraint_string().format( column=self.wrap_column(column), constraint_name=foreign_key_constraint.constraint_name, table=self.wrap_table(table.name), - foreign_table=self.wrap_table( - foreign_key_constraint.foreign_table - ), - foreign_column=self.wrap_column( - foreign_key_constraint.foreign_column - ), + foreign_table=self.wrap_table(foreign_key_constraint.foreign_table), + foreign_column=self.wrap_column(foreign_key_constraint.foreign_column), cascade=cascade, ) ) @@ -355,18 +325,12 @@ def compile_alter_sql(self, table): for constraint in constraints: sql.append(f"DROP INDEX {constraint}") - if ( - table.dropped_foreign_keys - or table.removed_unique_indexes - or table.dropped_primary_keys - ): + if table.dropped_foreign_keys or table.removed_unique_indexes or table.dropped_primary_keys: constraints = table.dropped_foreign_keys constraints += table.removed_unique_indexes constraints += table.dropped_primary_keys for constraint in constraints: - sql.append( - f"ALTER TABLE {self.wrap_table(table.name)} DROP CONSTRAINT {constraint}" - ) + sql.append(f"ALTER TABLE {self.wrap_table(table.name)} DROP CONSTRAINT {constraint}") if table.added_indexes: for name, index in table.added_indexes.items(): @@ -396,9 +360,7 @@ def compile_alter_sql(self, table): ) if table.comment: - sql.append( - f"""COMMENT ON TABLE {self.wrap_table(table.name)} is '{table.comment}'""" - ) + sql.append(f"""COMMENT ON TABLE {self.wrap_table(table.name)} is '{table.comment}'""") return sql @@ -427,9 +389,7 @@ def constraintize(self, constraints, table): sql = [] for name, constraint in constraints.items(): sql.append( - getattr( - self, f"get_{constraint.constraint_type}_constraint_string" - )().format( + getattr(self, f"get_{constraint.constraint_type}_constraint_string")().format( columns=", ".join(constraint._columns), name_columns="_".join(constraint._columns), constraint_name=constraint.name, @@ -442,12 +402,12 @@ def create_format(self): return "CREATE TABLE {table} ({columns}{constraints}{foreign_keys})" def create_if_not_exists_format(self): - return ( - "CREATE TABLE IF NOT EXISTS {table} ({columns}{constraints}{foreign_keys})" - ) + return "CREATE TABLE IF NOT EXISTS {table} ({columns}{constraints}{foreign_keys})" def get_foreign_key_constraint_string(self): - return "CONSTRAINT {constraint_name} FOREIGN KEY ({column}) REFERENCES {foreign_table}({foreign_column}){cascade}" + return ( + "CONSTRAINT {constraint_name} FOREIGN KEY ({column}) REFERENCES {foreign_table}({foreign_column}){cascade}" + ) def get_primary_key_constraint_string(self): return "CONSTRAINT {constraint_name} PRIMARY KEY ({columns})" @@ -487,15 +447,15 @@ def compile_drop_table(self, table): return f"DROP TABLE {self.wrap_table(table)} CASCADE" def compile_column_exists(self, table, column): - return f"SELECT column_name FROM information_schema.columns WHERE table_name='{table}' and column_name='{column}'" + return ( + f"SELECT column_name FROM information_schema.columns WHERE table_name='{table}' and column_name='{column}'" + ) def compile_get_all_tables(self, database=None, schema=None): return f"SELECT table_name FROM information_schema.tables WHERE table_schema = '{schema or 'public'}' AND table_catalog = '{database}' AND table_type = 'BASE TABLE'" async def get_current_schema(self, connection, table_name, schema=None): - sql = self.table_information_string().format( - table=table_name, schema=schema or "public" - ) + sql = self.table_information_string().format(table=table_name, schema=schema or "public") reversed_type_map = {v: k for k, v in self.type_map.items()} reversed_type_map.update(self.table_info_map) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py index d58dde0f..d95e4186 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py @@ -65,11 +65,7 @@ class SQLitePlatform(Platform): def compile_create_sql(self, table, if_not_exists=False): sql = [] - table_create_format = ( - self.create_if_not_exists_format() - if if_not_exists - else self.create_format() - ) + table_create_format = self.create_if_not_exists_format() if if_not_exists else self.create_format() sql.append( table_create_format.format( table=self.get_table_string().format(table=table.name).strip(), @@ -80,12 +76,7 @@ def compile_create_sql(self, table, if_not_exists=False): else "" ), foreign_keys=( - ", " - + ", ".join( - self.foreign_key_constraintize( - table.name, table.added_foreign_keys - ) - ) + ", " + ", ".join(self.foreign_key_constraintize(table.name, table.added_foreign_keys)) if table.added_foreign_keys else "" ), @@ -94,9 +85,7 @@ def compile_create_sql(self, table, if_not_exists=False): if table.added_indexes: for name, index in table.added_indexes.items(): - sql.append( - f"CREATE INDEX {index.name} ON {self.wrap_table(table.name)}({','.join(index.column)})" - ) + sql.append(f"CREATE INDEX {index.name} ON {self.wrap_table(table.name)}({','.join(index.column)})") return sql @@ -104,9 +93,7 @@ def columnize(self, columns): sql = [] for name, column in columns.items(): if column.length: - length = self.create_column_length(column.column_type).format( - length=column.length - ) + length = self.create_column_length(column.column_type).format(length=column.length) else: length = "" @@ -142,8 +129,7 @@ def columnize(self, columns): length=length, signed=( " " + self.signed.get(column._signed) - if column.column_type not in self.types_without_signs - and column._signed + if column.column_type not in self.types_without_signs and column._signed else "" ), constraint=constraint, @@ -197,20 +183,14 @@ def compile_alter_sql(self, diff): default=default, signed=( " " + self.signed.get(column._signed) - if column.column_type not in self.types_without_signs - and column._signed + if column.column_type not in self.types_without_signs and column._signed else "" ), constraint=constraint, ) .strip() ) - if ( - diff.renamed_columns - or diff.dropped_columns - or diff.changed_columns - or diff.added_foreign_keys - ): + if diff.renamed_columns or diff.dropped_columns or diff.changed_columns or diff.added_foreign_keys: original_columns = dict(diff.from_table.added_columns) # pop off the dropped columns. No need for them here for column in diff.dropped_columns: @@ -236,18 +216,12 @@ def compile_alter_sql(self, diff): table=self.get_table_string().format(table=diff.name).strip(), columns=", ".join(self.columnize(columns)).strip(), constraints=( - ", " - + ", ".join(self.constraintize(diff.get_added_constraints())) + ", " + ", ".join(self.constraintize(diff.get_added_constraints())) if diff.get_added_constraints() else "" ), foreign_keys=( - ", " - + ", ".join( - self.foreign_key_constraintize( - diff.name, diff.added_foreign_keys - ) - ) + ", " + ", ".join(self.foreign_key_constraintize(diff.name, diff.added_foreign_keys)) if diff.added_foreign_keys else "" ), @@ -277,9 +251,7 @@ def compile_alter_sql(self, diff): if diff.added_indexes: for name, index in diff.added_indexes.items(): - sql.append( - f"CREATE INDEX {index.name} ON {self.wrap_table(diff.name)}({','.join(index.column)})" - ) + sql.append(f"CREATE INDEX {index.name} ON {self.wrap_table(diff.name)}({','.join(index.column)})") if diff.added_constraints: for name, constraint in diff.added_constraints.items(): if constraint.constraint_type == "unique": @@ -297,9 +269,7 @@ def create_format(self): return "CREATE TABLE {table} ({columns}{constraints}{foreign_keys})" def create_if_not_exists_format(self): - return ( - "CREATE TABLE IF NOT EXISTS {table} ({columns}{constraints}{foreign_keys})" - ) + return "CREATE TABLE IF NOT EXISTS {table} ({columns}{constraints}{foreign_keys})" def get_table_string(self): return '"{table}"' @@ -322,7 +292,9 @@ def get_unique_constraint_string(self): return "UNIQUE({columns})" def get_foreign_key_constraint_string(self): - return "CONSTRAINT {constraint_name} FOREIGN KEY ({column}) REFERENCES {foreign_table}({foreign_column}){cascade}" + return ( + "CONSTRAINT {constraint_name} FOREIGN KEY ({column}) REFERENCES {foreign_table}({foreign_column}){cascade}" + ) def get_primary_key_constraint_string(self): return "CONSTRAINT {constraint_name} PRIMARY KEY ({columns})" @@ -331,9 +303,7 @@ def constraintize(self, constraints): sql = [] for name, constraint in constraints.items(): sql.append( - getattr( - self, f"get_{constraint.constraint_type}_constraint_string" - )().format( + getattr(self, f"get_{constraint.constraint_type}_constraint_string")().format( columns=", ".join(constraint.columns), constraint_name=constraint.name, ) @@ -375,9 +345,7 @@ async def get_current_schema(self, connection, table_name, schema=None): result = await connection.select(sql, ()) for column in result: - column_type = self.get_column_type( - reversed_type_map, column["type"].upper() - ) + column_type = self.get_column_type(reversed_type_map, column["type"].upper()) length = self.get_column_length(column["type"]) # find default @@ -429,7 +397,9 @@ def compile_table_exists(self, table, database=None, schema=None): return f"SELECT name FROM sqlite_master WHERE type='table' AND name='{table}'" def compile_column_exists(self, table, column): - return f"SELECT column_name FROM information_schema.columns WHERE table_name='{table}' and column_name='{column}'" + return ( + f"SELECT column_name FROM information_schema.columns WHERE table_name='{table}' and column_name='{column}'" + ) def compile_get_all_tables(self, database, schema=None): return "SELECT name FROM sqlite_master WHERE type='table'" diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/schema.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/schema.py index 4d84c4c0..53ae5a89 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/schema.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/schema/schema.py @@ -112,9 +112,7 @@ async def drop_table_if_exists(self, table: str) -> None: if self._connection is None: self._connection = self._manager.connection(None) - sql = self._connection.get_default_platform()().compile_drop_table_if_exists( - table - ) + sql = self._connection.get_default_platform()().compile_drop_table_if_exists(table) await self._connection.statement(sql, ()) async def has_table(self, table: str) -> bool: @@ -129,9 +127,7 @@ async def rename(self, table: str, new_name: str) -> None: if self._connection is None: self._connection = self._manager.connection(None) - sql = self._connection.get_default_platform()().compile_rename_table( - table, new_name - ) + sql = self._connection.get_default_platform()().compile_rename_table(table, new_name) await self._connection.run(sql, ()) async def truncate(self, table: str, foreign_keys: bool = False) -> None: diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/seeds/Seeder.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/seeds/Seeder.py index 338544b6..a555850c 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/seeds/Seeder.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/seeds/Seeder.py @@ -14,14 +14,10 @@ async def call(self, *seeder_classes): await seeder_class(connection=self.connection).run() async def run_database_seed(self): - database_seeder = pydoc.locate( - f"{self.seed_module}.database_seeder.DatabaseSeeder" - ) + database_seeder = pydoc.locate(f"{self.seed_module}.database_seeder.DatabaseSeeder") if not database_seeder: - raise ValueError( - f"Could not find the DatabaseSeeder class in {self.seed_module}.database_seeder" - ) + raise ValueError(f"Could not find the DatabaseSeeder class in {self.seed_module}.database_seeder") self.ran_seeds.append(database_seeder) diff --git a/fastapi_startkit/src/fastapi_startkit/masoniteorm/testing/__init__.py b/fastapi_startkit/src/fastapi_startkit/masoniteorm/testing/__init__.py index 819d4db8..4472cde0 100644 --- a/fastapi_startkit/src/fastapi_startkit/masoniteorm/testing/__init__.py +++ b/fastapi_startkit/src/fastapi_startkit/masoniteorm/testing/__init__.py @@ -1,6 +1,6 @@ from fastapi_startkit.masoniteorm.testing.transaction import RefreshDatabase, DatabaseTransaction __all__ = [ - 'RefreshDatabase', - 'DatabaseTransaction', + "RefreshDatabase", + "DatabaseTransaction", ] diff --git a/fastapi_startkit/src/fastapi_startkit/providers/Provider.py b/fastapi_startkit/src/fastapi_startkit/providers/Provider.py index 7a49873f..04059023 100644 --- a/fastapi_startkit/src/fastapi_startkit/providers/Provider.py +++ b/fastapi_startkit/src/fastapi_startkit/providers/Provider.py @@ -16,12 +16,7 @@ def __init__(self, application: "Application", config: dict = None): self.config = config or {} if self.provider_key is None: - self.provider_key = str( - Str.of(self.__class__.__name__) - .trim("ServiceProvider") - .trim("Provider") - .slugify() - ) + self.provider_key = str(Str.of(self.__class__.__name__).trim("ServiceProvider").trim("Provider").slugify()) def register(self) -> None: pass diff --git a/fastapi_startkit/src/fastapi_startkit/storage/config/__init__.py b/fastapi_startkit/src/fastapi_startkit/storage/config/__init__.py index 703689df..881f6329 100644 --- a/fastapi_startkit/src/fastapi_startkit/storage/config/__init__.py +++ b/fastapi_startkit/src/fastapi_startkit/storage/config/__init__.py @@ -19,6 +19,7 @@ class PublicDiskConfig(LocalDiskConfig): visibility: str = "public" url: str = "/storage" + @dataclass class S3Config: driver: str = field(default="s3") diff --git a/fastapi_startkit/src/fastapi_startkit/storage/drivers/__init__.py b/fastapi_startkit/src/fastapi_startkit/storage/drivers/__init__.py index 99d682f6..e7a09b79 100644 --- a/fastapi_startkit/src/fastapi_startkit/storage/drivers/__init__.py +++ b/fastapi_startkit/src/fastapi_startkit/storage/drivers/__init__.py @@ -1,3 +1,3 @@ from .local import LocalDriver from .s3 import S3Driver -from .fake import FakeDriver \ No newline at end of file +from .fake import FakeDriver diff --git a/fastapi_startkit/src/fastapi_startkit/storage/drivers/fake.py b/fastapi_startkit/src/fastapi_startkit/storage/drivers/fake.py index cc2c2a0e..b8f48d28 100644 --- a/fastapi_startkit/src/fastapi_startkit/storage/drivers/fake.py +++ b/fastapi_startkit/src/fastapi_startkit/storage/drivers/fake.py @@ -29,10 +29,7 @@ def assert_exists(self, paths, content=None): paths = [paths] for path in paths: - assert self.exists(path), ( - f"Storage::fake({self._disk_name!r}): " - f"failed asserting that [{path!r}] exists." - ) + assert self.exists(path), f"Storage::fake({self._disk_name!r}): failed asserting that [{path!r}] exists." if content is not None: actual = self.get(path) assert actual == content, ( @@ -50,8 +47,7 @@ def assert_missing(self, paths): for path in paths: assert self.missing(path), ( - f"Storage::fake({self._disk_name!r}): " - f"failed asserting that [{path!r}] is missing." + f"Storage::fake({self._disk_name!r}): failed asserting that [{path!r}] is missing." ) return self diff --git a/fastapi_startkit/src/fastapi_startkit/storage/drivers/local.py b/fastapi_startkit/src/fastapi_startkit/storage/drivers/local.py index 29be5ff9..2d677495 100644 --- a/fastapi_startkit/src/fastapi_startkit/storage/drivers/local.py +++ b/fastapi_startkit/src/fastapi_startkit/storage/drivers/local.py @@ -127,7 +127,5 @@ def get_files(self, directory=""): def download(self, file_path, name=None, force=False): from fastapi.responses import FileResponse - return FileResponse( - self.get_path(file_path), - filename=name or os.path.basename(file_path) - ) + + return FileResponse(self.get_path(file_path), filename=name or os.path.basename(file_path)) diff --git a/fastapi_startkit/src/fastapi_startkit/storage/drivers/s3.py b/fastapi_startkit/src/fastapi_startkit/storage/drivers/s3.py index c52cdf34..3853ae99 100644 --- a/fastapi_startkit/src/fastapi_startkit/storage/drivers/s3.py +++ b/fastapi_startkit/src/fastapi_startkit/storage/drivers/s3.py @@ -19,9 +19,7 @@ def get_connection(self): try: import boto3 except ImportError: - raise ModuleNotFoundError( - "Could not find the 'boto3' library. Run 'pip install boto3' to fix this." - ) + raise ModuleNotFoundError("Could not find the 'boto3' library. Run 'pip install boto3' to fix this.") if not self.connection: self.connection = boto3.Session( @@ -34,25 +32,19 @@ def get_connection(self): def get_client(self): import botocore.config + config = botocore.config.Config( - s3={'addressing_style': 'path' if self.options.get("use_path_style_endpoint") else 'auto'} - ) - return self.get_connection().client( - "s3", - endpoint_url=self.options.get("endpoint"), - config=config + s3={"addressing_style": "path" if self.options.get("use_path_style_endpoint") else "auto"} ) + return self.get_connection().client("s3", endpoint_url=self.options.get("endpoint"), config=config) def get_resource(self): import botocore.config + config = botocore.config.Config( - s3={'addressing_style': 'path' if self.options.get("use_path_style_endpoint") else 'auto'} - ) - return self.get_connection().resource( - "s3", - endpoint_url=self.options.get("endpoint"), - config=config + s3={"addressing_style": "path" if self.options.get("use_path_style_endpoint") else "auto"} ) + return self.get_connection().resource("s3", endpoint_url=self.options.get("endpoint"), config=config) def get_bucket(self): return self.options.get("bucket") @@ -62,9 +54,7 @@ def get_name(self, path, alias): return f"{alias}{extension}" def put(self, file_path, content): - self.get_resource().Bucket(self.get_bucket()).put_object( - Key=file_path, Body=content - ) + self.get_resource().Bucket(self.get_bucket()).put_object(Key=file_path, Body=content) return content def put_file(self, file_path, content, name=None): @@ -73,21 +63,13 @@ def put_file(self, file_path, content, name=None): if hasattr(content, "get_content"): content = content.get_content() - self.get_resource().Bucket(self.get_bucket()).put_object( - Key=os.path.join(file_path, file_name), Body=content - ) + self.get_resource().Bucket(self.get_bucket()).put_object(Key=os.path.join(file_path, file_name), Body=content) return os.path.join(file_path, file_name) def get(self, file_path): try: return ( - self.get_resource() - .Bucket(self.get_bucket()) - .Object(file_path) - .get() - .get("Body") - .read() - .decode("utf-8") + self.get_resource().Bucket(self.get_bucket()).Object(file_path).get().get("Body").read().decode("utf-8") ) except self.missing_file_exceptions(): pass @@ -99,9 +81,7 @@ def missing_file_exceptions(self): def exists(self, file_path): try: - self.get_resource().Bucket(self.get_bucket()).Object( - file_path - ).load() + self.get_resource().Bucket(self.get_bucket()).Object(file_path).load() return True except self.missing_file_exceptions(): return False @@ -132,9 +112,7 @@ def stream(self, file_path): def copy(self, from_file_path, to_file_path): copy_source = {"Bucket": self.get_bucket(), "Key": from_file_path} - self.get_resource().meta.client.copy( - copy_source, self.get_bucket(), to_file_path - ) + self.get_resource().meta.client.copy(copy_source, self.get_bucket(), to_file_path) def move(self, from_file_path, to_file_path): self.copy(from_file_path, to_file_path) @@ -152,17 +130,11 @@ def append(self, file_path, content): self.put(file_path, content) def delete(self, file_path): - return ( - self.get_resource() - .Object(self.get_bucket(), file_path) - .delete() - ) + return self.get_resource().Object(self.get_bucket(), file_path).delete() def store(self, file, name=None): full_path = name or file.hash_path_name() - self.get_resource().Bucket(self.get_bucket()).put_object( - Key=full_path, Body=file.stream() - ) + self.get_resource().Bucket(self.get_bucket()).put_object(Key=full_path, Body=file.stream()) return full_path def make_file_path_if_not_exists(self, file_path): @@ -197,6 +169,7 @@ def download(self, file_path, name=None, force=False): ExpiresIn=3600, ) from fastapi.responses import RedirectResponse + return RedirectResponse(url) def url(self, file_path): diff --git a/fastapi_startkit/src/fastapi_startkit/storage/providers/provider.py b/fastapi_startkit/src/fastapi_startkit/storage/providers/provider.py index d34cebb8..694e620a 100644 --- a/fastapi_startkit/src/fastapi_startkit/storage/providers/provider.py +++ b/fastapi_startkit/src/fastapi_startkit/storage/providers/provider.py @@ -17,13 +17,7 @@ def register(self): self.app.bind("storage", storage) def boot(self): - self.publishes( - { - Path(__file__) - .resolve() - .parent.parent.joinpath("config/storage.py"): "config/storage.py" - } - ) + self.publishes({Path(__file__).resolve().parent.parent.joinpath("config/storage.py"): "config/storage.py"}) if not self.app.fastapi: return @@ -54,6 +48,4 @@ async def serve_storage_file(path: str): media_type=media_type or "application/octet-stream", ) - self.app.fastapi.get("/storage/{path:path}", include_in_schema=False)( - serve_storage_file - ) + self.app.fastapi.get("/storage/{path:path}", include_in_schema=False)(serve_storage_file) diff --git a/fastapi_startkit/src/fastapi_startkit/storage/storage.py b/fastapi_startkit/src/fastapi_startkit/storage/storage.py index 07e9b0c8..cdd7fda2 100644 --- a/fastapi_startkit/src/fastapi_startkit/storage/storage.py +++ b/fastapi_startkit/src/fastapi_startkit/storage/storage.py @@ -114,6 +114,7 @@ class Storage: def __init__(self): from fastapi_startkit.application import app + self.app = app() self.storage: StorageManager = self.app.make("storage") diff --git a/fastapi_startkit/src/fastapi_startkit/testing/__init__.py b/fastapi_startkit/src/fastapi_startkit/testing/__init__.py index 0336c70c..81fdc092 100644 --- a/fastapi_startkit/src/fastapi_startkit/testing/__init__.py +++ b/fastapi_startkit/src/fastapi_startkit/testing/__init__.py @@ -1,5 +1,3 @@ from .test_case import TestCase -__all__ = [ - 'TestCase' -] +__all__ = ["TestCase"] diff --git a/fastapi_startkit/src/fastapi_startkit/testing/test_case.py b/fastapi_startkit/src/fastapi_startkit/testing/test_case.py index 53d868b4..548842f1 100644 --- a/fastapi_startkit/src/fastapi_startkit/testing/test_case.py +++ b/fastapi_startkit/src/fastapi_startkit/testing/test_case.py @@ -8,16 +8,16 @@ class TestCase(IsolatedAsyncioTestCase): - @pytest.fixture(scope='session', autouse=True) + @pytest.fixture(scope="session", autouse=True) async def app(self): self.application = self.get_application() def setUp(self): - if hasattr(self, 'startTestRun'): + if hasattr(self, "startTestRun"): self.startTestRun() def tearDown(self): - if hasattr(self, 'stopTestRun'): + if hasattr(self, "stopTestRun"): self.stopTestRun() async def asyncSetUp(self): @@ -29,5 +29,4 @@ async def asyncTearDown(self): await self.asyncStopTestRun() @abstractmethod - def get_application(self) -> 'Application': - ... + def get_application(self) -> "Application": ... diff --git a/fastapi_startkit/src/fastapi_startkit/utils/collections.py b/fastapi_startkit/src/fastapi_startkit/utils/collections.py index 441f552f..2c5e2384 100644 --- a/fastapi_startkit/src/fastapi_startkit/utils/collections.py +++ b/fastapi_startkit/src/fastapi_startkit/utils/collections.py @@ -250,9 +250,7 @@ def pluck(self, value, key=None): for k, v in iterable: if k == value: if key: - attributes[self._data_get(item, key)] = self._data_get( - item, value - ) + attributes[self._data_get(item, key)] = self._data_get(item, value) else: attributes.append(v) diff --git a/fastapi_startkit/src/fastapi_startkit/utils/str.py b/fastapi_startkit/src/fastapi_startkit/utils/str.py index e6c3db32..07eeaa5e 100644 --- a/fastapi_startkit/src/fastapi_startkit/utils/str.py +++ b/fastapi_startkit/src/fastapi_startkit/utils/str.py @@ -15,9 +15,7 @@ def random_string(length=4): Returns: string """ - return "".join( - random.choice(string.ascii_uppercase + string.digits) for _ in range(length) - ) + return "".join(random.choice(string.ascii_uppercase + string.digits) for _ in range(length)) def modularize(file_path, suffix=".py"): @@ -81,9 +79,7 @@ def add_query_params(url: str, query_params: dict) -> str: """Add query params dict to a given url (which can already contain some query parameters).""" path_result = parse.urlsplit(url) - base_url = ( - f"{path_result.scheme}://{path_result.hostname}" if path_result.hostname else "" - ) + base_url = f"{path_result.scheme}://{path_result.hostname}" if path_result.hostname else "" base_path = path_result.path # parse existing query parameters if any diff --git a/fastapi_startkit/src/fastapi_startkit/utils/structures.py b/fastapi_startkit/src/fastapi_startkit/utils/structures.py index 838c95fd..3cce83d0 100644 --- a/fastapi_startkit/src/fastapi_startkit/utils/structures.py +++ b/fastapi_startkit/src/fastapi_startkit/utils/structures.py @@ -6,7 +6,6 @@ from ..exceptions.exceptions import LoaderNotFound - def load(path, object_name=None, default=None, raise_exception=False): """Load the given object from a Python module located at path and returns a default value if not found. If no object name is provided, loads the module. @@ -19,11 +18,7 @@ def load(path, object_name=None, default=None, raise_exception=False): {object} -- The value (or default) read in the module or the module if no object name """ try: - name = ( - path.split("/")[-1].replace(".py", "") - if "/" in path - else path.replace(".py", "") - ) + name = path.split("/")[-1].replace(".py", "") if "/" in path else path.replace(".py", "") spec = importlib.util.spec_from_file_location(name, path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) diff --git a/fastapi_startkit/src/fastapi_startkit/vite/providers/provider.py b/fastapi_startkit/src/fastapi_startkit/vite/providers/provider.py index 451e0500..4e0e7c33 100644 --- a/fastapi_startkit/src/fastapi_startkit/vite/providers/provider.py +++ b/fastapi_startkit/src/fastapi_startkit/vite/providers/provider.py @@ -36,9 +36,7 @@ def boot(self) -> None: self.mount_static_file_if_require(config) self.register_jinja_directives(vite) - source = os.path.abspath( - str(os.path.join(str(os.path.dirname(__file__)), "../config/vite.py")) - ) + source = os.path.abspath(str(os.path.join(str(os.path.dirname(__file__)), "../config/vite.py"))) self.publishes({source: "config/vite.py"}) stubs_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "../stubs")) @@ -82,6 +80,4 @@ def register_jinja_directives(self, vite: Vite): templates.env.globals["vite"] = lambda *a, **kw: Markup(vite(*a, **kw)) templates.env.globals["vite_asset"] = vite.asset - templates.env.globals["vite_react_refresh"] = lambda: Markup( - vite.react_refresh() - ) + templates.env.globals["vite_react_refresh"] = lambda: Markup(vite.react_refresh()) diff --git a/fastapi_startkit/src/fastapi_startkit/vite/vite.py b/fastapi_startkit/src/fastapi_startkit/vite/vite.py index 8f2a8e9a..a62be688 100644 --- a/fastapi_startkit/src/fastapi_startkit/vite/vite.py +++ b/fastapi_startkit/src/fastapi_startkit/vite/vite.py @@ -77,9 +77,7 @@ def with_entry_points(self, entry_points: list[str]) -> "Vite": self._entry_points = entry_points return self - def create_asset_paths_using( - self, resolver: Optional[Callable[[str], str]] - ) -> "Vite": + def create_asset_paths_using(self, resolver: Optional[Callable[[str], str]]) -> "Vite": """Override the default asset URL builder with a custom callable.""" self._asset_path_resolver = resolver return self @@ -119,15 +117,9 @@ def __call__( if self.is_running_hot(): hot_origin = self._read_hot_origin() - tags = [ - self._make_tag_for_chunk( - "@vite/client", f"{hot_origin}/@vite/client", None, None - ) - ] + tags = [self._make_tag_for_chunk("@vite/client", f"{hot_origin}/@vite/client", None, None)] for ep in entrypoints: - tags.append( - self._make_tag_for_chunk(ep, f"{hot_origin}/{ep}", None, None) - ) + tags.append(self._make_tag_for_chunk(ep, f"{hot_origin}/{ep}", None, None)) return "".join(tags) manifest = self._manifest(build_directory) @@ -284,9 +276,7 @@ def _manifest(self, build_directory: str) -> dict: path = self._manifest_path(build_directory) if path not in Vite._manifests: if not os.path.isfile(path): - raise ViteManifestNotFoundException( - f"Vite manifest not found at: {path}" - ) + raise ViteManifestNotFoundException(f"Vite manifest not found at: {path}") with open(path) as f: Vite._manifests[path] = json.load(f) return Vite._manifests[path] @@ -321,9 +311,7 @@ def _resolve_imports( seen[import_key] = True imports.append(import_key) if import_key in manifest: - imports.extend( - self._resolve_imports(manifest, manifest[import_key], seen) - ) + imports.extend(self._resolve_imports(manifest, manifest[import_key], seen)) return imports def _make_tag_for_chunk( @@ -354,9 +342,7 @@ def _make_preload_tag_for_chunk( if attributes is False: return "" - self._preloaded_assets[url] = self._parse_attributes( - {k: v for k, v in attributes.items() if k != "href"} - ) + self._preloaded_assets[url] = self._parse_attributes({k: v for k, v in attributes.items() if k != "href"}) return f"" def _resolve_script_tag_attributes(self, src, url, chunk, manifest) -> dict: @@ -382,18 +368,16 @@ def _resolve_preload_tag_attributes(self, src, url, chunk, manifest) -> dict | b "as": "style", "href": url, "nonce": self._nonce or False, - "crossorigin": self._resolve_stylesheet_tag_attributes( - src, url, chunk, manifest - ).get("crossorigin", False), + "crossorigin": self._resolve_stylesheet_tag_attributes(src, url, chunk, manifest).get( + "crossorigin", False + ), } else: attrs = { "rel": "modulepreload", "href": url, "nonce": self._nonce or False, - "crossorigin": self._resolve_script_tag_attributes( - src, url, chunk, manifest - ).get("crossorigin", False), + "crossorigin": self._resolve_script_tag_attributes(src, url, chunk, manifest).get("crossorigin", False), } if self._integrity_key is not False: diff --git a/fastapi_startkit/tests/conftest.py b/fastapi_startkit/tests/conftest.py index 7afb3baf..bf98a4f2 100644 --- a/fastapi_startkit/tests/conftest.py +++ b/fastapi_startkit/tests/conftest.py @@ -4,4 +4,4 @@ @pytest.fixture(scope="session", autouse=True) def init_app(): - Application(env="testing") \ No newline at end of file + Application(env="testing") diff --git a/fastapi_startkit/tests/inertia/test_inertia.py b/fastapi_startkit/tests/inertia/test_inertia.py index ecb7375f..f6a9dced 100644 --- a/fastapi_startkit/tests/inertia/test_inertia.py +++ b/fastapi_startkit/tests/inertia/test_inertia.py @@ -1,6 +1,7 @@ import unittest from fastapi_startkit.inertia.inertia import Inertia, ResponseFactory, InertiaResponse + class TestInertia(unittest.TestCase): def setUp(self): # Reset the singleton instance before each test @@ -31,7 +32,7 @@ def test_factory_render_returns_response(self): factory = ResponseFactory() factory.share("auth", {"user": None}) response = factory.render("Dashboard", {"count": 10}) - + self.assertIsInstance(response, InertiaResponse) self.assertEqual(response.component, "Dashboard") self.assertEqual(response.props, {"count": 10}) @@ -45,9 +46,9 @@ def test_facade_singleton(self): def test_facade_proxies_to_instance(self): Inertia.share("foo", "bar") self.assertEqual(Inertia.instance().shared_props["foo"], "bar") - + Inertia.version("v1") self.assertEqual(Inertia.get_version(), "v1") - + Inertia.set_root_view("app.html") self.assertEqual(Inertia.instance().root_view, "app.html") diff --git a/fastapi_startkit/tests/inertia/test_inertia_response.py b/fastapi_startkit/tests/inertia/test_inertia_response.py index aad54ece..96015e3e 100644 --- a/fastapi_startkit/tests/inertia/test_inertia_response.py +++ b/fastapi_startkit/tests/inertia/test_inertia_response.py @@ -5,6 +5,7 @@ from fastapi_startkit.inertia.inertia import InertiaResponse, OptionalProp from fastapi_startkit.inertia.constant import Header + class TestInertiaResponse(unittest.IsolatedAsyncioTestCase): def setUp(self): self.mock_request = MagicMock(spec=Request) @@ -13,19 +14,16 @@ def setUp(self): async def test_inertia_response_to_json_on_inertia_request(self): self.mock_request.headers = {Header.INERTIA: "true"} - + response = InertiaResponse( - component="User/Index", - shared_props={"app": "Test"}, - props={"users": []}, - version="v1" + component="User/Index", shared_props={"app": "Test"}, props={"users": []}, version="v1" ) - + actual_response = await response.to_response(self.mock_request) - + self.assertEqual(actual_response.status_code, 200) self.assertEqual(actual_response.headers[Header.INERTIA], "true") - + content = json.loads(actual_response.body) self.assertEqual(content["component"], "User/Index") self.assertEqual(content["props"], {"app": "Test", "users": []}) @@ -36,18 +34,18 @@ async def test_inertia_response_partial_reload(self): self.mock_request.headers = { Header.INERTIA: "true", Header.INERTIA_PARTIAL_COMPONENT: "User/Index", - "X-Inertia-Partial-Data": "users" + "X-Inertia-Partial-Data": "users", } - + response = InertiaResponse( component="User/Index", shared_props={"app": "Test"}, props={"users": ["user1"], "stats": {"likes": 10}}, ) - + actual_response = await response.to_response(self.mock_request) data = json.loads(actual_response.body) - + # Should only include "users", exclude "app" and "stats" self.assertIn("users", data["props"]) self.assertNotIn("app", data["props"]) @@ -56,8 +54,9 @@ async def test_inertia_response_partial_reload(self): async def test_inertia_response_optional_props(self): # 1. Normal request - optional prop should be excluded self.mock_request.headers = {Header.INERTIA: "true"} - + lazy_called = False + def get_lazy(): nonlocal lazy_called lazy_called = True @@ -68,7 +67,7 @@ def get_lazy(): shared_props={}, props={"regular": "data", "lazy": OptionalProp(get_lazy)}, ) - + actual_response = await response.to_response(self.mock_request) data = json.loads(actual_response.body) self.assertEqual(data["props"], {"regular": "data"}) @@ -78,9 +77,9 @@ def get_lazy(): self.mock_request.headers = { Header.INERTIA: "true", Header.INERTIA_PARTIAL_COMPONENT: "User/Index", - "X-Inertia-Partial-Data": "lazy" + "X-Inertia-Partial-Data": "lazy", } - + actual_response = await response.to_response(self.mock_request) data = json.loads(actual_response.body) self.assertEqual(data["props"], {"lazy": "lazy data"}) @@ -88,7 +87,7 @@ def get_lazy(): async def test_inertia_response_resolves_callable_props(self): self.mock_request.headers = {Header.INERTIA: "true"} - + async def get_async_data(): return "async result" @@ -97,7 +96,7 @@ async def get_async_data(): shared_props={"sync": lambda: "sync result"}, props={"async": get_async_data}, ) - + actual_response = await response.to_response(self.mock_request) data = json.loads(actual_response.body) self.assertEqual(data["props"]["sync"], "sync result") @@ -106,9 +105,9 @@ async def get_async_data(): async def test_inertia_response_initial_render_raises_if_no_templates(self): # Standard request (no X-Inertia header) self.mock_request.headers = {} - + response = InertiaResponse(component="Test", shared_props={}, props={}) - + # This should fail because we haven't mocked the application container with self.assertRaisesRegex(RuntimeError, "Inertia requires 'templates' to be bound"): await response.to_response(self.mock_request) diff --git a/fastapi_startkit/tests/inertia/test_middleware.py b/fastapi_startkit/tests/inertia/test_middleware.py index 9ff2eed8..e2b81f83 100644 --- a/fastapi_startkit/tests/inertia/test_middleware.py +++ b/fastapi_startkit/tests/inertia/test_middleware.py @@ -6,28 +6,32 @@ from fastapi_startkit.inertia.constant import Header from fastapi_startkit.inertia.inertia import Inertia + class TestInertiaMiddleware(unittest.IsolatedAsyncioTestCase): def setUp(self): self.app = FastAPI() self.app.add_middleware(InertiaMiddleware) - + @self.app.get("/test") async def test_route(): return {"message": "ok"} - + @self.app.post("/redirect") async def test_redirect(): from fastapi.responses import RedirectResponse + return RedirectResponse(url="/test", status_code=302) @self.app.put("/redirect-put") async def test_redirect_put(): from fastapi.responses import RedirectResponse + return RedirectResponse(url="/test", status_code=302) @self.app.get("/fragment-redirect") async def test_fragment_redirect(): from fastapi.responses import RedirectResponse + return RedirectResponse(url="/test#section", status_code=302) self.client = TestClient(self.app) @@ -43,19 +47,16 @@ def test_middleware_version_conflict(self, mock_app_getter): # Setup mock container mock_container = MagicMock() mock_app_getter.return_value = mock_container - + # Mock Vite version mock_vite = MagicMock() mock_vite.manifest_hash.return_value = "v2" mock_container.has.side_effect = lambda k: k == "vite" mock_container.make.side_effect = lambda k: mock_vite if k == "vite" else None - + # Request with old version - response = self.client.get("/test", headers={ - Header.INERTIA: "true", - Header.INERTIA_VERSION: "v1" - }) - + response = self.client.get("/test", headers={Header.INERTIA: "true", Header.INERTIA_VERSION: "v1"}) + self.assertEqual(response.status_code, 409) self.assertEqual(response.headers[Header.INERTIA_LOCATION], "http://testserver/test") @@ -63,14 +64,14 @@ def test_middleware_changes_302_to_303_on_put_patch_delete(self): # POST stays 302 response = self.client.post("/redirect", follow_redirects=False) self.assertEqual(response.status_code, 302) - + # PUT changes to 303 response = self.client.put("/redirect-put", follow_redirects=False, headers={Header.INERTIA: "true"}) self.assertEqual(response.status_code, 303) def test_middleware_redirect_with_fragment(self): response = self.client.get("/fragment-redirect", headers={Header.INERTIA: "true"}) - + self.assertEqual(response.status_code, 409) self.assertEqual(response.headers[Header.INERTIA_REDIRECT], "/test#section") @@ -79,16 +80,16 @@ def test_middleware_resolves_validation_errors_from_session(self, mock_app_gette # We need a fresh app and session-enabled middleware from fastapi import Request from starlette.middleware.sessions import SessionMiddleware - + app = FastAPI() app.add_middleware(InertiaMiddleware) app.add_middleware(SessionMiddleware, secret_key="secret") - + @app.get("/set-errors") def set_errors(request: Request): request.session["errors"] = {"email": "Required"} return "ok" - + @app.get("/check-errors") def check_errors(request: Request): # Middleware should have shared the errors from the session @@ -99,15 +100,15 @@ def check_errors(request: Request): mock_container = MagicMock() mock_app_getter.return_value = mock_container mock_container.has.return_value = False - + client = TestClient(app) - + # Reset Inertia singleton for this specific test Inertia._instance = None # 1. First request sets the errors in session client.get("/set-errors") - + # 2. Second request should have errors shared by middleware response = client.get("/check-errors") self.assertEqual(response.json(), {"email": "Required"}) diff --git a/fastapi_startkit/tests/masoniteorm/collection/test_collection.py b/fastapi_startkit/tests/masoniteorm/collection/test_collection.py index 15f2675b..e44a4841 100644 --- a/fastapi_startkit/tests/masoniteorm/collection/test_collection.py +++ b/fastapi_startkit/tests/masoniteorm/collection/test_collection.py @@ -240,9 +240,7 @@ def test_count(self): collection = Collection([1, 1, 2, 4]) self.assertEqual(collection.count(), 4) - collection = Collection( - [{"name": "Corentin All", "age": 1}, {"name": "Corentin All", "age": 2}] - ) + collection = Collection([{"name": "Corentin All", "age": 1}, {"name": "Corentin All", "age": 2}]) self.assertEqual(collection.count(), 2) def test_chunk(self): @@ -364,9 +362,7 @@ def test_reject(self): collection.reject(lambda x: x if x["age"] > 2 else None) self.assertEqual( - Collection( - [{"name": "Corentin All", "age": 3}, {"name": "Corentin All", "age": 4}] - ), + Collection([{"name": "Corentin All", "age": 3}, {"name": "Corentin All", "age": 4}]), collection.all(), ) @@ -507,9 +503,7 @@ def test_implode(self): result = collection.implode("-") self.assertEqual(result, "1-2-3-4") - collection = Collection( - [{"name": "Corentin"}, {"name": "Joe"}, {"name": "Marlysson"}] - ) + collection = Collection([{"name": "Corentin"}, {"name": "Joe"}, {"name": "Marlysson"}]) result = collection.implode(key="name") self.assertEqual(result, "Corentin,Joe,Marlysson") @@ -524,9 +518,7 @@ def __eq__(self, other): return self.code == other.code currencies = collection.map_into(Currency) - self.assertEqual( - currencies.all(), [Currency("USD"), Currency("EUR"), Currency("GBP")] - ) + self.assertEqual(currencies.all(), [Currency("USD"), Currency("EUR"), Currency("GBP")]) def test_map(self): collection = Collection([1, 2, 3, 4]) diff --git a/fastapi_startkit/tests/masoniteorm/commands/fixtures/app.py b/fastapi_startkit/tests/masoniteorm/commands/fixtures/app.py index 43004174..2ac25e15 100644 --- a/fastapi_startkit/tests/masoniteorm/commands/fixtures/app.py +++ b/fastapi_startkit/tests/masoniteorm/commands/fixtures/app.py @@ -1,6 +1,4 @@ -from dataclasses import dataclass, field from pathlib import Path -from typing import Dict, Any from fastapi_startkit.application import Application from fastapi_startkit.masoniteorm import SQLiteConfig @@ -14,15 +12,18 @@ def create_app() -> Application: return Application( base_path=BASE_DIR, providers=[ - (DatabaseProvider, { - "default": "sqlite", - "connections": { - "sqlite": SQLiteConfig( - driver="sqlite", - url=f"sqlite+aiosqlite:///{DB_PATH}", - options=None, - ), - } - }), + ( + DatabaseProvider, + { + "default": "sqlite", + "connections": { + "sqlite": SQLiteConfig( + driver="sqlite", + url=f"sqlite+aiosqlite:///{DB_PATH}", + options=None, + ), + }, + }, + ), ], ) diff --git a/fastapi_startkit/tests/masoniteorm/commands/fixtures/databases/migrations/2026_01_01_000001_add_body_to_posts_table.py b/fastapi_startkit/tests/masoniteorm/commands/fixtures/databases/migrations/2026_01_01_000001_add_body_to_posts_table.py index 9d6176e2..e1ed5718 100644 --- a/fastapi_startkit/tests/masoniteorm/commands/fixtures/databases/migrations/2026_01_01_000001_add_body_to_posts_table.py +++ b/fastapi_startkit/tests/masoniteorm/commands/fixtures/databases/migrations/2026_01_01_000001_add_body_to_posts_table.py @@ -8,4 +8,4 @@ async def up(self): async def down(self): async with await self.schema.table("posts") as table: - table.drop_column("body") \ No newline at end of file + table.drop_column("body") diff --git a/fastapi_startkit/tests/masoniteorm/commands/test_shell.py b/fastapi_startkit/tests/masoniteorm/commands/test_shell.py index 6d158c1c..40d5e3c3 100644 --- a/fastapi_startkit/tests/masoniteorm/commands/test_shell.py +++ b/fastapi_startkit/tests/masoniteorm/commands/test_shell.py @@ -63,10 +63,7 @@ def test_for_mssql(self): "full_details": {"driver": "mssql"}, } command, _ = self.command.get_command(config) - assert ( - command - == "sqlcmd -d orm -U root -P secretpostgres -S tcp:db.masonite.com,1234" - ) + assert command == "sqlcmd -d orm -U root -P secretpostgres -S tcp:db.masonite.com,1234" @skip("ShellCommand.handle() uses legacy load_config() not available in new framework") def test_running_command_with_sqlite(self): @@ -86,6 +83,4 @@ def test_hiding_sensitive_options(self): } command, _ = self.command.get_command(config) cleaned_command = self.command.hide_sensitive_options(config, command) - assert ( - cleaned_command == "mysql orm --host localhost --user root --password ***" - ) + assert cleaned_command == "mysql orm --host localhost --user root --password ***" diff --git a/fastapi_startkit/tests/masoniteorm/configurations/test_config_merge.py b/fastapi_startkit/tests/masoniteorm/configurations/test_config_merge.py index acba8948..e7ab29e7 100644 --- a/fastapi_startkit/tests/masoniteorm/configurations/test_config_merge.py +++ b/fastapi_startkit/tests/masoniteorm/configurations/test_config_merge.py @@ -34,9 +34,7 @@ def test_merge_with_file_path(self): config.set("testkey", {"existing": "orig"}) # Mock Loader to return params from file - with patch( - "fastapi_startkit.configuration.Configuration.Loader" - ) as MockLoaderClass: + with patch("fastapi_startkit.configuration.Configuration.Loader") as MockLoaderClass: mock_loader = MockLoaderClass.return_value mock_loader.get_parameters.return_value = { "New": "from_file", diff --git a/fastapi_startkit/tests/masoniteorm/fixtures/casts.py b/fastapi_startkit/tests/masoniteorm/fixtures/casts.py index c06b74df..889982d5 100644 --- a/fastapi_startkit/tests/masoniteorm/fixtures/casts.py +++ b/fastapi_startkit/tests/masoniteorm/fixtures/casts.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class Address(BaseModel): address: Optional[str] = None city: Optional[str] = None diff --git a/fastapi_startkit/tests/masoniteorm/fixtures/factory.py b/fastapi_startkit/tests/masoniteorm/fixtures/factory.py index e1ae84e4..7e85a5d9 100644 --- a/fastapi_startkit/tests/masoniteorm/fixtures/factory.py +++ b/fastapi_startkit/tests/masoniteorm/fixtures/factory.py @@ -1,4 +1,3 @@ - from fastapi_startkit.orm.factory.factory import Factory from .model import User diff --git a/fastapi_startkit/tests/masoniteorm/fixtures/model.py b/fastapi_startkit/tests/masoniteorm/fixtures/model.py index ac761cc9..167343f4 100644 --- a/fastapi_startkit/tests/masoniteorm/fixtures/model.py +++ b/fastapi_startkit/tests/masoniteorm/fixtures/model.py @@ -31,10 +31,10 @@ class User(Model): articles: "Articles" = HasMany("Articles", "id", "user_id") logos: "Logo" = HasManyThrough( ["Logo", "Articles"], - "user_id", # FK on Articles → User (intermediate.local_key, used in WHERE) - "id", # PK on Articles (intermediate.foreign_key, join left side) - "id", # PK on User (owner.local_owner_key, WHERE value) - "article_id", # FK on Logo → Articles (distant.other_owner_key, join right side) + "user_id", # FK on Articles → User (intermediate.local_key, used in WHERE) + "id", # PK on Articles (intermediate.foreign_key, join left side) + "id", # PK on User (owner.local_owner_key, WHERE value) + "article_id", # FK on Logo → Articles (distant.other_owner_key, join right side) ) def get_is_admin(self) -> bool: @@ -63,12 +63,8 @@ class Articles(Model): class Store(Model): - products: "Product" = BelongsToMany( - "Product", "store_id", "product_id", "id", "id", with_timestamps=True - ) - products_table: "Product" = BelongsToMany( - "Product", "store_id", "product_id", "id", "id", table="product_table" - ) + products: "Product" = BelongsToMany("Product", "store_id", "product_id", "id", "id", with_timestamps=True) + products_table: "Product" = BelongsToMany("Product", "store_id", "product_id", "id", "id", table="product_table") store_products: "Product" = BelongsToMany("Product") @@ -105,5 +101,3 @@ class IncomingShipment(Model): "port_id", # PK on Port "country_id", # PK on Country ) - - diff --git a/fastapi_startkit/tests/masoniteorm/models/test_model.py b/fastapi_startkit/tests/masoniteorm/models/test_model.py index 582f412b..c3f4870c 100644 --- a/fastapi_startkit/tests/masoniteorm/models/test_model.py +++ b/fastapi_startkit/tests/masoniteorm/models/test_model.py @@ -114,10 +114,7 @@ async def test_save_with_datetime_field(self, UserModel, users_table): saved = await user.save() assert saved is True - assert ( - user.email_verified_at.format("YYYY-MM-DD HH:mm:ss") - == "2026-10-01 12:12:12" - ) + assert user.email_verified_at.format("YYYY-MM-DD HH:mm:ss") == "2026-10-01 12:12:12" # --------------------------------------------------------------------------- diff --git a/fastapi_startkit/tests/masoniteorm/models/test_model_attributes.py b/fastapi_startkit/tests/masoniteorm/models/test_model_attributes.py index 1aec2193..dc4d3d2e 100644 --- a/fastapi_startkit/tests/masoniteorm/models/test_model_attributes.py +++ b/fastapi_startkit/tests/masoniteorm/models/test_model_attributes.py @@ -48,9 +48,7 @@ class User(Model): class TestConnectionFactory: def test_build_url_uses_explicit_url(self): - url = ConnectionFactory.build_url( - {"driver": "sqlite", "url": "sqlite+aiosqlite:///test.db"} - ) + url = ConnectionFactory.build_url({"driver": "sqlite", "url": "sqlite+aiosqlite:///test.db"}) assert url == "sqlite+aiosqlite:///test.db" def test_build_url_constructs_from_parts(self): @@ -152,10 +150,7 @@ def test_email_verified_at_format(self, UserModel): email="alex@gmail.com", email_verified_at="2026-10-01 12:12:12", ) - assert ( - user.email_verified_at.format("YYYY-MM-DD HH:mm:ss") - == "2026-10-01 12:12:12" - ) + assert user.email_verified_at.format("YYYY-MM-DD HH:mm:ss") == "2026-10-01 12:12:12" def test_email_verified_at_none_when_not_set(self, UserModel): user = UserModel(name="Alex", email="alex@gmail.com") diff --git a/fastapi_startkit/tests/masoniteorm/models/test_model_query.py b/fastapi_startkit/tests/masoniteorm/models/test_model_query.py index db76588e..ec217b5c 100644 --- a/fastapi_startkit/tests/masoniteorm/models/test_model_query.py +++ b/fastapi_startkit/tests/masoniteorm/models/test_model_query.py @@ -105,9 +105,7 @@ async def test_where_dict(self, UserModel, seeded_users): results = await UserModel.where({"name": "Alice", "is_admin": True}).get() assert len(results) == 1 - async def test_where_returns_empty_collection_when_no_match( - self, UserModel, seeded_users - ): + async def test_where_returns_empty_collection_when_no_match(self, UserModel, seeded_users): results = await UserModel.where("name", "Nobody").get() assert len(results) == 0 @@ -124,18 +122,12 @@ async def test_or_where_matches_either_condition(self, UserModel, seeded_users): assert names == {"Alice", "Bob"} async def test_or_where_no_match_returns_empty(self, UserModel, seeded_users): - results = ( - await UserModel.where("name", "Nobody").or_where("name", "Ghost").get() - ) + results = await UserModel.where("name", "Nobody").or_where("name", "Ghost").get() assert len(results) == 0 async def test_or_where_like(self, UserModel, seeded_users): # Match names starting with 'A' OR ending with 'e' - results = ( - await UserModel.where("name", "like", "A%") - .or_where("name", "like", "%e") - .get() - ) + results = await UserModel.where("name", "like", "A%").or_where("name", "like", "%e").get() names = {u.name for u in results} # "Alice" matches both; "Charlie" matches '%e' assert "Alice" in names @@ -329,10 +321,5 @@ async def test_where_and_select(self, UserModel, seeded_users): assert results.first().name == "Alice" async def test_or_where_and_limit(self, UserModel, seeded_users): - results = ( - await UserModel.where("name", "Alice") - .or_where("name", "Charlie") - .limit(1) - .get() - ) + results = await UserModel.where("name", "Alice").or_where("name", "Charlie").limit(1).get() assert len(results) == 1 diff --git a/fastapi_startkit/tests/masoniteorm/postgres/fixtures/db.py b/fastapi_startkit/tests/masoniteorm/postgres/fixtures/db.py index 4e328f00..d4c4f5f3 100644 --- a/fastapi_startkit/tests/masoniteorm/postgres/fixtures/db.py +++ b/fastapi_startkit/tests/masoniteorm/postgres/fixtures/db.py @@ -1,7 +1,10 @@ from fastapi_startkit.masoniteorm.connections.factory import ConnectionFactory from fastapi_startkit.masoniteorm.connections.manager import DatabaseManager -URL = "postgresql+asyncpg://app:secret@localhost:5432/database_app_test" +import os + +_port = os.getenv("POSTGRES_PORT", "5432") +URL = f"postgresql+asyncpg://app:secret@localhost:{_port}/database_app_test" DB = DatabaseManager( ConnectionFactory(), diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder.py b/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder.py index ccd36e0e..41094d1c 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder.py @@ -52,11 +52,11 @@ async def test_where_not_in(self): async def test_between(self): sql = User.query().between("id", 2, 5).to_sql() - self.assertEqual(sql, "SELECT * FROM \"users\" WHERE \"users\".\"id\" BETWEEN '2' AND '5'") + self.assertEqual(sql, 'SELECT * FROM "users" WHERE "users"."id" BETWEEN \'2\' AND \'5\'') async def test_not_between(self): sql = User.query().not_between("id", 2, 5).to_sql() - self.assertEqual(sql, "SELECT * FROM \"users\" WHERE \"users\".\"id\" NOT BETWEEN '2' AND '5'") + self.assertEqual(sql, 'SELECT * FROM "users" WHERE "users"."id" NOT BETWEEN \'2\' AND \'5\'') async def test_join(self): sql = User.query().join("profiles", "users.id", "=", "profiles.user_id").to_sql() @@ -76,7 +76,7 @@ async def test_or_where(self): sql = User.query().where("age", "20").or_where("age", "<", 20).to_sql() self.assertEqual( sql, - "SELECT * FROM \"users\" WHERE \"users\".\"age\" = '20' OR \"users\".\"age\" < '20'", + 'SELECT * FROM "users" WHERE "users"."age" = \'20\' OR "users"."age" < \'20\'', ) async def test_where_column(self): @@ -85,7 +85,7 @@ async def test_where_column(self): async def test_when_true_applies_condition(self): sql = User.query().when(True, lambda q: q.where("is_admin", 1)).to_sql() - self.assertEqual(sql, "SELECT * FROM \"users\" WHERE \"users\".\"is_admin\" = '1'") + self.assertEqual(sql, 'SELECT * FROM "users" WHERE "users"."is_admin" = \'1\'') async def test_when_false_skips_condition(self): sql = User.query().when(False, lambda q: q.where("is_admin", 1)).to_sql() diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder_eager_loading.py b/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder_eager_loading.py index 7ec6ba91..6c822153 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder_eager_loading.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder_eager_loading.py @@ -1,6 +1,4 @@ -from unittest.mock import AsyncMock - -from ...fixtures.model import User, Articles, Profile +from ...fixtures.model import User from ..fixtures.db import DB from ..test_case import TestCase diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder_relationships.py b/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder_relationships.py index 4d92d978..25c51a18 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder_relationships.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/builder/test_sqlite_query_builder_relationships.py @@ -13,26 +13,22 @@ def test_where_has_generates_exists_subquery(self): sql = User.query().where_has("articles").to_sql() self.assertEqual( sql, - 'SELECT * FROM "users" WHERE EXISTS ' - '(SELECT * FROM "articles" WHERE articles.user_id = users.id)', + 'SELECT * FROM "users" WHERE EXISTS (SELECT * FROM "articles" WHERE articles.user_id = users.id)', ) def test_where_has_with_callback_appends_condition(self): - sql = User.query().where_has( - "articles", lambda q: q.where("id", 1) - ).to_sql() + sql = User.query().where_has("articles", lambda q: q.where("id", 1)).to_sql() self.assertEqual( sql, 'SELECT * FROM "users" WHERE EXISTS ' - "(SELECT * FROM \"articles\" WHERE articles.user_id = users.id AND \"articles\".\"id\" = '1')", + '(SELECT * FROM "articles" WHERE articles.user_id = users.id AND "articles"."id" = \'1\')', ) def test_where_has_profile_uses_correct_table(self): sql = User.query().where_has("profile").to_sql() self.assertEqual( sql, - 'SELECT * FROM "users" WHERE EXISTS ' - '(SELECT * FROM "profiles" WHERE profiles.user_id = users.id)', + 'SELECT * FROM "users" WHERE EXISTS (SELECT * FROM "profiles" WHERE profiles.user_id = users.id)', ) @@ -49,8 +45,7 @@ async def test_where_has_executes_exists_subquery(self): sql, bindings = mock_select.call_args[0] self.assertEqual( sql, - 'SELECT * FROM "users" WHERE EXISTS ' - "(SELECT * FROM \"articles\" WHERE articles.user_id = users.id)", + 'SELECT * FROM "users" WHERE EXISTS (SELECT * FROM "articles" WHERE articles.user_id = users.id)', ) self.assertEqual(list(bindings), []) @@ -65,6 +60,6 @@ async def test_where_has_with_callback_passes_correct_sql_and_bindings(self): self.assertEqual( sql, 'SELECT * FROM "users" WHERE EXISTS ' - "(SELECT * FROM \"articles\" WHERE articles.user_id = users.id AND \"articles\".\"id\" = ?)", + '(SELECT * FROM "articles" WHERE articles.user_id = users.id AND "articles"."id" = ?)', ) self.assertEqual(list(bindings), [1]) diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/fixtures/migrations/2026_01_01_000000_create_posts_table.py b/fastapi_startkit/tests/masoniteorm/sqlite/fixtures/migrations/2026_01_01_000000_create_posts_table.py index 9964a31b..da5d81f1 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/fixtures/migrations/2026_01_01_000000_create_posts_table.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/fixtures/migrations/2026_01_01_000000_create_posts_table.py @@ -9,4 +9,4 @@ async def up(self): table.timestamps() async def down(self): - await self.schema.drop("posts") \ No newline at end of file + await self.schema.drop("posts") diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/models/test_sqlite_model_casts.py b/fastapi_startkit/tests/masoniteorm/sqlite/models/test_sqlite_model_casts.py index d2bcaa29..6d980fc3 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/models/test_sqlite_model_casts.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/models/test_sqlite_model_casts.py @@ -79,12 +79,14 @@ async def test_sqlite_model_casts_pydantic_object_none(self): async def test_sqlite_model_casts_pydantic_object_insert_with_instance(self): address = Address(address="456 Queen St", city="Melbourne", state="VIC", country="Australia") - await User.create({ - "email": "instance@example.com", - "name": "Instance User", - "is_admin": False, - "address": address, - }) + await User.create( + { + "email": "instance@example.com", + "name": "Instance User", + "is_admin": False, + "address": address, + } + ) fetched = await User.where("email", "instance@example.com").first() @@ -93,12 +95,14 @@ async def test_sqlite_model_casts_pydantic_object_insert_with_instance(self): self.assertEqual(fetched.address.city, "Melbourne") async def test_sqlite_model_casts_pydantic_object_insert_with_dict(self): - await User.create({ - "email": "dict@example.com", - "name": "Dict User", - "is_admin": False, - "address": {"address": "789 King St", "city": "Brisbane", "state": "QLD", "country": "Australia"}, - }) + await User.create( + { + "email": "dict@example.com", + "name": "Dict User", + "is_admin": False, + "address": {"address": "789 King St", "city": "Brisbane", "state": "QLD", "country": "Australia"}, + } + ) fetched = await User.where("email", "dict@example.com").first() @@ -107,13 +111,15 @@ async def test_sqlite_model_casts_pydantic_object_insert_with_dict(self): self.assertEqual(fetched.address.city, "Brisbane") async def test_sqlite_model_casts_datetime(self): - await User.create({ - "email": "datetime@example.com", - "name": "DateTime User", - "is_admin": False, - "email_verified_at": "2024-06-15 12:30:00", - "date_of_birth": datetime.datetime.now(datetime.timezone.utc), - }) + await User.create( + { + "email": "datetime@example.com", + "name": "DateTime User", + "is_admin": False, + "email_verified_at": "2024-06-15 12:30:00", + "date_of_birth": datetime.datetime.now(datetime.timezone.utc), + } + ) user = await User.where("email", "datetime@example.com").first() diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_has_many_through_relationship.py b/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_has_many_through_relationship.py index 704eae21..e0a191a5 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_has_many_through_relationship.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_has_many_through_relationship.py @@ -35,7 +35,5 @@ async def test_has_many_through_can_get_related(self): assert logos.count() == 1 async def test_has_many_through_has_query(self): - users = await User.where_has( - "logos", lambda query: query - ).get() + users = await User.where_has("logos", lambda query: query).get() assert users.count() == 1 diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_has_one_through_relationship.py b/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_has_one_through_relationship.py index cf7bed29..f403fb2e 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_has_one_through_relationship.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_has_one_through_relationship.py @@ -4,9 +4,7 @@ class TestHasOneThroughRelationship(TestCase): async def test_has_one_through_can_eager_load(self): - shipments = await ( - IncomingShipment.where("name", "Bread").with_("from_country").get() - ) + shipments = await IncomingShipment.where("name", "Bread").with_("from_country").get() assert shipments.count() == 2 shipment1 = shipments.shift() @@ -18,19 +16,11 @@ async def test_has_one_through_can_eager_load(self): assert shipment2.from_country.country_id == 40 # check .first() and .get() produce the same result - single = await ( - IncomingShipment.where("name", "Tractor Parts") - .with_("from_country") - .first() - ) - single_get = await ( - IncomingShipment.where("name", "Tractor Parts").with_("from_country").get() - ) + single = await IncomingShipment.where("name", "Tractor Parts").with_("from_country").first() + single_get = await IncomingShipment.where("name", "Tractor Parts").with_("from_country").get() assert single.from_country.country_id == 10 assert single_get.count() == 1 - assert ( - single.from_country.country_id == single_get.first().from_country.country_id - ) + assert single.from_country.country_id == single_get.first().from_country.country_id async def test_has_one_through_eager_load_can_be_empty(self): shipments = await ( @@ -48,7 +38,5 @@ async def test_has_one_through_can_get_related(self): assert country.country_id == 10 async def test_has_one_through_has_query(self): - shipments = await IncomingShipment.where_has( - "from_country", lambda query: query.where("name", "USA") - ).get() + shipments = await IncomingShipment.where_has("from_country", lambda query: query.where("name", "USA")).get() assert shipments.count() == 2 diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_polymorphic.py b/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_polymorphic.py index 659d8d0b..675cf79a 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_polymorphic.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/relationships/test_sqlite_polymorphic.py @@ -1,4 +1,3 @@ -from dumpdie import dd from fastapi_startkit.masoniteorm.models.registry import Registry from ...fixtures.model import Articles, Like, Product from ..test_case import TestCase diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/schema/test_sqlite_schema_builder.py b/fastapi_startkit/tests/masoniteorm/sqlite/schema/test_sqlite_schema_builder.py index 906ac0d2..9c2a72b3 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/schema/test_sqlite_schema_builder.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/schema/test_sqlite_schema_builder.py @@ -1,7 +1,5 @@ from unittest.mock import AsyncMock, MagicMock -from fastapi_startkit.masoniteorm.migrations.Migration import Migration -from fastapi_startkit.masoniteorm.models.MigrationModel import MigrationModel from ..test_case import TestCase @@ -18,9 +16,7 @@ async def test_can_add_columns(self): self.assertEqual(len(blueprint.table.added_columns), 2) self.assertEqual( await blueprint.to_sql(), - [ - 'CREATE TABLE "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL)' - ], + ['CREATE TABLE "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL)'], ) async def test_can_add_tiny_text(self): @@ -60,9 +56,7 @@ async def test_can_create_table_if_not_exists(self): self.assertEqual(len(blueprint.table.added_columns), 2) self.assertEqual( await blueprint.to_sql(), - [ - 'CREATE TABLE IF NOT EXISTS "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL)' - ], + ['CREATE TABLE IF NOT EXISTS "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL)'], ) async def test_can_add_columns_with_constraint(self): @@ -77,9 +71,7 @@ async def test_can_add_columns_with_constraint(self): self.assertEqual(len(blueprint.table.added_columns), 2) self.assertEqual( await blueprint.to_sql(), - [ - 'CREATE TABLE "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL, UNIQUE(name))' - ], + ['CREATE TABLE "users" ("name" VARCHAR(255) NOT NULL, "age" INTEGER NOT NULL, UNIQUE(name))'], ) async def test_can_have_float_type(self): @@ -128,9 +120,7 @@ async def test_can_add_columns_with_foreign_key_constraint_name(self): blueprint.string("name").unique() blueprint.integer("age") blueprint.integer("profile_id") - blueprint.foreign("profile_id", name="profile_foreign").references("id").on( - "profiles" - ) + blueprint.foreign("profile_id", name="profile_foreign").references("id").on("profiles") self.assertEqual(len(blueprint.table.added_columns), 3) self.assertEqual( @@ -301,9 +291,7 @@ async def test_can_advanced_table_creation2(self): blueprint.string("thumbnail").nullable() blueprint.integer("premium") blueprint.integer("author_id").unsigned().nullable() - blueprint.foreign("author_id").references("id").on("users").on_delete( - "set null" - ) + blueprint.foreign("author_id").references("id").on("users").on_delete("set null") blueprint.text("description") blueprint.timestamps() @@ -326,9 +314,7 @@ async def test_has_table(self): await self.schema.has_table("users") sql, _ = mock_run.call_args[0] - self.assertEqual( - sql, "SELECT name FROM sqlite_master WHERE type='table' AND name='users'" - ) + self.assertEqual(sql, "SELECT name FROM sqlite_master WHERE type='table' AND name='users'") async def test_can_truncate(self): mock_statement = AsyncMock() diff --git a/fastapi_startkit/tests/masoniteorm/sqlite/schema/test_sqlite_schema_builder_alter.py b/fastapi_startkit/tests/masoniteorm/sqlite/schema/test_sqlite_schema_builder_alter.py index aea472a5..b1929d02 100644 --- a/fastapi_startkit/tests/masoniteorm/sqlite/schema/test_sqlite_schema_builder_alter.py +++ b/fastapi_startkit/tests/masoniteorm/sqlite/schema/test_sqlite_schema_builder_alter.py @@ -171,9 +171,7 @@ async def test_alter_add_primary(self): self.assertEqual( await blueprint.to_sql(), - [ - 'ALTER TABLE "users" ADD CONSTRAINT users_playlist_id_primary PRIMARY KEY (playlist_id)' - ], + ['ALTER TABLE "users" ADD CONSTRAINT users_playlist_id_primary PRIMARY KEY (playlist_id)'], ) async def test_alter_add_column_and_foreign_key(self): @@ -186,9 +184,7 @@ async def test_alter_add_column_and_foreign_key(self): async with await self.schema.table("users") as blueprint: blueprint.unsigned_integer("playlist_id").nullable() - blueprint.foreign("playlist_id").references("id").on("playlists").on_delete( - "cascade" - ).on_update("SET NULL") + blueprint.foreign("playlist_id").references("id").on("playlists").on_delete("cascade").on_update("SET NULL") blueprint.table.from_table = table self.assertEqual( @@ -213,9 +209,7 @@ async def test_alter_add_foreign_key_only(self): table.add_column("email", "string") async with await self.schema.table("users") as blueprint: - blueprint.foreign("playlist_id").references("id").on("playlists").on_delete( - "cascade" - ).on_update("set null") + blueprint.foreign("playlist_id").references("id").on("playlists").on_delete("cascade").on_update("set null") blueprint.table.from_table = table self.assertEqual( diff --git a/fastapi_startkit/tests/storage/test_storage.py b/fastapi_startkit/tests/storage/test_storage.py index 36755c61..95329178 100644 --- a/fastapi_startkit/tests/storage/test_storage.py +++ b/fastapi_startkit/tests/storage/test_storage.py @@ -2,6 +2,7 @@ from unittest.mock import MagicMock, patch from fastapi_startkit.storage.storage import StorageManager, Storage + class TestStorage(unittest.TestCase): def setUp(self): self.mock_app = MagicMock() @@ -18,13 +19,13 @@ def setUp(self): "secret": "aws-secret", "region": "us-east-1", "bucket": "my-bucket", - } - } + }, + }, } self.storage_manager = StorageManager(self.mock_app).set_configuration(self.config) self.mock_driver = MagicMock() self.storage_manager.add_driver("local", self.mock_driver) - + # Reset Storage singleton Storage.instance = None @@ -42,14 +43,14 @@ def test_disk_resolution(self): def test_storage_proxy_methods(self, mock_app_getter): mock_app_getter.return_value = self.mock_app self.mock_app.make.return_value = self.storage_manager - + # Mock disk() to return the mock driver self.mock_driver.set_options.return_value = self.mock_driver - + # Test proxying put Storage.put("test.txt", "content") self.mock_driver.put.assert_called_with("test.txt", "content") - + # Test disk selection proxy Storage.disk("local") self.mock_driver.set_options.assert_called() @@ -58,7 +59,7 @@ def test_storage_singleton_behavior(self): with patch("fastapi_startkit.application.app") as mock_app_getter: mock_app_getter.return_value = self.mock_app self.mock_app.make.return_value = self.storage_manager - + s1 = Storage.init() s2 = Storage.init() self.assertEqual(s1, s2) @@ -67,10 +68,10 @@ def test_storage_singleton_behavior(self): def test_local_driver_download(self): from fastapi_startkit.storage.drivers.local import LocalDriver from fastapi.responses import FileResponse - + driver = LocalDriver(self.mock_app) driver.set_options({"root": "/tmp"}) - + with patch("os.makedirs"): response = driver.download("test.txt") self.assertIsInstance(response, FileResponse) @@ -79,15 +80,15 @@ def test_local_driver_download(self): def test_s3_driver_download(self): from fastapi_startkit.storage.drivers.s3 import S3Driver from fastapi.responses import RedirectResponse - + driver = S3Driver(self.mock_app) driver.set_options({"bucket": "test-bucket", "key": "key", "secret": "secret"}) - + with patch.object(driver, "get_client") as mock_client_getter: mock_client = MagicMock() mock_client_getter.return_value = mock_client mock_client.generate_presigned_url.return_value = "https://s3.url" - + response = driver.download("test.txt") self.assertIsInstance(response, RedirectResponse) self.assertEqual(response.headers["location"], "https://s3.url") @@ -96,14 +97,15 @@ def test_storage_fake(self): with patch("fastapi_startkit.application.app") as mock_app_getter: mock_app_getter.return_value = self.mock_app self.mock_app.make.return_value = self.storage_manager - + # Fake the 's3' disk - Storage.fake('s3') - + Storage.fake("s3") + # The driver for 's3' should now be a LocalDriver (the fake) from fastapi_startkit.storage.drivers.local import LocalDriver - driver = self.storage_manager.get_driver('s3') + + driver = self.storage_manager.get_driver("s3") self.assertIsInstance(driver, LocalDriver) - + # Verify it uses a temporary directory - self.assertIn('storage_fake_s3_', driver.options['root']) + self.assertIn("storage_fake_s3_", driver.options["root"]) diff --git a/fastapi_startkit/uv.lock b/fastapi_startkit/uv.lock index dd3569e8..136f03af 100644 --- a/fastapi_startkit/uv.lock +++ b/fastapi_startkit/uv.lock @@ -443,7 +443,7 @@ wheels = [ [[package]] name = "fastapi-startkit" -version = "0.25.0" +version = "0.26.0" source = { editable = "." } dependencies = [ { name = "cleo" }, @@ -483,11 +483,16 @@ vite = [ [package.dev-dependencies] dev = [ + { name = "aiomysql" }, + { name = "aiosqlite" }, + { name = "asyncpg" }, { name = "dumpdie" }, + { name = "fastapi", extra = ["standard"] }, { name = "itsdangerous" }, { name = "pytest" }, { name = "pytest-asyncio" }, { name = "ruff" }, + { name = "sqlalchemy", extra = ["asyncio"] }, { name = "twine" }, ] @@ -515,11 +520,16 @@ provides-extras = ["fastapi", "database", "sqlite", "postgres", "mysql", "vite", [package.metadata.requires-dev] dev = [ + { name = "aiomysql", specifier = ">=0.2.0" }, + { name = "aiosqlite", specifier = ">=0.22.1" }, + { name = "asyncpg", specifier = ">=0.29.0" }, { name = "dumpdie", specifier = ">=1.5.0" }, + { name = "fastapi", extras = ["standard"], specifier = ">=0.124.4" }, { name = "itsdangerous", specifier = ">=2.2.0" }, { name = "pytest", specifier = ">=9.0.3" }, { name = "pytest-asyncio", specifier = ">=1.3.0" }, { name = "ruff", specifier = ">=0.9.0" }, + { name = "sqlalchemy", extras = ["asyncio"], specifier = ">=2.0.38" }, { name = "twine", specifier = ">=6.2.0" }, ]