diff --git a/wikstraktor.py b/wikstraktor.py index ff1c57eb91557f276f4892a1c5f3df209ddbcee5..0444891dbb909bd56879b8f15669e0070cc78c09 100755 --- a/wikstraktor.py +++ b/wikstraktor.py @@ -522,10 +522,10 @@ class ParserContext: class Wikstraktor: @classmethod - def get_instance(cls, wiki_language, entry_language): + def get_instance(cls, wiki_language, entry_language, existing_entries=None): try: m_name = f"{wiki_language}_{entry_language}".capitalize() - instance = getattr(importlib.import_module(f"parsers.{m_name.lower()}"), f"{m_name}_straktor")() + instance = getattr(importlib.import_module(f"parsers.{m_name.lower()}"), f"{m_name}_straktor")(existing_entries) instance.version = the_version instance.log = Wikstraklog(the_version, entry_language, wiki_language) except ModuleNotFoundError: @@ -533,8 +533,11 @@ class Wikstraktor: instance = None return instance - def __init__(self): - self.entries = [] + def __init__(self, existing_entries=None): + if existing_entries = None: + self.entries = [] + else: + self.entries = existing_entries self.pwb = pywikibot self.wtp = wikitextparser self.parserContext = None @@ -722,14 +725,23 @@ class Wikstraktor: def __str__(self): return self.export() - def export(self, id=True, ascii=False, compact=False): + def serialize(self, id=True): res = [] for e in self.entries: res.append(e.serializable(id)) + return res + + def export(self, id=True, ascii=False, compact=False): if compact: - return json.dumps(res, ensure_ascii=ascii) + return json.dumps(self.serialize(id), ensure_ascii=ascii) else: - return json.dumps(res, ensure_ascii=ascii, indent=4) + return json.dumps(self.serialize(id), ensure_ascii=ascii, indent=4) + +def export_multi_wikt(serialized, ascii=False, compact=False): + if compact: + return json.dumps(serialized, ensure_ascii=ascii) + else: + return json.dumps(serialized, ensure_ascii=ascii, indent=4) if __name__ == "__main__": import argparse @@ -747,11 +759,17 @@ if __name__ == "__main__": parser.add_argument("-C", "--compact", help="json sans indentation", action="store_true") parser.add_argument("-n", "--no_id", help="json sans id", action="store_true") args = parser.parse_args() + wiki_languages = args.wiki_language.split("+") + languages = args.language.split("+") if args.mot != None: - w = Wikstraktor.get_instance(args.wiki_language, args.language) - resp = None - if w.fetch(args.mot) > 0: - resp = w.export(not args.no_id, args.force_ascii, args.compact) + resp = [] + for w_l in wiki_languages: + for l in languages : + w = Wikstraktor.get_instance(w_l, l) + if w.fetch(args.mot) > 0: + resp += w.serialize(not args.no_id) + if len(resp) > 0 : + resp = export_multi_wikt(resp, args.force_ascii, args.compact) if args.destination_file != None: f = open(args.destination_file, "w") f.write(resp)