CalendarModel.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from modules.Sogo import Sogo
  2. from models.BaseModel import BaseModel
  3. class CalendarModel(BaseModel):
  4. parser_command = "calendar"
  5. required_args = {
  6. "add": [["username", "name"]],
  7. "delete": [["username", "name"]],
  8. "get": [["username"]],
  9. "import_ics": [["username", "name", "ics"]],
  10. "set_acl": [["username", "name", "sharee_email", "acl"]],
  11. "get_acl": [["username", "name"]],
  12. "delete_acl": [["username", "name", "sharee_email"]],
  13. }
  14. def __init__(
  15. self,
  16. username=None,
  17. name=None,
  18. sharee_email=None,
  19. acl=None,
  20. subscribe=None,
  21. ics=None,
  22. **kwargs
  23. ):
  24. self.sogo = Sogo(username)
  25. self.name = name
  26. self.acl = acl
  27. self.sharee_email = sharee_email
  28. self.subscribe = subscribe
  29. self.ics = ics
  30. def add(self):
  31. """
  32. Add a new calendar.
  33. :return: Response from SOGo API.
  34. """
  35. return self.sogo.addCalendar(self.name)
  36. def delete(self):
  37. """
  38. Delete a calendar.
  39. :return: Response from SOGo API.
  40. """
  41. calendar_id = self.sogo.getCalendarIdByName(self.name)
  42. if not calendar_id:
  43. print(f"Calendar '{self.name}' not found for user '{self.username}'.")
  44. return None
  45. return self.sogo.deleteCalendar(calendar_id)
  46. def get(self):
  47. """
  48. Get the calendar details.
  49. :return: Response from SOGo API.
  50. """
  51. return self.sogo.getCalendar()
  52. def set_acl(self):
  53. """
  54. Set ACL for the calendar.
  55. :return: Response from SOGo API.
  56. """
  57. calendar_id = self.sogo.getCalendarIdByName(self.name)
  58. if not calendar_id:
  59. print(f"Calendar '{self.name}' not found for user '{self.username}'.")
  60. return None
  61. return self.sogo.setCalendarACL(calendar_id, self.sharee_email, self.acl, self.subscribe)
  62. def delete_acl(self):
  63. """
  64. Delete the calendar ACL.
  65. :return: Response from SOGo API.
  66. """
  67. calendar_id = self.sogo.getCalendarIdByName(self.name)
  68. if not calendar_id:
  69. print(f"Calendar '{self.name}' not found for user '{self.username}'.")
  70. return None
  71. return self.sogo.deleteCalendarACL(calendar_id, self.sharee_email)
  72. def get_acl(self):
  73. """
  74. Get the ACL for the calendar.
  75. :return: Response from SOGo API.
  76. """
  77. calendar_id = self.sogo.getCalendarIdByName(self.name)
  78. if not calendar_id:
  79. print(f"Calendar '{self.name}' not found for user '{self.username}'.")
  80. return None
  81. return self.sogo.getCalendarACL(calendar_id)
  82. def import_ics(self):
  83. """
  84. Import a calendar from an ICS file.
  85. :return: Response from SOGo API.
  86. """
  87. return self.sogo.importCalendar(self.name, self.ics)
  88. @classmethod
  89. def add_parser(cls, subparsers):
  90. parser = subparsers.add_parser(
  91. cls.parser_command,
  92. help="Manage calendars (add, delete, get, import_ics, set_acl, get_acl, delete_acl)"
  93. )
  94. parser.add_argument("object", choices=list(cls.required_args.keys()), help="Action to perform: add, delete, get, import_ics, set_acl, get_acl, delete_acl")
  95. parser.add_argument("--username", required=True, help="Username of the calendar owner (e.g. user@example.com)")
  96. parser.add_argument("--name", help="Calendar name")
  97. parser.add_argument("--ics", help="Path to ICS file for import")
  98. parser.add_argument("--sharee-email", help="Email address to share the calendar with")
  99. parser.add_argument("--acl", help="ACL rights for the sharee (e.g. r, w, rw)")
  100. parser.add_argument("--subscribe", action='store_true', help="Subscribe the sharee to the calendar")