import MySQLdb import admidio_python_api.member as member import admidio_python_api.group as group import admidio_python_api.event as event from admidio_python_api.exceptions import MemberNotFoundException from datetime import datetime from dateutil.relativedelta import relativedelta class Admidio: """Creates the Admidio Class""" def __init__(self, mysql_host, mysql_user, mysql_pass, mysql_db, db_prefix): self.db = MySQLdb.connect( host=mysql_host, user=mysql_user, passwd=mysql_pass, db=mysql_db) self.cursor = self.db.cursor() self.prefix = db_prefix self.members = dict() self.groups = dict() self.events = dict() self.event_confirmation_id = None sql = f"SELECT usf_id,usf_name_intern FROM {self.prefix}_user_fields" self.cursor.execute(sql) self.userfields = dict(self.cursor.fetchall()) # Get the id for event confirmation role. # So it can exclude them from Groups sql = f"""SELECT cat_id FROM {self.prefix}_categories WHERE cat_name_intern = 'EVENTS'""" self.cursor.execute(sql) self.event_confirmation_id = self.cursor.fetchone()[0] self.initMembers() self.initGroups() self.initEvents() def __del__(self): self.db.close() def initMembers(self): """Initialises all members in the Admidio installation""" sql = f"""SELECT usr_id, usr_login_name, usr_password FROM {self.prefix}_users WHERE usr_valid = 1""" self.cursor.execute(sql) for row in self.cursor.fetchall(): self.members[row[0]] = member.Member( self.db, row[0], row[1], row[2], self.userfields, self) def initGroups(self): """Initialises all groups in the Admidio installation""" sql = f"""SELECT rol_id, rol_name, rol_description FROM {self.prefix}_roles WHERE rol_valid = 1 AND rol_cat_id != {self.event_confirmation_id}""" self.cursor.execute(sql) for row in self.cursor.fetchall(): self.groups[row[0]] = group.Group(self.db, row[0], row[1], self) def initEvents(self): """Initialises all comming events and passed events <3 months""" datestring = datetime.now() + relativedelta(months=-6) datestring = datestring.strftime("%Y-%m-%d %H:%M:%S") sql = f"""SELECT dat_id, dat_cat_id, dat_begin, dat_end, dat_headline, dat_description, dat_location, dat_country, dat_rol_id FROM {self.prefix}_dates WHERE dat_begin >'{datestring}'""" self.cursor.execute(sql) for row in self.cursor.fetchall(): self.events[row[0]] = event.Event( self.db, row[0], row[8], row[4], row[2], row[3], row[5], row[6], row[7], self) def getMemberFromID(self, user_id): """ Returns Member object if user_id exists otherwise throws MemberNotFoundException """ if user_id in self.members: return self.members[user_id] else: raise MemberNotFoundException( f"Member with id {user_id} not found")