#import copy #import os #import sys #import lxml.etree as etree import glob from lxml.builder import ElementMaker from lxml import etree #import dating import filing import docing # import subscription from emailer import Emailer from nitpo import Nitpo from infile import Infile from itresu import Itresu from omnibus import Omnibus from kapro import Kapro from sheets import Sheets from profile import Profile #import ElementMaker #from subscription import Subscription class Selan(Nitpo): def __init__(self, do_verbose=False): """subscription profiles""" super().__init__() # a basename for the thing to send self.base = None # current repcode self.date = None # state variable for the current fufi self.selan_fufi = None #self.omnibus = Omnibus(do_verbose=do_verbose) self.emailer = Emailer(do_verbose=do_verbose) #self.infile = Infile(do_verbose=do_verbose) self.sheets = Sheets(do_verbose=do_verbose) self.kapro = Kapro(do_verbose=do_verbose) self.profile = Profile() self.report_docs = {} self.empro = None self.N = {'n': self.const['ns']} self.E = ElementMaker(nsmap={None: self.const['ns']}) if not self.has_conf('folders', 'mail'): raise Exception("I need a 'mail' folder.") #self.do_verbose = do_verbose def run(self, empro, dont_send=True, send_only_emad=None): if not self.has_conf('folders', 'selan'): print("I need a selan folder configured.") quit() if not self.emailer.has_it_empro(empro): print(f"selan has no empro {empro}") return None self.collect() self.empro = empro for emad in self.report_docs: if send_only_emad is not None: if emad != send_only_emad: continue self.send(emad, self.report_docs[emad], dont_send=dont_send) #print(docing.show(self.report_docs[emad])) def collect(self): """collect the input from the reports""" if not self.has_conf('folders', 'reports'): print("selan: I see no reports directory.") quit() reports_fudi = self.conf['folders']['reports'] reports_glob = reports_fudi + '/*' for report_fufi in glob.glob(reports_glob): if report_fufi.endswith('~'): continue test_fufi = report_fufi if report_fufi.endswith('.gz'): test_fufi = report_fufi[:-3] if self.has_conf('ext', 'report') and \ not test_fufi.endswith(self.conf['ext']['report']): continue repdoc = filing.parse_lax(report_fufi) emad = str(self.sheets.get_result('orima', repdoc)) reports_ele = self.get_reports_ele(emad) report_doc = filing.parse_lax(report_fufi) doc_ele = report_doc.getroot() report_ele = etree.SubElement(reports_ele, 'report') report_ele.append(doc_ele) # # now make documents. It's not an elegant way I know for emad in self.report_docs: # print(docing.show(self.report_docs[emad])) self.report_docs[emad] = self.report_docs[emad].getroottree() def get_reports_ele(self, emad): if emad not in self.report_docs: reports_ele = self.E('reports') reports_ele.attrib['emad'] = emad self.report_docs[emad] = reports_ele return self.report_docs[emad] def send(self, emad, doc, dont_send=False): base = self.empro + '/' + self.profile.relfi_from_emad(emad)[:-4] # doc.write('/tmp/selan.xml') self.emailer.prepare(doc, in_what='selan', dont_send=dont_send, empro=self.empro, base=base) #print(spro)