"""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, has the data self.indat = {} self.profile = Profile() self.surks = Surks() self.fufi = None self.data_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.data_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.data_fufi, [self.fufi]): continue doc = etree.parse(self.fufi, self.parser) count_fufis += 1 # print(self.fufi) self.get_all(doc) if sys.stdin and sys.stdin.isatty(): if count_fufis % 1000 == 0: print(count_fufis) filing.dump(self.indat, self.data_fufi) def read_single(self, fufi): """called by fecha on adsurk""" ## fixme: the existence of the file should be taken ## care by guniconf or some other system initialization script if not os.path.isfile(self.data_fufi): self.indat = {} else: self.indat = filing.load(self.data_fufi) ## it needs this for reporting self.fufi = fufi doc = etree.parse(fufi, self.parser) self.get_all(doc) filing.dump(self.indat, self.data_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: ## vakis should not have to do this print(f"vakis needs a kisu for {self.fufi}", file=sys.stderr) doc = self.profile.read(self.fufi) if doc is None: print(f"vakis can't parse {self.fufi}") return None doc = self.surks.add_kisus(doc) # 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