A collection of classes and commands for automated command line scripting using Python.
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.

103 lines
2.8 KiB

"""
[run django checks]
django: check
[export fixtures]
django: dump lookups.Category
[import fixtures]
django: load lookups.Category
[migrate the database]
django: migrate
[collect static files]
django: static
[create super user (ad hoc command)]
django: createsuperuser root
"""
from .base import EXCLUDED_KWARGS, Command
def django(management_command, *args, excluded_kwargs=None, **kwargs):
# The excluded parameters (filtered below) may vary based on implementation. We do, however, need a default.
excluded_kwargs = excluded_kwargs or EXCLUDED_KWARGS
# Django's management commands can have a number of options. We need to filter out internal parameters so that these
# are not used as options for the management command.
_kwargs = dict()
for key in excluded_kwargs:
if key in kwargs:
_kwargs[key] = kwargs.pop(key)
if 'comment' not in _kwargs:
_kwargs['comment'] = "run %s django management command" % management_command
a = list()
a.append("./manage.py %s" % management_command)
for key, value in kwargs.items():
key = key.replace("_", "-")
if type(value) is bool and value is True:
a.append("--%s" % key)
elif type(value) is str:
a.append('--%s="%s"' % (key, value))
else:
a.append('--%s=%s' % (key, value))
_args = list(args)
if len(_args) > 0:
a.append(" ".join(_args))
statement = " ".join(a)
return Command(statement, **_kwargs)
def django_check(**kwargs):
kwargs.setdefault("comment", "run django checks")
kwargs.setdefault("register", "django_checks_out")
return django("check", **kwargs)
def django_dump(target, path=None, **kwargs):
kwargs.setdefault("comment", "dump app/model data")
kwargs.setdefault("format", "json")
kwargs.setdefault("indent", 4)
if path is None:
path = "../deploy/fixtures/%s.%s" % (target, kwargs['format'])
return django("dumpdata", target, "> %s" % path, **kwargs)
def django_load(target, path=None, **kwargs):
kwargs.setdefault("comment", "load app/model data")
input_format = kwargs.pop("format", "json")
if path is None:
path = "../deploy/fixtures/%s.%s" % (target, input_format)
return django("loaddata", path, **kwargs)
def django_migrate(**kwargs):
kwargs.setdefault("comment", "apply database migrations")
return django("migrate", **kwargs)
def django_static(**kwargs):
kwargs.setdefault("comment", "collect static files")
kwargs.setdefault("noinput", True)
return django("collectstatic", **kwargs)
DJANGO_MAPPINGS = {
'django': django,
'django.check': django_check,
'django.dump': django_dump,
'django.load': django_load,
'django.migration': django_migrate,
'django.static': django_static,
}