175 lines
4.9 KiB
Python
175 lines
4.9 KiB
Python
"""
|
|
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()
|
|
|