"""vat of kisus""" import datetime import os import sys from lxml import etree import filing import docing from nitpo import Nitpo from xpaths import Xpaths from surks import Surks from profile import Profile class Vakis(Nitpo): def __init__(self, do_verbose=False): super().__init__() ns = self.const['ns'] self.nsmap = {None: ns} self.N = "{%s}" % self.const['ns'] self.check_conf('folders', 'profile') self.check_conf('files', 'vakis') self.to_print = '' self.event = {} self.d = {} self.dirs = {} self.dirs['profile'] = self.conf['folders']['profile'] self.start_time = datetime.datetime.now().timestamp() self.parser = etree.XMLParser(remove_blank_text=True) # self.x = Xpaths() # # state variable self.indat = {} self.profile = Profile() self.surks = Surks() self.fufi = None self.out_fufi = self.conf['files']['vakis'] self.do_verbose = do_verbose def read_all(self, do_lazy=False): """do all profiles from scratch""" count_fufis = 0 if do_lazy: self.indat = filing.load(self.out_fufi) for root, dirs, banas in os.walk(self.dirs['profile']): for bana in banas: if bana == 'omnibus.xml': continue if not bana.endswith(".xml"): continue self.fufi = root + '/' + bana # # once per week should be run with non-lazy mode if do_lazy and not filing.donere(self.out_fufi, [self.fufi]): continue doc = etree.parse(self.fufi, self.parser) count_fufis += 1 # print(self.fufi) self.get_all(doc) if count_fufis % 1000 == 0: print(count_fufis) filing.dump(self.indat, self.out_fufi) def read_single(self, fufi): self.indat = filing.load(self.out_fufi) self.fufi = fufi doc = etree.parse(fufi, self.parser) self.get_all(doc) filing.dump(self.indat, self.out_fufi) def get_all(self, doc): surk_eles = self.profile.live_surks(doc) if len(surk_eles) == 0: return emad = self.surks.get_emad(doc) for surk_ele in surk_eles: self.from_surk(surk_ele, emad) def from_surk(self, surk_ele, emad): spro = self.surks.spro(surk_ele) if spro == 'a': return if 'id' not in surk_ele.attrib: print(f"vakis needs a kisu for {self.fufi}") doc = self.surks.add_kisus(self.fufi) # print(docing.show(doc)) # # should reparse self.get_all(doc) self.profile.write(doc) return kisu = surk_ele.attrib['id'] if kisu not in self.indat: self.indat[kisu] = {} self.indat[kisu]['repcode'] = surk_ele.attrib['repcode'] self.indat[kisu]['emad'] = emad # def add_kisus(self, fufi): # doc = filing.parse_lax(fufi) # surk = Surks() # surk.emad = self.profile.emad_from_doc(doc) # surk.urdate = surks.get_urdate(doc) # surk.doc = doc # doc = surk.add_kisus(doc) # self.profile.write(doc) # return doc