# -*- coding: utf-8 -*- import re import glob import json import yaml ignore = [ "service_description_", "migration_description_", "global_settings_setting_", "password_too_simple_", "password_listed", "backup_method_", "backup_applying_method_", "confirm_app_install_", "log_", ] ############################################################################### # Find used keys in python code # ############################################################################### # This regex matches « foo » in patterns like « m18n.n( "foo" » p1 = re.compile(r'm18n\.n\(\s*[\"\']([a-zA-Z0-9_]+)[\"\']') p2 = re.compile(r'YunohostError\([\'\"]([a-zA-Z0-9_]+)[\'\"]') python_files = glob.glob("../src/yunohost/*.py") python_files.extend(glob.glob("../src/yunohost/utils/*.py")) python_files.extend(glob.glob("../src/yunohost/data_migrations/*.py")) python_files.append("../bin/yunohost") python_keys = set() for python_file in python_files: content = open(python_file).read() for match in p1.findall(content): python_keys.add(match) for match in p2.findall(content): python_keys.add(match) ############################################################################### # Find keys used in actionmap # ############################################################################### actionmap_keys = set() actionmap = yaml.load(open("../data/actionsmap/yunohost.yml")) for _, category in actionmap.items(): if "actions" not in category.keys(): continue for _, action in category["actions"].items(): if "arguments" not in action.keys(): continue for _, argument in action["arguments"].items(): if "extra" not in argument.keys(): continue if "password" in argument["extra"]: actionmap_keys.add(argument["extra"]["password"]) if "ask" in argument["extra"]: actionmap_keys.add(argument["extra"]["ask"]) if "comment" in argument["extra"]: actionmap_keys.add(argument["extra"]["comment"]) if "pattern" in argument["extra"]: actionmap_keys.add(argument["extra"]["pattern"][1]) if "help" in argument["extra"]: print argument["extra"]["help"] actionmap_keys.add("admin_password") ############################################################################### # Load en locale json keys # ############################################################################### en_locale_file = "../locales/en.json" with open(en_locale_file) as f: en_locale_json = json.loads(f.read()) en_locale_keys = set(en_locale_json.keys()) ############################################################################### # Compare keys used and keys defined # ############################################################################### used_keys = python_keys.union(actionmap_keys) keys_used_but_not_defined = used_keys.difference(en_locale_keys) keys_defined_but_not_used = en_locale_keys.difference(used_keys) if len(keys_used_but_not_defined) != 0: print "> Error ! Those keys are used in some files but not defined :" for key in sorted(keys_used_but_not_defined): if any(key.startswith(i) for i in ignore): continue print " - %s" % key if len(keys_defined_but_not_used) != 0: print "> Warning ! Those keys are defined but seems unused :" for key in sorted(keys_defined_but_not_used): if any(key.startswith(i) for i in ignore): continue print " - %s" % key