Beispiel #1
0
    def __init__(self, inFileName, outFileName, tupleKeyIndex=GRUPPENKUERZEL):

        self.__inFileName = inFileName
        self.__outFileName = outFileName

        self.tupleKeyIndex = tupleKeyIndex

        text = self.__fetchInputText(inFileName)
        text = prepared_Sem_I_txt(text)
        success, resultList, strIndex = HawParser.parse(
            text, processor=HawDispatchProcessor())
        self.__hawCal = HawCalendar(resultList)

        if (not success or not strIndex == len(text)):
            s = "Could not parse correctly haw-calendar text file: "
            s += "hawParser.py needs to be adjusted to a new text file format"
            logging.error(s)

        self.selectedVeranstaltungen = set()
Beispiel #2
0
    def __init__(self, inFileName, outFileName, tupleKeyIndex=GRUPPENKUERZEL):

	self.__inFileName = inFileName
	self.__outFileName = outFileName

        self.tupleKeyIndex = tupleKeyIndex

	text = self.__fetchInputText(inFileName)
	success, resultList, strIndex = HawParser.parse(text, processor=HawDispatchProcessor())
	self.__hawCal = HawCalendar(resultList)

        if (not success or not strIndex==len(text)):
            s = "Could not parse correctly haw-calendar text file: "
            s +="hawParser.py needs to be adjusted to a new text file format"
            logging.error(s)

	self.selectedVeranstaltungen = set()
Beispiel #3
0
class Controller:

    def __init__(self, inFileName, outFileName, tupleKeyIndex=GRUPPENKUERZEL):

	self.__inFileName = inFileName
	self.__outFileName = outFileName

        self.tupleKeyIndex = tupleKeyIndex

	text = self.__fetchInputText(inFileName)
	success, resultList, strIndex = HawParser.parse(text, processor=HawDispatchProcessor())
	self.__hawCal = HawCalendar(resultList)

        if (not success or not strIndex==len(text)):
            s = "Could not parse correctly haw-calendar text file: "
            s +="hawParser.py needs to be adjusted to a new text file format"
            logging.error(s)

	self.selectedVeranstaltungen = set()

    def __fetchInputText(self, inFileName):
        text_cp1252 = ""

	if inFileName != None:
	    f = open(inFileName, "r")
	    text_cp1252 = f.read()
	    f.close()
	else:
	    text_cp1252 = sys.stdin.read()

        text_unicode = text_cp1252.decode("cp1252")
        text_utf8 = text_unicode.encode("utf-8")
	return text_utf8

    def setOutFileName(self, name):
        self.__outFileName = name

    def writeIcalendar(self):
        """@return: sum of written iCalendar events"""

	cal = self.__hawCal.onlyWithVeranstaltungen(self.selectedVeranstaltungen)
        icalStr = cal.icalStr()
        sumEvents = icalStr.count("BEGIN:VEVENT\r\n")

        if self.__outFileName != None:
	    f = open(self.__outFileName, "w")
	    f.write(icalStr)
	    f.close()
            logging.info("Written iCalendar file '" + self.__outFileName + "' with " + str(sumEvents) + " events")
	else:
	    sys.stdout.write(icalStr)
            logging.info("Printed iCalendar with " + str(sumEvents) + " events to stdout")

        return sumEvents

    def getKeys(self):
        return self.__hawCal.getKeys(self.tupleKeyIndex)

    def getVeranstaltungen(self, key):
        return self.__hawCal.getVeranstaltungenFromKey(key, self.tupleKeyIndex)

    def selectVeranstaltungen(self, veranstaltungen):
        self.selectedVeranstaltungen |= veranstaltungen

    def unselectVeranstaltungen(self, veranstaltungen):
        self.selectedVeranstaltungen -= veranstaltungen

    def tryGetFullName(self, veranstaltung):
        return tryGetFullName(veranstaltung)

    def setOutfile(self, outFileName):
	self.__outFileName = outFileName

    def getInfoString(self):
        a,b,c,d,e,f,g,h,i,j,infoString = self.__hawCal.eventTupelList[0]
        return infoString

    def optimalGruppenKeyIndex(self):
        keyIndex = SEMESTERGRUPPE

        sumOfGroupsInGroup = len(sorted(self.getKeys())[0].split())
        if sumOfGroupsInGroup > 10:
            keyIndex = GRUPPENKUERZEL

        return keyIndex
