Exemple #1
0
 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
Exemple #2
0
    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)
Exemple #3
0
 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
Exemple #4
0
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")
Exemple #5
0
    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 = []
Exemple #6
0
    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)
Exemple #7
0
 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
Exemple #8
0
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
Exemple #9
0
 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, ">>>>")
Exemple #10
0
 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)
Exemple #11
0
 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!')
Exemple #13
0
    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()
Exemple #14
0
 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)
Exemple #15
0
    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)
Exemple #16
0
    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)
Exemple #17
0
    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()