The objective of this interface is the ability to get data from an Admidio installation and use them in python. Currently Users, groups and events are integrated
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.4 KiB

5 years ago
5 years ago
5 years ago
5 years ago
  1. from .exceptions import MemberNotFoundException
  2. import hashlib
  3. class Group:
  4. def __init__(self, group_id, name, admidio):
  5. self.__c = admidio.db.cursor()
  6. self.id = group_id
  7. self.name = name
  8. self.admidio = admidio
  9. self.members = list()
  10. self.leaders = list()
  11. sql = f"""SELECT mem_usr_id, mem_leader
  12. FROM {self.admidio.prefix}_members
  13. WHERE mem_rol_id = {self.id}
  14. AND mem_end = '9999-12-31'"""
  15. self.__c.execute(sql)
  16. for row in self.__c.fetchall():
  17. try:
  18. if row[1] == 1:
  19. self.leaders.append(admidio.getMemberFromID(row[0]))
  20. else:
  21. self.members.append(admidio.getMemberFromID(row[0]))
  22. except MemberNotFoundException:
  23. print(
  24. f"Member with id {row[0]} not found, group id: {self.id}")
  25. def __eq__(self, other):
  26. if isinstance(other, Group):
  27. return self.hash() == other.hash()
  28. def hash(self):
  29. return hashlib.md5((str(self.id) + self.name
  30. + (''.join(str(x) for x in self.members) or '')
  31. + (''.join(str(x) for x in self.leaders) or '')
  32. ).encode('utf-8')).hexdigest()
  33. def getAllMembers(self):
  34. """Return leaders and members in group, combined"""
  35. return self.leaders.append(self.members)