You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
4.7 KiB
164 lines
4.7 KiB
# Imports
|
|
|
|
import os
|
|
from ..commands import Command
|
|
|
|
# Exports
|
|
|
|
__all__ = (
|
|
"DJANGO_MAPPINGS",
|
|
"django",
|
|
"django_check",
|
|
"django_collect_static",
|
|
"django_dumpdata",
|
|
"django_loaddata",
|
|
"django_migrate",
|
|
)
|
|
|
|
# Functions
|
|
|
|
|
|
def _django(name, *args, venv=None, **kwargs):
|
|
if venv is not None:
|
|
kwargs['prefix'] = "source %s/bin/activate" % venv
|
|
|
|
kwargs.setdefault("comment", "run %s django management command" % name)
|
|
|
|
# Base parameters need to be captured, because all others are assumed to be switches for the management command.
|
|
_kwargs = {
|
|
'comment': kwargs.pop("comment", None),
|
|
'condition': kwargs.pop("condition", None),
|
|
'cd': kwargs.pop("cd", None),
|
|
'environments': kwargs.pop("environments", None),
|
|
'function': kwargs.pop("function", None),
|
|
# 'local': kwargs.pop("local", False),
|
|
'prefix': kwargs.pop("prefix", None),
|
|
'register': kwargs.pop("register", None),
|
|
'shell': kwargs.pop("shell", "/bin/bash"),
|
|
'stop': kwargs.pop("stop", False),
|
|
'sudo': kwargs.pop('sudo', False),
|
|
'tags': kwargs.pop("tags", None),
|
|
}
|
|
|
|
statement = list()
|
|
statement.append("./manage.py %s" % name)
|
|
|
|
# Remaining kwargs are assumed to be switches.
|
|
for key, value in kwargs.items():
|
|
key = key.replace("_", "-")
|
|
if type(value) is bool:
|
|
if value is True:
|
|
statement.append("--%s" % key)
|
|
else:
|
|
statement.append("--%s=%s" % (key, value))
|
|
|
|
if len(args) > 0:
|
|
statement.append(" ".join(args))
|
|
|
|
return Command(" ".join(statement), **_kwargs)
|
|
|
|
|
|
def django(name, *args, venv=None, **kwargs):
|
|
if name == "check":
|
|
return django_check(venv=venv, **kwargs)
|
|
elif name in ("collectstatic", "static"):
|
|
return django_collect_static(venv=venv, **kwargs)
|
|
elif name == "migrate":
|
|
return django_migrate(venv=venv, **kwargs)
|
|
else:
|
|
return _django(name, *args, venv=venv, **kwargs)
|
|
|
|
|
|
def django_check(venv=None, **kwargs):
|
|
kwargs.setdefault("comment", "run django checks")
|
|
kwargs.setdefault("register", "django_checks_out")
|
|
|
|
return _django("check", venv=venv, **kwargs)
|
|
|
|
|
|
def django_collect_static(venv=None, **kwargs):
|
|
kwargs.setdefault("comment", "collect static files")
|
|
|
|
return _django("collectstatic", venv=venv, **kwargs)
|
|
|
|
|
|
def django_dumpdata(app_name, base_path="local", file_name="initial", indent=4, natural_foreign=False,
|
|
natural_primary=False, path=None, venv=None, **kwargs):
|
|
"""Initialize the command.
|
|
|
|
:param app_name: The name (app label) of the app. ``app_label.ModelName`` may also be given.
|
|
:type app_name: str
|
|
|
|
:param file_name: The file name to which the data will be dumped.
|
|
:type file_name: str
|
|
|
|
:param indent: Indentation of the exported fixtures.
|
|
:type indent: int
|
|
|
|
:param natural_foreign: Use the natural foreign parameter.
|
|
:type natural_foreign: bool
|
|
|
|
:param natural_primary: Use the natural primary parameter.
|
|
:type natural_primary: bool
|
|
|
|
:param path: The path to the data file.
|
|
:type path: str
|
|
|
|
"""
|
|
kwargs.setdefault("comment", "export fixtures for %s" % app_name)
|
|
|
|
output_format = kwargs.pop("format", "json")
|
|
|
|
_path = path or os.path.join(base_path, app_name, "fixtures", "%s.%s" % (file_name, output_format))
|
|
|
|
return _django(
|
|
"dumpdata",
|
|
app_name,
|
|
"> %s" % _path,
|
|
format=output_format,
|
|
indent=indent,
|
|
natural_foreign=natural_foreign,
|
|
natural_primary=natural_primary,
|
|
venv=venv,
|
|
**kwargs
|
|
)
|
|
|
|
|
|
def django_loaddata(app_name, base_path="local", file_name="initial", path=None, venv=None, **kwargs):
|
|
"""Initialize the command.
|
|
|
|
:param app_name: The name (app label) of the app.
|
|
:type app_name: str
|
|
|
|
:param file_name: The file name to which the data will be dumped.
|
|
:type file_name: str
|
|
|
|
:param path: The path to the data file.
|
|
:type path: str
|
|
|
|
"""
|
|
kwargs.setdefault("comment", "load fixtures for %s" % app_name)
|
|
|
|
output_format = kwargs.pop("format", "json")
|
|
|
|
_path = path or os.path.join(base_path, app_name, "fixtures", "%s.%s" % (file_name, output_format))
|
|
|
|
return _django("loaddata", _path, venv=venv, **kwargs)
|
|
|
|
|
|
def django_migrate(venv=None, **kwargs):
|
|
kwargs.setdefault("comment", "run django database migrations")
|
|
|
|
return _django("migrate", venv=venv, **kwargs)
|
|
|
|
# Mapping
|
|
|
|
|
|
DJANGO_MAPPINGS = {
|
|
'django': django,
|
|
'django.check': django_check,
|
|
'django.collect_static': django_collect_static,
|
|
'django.dumpdata': django_dumpdata,
|
|
'django.loaddata': django_loaddata,
|
|
'django.migrate': django_migrate,
|
|
}
|
|
|