예제 #1
0
def GetTournaments():
    if (loglvl == 1):
        print("GetTournaments")  #Debugging:Die Funktion wurde aufgerufen
    #Abfrage nach den Turnieren in den naechsten 6 Wochen, die noch nicht verarbeitet wurden.
    cursor = cnxTurnier.cursor(
    )  #Erstelle ein MySQL Cursor Objekt, welches in der Lage ist SQL Queries auszufuehren
    query = (
        "SELECT ID From turnier WHERE Datum BETWEEN %s AND %s AND casted = 0"
    )  # %s sind Platzhalter.

    today = datetime.date.today()
    nextDate = datetime.date.today() + datetime.timedelta(
        weeks=6)  #Heute + 6 Wochen

    if (loglvl == 2):
        print("Query: " + query + " Heute: " + str(today) + " Ende: " +
              str(nextDate))  #Debugge ggf. die SQL Query

    cursor.execute(
        query, (today, nextDate)
    )  #Fuehre die SQL Abfrage aus und ersetze die %s Platzhalter durch die angegebenen Variablen in den Klammern

    tournaments = formatize.format(
        cursor.fetchall()
    )  #Uebergib das im Cursor gespeicherte Ergebnis aufgrund des eigenartigen Datenformats "(1,)" an die Funktion zur Formatierung und Speichere die Werte in der Variable (Typ: Liste)
    cursor.close(
    )  #Schließe den Cursor um eine Timeout der Datenbank zu verhindern

    if (loglvl == 1): print("TurnierIDs: " + str(tournaments))  #Debugging

    return tournaments  #Gib die Liste der Turniere zurueck Format: "(TurnierID, TurnierID,...)"
예제 #2
0
def FindFencers(altersklassen, weapons, TurID): #Finde Fechter fuer auf die diese Bedingungen zutreffen 
	if (loglvl ==1): print("FindFencers")
	
	cursor = cnxTurnier.cursor()
	
	matchingFencers = list()  #Die Fechter deren Waffe und Altersklasse mit der des Turniers uebereinstimmen (Liste)

	for rowAK in altersklassen: #Iteriere ueber die Liste der Alterklassen
		
		if (loglvl ==1): #Einige Debugging Infos
			print("")
			print("Turnier ID:  " + str(TurID))
			print("Altersklasse ID: " + str(rowAK))

		queryZeitraum = ("SELECT Beginn , Ende FROM jahrgaenge WHERE ID =")
		queryZeitraum += str(rowAK) #Appende die Jahrgangs ID an die Query
		if (loglvl == 2): print ("Zeitraum: " + queryZeitraum)
		cursor.execute(queryZeitraum)
		zeitraum = cursor.fetchall() #Da hier zwei Werte zurueck gegeben werden ist ein Formatieren nicht noetig

		for rowZ in zeitraum: #Speichere den Zeitraum in lesbareren Variablen
		 	beginn = rowZ[0]
		 	ende = rowZ[1]

		if (loglvl ==1): print("Beginn: " + str(beginn) + " Ende: " + str(ende))
		
		queryFencers = ("SELECT DISTINCT ID  From fechter as f JOIN fechterwaffe AS fw ON f.ID = fw.FechterID WHERE Jahrgang BETWEEN %s AND %s AND WaffeID =") #Alle Fechter deren Geburtsjahr innerhalb der erfragten Altersklasse liegt und ihre Waffe übereinstimmt
		
		if (len(weapons) == 1): #Ist das Turnier fuer eine oder zwei Waffen?
			queryFencers += str(weapons[0]) #Appende die ID der Waffe
			if (loglvl ==2): print("Eine WaffenID: " + str(queryFencers)) 
			
		if (len(weapons) == 2): #Wenn ein Turnier fuer deide Waffen verfuegbar ist, frage auch beide ab. Durch DISTINCT erscheint jeder Fechter nur einmal
			queryFencers += str(weapons[0]) + " OR WaffeID =" + str(weapons[1])
			if (loglvl ==2): print("Zwei WaffenIDs: " + str(queryFencers))
			
		else:
			#Should never happen, sonst informiere welches Turnier keine Waffen hat und beende
			exit("[ERR]Keine Waffe angegeben in diesem Turnier "+ str(TurID))
			
		
		cursor.execute(queryFencers, (beginn , ende)) #Fuege Beginn und Ende beim Between (%s) ein
				
		matchingFencers.extend(formatize.format(cursor.fetchall())) #Haenge die neuen Fechter an die matchingFencers Liste an.
		if (loglvl ==1): 
			print("matchingFencers: " + str(matchingFencers))	
			print("")
		
	cursor.close()

	#Sorge dafuer, dass fuer dieses Turnier jeder Fechter nur einmal vorhanden ist
	#Eine Mehrfachselection kann durch Ueberschneidungen in den Altersklassen entstehen
	#set ist ein Datentyp, in dem jeder Wert nur einmal vorhanden sein kann
	uniqueFencers = list(set(matchingFencers))
	return uniqueFencers
