def get_merged_dict(settings, preprocessor=None):
    global hayaku_extra_dicts_cache
    global hayaku_extra_aliases_cache
    global hayaku_dict_cache
    global hayaku_aliases_cache
    cache_key = 'CSS'
    if preprocessor:
        cache_key = preprocessor
    result_dict, result_aliases = get_css_dict(preprocessor=preprocessor)

    new_dict = {}
    new_aliases = {}
    extra_scopes = ['user', 'syntax', 'project'] + settings.get('hayaku_extra_scopes', [])

    for scope in extra_scopes:
        dict_name = 'hayaku_' + scope + '_dict'
        alias_name = 'hayaku_' + scope + '_aliases'
        new_dict[dict_name] = settings.get(dict_name, {})
        new_aliases[alias_name] = settings.get(alias_name, {})

        # TODO: use a function for those two if-else noodles
        if 'CSS' in new_dict[dict_name]:
            if preprocessor in new_dict[dict_name]:
                new_dict[dict_name] = merge_dict(new_dict[dict_name].get('CSS'), new_dict[dict_name].get(preprocessor))
            else:
                new_dict[dict_name] = new_dict[dict_name].get('CSS')
        elif preprocessor in new_dict[dict_name]:
            new_dict[dict_name] = new_dict[dict_name].get(preprocessor)

        if 'CSS' in new_aliases[alias_name]:
            if preprocessor in new_aliases[alias_name]:
                new_aliases[alias_name] = merge_dict(new_aliases[alias_name].get('CSS'), new_aliases[alias_name].get(preprocessor))
            else:
                new_aliases[alias_name] = new_aliases[alias_name].get('CSS')
        elif preprocessor in new_aliases[alias_name]:
            new_aliases[alias_name] = new_aliases[alias_name].get(preprocessor)

    if new_dict != hayaku_extra_dicts_cache.get(cache_key):
        hayaku_extra_dicts_cache[cache_key] = new_dict

        for dict_scope in dict(hayaku_extra_dicts_cache.get(cache_key)):
            result_dict = merge_dict(result_dict, hayaku_extra_dicts_cache.get(cache_key).get(dict_scope))

        hayaku_dict_cache[cache_key] = result_dict
    elif cache_key in hayaku_dict_cache:
        result_dict = hayaku_dict_cache[cache_key]

    if new_aliases != hayaku_extra_aliases_cache.get(cache_key):
        hayaku_extra_aliases_cache[cache_key] = new_aliases

        for aliases_scope in dict(hayaku_extra_aliases_cache.get(cache_key)):
            result_aliases = merge_aliases(result_aliases, hayaku_extra_aliases_cache.get(cache_key).get(aliases_scope))

        hayaku_aliases_cache[cache_key] = result_aliases

    elif cache_key in hayaku_aliases_cache:
        result_aliases = hayaku_aliases_cache[cache_key]

    return result_dict, result_aliases
示例#2
0
 def test_add_values1(self):
     l = {'width':{'values':[1,2,3]}}
     r = {'width':{'values':['...',1]}}
     self.assertEqual(merge_dict(l, r), {'width':{'values':[2,3,1]}})
示例#3
0
 def test_add_values3_0(self):
     l = {'width':{'values':[1,2,3]}}
     r = {'width':{'values':[0,'...']}}
     self.assertEqual(merge_dict(l, r), {'width':{'values':[0,1,2,3]}})
示例#4
0
 def test_replace_prefixes1(self):
     l = {'width':{}}
     r = {'width':{'prefixes':[3,2,1]}}
     self.assertEqual(merge_dict(l, r), {'width':{'prefixes':[3,2,1]}})
示例#5
0
 def test_remove_value1(self):
     l = {'width':{'values':[1,2,3,1]}}
     r = {'width':{'remove_values':[1]}}
     self.assertEqual(merge_dict(l, r), {'width':{'values':[2,3]}})
示例#6
0
 def test_replace_default1(self):
     l = {'width':{}}
     r = {'width':{'default':321}}
     self.assertEqual(merge_dict(l, r), {'width':{'default':321}})
示例#7
0
 def test_nomerge(self):
     l = {}
     r = {}
     self.assertEqual(merge_dict(l, r), {})
示例#8
0
 def test_simple_merge2(self):
     l = {}
     r = {'abc':123}
     self.assertEqual(merge_dict(l, r), {'abc':123})
示例#9
0
 def test_simple_merge1(self):
     l = {'abc':123}
     r = {}
     self.assertTrue(merge_dict(l, r), {'abc':123})
示例#10
0
def get_merged_dict(options):
    global hayaku_extra_dicts_cache
    global hayaku_extra_aliases_cache
    global hayaku_dict_cache
    global hayaku_aliases_cache
    settings = options.get('settings')
    cache_key = 'CSS'
    preprocessor = options.get('CSS_preprocessor')
    if preprocessor:
        cache_key = preprocessor
    result_dict, result_aliases = get_css_dict(preprocessor=preprocessor)

    new_dict = {}
    new_aliases = {}
    extra_scopes = ['user', 'syntax', 'project'] + settings.get(
        'hayaku_extra_scopes', [])

    for scope in extra_scopes:
        dict_name = 'hayaku_' + scope + '_dict'
        alias_name = 'hayaku_' + scope + '_aliases'
        new_dict[dict_name] = settings.get(dict_name, {})
        new_aliases[alias_name] = settings.get(alias_name, {})

        # TODO: use a function for those two if-else noodles
        if 'CSS' in new_dict[dict_name]:
            if preprocessor in new_dict[dict_name]:
                new_dict[dict_name] = merge_dict(
                    new_dict[dict_name].get('CSS'),
                    new_dict[dict_name].get(preprocessor))
            else:
                new_dict[dict_name] = new_dict[dict_name].get('CSS')
        elif preprocessor in new_dict[dict_name]:
            new_dict[dict_name] = new_dict[dict_name].get(preprocessor)

        if 'CSS' in new_aliases[alias_name]:
            if preprocessor in new_aliases[alias_name]:
                new_aliases[alias_name] = merge_dict(
                    new_aliases[alias_name].get('CSS'),
                    new_aliases[alias_name].get(preprocessor))
            else:
                new_aliases[alias_name] = new_aliases[alias_name].get('CSS')
        elif preprocessor in new_aliases[alias_name]:
            new_aliases[alias_name] = new_aliases[alias_name].get(preprocessor)

    if new_dict != hayaku_extra_dicts_cache.get(cache_key):
        hayaku_extra_dicts_cache[cache_key] = new_dict

        for dict_scope in dict(hayaku_extra_dicts_cache.get(cache_key)):
            result_dict = merge_dict(
                result_dict,
                hayaku_extra_dicts_cache.get(cache_key).get(dict_scope))

        hayaku_dict_cache[cache_key] = result_dict
    elif cache_key in hayaku_dict_cache:
        result_dict = hayaku_dict_cache[cache_key]

    if new_aliases != hayaku_extra_aliases_cache.get(cache_key):
        hayaku_extra_aliases_cache[cache_key] = new_aliases

        for aliases_scope in dict(hayaku_extra_aliases_cache.get(cache_key)):
            result_aliases = merge_aliases(
                result_aliases,
                hayaku_extra_aliases_cache.get(cache_key).get(aliases_scope))

        hayaku_aliases_cache[cache_key] = result_aliases

    elif cache_key in hayaku_aliases_cache:
        result_aliases = hayaku_aliases_cache[cache_key]

    return result_dict, result_aliases