Beispiel #4
0
class Controller:

    def __init__(self, inFileName, outFileName, tupleKeyIndex=GRUPPENKUERZEL):

        self.__inFileName = inFileName
        self.__outFileName = outFileName

        self.tupleKeyIndex = tupleKeyIndex

        text = self.__fetchInputText(inFileName)
        text = prepared_Sem_I_txt(text)
        success, resultList, strIndex = HawParser.parse(text, processor=HawDispatchProcessor())
        self.__hawCal = HawCalendar(resultList)

        if (not success or not strIndex==len(text)):
            s = "Could not parse correctly haw-calendar text file: "
            s +="hawParser.py needs to be adjusted to a new text file format"
            logging.error(s)

        self.selectedVeranstaltungen = set()

    def __fetchInputText(self, inFileName):
        text_cp1252 = ""

        if inFileName != None:
            f = open(inFileName, "r")
            text_cp1252 = f.read()
            f.close()
        else:
            text_cp1252 = sys.stdin.read()

        text_unicode = text_cp1252.decode("cp1252")
        text_utf8 = text_unicode.encode("utf-8")
        return text_utf8

    def setOutFileName(self, name):
        self.__outFileName = name

    def writeIcalendar(self):
        """@return: sum of written iCalendar events"""

        cal = self.__hawCal.onlyWithVeranstaltungen(self.selectedVeranstaltungen)
        icalStr = cal.icalStr()
        sumEvents = icalStr.count("BEGIN:VEVENT\r\n")

        if self.__outFileName != None:
            f = open(self.__outFileName, "w")
            f.write(icalStr)
            f.close()
            logging.info("Written iCalendar file '" + self.__outFileName + "' with " + str(sumEvents) + " events")
        else:
            sys.stdout.write(icalStr)
            logging.info("Printed iCalendar with " + str(sumEvents) + " events to stdout")

        return sumEvents

    def getKeys(self):
        return self.__hawCal.getKeys(self.tupleKeyIndex)

    def getVeranstaltungen(self, key):
        return self.__hawCal.getVeranstaltungenFromKey(key, self.tupleKeyIndex)

    def selectVeranstaltungen(self, veranstaltungen):
        self.selectedVeranstaltungen |= veranstaltungen

    def unselectVeranstaltungen(self, veranstaltungen):
        self.selectedVeranstaltungen -= veranstaltungen

    def tryGetFullName(self, veranstaltung):
        return tryGetFullName(veranstaltung)

    def setOutfile(self, outFileName):
        self.__outFileName = outFileName

    def getInfoString(self):
        a,b,c,d,e,f,g,h,i,j,infoString,l,m = self.__hawCal.eventTupelList[0]
        return infoString

    def optimalGruppenKeyIndex(self):
        keyIndex = SEMESTERGRUPPE

        sumOfGroupsInGroup = len(sorted(self.getKeys())[0].split())
        if sumOfGroupsInGroup > 10:
            keyIndex = GRUPPENKUERZEL

        return keyIndex

    def data_dict(self):

        # data_dict structure with example values
        #
        # data_dict = {
        #
        #     DataImport: {
        #         # department: 'EuI'
        #         infostring: 'WiSe 2014 Vers. 1.00  vom 3.10.2014',
        #         version_text_datei: '1.00',
        #         # comment: 'imported automatically by script',
        #         semester: 'WiSe 2014',
        #         ical_header: 'BEGIN:VCALENDAR...'
        #         ical_ending: '...END:VCALENDAR''
        #     },
        #
        #     Veranstaltungen: [
        #         {
        #             semestergruppen: ['B-EE2','B-EE3',...] (for EuI)  or [] (for Inf)
        #             gruppenkuerzel: 'BTI2',
        #             veranstaltungskuerzel: 'BTI2-GS',
        #             veranstaltungsname: 'Grundlagen Systemprogrammierung',
        #
        #             Events: [
        #                 {
        #                     #veranstaltung: Fremdschluessel,
        #                     #data_import: Fremdschluessel,
        #
        #                     dozent: 'Friedrich Esser',
        #                     ort: 'Rm. 12.83',
        #                     wochen: '41, 42, ...',
        #                     wochentag: 'Di'
        #                     anfang: ('10','00'),
        #                     ende: ('13',15'),
        #                     icalevent: 'BEGIN:VEVENT...',
        #                 },
        #                 ...
        #             ],
        #         },
        #         ...
        #     ],
        #
        # }

        # create data_import

        first_event = self.__hawCal.eventTupelList[0]
        (semestergruppe, gruppenkuerzel, fach, dozent, ort, jahr, woche, wochentag, anfang, ende, infoString, version, semester) = first_event

        semester = semester2lexicographically_ordered_verbose_string(semester)

        data_import = {
            'infostring': infoString,
            'version_text_datei': version,
            'semester': semester,
            'ical_header': HEADER,
            'ical_ending': ENDING,
        }

        # create veranstaltungen

        faecher = set([(gruppenkuerzel, fach) for a,gruppenkuerzel,fach,d,e,f,g,h,i,j,k,l,m in self.__hawCal.eventTupelList])

        veranstaltungen_dicts = {}
        for (gruppenkuerzel, fach) in faecher:
            veranstaltungen_dicts[fach] = {
                    'semestergruppen': [],
                    'gruppenkuerzel': gruppenkuerzel,
                    'veranstaltungskuerzel': fach,
                    'veranstaltungsname': tryGetFullName(fach),
                    'Events': []
            }

        for event in self.__hawCal.eventTupelList:
            (semestergruppe, gruppenkuerzel, fach, dozent, ort, jahr, woche, wochentag, anfang, ende, infoString, version, semester) = event

            veranstaltung = veranstaltungen_dicts[fach]

            if semestergruppe != '' and semestergruppe not in veranstaltung['semestergruppen']:
                veranstaltung['semestergruppen'].append(semestergruppe)

            veranstaltung['Events'].append(
                    {
                        'dozent': dozent,
                        'ort': normalized_ort(ort),
                        'jahr': normalized_year(jahr),
                        'wochen': woche,
                        'wochentag': wochentagabk2weekdayno(wochentag),
                        'anfang': anfang[0] + ':' + anfang[1],
                        'ende': ende[0] + ':' + ende[1],
                        'icalevent': IcalEvent((fach,dozent,ort,jahr,woche,wochentag,anfang,ende,infoString)).icalStr(),
                    }
            )

        veranstaltungen = veranstaltungen_dicts.values()

        return {'DataImport': data_import, 'Veranstaltungen': veranstaltungen}