예제 #3
0
def CheckWeapon(TurID): #Frage die Waffen fuer ein Turnier ab
	if (loglvl ==1): print("CheckWeapon")
	cursor = cnxTurnier.cursor()
	query = ("SELECT WaffeID FROM waffetur WHERE TurnierID =")
	query += str(TurID) #Da ein insert via %s fehlschlug der Umweg ueber append
	if (loglvl == 2): print ("Query: " + query)
	cursor.execute(query)
	
	weapon = formatize.format(cursor.fetchall()) #Fromatiere und gib eine Liste im Format "(WaffeID,WaffeID,...)" zurueck
	
	cursor.close()
	
	return weapon
예제 #4
0
def GetAge(TurID): #Frage die Altersklassen fuer dieses Turnier ab
	if (loglvl == 1): print("GetAge")
	
	cursor = cnxTurnier.cursor()
	query = ("SELECT JahrgID FROM altersklassen WHERE TurnierID =")
	query += str(TurID) #Da ein insert via %s fehlschlug der Umweg ueber append
	if (loglvl == 2): print ("Query: " + query)
	
	cursor.execute(query)
    
	alterskl = formatize.format(cursor.fetchall()) #Auch hier wieder die Formatierung
	if (loglvl == 1): print ("Altersklassen:" + alterskl) #Debugging
	cursor.close()
	
	return alterskl #Gib die Altersklassen zurueck Format: Liste "(altersklID, altersklID,...)" 
예제 #5
0
def CheckWeapon(TurID):  #Frage die Waffen fuer ein Turnier ab
    if (loglvl == 1): print("CheckWeapon")
    cursor = cnxTurnier.cursor()
    query = ("SELECT WaffeID FROM waffetur WHERE TurnierID =")
    query += str(
        TurID)  #Da ein insert via %s fehlschlug der Umweg ueber append
    if (loglvl == 2): print("Query: " + query)
    cursor.execute(query)

    weapon = formatize.format(
        cursor.fetchall()
    )  #Fromatiere und gib eine Liste im Format "(WaffeID,WaffeID,...)" zurueck

    cursor.close()

    return weapon
예제 #6
0
def GetAge(TurID):  #Frage die Altersklassen fuer dieses Turnier ab
    if (loglvl == 1): print("GetAge")

    cursor = cnxTurnier.cursor()
    query = ("SELECT JahrgID FROM altersklassen WHERE TurnierID =")
    query += str(
        TurID)  #Da ein insert via %s fehlschlug der Umweg ueber append
    if (loglvl == 2): print("Query: " + query)

    cursor.execute(query)

    alterskl = formatize.format(
        cursor.fetchall())  #Auch hier wieder die Formatierung
    if (loglvl == 1): print("Altersklassen:" + alterskl)  #Debugging
    cursor.close()

    return alterskl  #Gib die Altersklassen zurueck Format: Liste "(altersklID, altersklID,...)"
예제 #7
0
def GetTournaments():
	if (loglvl ==1): print("GetTournaments")#Debugging:Die Funktion wurde aufgerufen
	#Abfrage nach den Turnieren in den naechsten 6 Wochen, die noch nicht verarbeitet wurden.
	cursor = cnxTurnier.cursor() #Erstelle ein MySQL Cursor Objekt, welches in der Lage ist SQL Queries auszufuehren
	query =  ("SELECT ID From turnier WHERE Datum BETWEEN %s AND %s AND casted = 0") # %s sind Platzhalter.

	today = datetime.date.today() 
	nextDate = datetime.date.today() + datetime.timedelta(weeks=6) #Heute + 6 Wochen

	if (loglvl == 2): print ("Query: " + query + " Heute: " + str(today) + " Ende: " + str(nextDate))#Debugge ggf. die SQL Query

	cursor.execute(query, (today, nextDate)) #Fuehre die SQL Abfrage aus und ersetze die %s Platzhalter durch die angegebenen Variablen in den Klammern

	tournaments = formatize.format(cursor.fetchall()) #Uebergib das im Cursor gespeicherte Ergebnis aufgrund des eigenartigen Datenformats "(1,)" an die Funktion zur Formatierung und Speichere die Werte in der Variable (Typ: Liste)
	cursor.close() #Schließe den Cursor um eine Timeout der Datenbank zu verhindern

	if (loglvl ==1): print("TurnierIDs: " + str(tournaments)) #Debugging

	return tournaments #Gib die Liste der Turniere zurueck Format: "(TurnierID, TurnierID,...)"
