__init__.py 文件源码

python
阅读 46 收藏 0 点赞 0 评论 0

项目:django-env-overrides 作者: jcushman 项目源码 文件源码
def apply_to(settings, prefix="DJANGO", env=None):
    prefix += "__"

    if not env:
        env = environ.Env()

    for key, value in os.environ.items():
        if key.startswith(prefix):
            path_parts = key.split('__')
            if len(path_parts) < 2:
                continue
            path_parts.pop(0)

            # parse value
            if hasattr(env, path_parts[0]):
                value = getattr(env, path_parts[0])(key)
                path_parts.pop(0)
            else:
                value = env(key)

            # starting with global settings, walk down the tree to find the intended target for this value
            target = settings
            for i, path_part in enumerate(path_parts):
                # if it's an int, treat it as an array index
                if path_part.isdigit():
                    path_part = int(path_part)
                    target_type = type(target)
                    if target_type == list or target_type == tuple:
                        if len(target) <= path_part:
                            target += target_type([{}]) * (path_part - len(target) + 1)
                    else:
                        raise ValueError(
                            "Error parsing %s environment variable: "
                            "If %s%s is an integer, %s%s must be an array." % (
                                key, prefix, "__".join(path_parts[:i + 1]), prefix, "__".join(path_parts[:i])))

                # otherwise it's a dict key -- make sure target exists
                elif path_part not in target:
                    if type(target) != dict:
                        raise ValueError(
                            "Error parsing %s environment variable: %s%s is not a dict." % (
                                key, prefix, "__".join(path_parts[:i + 1])))
                    target[path_part] = {}

                last_target = target
                target = target[path_part]

            # assign value
            last_target[path_part] = value
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号