#!/usr/bin/python3 import os import re from edupals.i18n.poinstaller import PoInstaller class ControlParser(): def __init__(self): try: fp = open('debian/control', 'r', encoding='utf-8') except IOError: raise Exception('cannot find debian/control file') self.lines = fp.readlines() self.packages = {} self.source_name = None def load_info(self): for line in self.lines: if line.lower().startswith('package:'): self.packages[line[8:].strip()] = {} elif line.lower().startswith('source:'): self.source_name = line[7:].strip() class DHelper(): def __init__(self): self.debian_po_dest = "pofiles" self.default_path = "lliurex-po" def check_dest(self, packages, source_name): if os.path.exists(os.path.join('debian',self.debian_po_dest)): packages[source_name]['i18n'] = [] if source_name in packages.keys(): packages[source_name]['pofiles'] = os.path.join('debian',self.debian_po_dest) else: packages[source_name]['pofiles'] = None for pkg in packages.keys(): packages[pkg]['i18n'] = [] if os.path.exists(os.path.join('debian',pkg + "." + self.debian_po_dest)): packages[pkg]['pofiles'] = os.path.join('debian',pkg + "." + self.debian_po_dest) elif 'pofiles' not in packages[pkg].keys(): packages[pkg]['pofiles'] = None return packages def get_po_orig(self, packages): reg = re.compile("([\w-]+)\s+(.*)") for pkg in packages.keys(): if 'pofiles' in packages[pkg].keys() and packages[pkg]['pofiles'] is not None: with open(packages[pkg]['pofiles'], 'r', encoding='utf-8') as fd: for line in fd: data = reg.match(line) if data is not None: aux = {} aux['textdomain'] = data.group(1) aux['po_folder'] = data.group(2) packages[pkg]['i18n'].append(aux) return packages def main(): control = ControlParser() dhelper = DHelper() control.load_info() pkg_info = dhelper.check_dest(control.packages, control.source_name) # dhelper.check_default_path(pkg_info) dhelper.get_po_orig(pkg_info) for x in pkg_info.keys(): for i18n_info in pkg_info[x]['i18n']: po_installer = PoInstaller(i18n_info['po_folder'],i18n_info['textdomain'],os.path.join('debian',x,'usr')) po_installer.build() po_installer.install() if __name__ == '__main__': main()