예제 #8
0
def Inform(informQuery, TurID):  #Schreibe die Emails
    if (loglvl == 1): print("Inform")
    if (loglvl == 1):
        print("Fechter IDs " + str(informQuery) + " fuer TurnierID: " +
              str(TurID))

    #Hole weitere Turnierangaben
    cursor = cnxTurnier.cursor()

    #Frage nun die Daten des Turniers ab, welche fuer eine Mail noetig sind
    queryTournament = (
        "SELECT Name , Ausschreibung , Pflichtturnier , Datum , Ort FROM turnier WHERE ID ="
    )
    queryTournament += str(TurID)
    if (loglvl == 2): print(queryTournament)

    cursor.execute(queryTournament)
    turnier = formatize.format(cursor.fetchall())

    TurName = turnier[0]
    TurLink = turnier[1]
    TurPflicht = turnier[2]
    TurDatum = turnier[3].strftime(
        "%a, den %d. %b %Y"
    )  #Formatiere das Datum nach Tag, den TT. Monat YYYY
    TurOrt = turnier[4]

    if (loglvl == 1):
        print(TurName)
        print(TurLink)
        print(TurPflicht)
        print(TurDatum)
        print(TurOrt)
        print("Die Daten des Turniers: " + str(turnier))

    #####Erstelle die Email#####
    mail = "Hallo zusammen, \n"
    mail += "In kürze steht ein neues Turnier an:\n"
    mail += "Das " + str(TurName) + ".\n"
    mail += "Es findet am " + str(TurDatum) + " in " + str(
        TurOrt) + " statt.\n"
    mail += "Eine Ausschreibung findet sich unter folgendem Link: <a href='" + str(
        TurLink) + "'>" + str(TurLink) + "</a>\n"
    if (TurPflicht == 1):
        mail += "Dieses Turnier ist ein wichtiges lokales Turnier und es ist ärgerlich dieses zu verpassen\n"  #Fuege einen besonderen Hinweis auf wichtige bzw. ortsnahe Turniere hinzu
    mail += "Bitte meldet euch rechtzeitig zurück, ob ihr starten könnt\n"
    mail += "Mit Fechtergruß\n"
    mail += "--)--------"
    mail += "Das Turniermanagmentsystem des FC Lütjensee"

    mail = mail.decode('utf-8')  #Konvertiere den Text zu utf-8

    if (loglvl == 1): print(mail)

    if (test == 0):  #Sollen Mails versendet werden?
        try:  #Versuche eine Verbindung zum Mailserver herzustellen
            s = smtplib.SMTP('localhost')
        except:
            quit("Der Mailserver konnte nicht erreicht werden")

        msg = MIMEText(mail, 'plain', 'utf-8')
        msg["Subject"] = "Ein Turnier kommt: " + str(TurName)
        msg["From"] = "*****@*****.**"

        for fechter in informQuery:
            if (loglvl == 1): print("FechterID: " + str(fechter))

            queryMail = ("SELECT Email FROM fechter WHERE ID="
                         )  #Hole die Mailadresse des Fechters
            queryMail += str(fechter)
            if (loglvl == 2): print(queryMail)

            cursor.execute(queryMail)
            dump = formatize.format(
                cursor.fetchall())  #Formatiere die Mailadresse
            email = str(
                dump[0].decode("utf-8")
            )  #Formatiere die Mailadresse zu utf-8 um Probleme mit dem @ zu verhindern
            if (loglvl == 1): print("Emailadresse: " + email)

            #Verfollstaendige das Mail-Formular
            msg["To"] = email

            ##Versende die Email##
            s.sendmail("*****@*****.**", email, msg.as_string())  #

        s.quit()  ##Schließe die Verbindung zum Mailserver

    else:
        print(
            mail
        )  #Schreibe die Mail in die Konsole sofern dies mit test != 0 erwünscht ist
    cursor.close()
