跳转到主要内容

Django Docker helpers

项目描述

Docs Coverage Build status PyPI version PyPI Wheel Requirements Status Supported versions Supported implementations

此软件包提供了一些有用的工具,您可以使用它们与您的 manage.py 一起使用,因此您无需使用bash入口点和非Python脚本。此外,它: - 从环境、yaml、redis、consul读取具有类型支持的配置; - 提供了一些辅助函数

安装

pip install -e git+https://github.com/night-crawler/django-docker-helpers.git#egg=django-docker-helpers
    # OR
pip install django-docker-helpers

实用工具

  • env_bool_flag(flag_name, strict) - 检查是否指定了ENV选项,是否设置为true、1、0等。

  • run_env_once 确保Django管理器不会两次调用 twice <https://stackoverflow.com/questions/16546652/why-does-django-run-everything-twice>_

  • is_dockerized - 从环境读取 DOCKERIZED 标志

  • is_production - 从环境读取 PRODUCTION 标志

管理辅助函数

  • ensure_databases_alive(max_retries=100) - 尝试为 DATABASES 中指定的每个数据库别名执行 SELECT 1,直到成功或达到最大重试次数

  • ensure_caches_alive(max_retries=100) - 尝试执行 SELECT 1 操作,针对 CACHES 中指定的每个缓存别名,直到成功或达到最大重试次数

  • migrate - 执行 ./manage.py migrate

  • modeltranslation_sync_translation_fields - 如果存在 modeltranslation,则运行 sync_translation_fields

  • collect_static - 等同于 ./manage.py collectstatic -c --noinput -v0

  • create_admin - 如果用户不存在且用户没有可用的密码,则从 settings.CONFIG['superuser'] 创建超级用户

  • run_gunicorn(application: WSGIHandler, gunicorn_module_name: str='gunicorn_prod') - 运行 gunicorn

示例配置

debug: true
    db:
        engine: django.db.backends.postgresql
        host: postgres
        port: 5432
        database: mydb
        user: mydb_user
        password: mydb_password
        conn_max_age: 60

读取配置

import os
from django_docker_helpers.config import ConfigLoader, EnvironmentParser, RedisParser, YamlParser

yml_conf = '/tmp/my/config/without-docker.yml'
redis_conf = os.environ.get('DJANGO_CONFIG_REDIS_KEY', '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),
    }
}

用法

在大多数情况下,您的 manage.py 可能看起来像

#!/usr/bin/env python
#!/usr/bin/env python
import os
import sys

from django_docker_helpers.db import (
    ensure_caches_alive, ensure_databases_alive, migrate
)
from django_docker_helpers.files import collect_static
from django_docker_helpers.management import create_admin, run_gunicorn
from django_docker_helpers.utils import env_bool_flag, run_env_once, wf

from setproctitle import setproctitle


@run_env_once
def invalidate_static_rev():
    from django.core.management import call_command
    call_command('invalidate_static_rev')


@run_env_once
def load_lang_fixtures():
    from django.core.management import call_command
    call_command('populate_languages')


@run_env_once
def load_dev_fixtures():
    from django.core.management import call_command

    wf('Loading DEVELOPMENT fixtures... ', False)
    call_command(
        'loaddata',
        'fixtures/dev/service_api__api_key.json'
    )
    wf('[DONE]\n')


if __name__ == '__main__':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')

    setproctitle('MyProject')

    if env_bool_flag('CHECK_CONNECTIONS'):
        ensure_databases_alive(100)
        ensure_caches_alive(100)

    if env_bool_flag('RUN_PREPARE'):
        collect_static()
        migrate()
        invalidate_static_rev()
        load_lang_fixtures()
        create_admin('SUPERUSER')

    if env_bool_flag('LOAD_DEV_FIXTURES'):
        load_dev_fixtures()

    if len(sys.argv) == 2:
        if sys.argv[1] == 'rungunicorn':
            from my_project.wsgi import application

            gunicorn_module_name = os.getenv('GUNICORN_MODULE_NAME', 'gunicorn_dev')
            run_gunicorn(application, gunicorn_module_name=gunicorn_module_name)
            exit()

    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)

测试

  1. $ pip install -r requirements/dev.txt

  2. 下载 Consul 并将其解压到项目目录中。

    • CONSUL_VERSION=1.4.0 bash -c 'curl -sLo consul.zip https://releases.hashicorp.com/consul/"$CONSUL_VERSION"/consul_"$CONSUL_VERSION"_linux_amd64.zip' && unzip consul.zip

  3. $ ./consul agent -server -ui -dev

  4. $ pytest

项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪个,请了解更多关于 安装软件包 的信息。

源代码分发

django-docker-helpers-0.2.0.tar.gz (29.3 kB 查看哈希值)

上传时间 源代码

构建分发

django_docker_helpers-0.2.0-py3-none-any.whl (43.5 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面