mirror of https://github.com/morpheus65535/bazarr
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
from __future__ import unicode_literals
|
||
|
|
||
|
from collections import namedtuple
|
||
|
from logging import NullHandler, getLogger
|
||
|
|
||
|
from pkg_resources import resource_stream
|
||
|
from six import text_type
|
||
|
import yaml
|
||
|
|
||
|
from .serializer import get_yaml_loader
|
||
|
|
||
|
logger = getLogger(__name__)
|
||
|
logger.addHandler(NullHandler())
|
||
|
|
||
|
_valid_aliases = ('code', 'default', 'human', 'technical')
|
||
|
_Value = namedtuple('_Value', _valid_aliases)
|
||
|
|
||
|
|
||
|
class Config(object):
|
||
|
"""Application config class."""
|
||
|
|
||
|
@classmethod
|
||
|
def build(cls, path=None):
|
||
|
"""Build config instance."""
|
||
|
loader = get_yaml_loader()
|
||
|
with resource_stream('knowit', 'defaults.yml') as stream:
|
||
|
cfgs = [yaml.load(stream, Loader=loader)]
|
||
|
|
||
|
if path:
|
||
|
with open(path, 'r') as stream:
|
||
|
cfgs.append(yaml.load(stream, Loader=loader))
|
||
|
|
||
|
profiles_data = {}
|
||
|
for cfg in cfgs:
|
||
|
if 'profiles' in cfg:
|
||
|
profiles_data.update(cfg['profiles'])
|
||
|
|
||
|
knowledge_data = {}
|
||
|
for cfg in cfgs:
|
||
|
if 'knowledge' in cfg:
|
||
|
knowledge_data.update(cfg['knowledge'])
|
||
|
|
||
|
data = {'general': {}}
|
||
|
for class_name, data_map in knowledge_data.items():
|
||
|
data.setdefault(class_name, {})
|
||
|
for code, detection_values in data_map.items():
|
||
|
alias_map = (profiles_data.get(class_name) or {}).get(code) or {}
|
||
|
alias_map.setdefault('code', code)
|
||
|
alias_map.setdefault('default', alias_map['code'])
|
||
|
alias_map.setdefault('human', alias_map['default'])
|
||
|
alias_map.setdefault('technical', alias_map['human'])
|
||
|
value = _Value(**{k: v for k, v in alias_map.items() if k in _valid_aliases})
|
||
|
for detection_value in detection_values:
|
||
|
data[class_name][text_type(detection_value)] = value
|
||
|
|
||
|
config = Config()
|
||
|
config.__dict__ = data
|
||
|
return config
|