예제 #9
0
def FindFencers(
        altersklassen, weapons,
        TurID):  #Finde Fechter fuer auf die diese Bedingungen zutreffen
    if (loglvl == 1): print("FindFencers")

    cursor = cnxTurnier.cursor()

    matchingFencers = list(
    )  #Die Fechter deren Waffe und Altersklasse mit der des Turniers uebereinstimmen (Liste)

    for rowAK in altersklassen:  #Iteriere ueber die Liste der Alterklassen

        if (loglvl == 1):  #Einige Debugging Infos
            print("")
            print("Turnier ID:  " + str(TurID))
            print("Altersklasse ID: " + str(rowAK))

        queryZeitraum = ("SELECT Beginn , Ende FROM jahrgaenge WHERE ID =")
        queryZeitraum += str(rowAK)  #Appende die Jahrgangs ID an die Query
        if (loglvl == 2): print("Zeitraum: " + queryZeitraum)
        cursor.execute(queryZeitraum)
        zeitraum = cursor.fetchall(
        )  #Da hier zwei Werte zurueck gegeben werden ist ein Formatieren nicht noetig

        for rowZ in zeitraum:  #Speichere den Zeitraum in lesbareren Variablen
            beginn = rowZ[0]
            ende = rowZ[1]

        if (loglvl == 1):
            print("Beginn: " + str(beginn) + " Ende: " + str(ende))

        queryFencers = (
            "SELECT DISTINCT ID  From fechter as f JOIN fechterwaffe AS fw ON f.ID = fw.FechterID WHERE Jahrgang BETWEEN %s AND %s AND WaffeID ="
        )  #Alle Fechter deren Geburtsjahr innerhalb der erfragten Altersklasse liegt und ihre Waffe übereinstimmt

        if (len(weapons) == 1):  #Ist das Turnier fuer eine oder zwei Waffen?
            queryFencers += str(weapons[0])  #Appende die ID der Waffe
            if (loglvl == 2): print("Eine WaffenID: " + str(queryFencers))

        if (
                len(weapons) == 2
        ):  #Wenn ein Turnier fuer deide Waffen verfuegbar ist, frage auch beide ab. Durch DISTINCT erscheint jeder Fechter nur einmal
            queryFencers += str(weapons[0]) + " OR WaffeID =" + str(weapons[1])
            if (loglvl == 2): print("Zwei WaffenIDs: " + str(queryFencers))

        else:
            #Should never happen, sonst informiere welches Turnier keine Waffen hat und beende
            exit("[ERR]Keine Waffe angegeben in diesem Turnier " + str(TurID))

        cursor.execute(
            queryFencers,
            (beginn, ende))  #Fuege Beginn und Ende beim Between (%s) ein

        matchingFencers.extend(formatize.format(cursor.fetchall(
        )))  #Haenge die neuen Fechter an die matchingFencers Liste an.
        if (loglvl == 1):
            print("matchingFencers: " + str(matchingFencers))
            print("")

    cursor.close()

    #Sorge dafuer, dass fuer dieses Turnier jeder Fechter nur einmal vorhanden ist
    #Eine Mehrfachselection kann durch Ueberschneidungen in den Altersklassen entstehen
    #set ist ein Datentyp, in dem jeder Wert nur einmal vorhanden sein kann
    uniqueFencers = list(set(matchingFencers))
    return uniqueFencers
예제 #10
0
cursor = cnxTurnier.cursor()

#################SAEBEL###############################################################################################################################################
querySabour = ("SELECT Name, Ausschreibung, Datum, Ort, ID FROM turnier AS t JOIN waffetur AS wt ON t.ID = wt.TurnierID WHERE Kalender=0 AND WaffeID=0")
cursor.execute(querySabour)
SabourEvents = cursor.fetchall()
WaffeID = 0
for event in SabourEvents: #Gehe fuer jedes gefundene Turnier einzeln vor
  Turnier = event[0].encode('utf-8') #Auch hier wieder das Codieren in utf-8 um eventuelle Umlaute verarbeiten zu koennen
  Ausschreibung = str(event[1])
  Datum = str(event[2])
  Ort = event[3].encode('utf-8')
  querySabourJahrg = ("SELECT JahrgName FROM turnier AS t JOIN altersklassen AS ak ON t.ID = ak.TurnierID JOIN jahrgaenge AS jg ON ak.JahrgID = jg.ID WHERE t.ID=")
  querySabourJahrg += str(event[4])
  cursor.execute(querySabourJahrg)
  Jahrgaenge = str(formatize.format(cursor.fetchall()))

  if (loglvl == 1): print Turnier + " " + Ausschreibung + " " + Datum + " " + Ort + " " + Jahrgaenge 

  #Sende die Saebelturniere an den Kalender
  PushEvent(WaffeID, Turnier, Ausschreibung, Datum, Ort, Jahrgaenge)

  #Speichere ab, dass dieses Turnier im Saebelkalender gespeichert wurde
  MarkTournament(event[4], WaffeID )


