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.
114 lines
3.4 KiB
114 lines
3.4 KiB
3 years ago
|
from commonkit import parse_jinja_string
|
||
|
|
||
|
|
||
|
def django_command_parser(snippet, args=None):
|
||
|
|
||
|
# We need to remove the common options so any remaining keyword arguments are converted to switches for the
|
||
|
# management command.
|
||
|
_kwargs = snippet.kwargs.copy()
|
||
|
_kwargs.pop("comment")
|
||
|
_kwargs.pop("environments", None)
|
||
|
_kwargs.pop("prefix", None)
|
||
|
_kwargs.pop("cd", None)
|
||
|
_kwargs.pop("register", None)
|
||
|
_kwargs.pop("shell", None)
|
||
|
_kwargs.pop("stop", None)
|
||
|
_kwargs.pop("tags", None)
|
||
|
_kwargs.pop("venv", None)
|
||
|
|
||
|
# We need to remove some parameters for dumpdata and loaddata. Otherwise they end up as switches.
|
||
|
if snippet.name in ("django.dumpdata", "django.loaddata"):
|
||
|
app_name = _kwargs.pop("app", None)
|
||
|
model_name = _kwargs.pop("model", None)
|
||
|
|
||
|
default_path = "fixtures/%s/initial.json" % app_name
|
||
|
if model_name:
|
||
|
default_path = "fixtures/%s/%s.json" % (app_name, model_name.lower())
|
||
|
|
||
|
path = _kwargs.pop("path", default_path)
|
||
|
if 'path' not in snippet.kwargs:
|
||
|
snippet.kwargs['path'] = path
|
||
|
|
||
|
a = list()
|
||
|
command_name = None
|
||
|
for key, value in _kwargs.items():
|
||
|
if key == "_name":
|
||
|
command_name = value
|
||
|
continue
|
||
|
|
||
|
key = key.replace("_", "-")
|
||
|
if type(value) is bool:
|
||
|
if value is True:
|
||
|
a.append("--%s" % key)
|
||
|
else:
|
||
|
a.append("--%s=%s" % (key, value))
|
||
|
|
||
|
context = snippet.context.copy()
|
||
|
context['args'] = args or snippet.args
|
||
|
context['command_name'] = command_name
|
||
|
context['switches'] = " ".join(a)
|
||
|
context.update(snippet.kwargs)
|
||
|
|
||
|
if type(snippet.content) is list:
|
||
|
b = list()
|
||
|
for i in snippet.content:
|
||
|
b.append(parse_jinja_string(i, context))
|
||
|
|
||
|
return " ".join(b)
|
||
|
|
||
|
return parse_jinja_string(snippet.content, context)
|
||
|
|
||
|
|
||
|
# def django_command_builder(tokens, *args, **kwargs):
|
||
|
# a = list()
|
||
|
#
|
||
|
# command_name = tokens.pop(0)
|
||
|
# if command_name == "command":
|
||
|
# command_name = tokens.pop(0)
|
||
|
#
|
||
|
# params = django_convert_params(*args, **kwargs)
|
||
|
#
|
||
|
# a.append("./manage.py %s" % command_name)
|
||
|
# if len(list(params)) > 0:
|
||
|
# a.append(" ".join(list(params)))
|
||
|
#
|
||
|
# return a
|
||
|
#
|
||
|
#
|
||
|
# def django_convert_params(*args, **kwargs):
|
||
|
# a = list()
|
||
|
# for key, value in kwargs.items():
|
||
|
# key = key.replace("_", "-")
|
||
|
# if type(value) is bool:
|
||
|
# if value is True:
|
||
|
# a.append("--%s" % key)
|
||
|
# else:
|
||
|
# a.append("--%s=%s" % (key, value))
|
||
|
#
|
||
|
# return " ".join(list(args)), " ".join(a)
|
||
|
|
||
|
|
||
|
django = {
|
||
|
'django': {
|
||
|
'check': "./manage.py check {{ switches }}",
|
||
|
'command': "./manage.py {{ command_name }} {% if args %}{{ ' '.join(args) }}{% endif %} {{ switches }}",
|
||
|
'dumpdata': [
|
||
|
"./manage.py dumpdata {{ app }}{% if model %}.{{ model }}{% endif %}",
|
||
|
"--indent=4",
|
||
|
"{{ switches }}",
|
||
|
'> {{ path }}',
|
||
|
],
|
||
|
'loaddata': [
|
||
|
"./manage.py loaddata",
|
||
|
"{{ switches }}"
|
||
|
'{{ path }}',
|
||
|
],
|
||
|
'migrate': "./manage.py migrate {{ switches }}",
|
||
|
'static': "./manage.py collectstatic {{ switches }}",
|
||
|
'_default': "command",
|
||
|
'_parser': django_command_parser,
|
||
|
'_prefix': "source {{ virtualenv }}/bin/activate",
|
||
|
'_register': ["check", "migrate"]
|
||
|
}
|
||
|
}
|