def prepare_patch(random_str, repo_path, package_name, patch_content, branch_name): """ This is for saving patch file, adding it to git and pushing back to ABF. :param random_str: :param repo_path: git URL to clone from (ssh, https) :param package_name: package name to open spec file from :param patch_content: text to write to patch file :return: nothing """ settings = json.loads(load_settings()) login = settings["abf_login"] password = settings["abf_password"] new_repo_path = repo_path[:8] + login + ":" + password + "@" + repo_path[8:] print(random_str) print(branch_name) call("cd " + path.expanduser('~') + "/ && git clone " + new_repo_path + " " + random_str + " && cd " + random_str + " && git checkout " + branch_name, shell=True) call("ls " + path.expanduser('~') + "/" + random_str, shell=True) call("touch " + path.expanduser('~') + "/" + random_str + "/" + random_str + ".patch", shell=True) with codecs.open("" + path.expanduser('~') + "/" + random_str + "/" + random_str + ".patch", "w", "utf-8-sig") as temp: for file in json.loads(patch_content): temp.write("+++" + file["path"] + "\n" + "@@ -0,0 +1,3 @@" + "\n") for line in file["strings"]: temp.write(line["variable_name"] + "[ru]=" + line["value"]["ru"] + "\n") for file in json.loads(patch_content): with open("" + path.expanduser('~') + "/" + random_str + "/" + "somecontainment", "w") as concrete: concrete.write(file["containment"]) call("cd " + path.expanduser('~') + "/" + random_str + "/ && git add " + random_str + ".patch", shell=True) call("sed -i \"1iPatch: " + random_str + ".patch\" " + path.expanduser( '~') + "/" + random_str + "/" + package_name + ".spec", shell=True)
def import_packages(self, json_data): data = json.loads(json_data) settings = json.loads(load_settings()) translatable_strings = [f["name"] for f in settings["variables"]] group = settings["abf_projects_group"] if data["type"] == "files": values = data["values"] print(values) print(type(values)) return json.dumps({"packages": [full_project_info(group, f, translatable_strings) for f in values]}) elif data["type"] == "dir": values = data["values"] return json.dumps( {"packages": [full_project_info(group, f, translatable_strings) for f in os.listdir(values) if ".rpm" == f[-4:] and ".src.rpm" != f[-8:]]}) elif data["type"] == "custom": with_list = from_file_with_list(data["values"]) return json.dumps( {"packages": [full_project_info(group, f, translatable_strings) for f in with_list if ".rpm" == f[-4:]]}) elif data["type"] == "repo": values_ = data["values"][0] files = mirror_repo_to_tmp(values_) f_ = {"packages": [full_project_info(group, f, translatable_strings) for f in files if ".rpm" == f[-4:] and ".src.rpm" != f[-8:]]} result = json.dumps(f_) return result
def prepare_patch(random_str, repo_path, package_name, patch_content, branch_name): """ This is for saving patch file, adding it to git and pushing back to ABF. :param random_str: :param repo_path: git URL to clone from (ssh, https) :param package_name: package name to open spec file from :param patch_content: text to write to patch file :return: nothing """ settings = json.loads(load_settings()) login = settings["abf_login"] password = settings["abf_password"] new_repo_path = repo_path[:8] + login + ":" + password + "@" + repo_path[8:] print(random_str + " - " + package_name) call("cd " + path.expanduser('~') + "/ && git clone " + new_repo_path + " " + random_str + " && cd " + random_str + " && git checkout " + branch_name, shell=True, stdout=PIPE, stderr=PIPE) call("ls " + path.expanduser('~') + "/" + random_str, shell=True, stdout=PIPE) call("touch " + path.expanduser('~') + "/" + random_str + "/" + random_str + ".patch", shell=True, stdout=PIPE) with open("" + path.expanduser('~') + "/" + random_str + "/" + random_str + ".patch", "w") as concrete: for file in json.loads(patch_content): containment1 = [e + '\n' for e in file["containment"].split('\n') if e != ""] containment2 = containment1[:] for line in file["strings"]: containment2.append(line["variable_name"] + "[ru]=" + line["value"]["ru"] + "\n") for line in unified_diff(containment1, containment2, fromfile=file["path"], tofile=file["path"]): concrete.write(line) call("cd " + path.expanduser('~') + "/" + random_str + "/ && git add " + random_str + ".patch", shell=True, stdout=PIPE) call("sed -i \"1iPatch: " + random_str + ".patch\" " + path.expanduser( '~') + "/" + random_str + "/" + package_name + ".spec", shell=True, stdout=PIPE)
def commit_translations_patch(self, translations): print(translations) asd = json.loads(translations) settings = json.loads(load_settings()) branch = [b["name"] for b in settings["branches"] if b["active"]][0] random_str = uuid.uuid4().hex.capitalize() prepare_patch(random_str, asd["git"], asd["package_name"], json.dumps(asd["desktop_files"]), branch) return json.dumps({"status": "ok"})
from settings_keeper import load_settings print(load_settings())
def get_settings(self): return load_settings()
def get_translation(self, text): yandex_api_key = json.loads(load_settings())["yandex_api_key"] return json.dumps({"value": translate(yandex_api_key, "en-ru", text)})
import uuid import argparse from yaml_importer import from_file_with_list parser = argparse.ArgumentParser(description='Translate some packages') parser.add_argument('--git-branch', dest="git_branch", default="master") group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--prepare', dest='target', action='store_const', const='prepare') group.add_argument('--translate', dest='target', action='store_const', const='translate') group.add_argument('--commit', dest='target', action='store_const', const='commit') parser.add_argument('file', metavar='filename.yml', type=str, help='an integer for the accumulator') args = parser.parse_args() settings = json.loads(settings_keeper.load_settings()) project_group = settings["abf_projects_group"] yandex_api_key = settings["yandex_api_key"] assert translate(yandex_api_key, "en-ru", "Lazy cat jumps over talking dog") == "Ленивый кот перепрыгивает через говорящая собака" project_info = [full_project_info(project_group, f, ["Name", "Comment"]) for f in from_file_with_list(args.file)] for one in project_info: random_str = uuid.uuid4().hex.capitalize() for f in one["desktop_files"]: for i in f["strings"]: if args.target in ['translate', 'commit']: i["value"]["ru"] = translate(yandex_api_key, "en-ru", i["value"]["en"]) else:
import uuid import argparse from yaml_importer import from_file_with_list parser = argparse.ArgumentParser(description='Translate some packages') parser.add_argument('--git-branch') group = parser.add_mutually_exclusive_group() group.add_argument('--prepare', dest='target', action='store_const', const='prepare') group.add_argument('--translate', dest='target', action='store_const', const='translate') group.add_argument('--commit', dest='target', action='store_const', const='commit') parser.add_argument('file', metavar='filename.yml', type=str, help='an integer for the accumulator') args = parser.parse_args() settings = settings_keeper.load_settings() project_group = settings["abf_projects_group"] yandex_api_key = settings["yandex_api_key"] assert translate(yandex_api_key, "en-ru", "Lazy cat jumps over talking dog") == "Ленивый кот перепрыгивает через говорящая собака" for f in from_file_with_list(args.file): print(full_project_info(project_group, f, ["Name", "Comment"])) project_info = [full_project_info(project_group, f, ["Name", "Comment"]) for f in filter_input(inner)] print(json.dumps(project_info)) translated_files = "" for one in project_info: for f in one["desktop_files"]: print(str(f["path"]))