From 823561c9920ba71d9b9223d51abd3dbec2ac463c Mon Sep 17 00:00:00 2001 From: Rick Date: Tue, 8 Jan 2019 20:10:59 +0100 Subject: [PATCH] First version --- README.md | 16 +++++++++++++++- admidio.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ exceptions.py | 3 +++ group.py | 29 ++++++++++++++++++++++++++++ main.py | 6 ++++++ member.py | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 admidio.py create mode 100644 exceptions.py create mode 100644 group.py create mode 100644 main.py create mode 100644 member.py diff --git a/README.md b/README.md index 2566051..552b2c7 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,18 @@ There will be 3 modules available: * **Amidio** which has a list of all Groups and Users * **Groups** which has a list of the current Users that are in the group -* **Users** which has all the profile data of a user +* **Members** which has all the profile data of a member + +## How to use + +''' +from admidio import Admidio +adm = Admidio(mysql_host, mysql_user, mysql_password, mysql_database) +''' + +It will initialise all groups and users that are in the admidio installation. + +## Todo + +- [] integrate custom admidio prefixes. +- [] ... diff --git a/admidio.py b/admidio.py new file mode 100644 index 0000000..93424b6 --- /dev/null +++ b/admidio.py @@ -0,0 +1,52 @@ +import MySQLdb +import member +import group +from exceptions import MemberNotFoundException + + +class Admidio: + """Creates the Admidio Class""" + + def __init__(self, mysql_host, mysql_user, mysql_pass, mysql_db): + self.db = MySQLdb.connect( + host=mysql_host, user=mysql_user, passwd=mysql_pass, db=mysql_db) + self.members = dict() + self.groups = dict() + self.userfields = None + self.initAll() + + def __del__(self): + self.db.close() + + def initAll(self): + """initializes all Members and Groups""" + c = self.db.cursor() + # Initializing member. Get ID and Name for the user fields. + sql = "SELECT usf_id,usf_name_intern FROM `adm_user_fields`" + c.execute(sql) + self.userfields = dict(c.fetchall()) + + sql = """SELECT usr_id, usr_login_name, usr_password + FROM adm_users WHERE usr_valid = 1""" + c.execute(sql) + + for row in c.fetchall(): + self.members[row[0]] = member.Member( + self.db, row[0], row[1], + row[2], self.userfields, self) + print(self.members[row[0]]) + + sql = """SELECT rol_id, rol_name, rol_description FROM adm_roles + WHERE rol_visible=1 AND rol_valid=1""" + c.execute(sql) + for row in c.fetchall(): + self.groups[row[0]] = group.Group(self.db, row[0], row[1], 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") diff --git a/exceptions.py b/exceptions.py new file mode 100644 index 0000000..188478d --- /dev/null +++ b/exceptions.py @@ -0,0 +1,3 @@ +class MemberNotFoundException(Exception): + """Exception raised when Member ID can't be found""" + pass diff --git a/group.py b/group.py new file mode 100644 index 0000000..5980356 --- /dev/null +++ b/group.py @@ -0,0 +1,29 @@ +from exceptions import MemberNotFoundException + + +class Group: + def __init__(self, db, group_id, name, admidio): + self.__c = db.cursor() + self.id = group_id + self.name = name + self.admidio = admidio + self.members = list() + self.leaders = list() + sql = ("""SELECT mem_usr_id, mem_leader FROM adm_members""" + f""" WHERE mem_rol_id = {self.id}""") + self.__c.execute(sql) + + for row in self.__c.fetchall(): + print(row) + try: + if row[1] == 1: + self.leaders.append(admidio.getMemberFromID(row[0])) + else: + self.members.append(admidio.getMemberFromID(row[0])) + except MemberNotFoundException: + print( + f"Member with id {row[0]} not found, group id: {self.id}") + + def getAllMembers(self): + """Return leaders and members in group, combined""" + return self.leaders.append(self.members) diff --git a/main.py b/main.py new file mode 100644 index 0000000..f88ae66 --- /dev/null +++ b/main.py @@ -0,0 +1,6 @@ +from admidio import Admidio +import config + +adm = Admidio( + config.DATABASE['host'], config.DATABASE['user'], config.DATABASE['pass'], + config.DATABASE['db']) diff --git a/member.py b/member.py new file mode 100644 index 0000000..f844ee8 --- /dev/null +++ b/member.py @@ -0,0 +1,47 @@ +import pprint + + +class Member(): + """Member class for admidio, here all member data will be stored.""" + + def __init__(self, db, user_id, username, password, userfields, admidio): + self.__c = db.cursor() + self.user_id = user_id + self.username = username + self.password = password + self.userdata = dict() + self.admidio = admidio + sql = f"""SELECT usd_usf_id, usd_value FROM adm_user_data + WHERE usd_usr_id = {self.user_id!s}""" + self.__c.execute(sql) + for row in self.__c.fetchall(): + # makes dict with {usf_name_intern:usd_value} + self.userdata[userfields[row[0]]] = row[1] + + def __hash__(self): + """Not sure if needed""" + return hash((self.user_id, self.username)) + + def __str__(self): + return (f"""Userid: {self.user_id}, Username: {self.username}, """ + f"""Userdata: {pprint.pformat(self.userdata)}""") + + """@property + def email(self): + return self.userdata['EMAIL'] + + @property + def firstName(self): + return self.userdata['FIRST_NAME'] + + @property + def lastName(self): + return self.userdata['LAST_NAME'] + + @property + def username(self): + self.username + + @property + def password(self): + return self.password"""