def walkOuter(self, node): global nlctr if debug: if node.text is not None: ltext = node.text.replace("\n", "<" + str(nlctr) + "nl>") # node.text = node.text.replace("\n", str(nlctr) + "\n") nlctr += 1 else: ltext = "None" if node.tail is not None: ltail = node.tail.replace("\n", "<" + str(nlctr) + "nl>") # node.tail = node.tail.replace("\n", str(nlctr) + "\n") nlctr += 1 else: ltail = "None" self.lvl += 4 print(" " * self.lvl, "<<<<") print(" " * self.lvl, "node=", node.tag, ",text=", ltext, "tail=", ltail) try: self.nodeHandler[node.tag](node) if node.tail is not None: self.printLines(node.tail) except Exception: msg = "Fehler während der Behandlung der Beschreibung des Events " + \ self.docxHandler.eventMsg logger.exception(msg) print(msg) if debug: print(" " * self.lvl, ">>>>") self.lvl -= 4
def handleTour(self, tour): try: titel = tour.getTitel() logger.info("Title %s", titel) tourNummer = tour.getNummer() radTyp = tour.getRadTyp() kategorie = tour.getKategorie() datum = tour.getDatum()[0] logger.info("tourNummer %s radTyp %s kategorie %s datum %s", tourNummer, radTyp, kategorie, datum) abfahrten = tour.getAbfahrten() if len(abfahrten) == 0: raise ValueError("kein Startpunkt in tour %s", titel) logger.info("abfahrten %s ", str(abfahrten)) abfahrten = "\n".join(["{}: {} Uhr; {}".format( abfahrt[0], abfahrt[1], abfahrt[2]) for abfahrt in abfahrten]) beschreibung = tour.getBeschreibung(False) logger.info("beschreibung %s", beschreibung) kurzbeschreibung = tour.getKurzbeschreibung() logger.info("kurzbeschreibung %s", kurzbeschreibung) zusatzinfo = tour.getZusatzInfo() logger.info("zusatzinfo %s", str(zusatzinfo)) zusatzinfo = "\n".join(zusatzinfo) schwierigkeit = schwierigkeitMap[tour.getSchwierigkeit()] logger.info("schwierigkeit %s", schwierigkeit) strecke = tour.getStrecke() if strecke == "0 km": logger.error("Fehler: Tour %s hat keine Tourlänge", titel) else: logger.info("strecke %s", strecke) hoehenmeter = tour.getHoehenmeter() character = tour.getCharacter() if kategorie == 'Mehrtagestour': enddatum = tour.getEndDatum()[0] logger.info("enddatum %s", enddatum) else: enddatum = "" tourLeiter = tour.getPersonen() logger.info("tourLeiter %s", str(tourLeiter)) if len(tourLeiter) == 0: logger.error("Fehler: Tour %s hat keinen Tourleiter", titel) tourLeiter = ",".join(tourLeiter) except Exception as e: logger.exception("Fehler in der Tour '%s': %s", titel, e) return row = { "Typ": "Radtour", "Titel": titel, "Nummer": tourNummer, "Radtyp": radTyp, "Tourtyp": kategorie, "Datum": datum, "Endedatum": enddatum, "Tourlänge": strecke, "Schwierigkeit": schwierigkeit, "Höhenmeter": hoehenmeter, "Charakter": character, "Abfahrten": abfahrten, "Kurzbeschreibung": kurzbeschreibung, "Beschreibung": beschreibung, "ZusatzInfo": zusatzinfo, "Tourleiter": tourLeiter} self.writer.writerow(row)
def walkOuter(self, node): global nlctr if debug: if node.text is not None: ltext = node.text.replace("\n", "<" + str(nlctr) + "nl>") # node.text = node.text.replace("\n", str(nlctr) + "\n") nlctr += 1 else: ltext = "None" if node.tail is not None: ltail = node.tail.replace("\n", "<" + str(nlctr) + "nl>") # node.tail = node.tail.replace("\n", str(nlctr) + "\n") nlctr += 1 else: ltail = "None" self.lvl += 4 logger.debug("MD:%s<<<<", " " * self.lvl) logger.debug("MD:%snode=%s,text=%s,tail=%s", " " * self.lvl, node.tag, ltext, ltail) try: self.nodeHandler[node.tag](node) if node.tail is not None: self.printLines(node.tail) except Exception: msg = "Fehler während der Behandlung der Beschreibung des Events " + \ self.scrbHandler.eventMsg logger.exception(msg) if debug: logger.debug("MD:%s>>>>", " " * self.lvl) self.lvl -= 4
def eqColor(r1, r2): p1 = hasattr(r1._element, "rPr") p2 = hasattr(r2._element, "rPr") if not p1 and not not p2: return True if p1 and not p2: return False if not p1 and p2: return False p1 = hasattr(r1._element.rPr, "color") p2 = hasattr(r2._element.rPr, "color") if not p1 and not p2: return True if p1 and not p2: return False if not p1 and p2: return False try: c1 = r1._element.rPr.color c2 = r2._element.rPr.color if c1 is None and c2 is None: return True if c1 is not None and c2 is None: return False if c1 is None and c2 is not None: return False return c1.val == c2.val except: logger.exception("eqcolor")
def handleEnd(self): print("Template", self.gui.docxTemplateName, "wird abgearbeitet") if self.doc is None: self.openDocx(False) self.linkType = self.gui.getLinkType() self.gliederung = self.gui.getGliederung() self.includeSub = self.gui.getIncludeSub() self.start = self.gui.getStart() self.end = self.gui.getEnd() paragraphs = self.doc.paragraphs paraCnt = len(paragraphs) paraNo = 0 while paraNo < paraCnt: para = paragraphs[paraNo] if para.text.startswith("/template"): p1 = paraNo while True: if para.text.find("/endtemplate") >= 0: break delete_paragraph(para) paraNo += 1 para = paragraphs[paraNo] delete_paragraph(para) p2 = paraNo paraNo += 1 self.paraBefore = \ None if paraNo == paraCnt else paragraphs[paraNo] tempParas = paragraphs[p1:p2 + 1] self.evalTemplate(tempParas) else: self.evalPara(para) paraNo += 1 ausgabedatei = self.ausgabedatei if ausgabedatei is None or ausgabedatei == "": ausgabedatei = os.path.join( os.path.dirname(self.gui.docxTemplateName), "ADFC_" + self.gliederung + ("_I_" if self.includeSub else "_") + self.start + "-" + self.end + "_" + self.linkType[0] + ".docx") try: self.doc.save(ausgabedatei) print("Ausgabedatei", ausgabedatei, "wurde erzeugt") try: opath = os.path.abspath(ausgabedatei) os.startfile(opath) except Exception: logger.exception("opening " + ausgabedatei) except Exception as e: print("Ausgabedatei", ausgabedatei, "konnte nicht geschrieben werden") raise e finally: self.doc = None self.touren = [] self.termine = []
def handleTour(self, tour): try: titel = tour.getTitel() logger.info("Title %s", titel) datum = tour.getDatum()[0] logger.info("datum %s", datum) abfahrten = tour.getAbfahrten() if len(abfahrten) == 0: raise ValueError("kein Startpunkt in tour %s", titel) logger.info("abfahrten %s ", str(abfahrten)) beschreibung = tour.getBeschreibung(False) logger.info("beschreibung %s", beschreibung) zusatzinfo = tour.getZusatzInfo() logger.info("zusatzinfo %s", str(zusatzinfo)) kategorie = tour.getKategorie() radTyp = tour.getRadTyp() logger.info("kategorie %s radTyp %s", kategorie, radTyp) if kategorie == "Feierabendtour": schwierigkeit = "F" elif radTyp == "Rennrad": schwierigkeit = "RR" elif radTyp == "Mountainbike": schwierigkeit = "MTB" else: schwierigkeit = str(tour.getSchwierigkeit()) if schwierigkeit == "0": schwierigkeit = "1" if schwierigkeit >= "1" and schwierigkeit <= "5": schwierigkeit = "*" * int(schwierigkeit) logger.info("schwierigkeit %s", schwierigkeit) strecke = tour.getStrecke() logger.info("strecke %s", strecke) if kategorie == 'Mehrtagestour': enddatum = tour.getEndDatum()[0] logger.info("enddatum %s", enddatum) personen = tour.getPersonen() logger.info("personen %s", str(personen)) if len(personen) == 0: logger.error("Tour %s hat keinen Tourleiter", titel) except Exception as e: logger.exception("Fehler in der Tour %s: %s", titel, e) return self.insertText('\n', None) if kategorie == 'Mehrtagestour': self.handleKopfzeileMehrtage(datum, enddatum, kategorie, schwierigkeit, strecke) else: self.handleKopfzeile(datum, kategorie, schwierigkeit, strecke) self.handleTitel(titel) for abfahrt in abfahrten: self.handleAbfahrt(abfahrt) self.handleTextfeld('Radtour_beschreibung',beschreibung) self.handleTourenleiter(personen) self.handleTextfeldList('Radtour_zusatzinfo',zusatzinfo)
def expandParam(self, param, event, format): try: f = self.expFunctions[param] return f(event, format) except Exception as e: err = 'Fehler mit dem Parameter "' + param + \ '" des Events ' + self.eventMsg logger.exception(err) return param
def OLDremoveHTML(s): if s.find("</") == -1: # no HTML return s try: htmlHandler = SAXHandler() xml.sax.parseString("<xxxx>" + s + "</xxxx>", htmlHandler) return htmlHandler.val() except: logger.exception("can not parse '%s'", s) return s
def walkOuter(self, node): global debug if debug: print(" " * self.lvl, "<<<<") try: self.nodeHandler[node.tag](node) if node.tail is not None: self.printLines(node.tail) except Exception: logger.exception("error in event description") if debug: print(" " * self.lvl, ">>>>")
def rmEventIdMarkers(self): self.text.delete("1.0", END) txtWriter = TxtWriter(self.text) with contextlib.redirect_stdout(txtWriter): self.eventServer = tourServer.EventServer(False, False, self.max_workers) if self.scrbHandler is None: self.scrbHandler = scrbHandler.ScrbHandler(self) try: self.rmBtn.config(state=DISABLED) self.scrbHandler.rmEventIdMarkers() except Exception as e: logger.exception("Error during script evaluation") print("Error ", e, ", see ", logFilePath) finally: self.rmBtn.config(state=NORMAL)
def selected(self, event, sel): for key in sel.keys(): if key == "name" or key.startswith("comment"): continue try: f = self.selFunctions[key] lst = sel[key] if not f(event, lst): return False except: logger.exception("Keine Funktion für den Ausdruck " + key + " in der Selektion " + sel.get("name") + " gefunden") else: logger.debug("event %s selected", event.getTitel()) return True
def main(): if is_running(): logger.info('Still running, exit!') sys.exit(0) last_fail_id = -1 try: logger.info('Starting Scraper...') max_property_id = fetch_max_property_id_scraped() property_id = max_property_id not_found_count = 0 while True: property_id += 1 logger.info('Fetching Property %s' % property_id) try: res = scrape_single_property(property_id) except requests.ConnectionError: property_id -= 1 logger.error("Connection error, sleep 10 minutes...") time.sleep(600) continue if res == -1: logger.info("Doesnt Exist") if int(math.fabs(last_fail_id-property_id)) == 1: not_found_count += 1 else: not_found_count = 1 last_fail_id = property_id if not_found_count > 50000: logger.info("That's all folks!") break except: logger.exception(sys.exc_info()) finally: logger.info('Done!')
def handleTermin(self, termin): try: titel = termin.getTitel() logger.info("Title %s", titel) kategorie = termin.getKategorie() datum = termin.getDatum()[0] logger.info("terminTyp %s datum %s", kategorie, datum) zeiten = termin.getAbfahrten() if len(zeiten) == 0: raise ValueError("keine Anfangszeit für Termin %s", titel) logger.info("zeiten %s ", str(zeiten)) beschreibung = termin.getBeschreibung(False) logger.info("beschreibung %s", beschreibung) zusatzinfo = termin.getZusatzInfo() logger.info("zusatzinfo %s", str(zusatzinfo)) except Exception as e: logger.exception("Fehler im Termin '%s': %s", titel, e) return print("{} - {}".format( titel, kategorie)) # terminTyp z.B. Stammtisch, entbehrlich? print("{}".format(datum)) for zeit in zeiten: if zeit[1] != "": # print("${}: {} Uhr; {}".format(zeit[0], zeit[1], zeit[2])) print("{} Uhr; {}".format(zeit[1], zeit[2])) else: # print("${}: {}".format(zeit[0], zeit[2])) print("{}".format(zeit[2])) print(beschreibung) for info in zusatzinfo: if len(info) == 0: continue print(info) print()
def handleEnd(self): print("Template", self.gui.pdfTemplateName, "wird abgearbeitet") if self.linkType is None or self.linkType == "": self.linkType = self.gui.getLinkType() lines = self.pdfJS.get("text") lineCnt = len(lines) lineNo = 0 self.pdf.set_x(self.margins[0]) # left self.pdf.set_y(self.margins[1]) # top self.setStyle(self.styles.get("body")) self.pdf.cell(w=0, h=10, txt="", ln=1) while lineNo < lineCnt: line = lines[lineNo] if line.startswith("/comment"): lineNo += 1 continue if line.startswith("/template"): t1 = lineNo lineNo += 1 while not lines[lineNo].startswith("/endtemplate"): lineNo += 1 t2 = lineNo lineNo += 1 tempLines = lines[t1:t2] # /endtemplate not included self.evalTemplate(tempLines) else: self.evalLine(line, None) lineNo += 1 if self.ausgabedatei is None or self.ausgabedatei == "": self.ausgabedatei = self.gui.pdfTemplateName.rsplit(".", 1)[0] + "_" + self.linkType[0] + ".pdf" self.pdf.output(dest='F', name=self.ausgabedatei) print("Ausgabedatei", self.ausgabedatei, "wurde erzeugt") try: opath = os.path.abspath(self.ausgabedatei) os.startfile(opath) except Exception: logger.exception("opening " + self.ausgabedatei)
def handleTermin(self, tour): try: titel = tour.getTitel() logger.info("Title %s", titel) kategorie = tour.getKategorie() datum = tour.getDatum()[0] logger.info("kategorie %s datum %s", kategorie, datum) zeiten = tour.getAbfahrten() if len(zeiten) == 0: raise ValueError("keine Anfangszeit für Termin %s", titel) logger.info("zeiten %s ", str(zeiten)) zeiten = "\n".join(["{}: {} Uhr; {}".format( zeit[0], zeit[1], zeit[2]) for zeit in zeiten]) beschreibung = tour.getBeschreibung(False) logger.info("beschreibung %s", beschreibung) kurzbeschreibung = tour.getKurzbeschreibung() logger.info("kurzbeschreibung %s", kurzbeschreibung) zusatzinfo = tour.getZusatzInfo() zusatzinfo = "\n".join(zusatzinfo) logger.info("zusatzinfo %s", str(zusatzinfo)) except Exception as e: logger.exception("Fehler im Termin '%s': %s", titel, e) return row = { "Typ": "Termin", "Titel": titel, "Tourtyp": kategorie, "Datum": datum, "Abfahrten": zeiten, "Kurzbeschreibung": kurzbeschreibung, "Beschreibung": beschreibung, "ZusatzInfo": zusatzinfo} self.writer.writerow(row)
def starten(self): useRest = self.useRestVar.get() includeSub = self.includeSubVar.get() typ = self.eventTypeVar.get() radTyp = self.radTypVar.get() unitKeys = self.gliederungSvar.get().split(",") start = toDate(self.getStart()) end = toDate(self.getEnd()) if start[0:4] != end[0:4]: raise ValueError("Start und Ende in unterschiedlichem Jahr") self.images.clear() self.text.delete("1.0", END) txtWriter = TxtWriter(self.text) formatS = self.formatOM.get() if formatS == "Starnberg": handler = printHandler.PrintHandler() elif formatS == "München": handler = textHandler.TextHandler() elif formatS == "CSV": handler = csvHandler.CsvHandler(txtWriter) elif formatS == "Text": handler = rawHandler.RawHandler() elif formatS == "Word": if self.docxHandler is None: self.docxTemplate("NO") handler = self.docxHandler elif formatS == "Scribus": handler = self.scrbHandler elif formatS == "PDF": import pdfHandler handler = pdfHandler.PDFHandler(self) # elif formatS == "PDF": # handler = pdfHandler.PDFHandler(self) # # conditions obtained from PDF template! # includeSub = handler.getIncludeSub() # eventType = handler.getEventType() # radTyp = handler.getRadTyp() # unitKeys = handler.getUnitKeys().split(",") # start = toDate(handler.getStart()) # end = toDate(handler.getEnd()) else: handler = rawHandler.RawHandler() self.prefs.set(useRest, includeSub, formatS, self.getLinkType(), self.getEventType(), self.getRadTyp(), unitKeys, self.getStart(), self.getEnd(), self.docxTemplateName, self.xmlFileName) self.prefs.save() with contextlib.redirect_stdout(txtWriter): try: self.eventServer = tourServer.EventServer( useRest, includeSub, self.max_workers) if self.xmlFileName is not None and self.xmlFileName != "": self.eventServer = eventXml.EventServer( self.xmlFileName, self.eventServer) useXml = True else: useXml = False events = [] for unitKey in unitKeys: if unitKey == "Alles": unitKey = "" events.extend( self.eventServer.getEvents(unitKey.strip(), start, end, typ)) if len(events) == 0: handler.nothingFound() self.eventServer.calcNummern() if useXml: events.sort(key=lambda x: x.getDatumRaw( )) # sortieren nach Datum, REST: beginning, XML: beginning else: events.sort( key=lambda x: x["beginning"] ) # sortieren nach Datum, REST: beginning, XML: beginning ThreadPoolExecutor(max_workers=self.max_workers).map( self.eventServer.getEvent, events) for event in events: event = self.eventServer.getEvent(event) if event is None or event.isExternalEvent( ): # add a GUI switch? continue if event.isTermin(): if isinstance(handler, rawHandler.RawHandler): self.insertImage(event) handler.handleTermin(event) else: # docx and scrb have own radtyp selections if radTyp != "Alles" and self.docxHandler is None and self.scrbHandler is None and event.getRadTyp( ) != radTyp: logger.debug( "tour %s hat radtyp %s, nicht radtyp %s", event.getTitel(), event.getRadTyp(), radTyp) continue if isinstance(handler, rawHandler.RawHandler): self.insertImage(event) handler.handleTour(event) if hasattr(handler, "handleEnd"): handler.handleEnd() self.pos = "1.0" self.text.mark_set(INSERT, self.pos) self.text.focus_set() except Exception as e: logger.exception("Error during script evaluation") print("Error ", e, ", see ", logFilePath)
def handleTour(self, tour): try: titel = tour.getTitel() logger.info("Title %s", titel) tourNummer = tour.getNummer() radTyp = tour.getRadTyp()[0] # T,R,M kategorie = tour.getKategorie()[0] if kategorie == "T": # Tagestour kategorie = "G" # Ganztagstour... datum = tour.getDatum()[0] logger.info("tourNummer %s radTyp %s kategorie %s datum %s", tourNummer, radTyp, kategorie, datum) abfahrten = tour.getAbfahrten() if len(abfahrten) == 0: raise ValueError("kein Startpunkt in tour %s", titel) logger.info("abfahrten %s ", str(abfahrten)) beschreibung = tour.getBeschreibung(False) logger.info("beschreibung %s", beschreibung) zusatzinfo = tour.getZusatzInfo() logger.info("zusatzinfo %s", str(zusatzinfo)) schwierigkeit = str(tour.getSchwierigkeit()) if schwierigkeit == "0": schwierigkeit = "1" logger.info("schwierigkeit %s", schwierigkeit) strecke = tour.getStrecke() if strecke == "0 km": logger.error("Fehler: Tour %s hat keine Tourlänge", titel) else: logger.info("strecke %s", strecke) hoehenmeter = tour.getHoehenmeter() character = tour.getCharacter() if kategorie == 'Mehrtagestour': enddatum = tour.getEndDatum()[0] logger.info("enddatum %s", enddatum) personen = tour.getPersonen() logger.info("personen %s", str(personen)) if len(personen) == 0: logger.error("Fehler: Tour %s hat keinen Tourleiter", titel) except Exception as e: logger.exception("Fehler in der Tour '%s': %s", titel, e) return print("{} ${} {} {}".format(titel, radTyp, tourNummer, kategorie)) print("{} ${}$ ${}".format(datum, strecke, schwierigkeit)) if hoehenmeter != "0" and len(character) > 0: print("${} m; {}".format(hoehenmeter, character)) elif hoehenmeter != "0": print("${} m".format(hoehenmeter)) elif len(character) > 0: print(character) for abfahrt in abfahrten: if abfahrt[1] != "": # print("${}: {} Uhr; {}".format(abfahrt[0], abfahrt[1], abfahrt[2])) print("${} Uhr; {}".format(abfahrt[1], abfahrt[2])) else: # print("${}: {}".format(abfahrt[0], abfahrt[2])) print("${}".format(abfahrt[2])) print(beschreibung) for info in zusatzinfo: if len(info) == 0: continue print(info) print("Leitung: {}".format(", ".join(personen))) print()