""" main.py für remove4weeks Checked per cron jeden Tag die 'anmeldungen'-Tabelle in der Datenbank. Prüft für jeden Teilnehmer ob - entweder die Führung abgesagt wurde - oder 4 Wochen seit der teilgenommenen Führung vergangen sind. Ist das der Fall, werden die persönlichen Daten des Teilnehmers mit '-' in der Datenbank überschrieben. TODO - Statistik-Daten behalten: Anzahl der Anfragen, davon zugesagt, davon abgesagt und ggf. in eine eigenen Tabelle merken Versions: V 1.3 2022-12-08 rxf - 'abgesagte' werden nicht mehgr gelöscht V 1.2 2022-11-03 rxf - 'nicht teilgenomme' werden nicht mehr behandelt - SELECT nun nur noch über fdatum der anmelden-Tabelle V 1.1 2020-10-14 rxf - Löschen der reihe nach: erst abgesagt, dann 'nicht teolgenommen' und dann älter als 4 Wochen V 1.0 2020-10-10 rxf - erste live gestellte Version V 0.0 2020-10-08 rxf - Start """ from datetime import datetime, timedelta, date import mysql.connector from mysql.connector import errorcode import os # Versionsnummer und Date VERSION="1.3" VDATE="2022-12-08" # Wie viele Tage müssen vergangen sein, damit gelöscht wird? # default = 28 VTAGE = 28 # $host = 'localhost'; # $user = 'db310927'; # $pass = 'ArktUhr'; # $dbase = 'db310927'; # Definitionen für die Datenbank unix_socket=" /var/lib/mysql/mysql.sock" host = 'localhost' user = 'db310927' #password = 'ArktUhr' password = 'vetivene-albarco-earner' dbase = 'db310927' if os.environ.get('STWANMELD') == '1': host = "localhost" user = "root" password = "SFluorit" dbase = "sternwarte" def updateentry(db, id): """ Update den Eintrag mit der ID id: es werden alle persönlichen Daten mit '-' überschreiben""" mycursor = db.cursor() dash = '"-"' sql = "UPDATE anmeldungen SET " + \ "name=" + dash + ", vorname=" + dash + ", email=" + dash + ", telefon=" + dash + ", plz=0, strasse=" + dash + ", stadt=" + dash + \ ", remarks = '' WHERE id=\"" + str(id) + "\"" # logit(sql) mycursor.execute(sql) db.commit() return mycursor.rowcount def removeabgesagte(db): """ Alle abgesagten Teilnehmer finden und deren IDs übergeben """ abgesagte = [] mycursor = db.cursor() delcount = 0 sql = "SELECT id FROM anmeldungen WHERE abgesagt=1 AND name != '-'" mycursor.execute(sql) myresult = mycursor.fetchall() logstr = "Abgesagt: " for x in myresult: logstr += str(x[0]) + ',' abgesagte.append(x[0]) delcount += updateentry(db, x[0]) logit(logstr) logit('Anzahl Abgesagte: ' + str(delcount)) return delcount # def removeNICHTteilgenommene(db): # """ Alle Teilnehmer holen, die bei der gestrigen Führung # zwar angemeldet waren aber nicht teilgenommen haben. """ # nichtteilg = [] # mycursor = db.cursor() # delcount = 0 # sql = "SELECT anmeldungen.id FROM anmeldungen INNER JOIN fdatum ON anmeldungen.fid=fdatum.id WHERE DATE_ADD(DATE(fdatum.datum),INTERVAL 1 DAY)<=DATE(NOW()) AND teilgenommen = 0 AND name != '-'" # mycursor.execute(sql) # myresult = mycursor.fetchall() # logstr = "Nicht teilgenommen: " # for x in myresult: # logstr += str(x[0]) + ',' # nichtteilg.append(x[0]) # delcount += updateentry(db, x[0]) # logit(logstr) # return delcount def remove4weekold(db): """ Alle Teilnehmer IDs holen, die vor 4 Wochen bei einer Führung waren bzw. für eine Führung angemeldet waren""" mustdelete = [] mycursor = db.cursor() delcount = 0 sql = "SELECT id FROM anmeldungen WHERE DATE_ADD(DATE(fdatum),INTERVAL " + str(VTAGE) + " DAY)<=DATE(NOW()) AND name != '-'" mycursor.execute(sql) myresult = mycursor.fetchall() logstr = "4 Wochen alt: " for x in myresult: logstr += str(x) + ',' mustdelete.append(x[0]) delcount += updateentry(db, x[0]) logit(logstr) logit('Anazhl 4 Wochen alte: : ' + str(delcount)) return delcount def logit(arg): """ Ausgabe der Parameter mit einen Zeitstempel""" now = datetime.now() out = now.strftime("%Y-%m-%d %H:%M:%S") + " - " + arg print(out) def main(): logit('Start - Version ' + VERSION + " vom " + VDATE) try: mydb = mysql.connector.connect( unix_socket=unix_socket, # host=host, user=user, password=password, database=dbase ) # acount = removeabgesagte(mydb) # count += removeNICHTteilgenommene(mydb) bcount = remove4weekold(mydb) logit('Geloescht wurden ' + str(bcount) + ' Eintraege.') except mysql.connector.Error as err: if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: print("Something is wrong with your user name or password") elif err.errno == errorcode.ER_BAD_DB_ERROR: print("Database does not exist") else: print(err) logit("End\n"); if __name__ == "__main__": main()