mirror of
https://github.com/XiaoMi/ha_xiaomi_home.git
synced 2026-01-17 23:50:42 +08:00
chore: urn key format
This commit is contained in:
parent
d5373e55b4
commit
51ff17f1bf
@ -24,6 +24,11 @@ CUSTOM_SERVICE_FILE = path.join(
|
|||||||
ROOT_PATH,
|
ROOT_PATH,
|
||||||
'../custom_components/xiaomi_home/miot/specs/custom_service.json')
|
'../custom_components/xiaomi_home/miot/specs/custom_service.json')
|
||||||
|
|
||||||
|
BOOL_TRANS_URN_KEY_COLON_NUM: int = 4
|
||||||
|
CUSTOM_SERVICE_URN_KEY_COLON_NUM: int = 5
|
||||||
|
MULTI_LANG_URN_KEY_COLON_NUM: int = 5
|
||||||
|
SPEC_FILTER_URN_KEY_COLON_NUM: int = 5
|
||||||
|
|
||||||
|
|
||||||
def load_json_file(file_path: str) -> Optional[dict]:
|
def load_json_file(file_path: str) -> Optional[dict]:
|
||||||
try:
|
try:
|
||||||
@ -93,11 +98,18 @@ def nested_3_dict_str_str(d: dict) -> bool:
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def urn_key(d: dict, cnt: int) -> bool:
|
||||||
|
for k in d.keys():
|
||||||
|
if cnt != k.count(':'):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def spec_filter(d: dict) -> bool:
|
def spec_filter(d: dict) -> bool:
|
||||||
"""restricted format: dict[str, dict[str, list<str>]]"""
|
"""restricted format: dict[str, dict[str, list<str>]]"""
|
||||||
if not dict_str_dict(d):
|
if not dict_str_dict(d):
|
||||||
return False
|
return False
|
||||||
|
if not urn_key(d, SPEC_FILTER_URN_KEY_COLON_NUM):
|
||||||
|
return False
|
||||||
for value in d.values():
|
for value in d.values():
|
||||||
for k, v in value.items():
|
for k, v in value.items():
|
||||||
if not isinstance(k, str) or not isinstance(v, list):
|
if not isinstance(k, str) or not isinstance(v, list):
|
||||||
@ -194,6 +206,8 @@ def custom_service(d: dict) -> bool:
|
|||||||
"""restricted format: dict[str, dict[str, Any]]"""
|
"""restricted format: dict[str, dict[str, Any]]"""
|
||||||
if not dict_str_dict(d):
|
if not dict_str_dict(d):
|
||||||
return False
|
return False
|
||||||
|
if not urn_key(d, CUSTOM_SERVICE_URN_KEY_COLON_NUM):
|
||||||
|
return False
|
||||||
for v in d.values():
|
for v in d.values():
|
||||||
for key, value in v.items():
|
for key, value in v.items():
|
||||||
if key=='new':
|
if key=='new':
|
||||||
@ -218,6 +232,8 @@ def bool_trans(d: dict) -> bool:
|
|||||||
return False
|
return False
|
||||||
if 'data' not in d or 'translate' not in d:
|
if 'data' not in d or 'translate' not in d:
|
||||||
return False
|
return False
|
||||||
|
if not urn_key(d['data'], BOOL_TRANS_URN_KEY_COLON_NUM):
|
||||||
|
return False
|
||||||
if not dict_str_str(d['data']):
|
if not dict_str_str(d['data']):
|
||||||
return False
|
return False
|
||||||
if not nested_3_dict_str_str(d['translate']):
|
if not nested_3_dict_str_str(d['translate']):
|
||||||
@ -234,6 +250,13 @@ def bool_trans(d: dict) -> bool:
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def multi_lang(d: dict) -> bool:
|
||||||
|
"""dict[str, dict[str, dict[str, dict[str, str]] ] ]"""
|
||||||
|
if not nested_3_dict_str_str(d):
|
||||||
|
return False
|
||||||
|
if not urn_key(d, MULTI_LANG_URN_KEY_COLON_NUM):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def compare_dict_structure(dict1: dict, dict2: dict) -> bool:
|
def compare_dict_structure(dict1: dict, dict2: dict) -> bool:
|
||||||
if not isinstance(dict1, dict) or not isinstance(dict2, dict):
|
if not isinstance(dict1, dict) or not isinstance(dict2, dict):
|
||||||
@ -268,13 +291,13 @@ def sort_bool_trans(file_path: str):
|
|||||||
|
|
||||||
|
|
||||||
def sort_multi_lang(file_path: str):
|
def sort_multi_lang(file_path: str):
|
||||||
multi_lang: dict = load_json_file(file_path=file_path)
|
lang_data: dict = load_json_file(file_path=file_path)
|
||||||
multi_lang = dict(sorted(multi_lang.items()))
|
lang_data = dict(sorted(lang_data.items()))
|
||||||
for urn, trans in multi_lang.items():
|
for urn, trans in lang_data.items():
|
||||||
multi_lang[urn] = dict(sorted(trans.items()))
|
lang_data[urn] = dict(sorted(trans.items()))
|
||||||
for lang, spec in multi_lang[urn].items():
|
for lang, spec in lang_data[urn].items():
|
||||||
multi_lang[urn][lang] = dict(sorted(spec.items()))
|
lang_data[urn][lang] = dict(sorted(spec.items()))
|
||||||
return multi_lang
|
return lang_data
|
||||||
|
|
||||||
|
|
||||||
def sort_spec_filter(file_path: str):
|
def sort_spec_filter(file_path: str):
|
||||||
@ -311,7 +334,7 @@ def test_spec_filter():
|
|||||||
def test_multi_lang():
|
def test_multi_lang():
|
||||||
data: dict = load_json_file(SPEC_MULTI_LANG_FILE)
|
data: dict = load_json_file(SPEC_MULTI_LANG_FILE)
|
||||||
assert data, f'load {SPEC_MULTI_LANG_FILE} failed'
|
assert data, f'load {SPEC_MULTI_LANG_FILE} failed'
|
||||||
assert nested_3_dict_str_str(data), f'{SPEC_MULTI_LANG_FILE} format error'
|
assert multi_lang(data), f'{SPEC_MULTI_LANG_FILE} format error'
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.github
|
@pytest.mark.github
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user