Open ipmb opened 4 years ago
I'm trying to run:
zappa manage production 'shell -c "from django.contrib.auth import get_user_model; get_user_model().objects.create_superuser(username=\"admin\", password=\"changeme\")"'
It will invoke a command that is equivalent to:
manage.py shell -c "from django.contrib.auth import get_user_model; get_user_model().objects.create_superuser(username=\"admin\", password=\"changeme\")"
[START] RequestId: edf0eeda-879e-41ca-8595-e51a0adaee17 Version: $LATEST [ERROR] CommandError: Error: unrecognized arguments: django.contrib.auth import get_user_model; get_user_model().objects.create_superuser(username="admin", password="changeme")\' Traceback (most recent call last): File "/tmp/project/sentry_sdk/integrations/aws_lambda.py", line 57, in sentry_handler reraise(*exc_info) File "/tmp/project/sentry_sdk/_compat.py", line 57, in reraise raise value File "/tmp/project/sentry_sdk/integrations/aws_lambda.py", line 48, in sentry_handler return handler(event, context, *args, **kwargs) File "/var/task/handler.py", line 609, in lambda_handler return LambdaHandler.lambda_handler(event, context) File "/var/task/handler.py", line 243, in lambda_handler return handler.handler(event, context) File "/var/task/handler.py", line 408, in handler management.call_command(*event['manage'].split(' ')) File "/tmp/project/django/core/management/__init__.py", line 147, in call_command defaults = parser.parse_args(args=parse_args) File "/tmp/project/django/core/management/base.py", line 55, in parse_args return super().parse_args(args, namespace) File "/var/lang/lib/python3.7/argparse.py", line 1758, in parse_args self.error(msg % ' '.join(argv)) File "/tmp/project/django/core/management/base.py", line 61, in error raise CommandError("Error: %s" % message)
I suspect the issue is here: https://github.com/Miserlou/Zappa/blob/0c8d99ddbc297124d93c166652013abba50ee86e/zappa/handler.py#L408
The code is simply splitting arguments by spaces where shlex.split might be more appropriate.
shlex.split
>>> manage = 'shell -c "from django.contrib.auth import get_user_model; get_user_model().objects.create_superuser(username=\\"admin\\", password=\\"changeme\\")"' >>> manage.split(" ") ['shell', '-c', '"from', 'django.contrib.auth', 'import', 'get_user_model;', 'get_user_model().objects.create_superuser(username=\\"admin\\",', 'password=\\"changeme\\")"'] >>> import shlex >>> shlex.split(manage) ['shell', '-c', 'from django.contrib.auth import get_user_model; get_user_model().objects.create_superuser(username="admin", password="changeme")']
Zappa version used: 0.51.0
Operating System and Python version: MacOS Python3.7
The output of pip freeze:
pip freeze
appnope==0.1.0 argcomplete==1.12.0 asgiref==3.2.10 backcall==0.2.0 boto==2.39.0 boto3==1.14.25 botocore==1.17.25 certifi==2020.6.20 cffi==1.14.0 cfn-flip==1.2.3 chardet==3.0.4 click==7.1.2 cryptography==3.0 decorator==4.4.2 dj-database-url==0.5.0 Django==3.0.8 django-storages==1.9.1 docutils==0.15.2 durationpy==0.5 filechunkio==1.6 future==0.18.2 futures==3.0.4 goodconf==1.0.0 hjson==3.0.1 idna==2.10 importlib-metadata==1.7.0 ipykernel==5.3.3 ipython==7.16.1 ipython-genutils==0.2.0 jedi==0.17.2 jmespath==0.10.0 jupyter-client==6.1.6 jupyter-core==4.6.3 kappa==0.6.0 lxml==4.5.2 nose==1.3.7 ntlm-auth==1.5.0 numpy==1.19.1 pandas==1.0.5 parso==0.7.0 pexpect==4.8.0 pickleshare==0.7.5 pip-tools==5.2.1 placebo==0.9.0 prompt-toolkit==3.0.5 psycopg2-binary==2.8.5 ptyprocess==0.6.0 pycparser==2.20 Pygments==2.6.1 python-dateutil==2.6.1 python-slugify==4.0.1 pytz==2020.1 PyYAML==5.3.1 pyzmq==19.0.1 requests==2.24.0 requests-ntlm==1.1.0 requests-toolbelt==0.9.1 ruamel.yaml==0.16.10 ruamel.yaml.clib==0.2.0 s3transfer==0.3.3 sentry-sdk==0.16.1 SharePlum==0.5.1 six==1.15.0 sqlparse==0.3.1 text-unidecode==1.3 toml==0.10.1 tornado==6.0.4 tqdm==4.48.0 traitlets==4.3.3 troposphere==2.6.2 urllib3==1.25.9 wcwidth==0.2.5 Werkzeug==0.16.1 whitenoise==5.1.0 wsgi-request-logger==0.4.6 xlrd==1.2.0 zappa==0.51.0 zipp==3.1.0
Link to your project (optional):
Your zappa_settings.json:
zappa_settings.json
{ "production": { "aws_region": "us-west-2", "django_settings": "project.settings", "exclude": ["project.yml"], "project_name": "project", "runtime": "python3.7", "s3_bucket": "project", "manage_roles": false, "keep_warm": false, "role_arn": "arn:aws:iam::xxxx:role/service-role/project-lambda-service", "route53_enabled": false, "domain": "project.example.com", "async_resources": false, "apigateway_enabled": false, "lambda_description": "my project", "slim_handler": true, "memory_size": 256, "timeout_seconds": 300, "log_level": "INFO" } }
Context
I'm trying to run:
Expected Behavior
It will invoke a command that is equivalent to:
Actual Behavior
Possible Fix
I suspect the issue is here: https://github.com/Miserlou/Zappa/blob/0c8d99ddbc297124d93c166652013abba50ee86e/zappa/handler.py#L408
The code is simply splitting arguments by spaces where
shlex.split
might be more appropriate.Your Environment
Zappa version used: 0.51.0
Operating System and Python version: MacOS Python3.7
The output of
pip freeze
:Link to your project (optional):
Your
zappa_settings.json
: