Skip to content
Open
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
40 changes: 39 additions & 1 deletion src/masoniteorm/commands/Command.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,44 @@
from ..config import load_config
from ..exceptions import ConfigurationNotFound
from clikit.api.args.exceptions import NoSuchOptionException
from .CanOverrideConfig import CanOverrideConfig
from .CanOverrideOptionsDefault import CanOverrideOptionsDefault


class Command(CanOverrideOptionsDefault, CanOverrideConfig):
pass
def _get_config(self):
if not hasattr(self, "_orm_config"):
try:
self._orm_config = load_config(self._get_option_value("config"))
except ConfigurationNotFound:
self._orm_config = None

return self._orm_config

def _get_option_value(self, option_name):
try:
return self.option(option_name)
except NoSuchOptionException:
option = self.config.options.get(option_name)
if option:
return option.default

return None

def option_or_config(self, option_name, default, *config_names):
value = self._get_option_value(option_name)

if value != default:
return value

config = self._get_config()
if not config:
return default

names = config_names or (option_name.replace("-", "_"),)
for name in names:
for config_name in (name, name.upper()):
if hasattr(config, config_name):
return getattr(config, config_name)

return default
7 changes: 6 additions & 1 deletion src/masoniteorm/commands/MakeMigrationCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,12 @@ def handle(self):
table = tableize(name.replace("create_", "").replace("_table", ""))
stub_file = "create_migration"

migration_directory = self.option("directory")
migration_directory = self.option_or_config(
"directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
)