#################Florett##############################################################################################################################################
queryFleur = ("SELECT Name, Ausschreibung, Datum, Ort, ID FROM turnier AS t JOIN waffetur AS wt ON t.ID = wt.TurnierID WHERE Kalender=0 AND WaffeID=1")
cursor.execute(queryFleur)
FleurEvents = cursor.fetchall()
WaffeID = 1
예제 #11
0
def Inform(informQuery, TurID): #Schreibe die Emails
	if (loglvl ==1): print("Inform")
	if (loglvl ==1): print("Fechter IDs " + str(informQuery) + " fuer TurnierID: " + str(TurID))

	#Hole weitere Turnierangaben
	cursor = cnxTurnier.cursor()
	
	#Frage nun die Daten des Turniers ab, welche fuer eine Mail noetig sind
	queryTournament = ("SELECT Name , Ausschreibung , Pflichtturnier , Datum , Ort FROM turnier WHERE ID =")
	queryTournament += str(TurID)
	if (loglvl == 2): print(queryTournament)

	cursor.execute(queryTournament)
	turnier = formatize.format(cursor.fetchall())

	TurName = turnier[0] 
	TurLink = turnier[1]
	TurPflicht = turnier[2]
	TurDatum = turnier[3].strftime("%a, den %d. %b %Y") #Formatiere das Datum nach Tag, den TT. Monat YYYY
	TurOrt = turnier[4]

	if (loglvl == 1):	
		print(TurName)
		print(TurLink)
		print(TurPflicht)
		print(TurDatum)
		print(TurOrt)
		print("Die Daten des Turniers: " + str(turnier))

	#####Erstelle die Email#####
	mail = "Hallo zusammen, \n"
	mail += "In kürze steht ein neues Turnier an:\n"
	mail += "Das " + str(TurName) + ".\n"
	mail += "Es findet am " + str(TurDatum) + " in " + str(TurOrt) + " statt.\n"
	mail += "Eine Ausschreibung findet sich unter folgendem Link: <a href='" + str(TurLink)  + "'>" +str(TurLink) + "</a>\n"
	if (TurPflicht == 1): mail += "Dieses Turnier ist ein wichtiges lokales Turnier und es ist ärgerlich dieses zu verpassen\n" #Fuege einen besonderen Hinweis auf wichtige bzw. ortsnahe Turniere hinzu
	mail += "Bitte meldet euch rechtzeitig zurück, ob ihr starten könnt\n"
	mail += "Mit Fechtergruß\n"
	mail += "Das Turniermanagmentsystem des FC Lütjensee"

	mail = mail.decode('utf-8') #Konvertiere den Text zu utf-8

	if (loglvl == 1): print(mail)

	try: #Versuche eine Verbindung zum Mailserver herzustellen
		s = smtplib.SMTP('localhost')
	except:
		quit("Der Mailserver konnte nicht erreicht werden")

	msg = MIMEText(mail, 'plain', 'utf-8')
	msg["Subject"] = "Ein Turnier kommt: " + str(TurName)
	msg["From"] = "*****@*****.**"

	for fechter in informQuery:
		if (loglvl == 1): print("FechterID: " + str(fechter))
		
		queryMail = ("SELECT Email FROM fechter WHERE ID=") #Hole die Mailadresse des Fechters
		queryMail += str(fechter)
		if (loglvl == 2): print(queryMail)

		cursor.execute(queryMail)
		dump = formatize.format(cursor.fetchall()) #Formatiere die Mailadresse
		email = str(dump[0].decode("utf-8")) #Formatiere die Mailadresse zu utf-8 um Probleme mit dem @ zu verhindern 
		if (loglvl == 1): print("Emailadresse: " + email)

		#Verfollstaendige das Mail-Formular
		msg["To"] = email

		##Versende die Email##
		s.sendmail("*****@*****.**", [email] , msg.as_string()) #
	
	s.quit() ##Schließe die Verbindung zum Mailserver

	cursor.close()