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
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]}})
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]}})
def test_replace_prefixes1(self): l = {'width':{}} r = {'width':{'prefixes':[3,2,1]}} self.assertEqual(merge_dict(l, r), {'width':{'prefixes':[3,2,1]}})
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]}})
def test_replace_default1(self): l = {'width':{}} r = {'width':{'default':321}} self.assertEqual(merge_dict(l, r), {'width':{'default':321}})
def test_nomerge(self): l = {} r = {} self.assertEqual(merge_dict(l, r), {})
def test_simple_merge2(self): l = {} r = {'abc':123} self.assertEqual(merge_dict(l, r), {'abc':123})
def test_simple_merge1(self): l = {'abc':123} r = {} self.assertTrue(merge_dict(l, r), {'abc':123})
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