Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ services:
MYSQL_PASSWORD: secret
ports:
- "3306:3306"
volumes:
- ./mysql-init.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "--silent" ]
interval: 5s
Expand Down
2 changes: 1 addition & 1 deletion example/config-app/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""Create-users Migration."""

from fastapi_startkit.masoniteorm.migrations import Migration
from fastapi_startkit.masoniteorm import Migration


class CreateUsers(Migration):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""CreateCategoriesTable Migration."""

from fastapi_startkit.masoniteorm.migrations import Migration
from fastapi_startkit.masoniteorm import Migration


class CreateCategoriesTable(Migration):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""CreateProfilesTable Migration."""

from fastapi_startkit.masoniteorm.migrations import Migration
from fastapi_startkit.masoniteorm import Migration


class CreateProfilesTable(Migration):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""CreateCoursesTable Migration."""

from fastapi_startkit.masoniteorm.migrations import Migration
from fastapi_startkit.masoniteorm import Migration


class CreateCoursesTable(Migration):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""CreateCourseUserTable Migration."""

from fastapi_startkit.masoniteorm.migrations import Migration
from fastapi_startkit.masoniteorm import Migration


class CreateCourseUserTable(Migration):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""CreateLessonsTable Migration."""

from fastapi_startkit.masoniteorm.migrations import Migration
from fastapi_startkit.masoniteorm import Migration


class CreateLessonsTable(Migration):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""CreateReviewsTable Migration."""

from fastapi_startkit.masoniteorm.migrations import Migration
from fastapi_startkit.masoniteorm import Migration


class CreateReviewsTable(Migration):
Expand Down
4 changes: 2 additions & 2 deletions example/database-app/databases/seeds/user_seeder.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,5 @@ async def run(self):

for data in users:
profile_data = data.pop("profile")
user, _ = await User.first_or_create({"email": data["email"]}, data)
await Profile.first_or_create({"user_id": user.id}, {"user_id": user.id, **profile_data})
user= await User.first_or_create({"email": data["email"]}, data)
await Profile.first_or_create({"user_id": user.id}, {"user_id": user.id, **profile_data})
2 changes: 1 addition & 1 deletion example/database-app/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions fastapi_startkit/src/fastapi_startkit/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from .application import Application
from .console import ConsoleApplication
from .configuration.config import Config

__all__ = ["Application", "Config"]
1 change: 0 additions & 1 deletion fastapi_startkit/src/fastapi_startkit/commands/__init__.py

This file was deleted.

7 changes: 7 additions & 0 deletions fastapi_startkit/src/fastapi_startkit/console/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from .application import ConsoleApplication
from .command import Command

__all__ = [
"ConsoleApplication",
"Command"
]
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
from typing import TYPE_CHECKING

from cleo.application import Application as BaseApplication
from cleo.io.io import IO
from fastapi_startkit.application import Application

if TYPE_CHECKING:
from fastapi_startkit.application import Application


class ConsoleApplication(BaseApplication):
def __init__(self, app: Application):
def __init__(self, app: "Application"):
super().__init__()
self.app = app

# Register commands from Application
for command in self.app.commands:
if isinstance(command, type):
self.add(command())
instance = command()
else:
self.add(command)
instance = command

instance.set_container(self.app)
self.add(instance)

def render_error(self, error: Exception, io: IO) -> None:
self.app.exception_manager.report(error)
Expand Down
14 changes: 14 additions & 0 deletions fastapi_startkit/src/fastapi_startkit/console/command.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from typing import TYPE_CHECKING

from .can_override_config import CanOverrideConfig
from .can_override_default_options import CanOverrideOptionsDefault

if TYPE_CHECKING:
from fastapi_startkit import Application


class Command(CanOverrideOptionsDefault, CanOverrideConfig):
container: "Application"

def set_container(self, container: "Application") -> None:
self.container = container
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import shutil
from typing import TYPE_CHECKING

from cleo.commands.command import Command
from fastapi_startkit.console import Command
from cleo.helpers import option
from fastapi_startkit.helpers.string import Str

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from cleo.commands.command import Command
from fastapi_startkit.console.command import Command
from cleo.helpers import option


Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from .config.config import MySQLConfig, PostgresConfig, SQLiteConfig
from .facades import DB
from .migrations.Migration import Migration
from .migrations.Migrator import Migrator
from .models import Model
from .providers import DatabaseProvider

__all__ = ["DatabaseProvider", "PostgresConfig", "MySQLConfig", "SQLiteConfig", "Model", "DB"]
__all__ = ["DatabaseProvider", "PostgresConfig", "MySQLConfig", "SQLiteConfig", "Model", "DB", "Migration", "Migrator"]

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import os
from .Command import Command

from cleo.helpers import option

from fastapi_startkit.console import Command
from fastapi_startkit.masoniteorm.migrations.Migrator import Migrator


class DBMigrateCommand(Command):
name = "db:migrate"
Expand All @@ -28,12 +31,6 @@ class DBMigrateCommand(Command):
flag=True,
description="Force migrations without prompt in production",
),
option(
"show",
"s",
flag=True,
description="Shows the output of SQL for migrations that would be running",
),
option(
"directory",
"d",
Expand All @@ -49,29 +46,42 @@ def handle(self):
return asyncio.run(self.handle_async())

async def handle_async(self):
from ..migrations import Migration
self.confirm_to_proceed()

# prompt user for confirmation in production
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()
if answer != "y":
self.info("Migrations cancelled")
exit(0)
migration = Migration(
directory = self.resolve_migration_path()

migration = Migrator(
command_class=self,
connection=self.option("connection"),
migration_directory=self.option("directory"),
migration_directory=directory,
)

await migration.create_table_if_not_exists()
if not await migration.get_unran_migrations():
self.info("Nothing To Migrate!")
return

migration_name = self.option("migration")
show_output = self.option("show")

await migration.migrate(migration=migration_name, output=show_output)
await migration.migrate(migration=migration_name)

def resolve_migration_path(self) -> str:
path = self.option('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)

def confirm_to_proceed(self) -> None:
# prompt user for confirmation in production
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()
if answer != "y":
self.info("Migrations cancelled")
exit(0)
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from cleo.helpers import argument, option
from inflection import camelize, underscore

from .Command import Command
from fastapi_startkit.console import Command


class DBSeedCommand(Command):
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from inflection import tableize
from cleo.helpers import argument, option
from fastapi_startkit.helpers.string import Str
from .Command import Command
from fastapi_startkit.console import Command


class MakeMigrationCommand(Command):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os
import pathlib
from inflection import camelize, tableize, underscore
from .Command import Command
from fastapi_startkit.console import Command
from cleo.helpers import argument, option


Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from cleo.helpers import argument, option
from ..config import load_config
from .Command import Command
from fastapi_startkit.console import Command


class MakeModelDocstringCommand(Command):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
import pathlib
from inflection import camelize, underscore
from .Command import Command
from fastapi_startkit.console import Command


class MakeObserverCommand(Command):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
import pathlib
from inflection import camelize, underscore
from .Command import Command
from fastapi_startkit.console import Command


class MakeSeedCommand(Command):
Expand Down
Loading
Loading