Metadata-Version: 1.1
Name: django-docker-helpers
Version: 0.1.13
Summary: Django Docker helpers
Home-page: https://github.com/night-crawler/django-docker-helpers
Author: night-crawler
Author-email: lilo.panic@gmail.com
License: MIT
Description: Installation
        ------------
        
        .. code:: bash
        
            pip install -e git+https://github.com/night-crawler/django-docker-helpers.git#egg=django-docker-helpers
                # OR
            pip install django-docker-helpers
        
        Utils
        ~~~~~
        
        -  ``env_bool_flag(flag_name, strict)`` - check if ENV option specified,
           is it set to true, 1, 0, etc.
        -  ``run_env_once`` ensure django management don't call
           ``twice <https://stackoverflow.com/questions/16546652/why-does-django-run-everything-twice>``\ \_
        -  ``is_dockerized`` - reads ``DOCKERIZED`` flag from env
        -  ``is_production`` - reads ``PRODUCTION`` flag from env
        
        Management Helper functions
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        -  ``ensure_databases_alive(max_retries=100)`` - tries to execute
           ``SELECT 1`` for every specified database alias in ``DATABASES``
           until success or max\_retries reached
        -  ``ensure_caches_alive(max_retries=100)`` - tries to execute
           ``SELECT 1`` for every specified cache alias in ``CACHES`` until
           success or max\_retries reached
        -  ``migrate`` - executes ``./manage.py migrate``
        -  ``modeltranslation_sync_translation_fields`` - run
           ``sync_translation_fields`` if ``modeltranslation`` is present
        -  ``collect_static`` - alias for
           ``./manage.py collectstatic -c --noinput -v0``
        -  ``create_admin`` - create superuser from
           ``settings.CONFIG['superuser']`` if user does not exists and user has
           no usable password
        -  ``run_gunicorn(application: WSGIHandler, gunicorn_module_name: str='gunicorn_prod')``
           - runs gunicorn
        
        Sample config
        ~~~~~~~~~~~~~
        
        .. code:: yaml
        
            debug: true
                db:
                    engine: django.db.backends.postgresql
                    host: postgres
                    port: 5432
                    database: mydb
                    user: mydb_user
                    password: mydb_password
                    conn_max_age: 60
        
        Read config
        ~~~~~~~~~~~
        
        .. code:: python
        
            import os
            from django_docker_helpers.config import ConfigLoader, EnvironmentParser, RedisParser, YamlParser
        
            yml_conf = os.('/tmp/my/config/without-docker.yml')
            redis_conf = os.environ.get('DJANGO_CONFIG_REDIS_KEY', 'marfa_msa_cas/conf.yml')
        
            parsers = [
                EnvironmentParser(),
                RedisParser(endpoint=redis_conf),
                YamlParser(config=yml_conf),
            ]
            configure = ConfigLoader(parsers=parsers, silent=True)
        
        
        
            DATABASES = {
                'default': {
                    'ENGINE': configure('db.name', 'django.db.backends.postgresql'),
                    'HOST': configure('db.host', 'localhost'),
                    'PORT': configure('db.port', 5432),
                    'NAME': configure('db.database', 'project_default'),
                    'USER': configure('db.user', 'project_default'),
                    'PASSWORD': configure('db.password', 'project_default'),
                    'CONN_MAX_AGE': configure('db.conn_max_age', 60, coerce_type=int),
                }
            }
        
        Usage
        ~~~~~
        
        .. code:: python
        
            #!/usr/bin/env python
            import os
            import sys
        
            from django.core.management import execute_from_command_line
        
            from django_docker_helpers.db import ensure_databases_alive, ensure_caches_alive, migrate, \
                modeltranslation_sync_translation_fields
            from django_docker_helpers.files import collect_static
            from django_docker_helpers.management import create_admin, run_gunicorn
            from msa_mailer.wsgi import application
        
            PRODUCTION = bool(int(os.environ.get('MSA_MAILER_PRODUCTION', 0) or 0))
        
            SERVER = bool(int(os.environ.get('MSA_MAILER_SERVER', 0) or 0))
        
        
            if __name__ == '__main__':
                os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'msa_mailer.settings')
        
                if PRODUCTION or os.environ.get('MSA_MAILER_FORCE_PRODUCTION'):
                    ensure_databases_alive(100)
                    ensure_caches_alive(100)
                    # skip collectstatic & migrations for worker
                    if SERVER:
                        collect_static()
                        migrate()
                        modeltranslation_sync_translation_fields()
                        create_admin()
        
                if len(sys.argv) == 2 and sys.argv[1] == 'gunicorn':
                    gunicorn_module_name = 'gunicorn_dev'
                    if PRODUCTION:
                        gunicorn_module_name = 'gunicorn_prod'
        
                    run_gunicorn(application, gunicorn_module_name=gunicorn_module_name)
                else:
                    execute_from_command_line(sys.argv)
        
        Testing
        ~~~~~~~
        
        1. ``$ pip install -r requirements/dev.txt``
        2. `Download Consul <https://www.consul.io/downloads.html>`__ and unzip
           it into the project's directory.
        3. ``$ ./consul agent -server -ui -dev``
        4. ``$ pytest``
        
Platform: UNKNOWN
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: License :: OSI Approved :: MIT License