with open(
os.path.join(
Expand Down
18 changes: 15 additions & 3 deletions src/masoniteorm/commands/MakeModelCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ class MakeModelCommand(Command):
def handle(self):
name = self.argument("name")

model_directory = self.option("directory")
model_directory = self.option_or_config(
"directory", "app", "MODELS_DIRECTORY", "models_directory"
)

with open(
os.path.join(pathlib.Path(__file__).parent.absolute(), "stubs/model.stub")
Expand Down Expand Up @@ -53,7 +55,12 @@ def handle(self):

self.info(f"Model created: {os.path.join(model_directory, file_name)}")
if self.option("migration"):
migrations_directory = self.option("migrations-directory")
migrations_directory = self.option_or_config(
"migrations-directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
)
if self.option("table"):
self.call(
"migration",
Expand All @@ -66,5 +73,10 @@ def handle(self):
)

if self.option("seeder"):
directory = self.option("seeders-directory")
directory = self.option_or_config(
"seeders-directory",
"databases/seeds",
"SEEDERS_DIRECTORY",
"seeders_directory",
)
self.call("seed", f"{self.argument('name')} --directory {directory}")
4 changes: 3 additions & 1 deletion src/masoniteorm/commands/MakeSeedCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ def handle(self):
# replace the placeholders of a stub file
# output the content to a file location
name = self.argument("name") + "TableSeeder"
seed_directory = self.option("directory")
seed_directory = self.option_or_config(
"directory", "databases/seeds", "SEEDS_DIRECTORY", "seed_directory"
)

file_name = underscore(name)
stub_file = "create_seed"
Expand Down
7 changes: 6 additions & 1 deletion src/masoniteorm/commands/MigrateCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,12 @@ def handle(self):
migration = Migration(
command_class=self,
connection=self.option("connection"),
migration_directory=self.option("directory"),
migration_directory=self.option_or_config(
"directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
),
config_path=self.option("config"),
schema=self.option("schema"),
)
Expand Down
11 changes: 8 additions & 3 deletions src/masoniteorm/commands/MigrateFreshCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@ def handle(self):
migration = Migration(
command_class=self,
connection=self.option("connection"),
migration_directory=self.option("directory"),
migration_directory=self.option_or_config(
"directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
),
config_path=self.option("config"),
schema=self.option("schema"),
)
Expand All @@ -32,11 +37,11 @@ def handle(self):
if self.option("seed") == "null":
self.call(
"seed:run",
f"None --directory {self.option('seed-directory')} --connection {self.option('connection')}",
f"None --directory {self.option_or_config('seed-directory', 'databases/seeds', 'SEEDS_DIRECTORY', 'seed_directory')} --connection {self.option('connection')}",
)

elif self.option("seed"):
self.call(
"seed:run",
f"{self.option('seed')} --directory {self.option('seed-directory')} --connection {self.option('connection')}",
f"{self.option('seed')} --directory {self.option_or_config('seed-directory', 'databases/seeds', 'SEEDS_DIRECTORY', 'seed_directory')} --connection {self.option('connection')}",
)
7 changes: 6 additions & 1 deletion src/masoniteorm/commands/MigrateResetCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@ def handle(self):
migration = Migration(
command_class=self,
connection=self.option("connection"),
migration_directory=self.option("directory"),
migration_directory=self.option_or_config(
"directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
),
config_path=self.option("config"),
schema=self.option("schema"),
)
Expand Down
7 changes: 6 additions & 1 deletion src/masoniteorm/commands/MigrateRollbackCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@ def handle(self):
Migration(
command_class=self,
connection=self.option("connection"),
migration_directory=self.option("directory"),
migration_directory=self.option_or_config(
"directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
),
config_path=self.option("config"),
schema=self.option("schema"),
).rollback(migration=self.option("migration"), output=self.option("show"))
7 changes: 6 additions & 1 deletion src/masoniteorm/commands/MigrateStatusCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ def handle(self):
migration = Migration(
command_class=self,
connection=self.option("connection"),
migration_directory=self.option("directory"),
migration_directory=self.option_or_config(
"directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
),
config_path=self.option("config"),
schema=self.option("schema"),
)
Expand Down
7 changes: 6 additions & 1 deletion src/masoniteorm/commands/SeedRunCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@ class SeedRunCommand(Command):
def handle(self):
seeder = Seeder(
dry=self.option("dry"),
seed_path=self.option("directory"),
seed_path=self.option_or_config(
"directory",
"databases/seeds",
"SEEDS_DIRECTORY",
"seed_directory",
),
connection=self.option("connection"),
)

Expand Down
82 changes: 82 additions & 0 deletions tests/commands/test_directory_defaults.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import os
import unittest

from src.masoniteorm.commands import (
MakeMigrationCommand,
MakeModelCommand,
MakeSeedCommand,
MigrateCommand,
SeedRunCommand,
)


class TestDirectoryDefaults(unittest.TestCase):
def setUp(self):
self.original_db_config_path = os.getenv("DB_CONFIG_PATH")
os.environ["DB_CONFIG_PATH"] = "tests/integrations/config/folder_defaults"

def tearDown(self):
if self.original_db_config_path is None:
os.environ.pop("DB_CONFIG_PATH", None)
else:
os.environ["DB_CONFIG_PATH"] = self.original_db_config_path

def test_make_model_uses_configured_defaults(self):
command = MakeModelCommand()

self.assertEqual(
command.option_or_config(
"directory", "app", "MODELS_DIRECTORY", "models_directory"
),
"custom-app",
)
self.assertEqual(
command.option_or_config(
"migrations-directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
),
"custom-databases/migrations",
)
self.assertEqual(
command.option_or_config(
"seeders-directory",
"databases/seeds",
"SEEDERS_DIRECTORY",
"seeders_directory",
),
"custom-databases/seeds",
)

def test_migration_and_seed_commands_use_configured_defaults(self):
self.assertEqual(
MigrateCommand().option_or_config(
"directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
),
"custom-databases/migrations",
)
self.assertEqual(
MakeMigrationCommand().option_or_config(
"directory",
"databases/migrations",
"MIGRATIONS_DIRECTORY",
"migrations_directory",
),
"custom-databases/migrations",
)
self.assertEqual(
MakeSeedCommand().option_or_config(
"directory", "databases/seeds", "SEEDS_DIRECTORY", "seed_directory"
),
"custom-databases/seeds",
)
self.assertEqual(
SeedRunCommand().option_or_config(
"directory", "databases/seeds", "SEEDS_DIRECTORY", "seed_directory"
),
"custom-databases/seeds",
)
19 changes: 19 additions & 0 deletions tests/integrations/config/folder_defaults.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from src.masoniteorm.connections import ConnectionResolver


DATABASES = {
"default": "test",
"test": {
"driver": "sqlite",
"database": "orm.sqlite3",
"prefix": "",
"log_queries": True,
},
}

DB = ConnectionResolver().set_connection_details(DATABASES)

MODELS_DIRECTORY = "custom-app"
MIGRATIONS_DIRECTORY = "custom-databases/migrations"
SEEDS_DIRECTORY = "custom-databases/seeds"
SEEDERS_DIRECTORY = "custom-databases/seeds"