Beispiel #5
0
class Controller:
    def __init__(self, inFileName, outFileName, tupleKeyIndex=GRUPPENKUERZEL):

        self.__inFileName = inFileName
        self.__outFileName = outFileName

        self.tupleKeyIndex = tupleKeyIndex

        text = self.__fetchInputText(inFileName)
        text = prepared_Sem_I_txt(text)
        success, resultList, strIndex = HawParser.parse(
            text, processor=HawDispatchProcessor())
        self.__hawCal = HawCalendar(resultList)

        if (not success or not strIndex == len(text)):
            s = "Could not parse correctly haw-calendar text file: "
            s += "hawParser.py needs to be adjusted to a new text file format"
            logging.error(s)

        self.selectedVeranstaltungen = set()

    def __fetchInputText(self, inFileName):
        text_cp1252 = ""

        if inFileName != None:
            f = open(inFileName, "r")
            text_cp1252 = f.read()
            f.close()
        else:
            text_cp1252 = sys.stdin.read()

        text_unicode = text_cp1252.decode("cp1252")
        text_utf8 = text_unicode.encode("utf-8")
        return text_utf8

    def setOutFileName(self, name):
        self.__outFileName = name

    def writeIcalendar(self):
        """@return: sum of written iCalendar events"""

        cal = self.__hawCal.onlyWithVeranstaltungen(
            self.selectedVeranstaltungen)
        icalStr = cal.icalStr()
        sumEvents = icalStr.count("BEGIN:VEVENT\r\n")

        if self.__outFileName != None:
            f = open(self.__outFileName, "w")
            f.write(icalStr)
            f.close()
            logging.info("Written iCalendar file '" + self.__outFileName +
                         "' with " + str(sumEvents) + " events")
        else:
            sys.stdout.write(icalStr)
            logging.info("Printed iCalendar with " + str(sumEvents) +
                         " events to stdout")

        return sumEvents

    def getKeys(self):
        return self.__hawCal.getKeys(self.tupleKeyIndex)

    def getVeranstaltungen(self, key):
        return self.__hawCal.getVeranstaltungenFromKey(key, self.tupleKeyIndex)

    def selectVeranstaltungen(self, veranstaltungen):
        self.selectedVeranstaltungen |= veranstaltungen

    def unselectVeranstaltungen(self, veranstaltungen):
        self.selectedVeranstaltungen -= veranstaltungen

    def tryGetFullName(self, veranstaltung):
        return tryGetFullName(veranstaltung)

    def setOutfile(self, outFileName):
        self.__outFileName = outFileName

    def getInfoString(self):
        a, b, c, d, e, f, g, h, i, j, infoString = self.__hawCal.eventTupelList[
            0]
        return infoString

    def optimalGruppenKeyIndex(self):
        keyIndex = SEMESTERGRUPPE

        sumOfGroupsInGroup = len(sorted(self.getKeys())[0].split())
        if sumOfGroupsInGroup > 10:
            keyIndex = GRUPPENKUERZEL

        return keyIndex

    def data_tuples(self):
        #TODO version statt infostring als version zurueckliefern
        return [(semestergruppe, gruppenkuerzel, fach, dozent, ort, jahr,
                 woche, wochentag, anfang, ende, infoString, infoString,
                 tryGetFullName(fach))
                for (semestergruppe, gruppenkuerzel, fach, dozent, ort, jahr,
                     woche, wochentag, anfang, ende,
                     infoString) in self.__hawCal.eventTupelList]