diff --git a/.lh/features/reminder_app.feature.json b/.lh/features/reminder_app.feature.json new file mode 100644 index 0000000..b688671 --- /dev/null +++ b/.lh/features/reminder_app.feature.json @@ -0,0 +1,18 @@ +{ + "sourceFile": "features/reminder_app.feature", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 0, + "patches": [ + { + "date": 1724784519315, + "content": "Index: \n===================================================================\n--- \n+++ \n" + } + ], + "date": 1724784519315, + "name": "Commit-0", + "content": "Feature: Managing reminders in the ReminderApp\n\n Scenario: Creating a new reminder in a new list\n Given the ReminderApp is initialized\n And I have granted access to reminders\n And I create a new list named \"Test List\"\n When I add a reminder titled \"Test Reminder\" with due date \"2024-08-28 07:00\" to the \"Test List\"\n Then the reminder \"Test Reminder\" should exist in the \"Test List\"\n\n Scenario: Completing a reminder\n Given the ReminderApp is initialized\n And I have granted access to reminders\n And I create a new list named \"Test List\"\n And I add a reminder titled \"Complete Reminder\" with due date \"2024-08-28 07:00\" to the \"Test List\"\n When I mark the reminder \"Complete Reminder\" as completed\n Then the reminder \"Complete Reminder\" should be marked as completed in the \"Test List\"\n\n Scenario: Clearing completed reminders\n Given the ReminderApp is initialized\n And I have granted access to reminders\n And I create a new list named \"Test List\"\n And I add a reminder titled \"Clear Me\" with due date \"2024-08-28 07:00\" to the \"Test List\"\n And I mark the reminder \"Clear Me\" as completed\n When I clear completed reminders from \"Test List\"\n Then the reminder \"Clear Me\" should no longer exist in the \"Test List\"" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/__init__.py.json b/.lh/src/dspygen/__init__.py.json new file mode 100644 index 0000000..0e23327 --- /dev/null +++ b/.lh/src/dspygen/__init__.py.json @@ -0,0 +1,42 @@ +{ + "sourceFile": "src/dspygen/__init__.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 6, + "patches": [ + { + "date": 1724789562262, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724789900180, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,10 +1,9 @@\n-# import inject\n-# from dspygen.di_configure import configure\n-#\n-# inject.configure(configure)\n+import inject\n+import EventKit\n \n # Configure the injector\n def configure_injector(binder):\n binder.bind(EventKit.EKEventStore, EventKit.EKEventStore.alloc().init())\n+ binder.bind('reminder_factory', EventKit.EKReminder.reminderWithEventStore_)\n \n inject.configure(configure_injector)\n\\ No newline at end of file\n" + }, + { + "date": 1724789938007, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,9 @@\n+import inject\n+import EventKit\n+\n+# Configure the injector\n+def configure_injector(binder):\n+ binder.bind(EventKit.EKEventStore, EventKit.EKEventStore.alloc().init())\n+ binder.bind('EKReminder', EventKit.EKReminder)\n+\n+inject.configure(configure_injector)\n\\ No newline at end of file\n" + }, + { + "date": 1724790009352, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -3,7 +3,7 @@\n \n # Configure the injector\n def configure_injector(binder):\n binder.bind(EventKit.EKEventStore, EventKit.EKEventStore.alloc().init())\n- binder.bind('EKReminder', EventKit.EKReminder)\n+ binder.bind(EventKit.EKReminder, EventKit.EKReminder)\n \n inject.configure(configure_injector)\n\\ No newline at end of file\n" + }, + { + "date": 1724790091192, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -2,17 +2,9 @@\n import EventKit\n \n # Configure the injector\n def configure_injector(binder):\n+ event\n binder.bind(EventKit.EKEventStore, EventKit.EKEventStore.alloc().init())\n binder.bind(EventKit.EKReminder, EventKit.EKReminder)\n \n-inject.configure(configure_injector)\n-import inject\n-import EventKit\n-\n-# Configure the injector\n-def configure_injector(binder):\n- binder.bind(EventKit.EKEventStore, EventKit.EKEventStore.alloc().init())\n- binder.bind('reminder_factory', EventKit.EKReminder.reminderWithEventStore_)\n-\n inject.configure(configure_injector)\n\\ No newline at end of file\n" + }, + { + "date": 1724790113776, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,7 +1,12 @@\n import inject\n import EventKit\n \n+# import inject\n+# from dspygen.di_configure import configure\n+#\n+# inject.configure(configure)\n+\n # Configure the injector\n def configure_injector(binder):\n event_store = EventKit.EKEventStore.alloc().init()\n binder.bind(EventKit.EKEventStore, event_store)\n" + }, + { + "date": 1724790140639, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -9,7 +9,7 @@\n # Configure the injector\n def configure_injector(binder):\n event_store = EventKit.EKEventStore.alloc().init()\n binder.bind(EventKit.EKEventStore, event_store)\n- binder.bind(EventKit.EKReminder, )\n+ binder.bind(EventKit.EKReminder, EventK)\n \n inject.configure(configure_injector)\n\\ No newline at end of file\n" + } + ], + "date": 1724789562262, + "name": "Commit-0", + "content": "# import inject\n# from dspygen.di_configure import configure\n#\n# inject.configure(configure)\n\n# Configure the injector\ndef configure_injector(binder):\n binder.bind(EventKit.EKEventStore, EventKit.EKEventStore.alloc().init())\n\ninject.configure(configure_injector)" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/experiments/cal_apps/__init__.py.json b/.lh/src/dspygen/experiments/cal_apps/__init__.py.json new file mode 100644 index 0000000..5e3a5a1 --- /dev/null +++ b/.lh/src/dspygen/experiments/cal_apps/__init__.py.json @@ -0,0 +1,30 @@ +{ + "sourceFile": "src/dspygen/experiments/cal_apps/__init__.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 3, + "patches": [ + { + "date": 1724784607061, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724784719629, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,5 +1,1 @@\n-from .reminder import Reminder\n-from .reminder_list import ReminderList\n-from .reminder_app import ReminderApp\n \n-__all__ = ['Reminder', 'ReminderList', 'ReminderApp']\n" + }, + { + "date": 1724784726474, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,1 +1,5 @@\n+from .reminder import Reminder\n+from .reminder_list import ReminderList\n+from .reminder_app import ReminderApp\n \n+__all__ = ['Reminder', 'ReminderList', 'ReminderApp']\n\\ No newline at end of file\n" + }, + { + "date": 1724789841592, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,5 +0,0 @@\n-from .reminder import Reminder\n-from .reminder_list import ReminderList\n-from .reminder_app import ReminderApp\n-\n-__all__ = ['Reminder', 'ReminderList', 'ReminderApp']\n\\ No newline at end of file\n" + } + ], + "date": 1724784607061, + "name": "Commit-0", + "content": "from .reminder import Reminder\nfrom .reminder_list import ReminderList\nfrom .reminder_app import ReminderApp\n\n__all__ = ['Reminder', 'ReminderList', 'ReminderApp']\n" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/experiments/cal_apps/calendar_item.py.json b/.lh/src/dspygen/experiments/cal_apps/calendar_item.py.json new file mode 100644 index 0000000..889e428 --- /dev/null +++ b/.lh/src/dspygen/experiments/cal_apps/calendar_item.py.json @@ -0,0 +1,34 @@ +{ + "sourceFile": "src/dspygen/experiments/cal_apps/calendar_item.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 4, + "patches": [ + { + "date": 1724787414924, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724787641899, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,7 +1,7 @@\n import objc\n import EventKit\n-from Foundation import NSDateComponents, NSURL\n+from Foundation import NSDateComponents, NSURL, NSDate\n from datetime import datetime\n from typing import Optional, List\n \n class CalendarItemError(Exception):\n@@ -45,13 +45,15 @@\n self.ek_item.setLocation_(value)\n \n @property\n def creation_date(self) -> datetime:\n- return self.ek_item.creationDate().dateValue()\n+ ns_date = self.ek_item.creationDate()\n+ return datetime.fromtimestamp(ns_date.timeIntervalSince1970())\n \n @property\n def last_modified_date(self) -> datetime:\n- return self.ek_item.lastModifiedDate().dateValue()\n+ ns_date = self.ek_item.lastModifiedDate()\n+ return datetime.fromtimestamp(ns_date.timeIntervalSince1970())\n \n @property\n def time_zone(self) -> str:\n return str(self.ek_item.timeZone())\n" + }, + { + "date": 1724787789707, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,118 @@\n+import objc\n+import EventKit\n+from Foundation import NSDateComponents, NSURL, NSDate\n+from datetime import datetime\n+from typing import Optional, List\n+\n+class CalendarItemError(Exception):\n+ pass\n+\n+class CalendarItem:\n+ def __init__(self, event_store: EventKit.EKEventStore):\n+ self.event_store = event_store\n+ self.ek_item = None # This will be set by subclasses\n+\n+ @property\n+ def calendar_item_identifier(self) -> str:\n+ return self.ek_item.calendarItemIdentifier()\n+\n+ @property\n+ def calendar_item_external_identifier(self) -> str:\n+ return self.ek_item.calendarItemExternalIdentifier()\n+\n+ @property\n+ def title(self) -> str:\n+ return self.ek_item.title()\n+\n+ @title.setter\n+ def title(self, value: str):\n+ self.ek_item.setTitle_(value)\n+\n+ @property\n+ def calendar(self) -> EventKit.EKCalendar:\n+ return self.ek_item.calendar()\n+\n+ @calendar.setter\n+ def calendar(self, value: EventKit.EKCalendar):\n+ self.ek_item.setCalendar_(value)\n+\n+ @property\n+ def location(self) -> Optional[str]:\n+ return self.ek_item.location()\n+\n+ @location.setter\n+ def location(self, value: Optional[str]):\n+ self.ek_item.setLocation_(value)\n+\n+ @property\n+ def creation_date(self) -> datetime:\n+ ns_date = self.ek_item.creationDate()\n+ return datetime.fromtimestamp(ns_date.timeIntervalSince1970())\n+\n+ @property\n+ def last_modified_date(self) -> datetime:\n+ ns_date = self.ek_item.lastModifiedDate()\n+ return datetime.fromtimestamp(ns_date.timeIntervalSince1970())\n+\n+ @property\n+ def time_zone(self) -> str:\n+ return str(self.ek_item.timeZone())\n+\n+ @time_zone.setter\n+ def time_zone(self, value: str):\n+ self.ek_item.setTimeZone_(EventKit.NSTimeZone.timeZoneWithName_(value))\n+\n+ @property\n+ def url(self) -> Optional[str]:\n+ url = self.ek_item.URL()\n+ return str(url) if url else None\n+\n+ @url.setter\n+ def url(self, value: Optional[str]):\n+ if value:\n+ self.ek_item.setURL_(NSURL.URLWithString_(value))\n+ else:\n+ self.ek_item.setURL_(None)\n+\n+ @property\n+ def notes(self) -> Optional[str]:\n+ return self.ek_item.notes()\n+\n+ @notes.setter\n+ def notes(self, value: Optional[str]):\n+ self.ek_item.setNotes_(value)\n+\n+ @property\n+ def has_attendees(self) -> bool:\n+ return self.ek_item.hasAttendees()\n+\n+ @property\n+ def attendees(self) -> List[EventKit.EKParticipant]:\n+ return self.ek_item.attendees()\n+\n+ def add_recurrence_rule(self, rule: EventKit.EKRecurrenceRule):\n+ self.ek_item.addRecurrenceRule_(rule)\n+\n+ def remove_recurrence_rule(self, rule: EventKit.EKRecurrenceRule):\n+ self.ek_item.removeRecurrenceRule_(rule)\n+\n+ @property\n+ def recurrence_rules(self) -> List[EventKit.EKRecurrenceRule]:\n+ return self.ek_item.recurrenceRules()\n+\n+ def add_alarm(self, alarm: EventKit.EKAlarm):\n+ self.ek_item.addAlarm_(alarm)\n+\n+ def remove_alarm(self, alarm: EventKit.EKAlarm):\n+ self.ek_item.removeAlarm_(alarm)\n+\n+ @property\n+ def alarms(self) -> List[EventKit.EKAlarm]:\n+ alarms = self.ek_item.alarms()\n+ return alarms if alarms is not None else []\n+\n+ def save(self) -> None:\n+ raise NotImplementedError(\"Subclasses must implement the save method\")\n+\n+ def remove(self) -> None:\n+ raise NotImplementedError(\"Subclasses must implement the remove method\")\n" + }, + { + "date": 1724789531723, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -2,13 +2,15 @@\n import EventKit\n from Foundation import NSDateComponents, NSURL, NSDate\n from datetime import datetime\n from typing import Optional, List\n+import inject\n \n class CalendarItemError(Exception):\n pass\n \n class CalendarItem:\n+ @inject.autoparams()\n def __init__(self, event_store: EventKit.EKEventStore):\n self.event_store = event_store\n self.ek_item = None # This will be set by subclasses\n \n@@ -115,121 +117,10 @@\n raise NotImplementedError(\"Subclasses must implement the save method\")\n \n def remove(self) -> None:\n raise NotImplementedError(\"Subclasses must implement the remove method\")\n-import objc\n-import EventKit\n-from Foundation import NSDateComponents, NSURL, NSDate\n-from datetime import datetime\n-from typing import Optional, List\n \n-class CalendarItemError(Exception):\n- pass\n+# Configure the injector\n+def configure_injector(binder):\n+ binder.bind(EventKit.EKEventStore, EventKit.EKEventStore.alloc().init())\n \n-class CalendarItem:\n- def __init__(self, event_store: EventKit.EKEventStore):\n- self.event_store = event_store\n- self.ek_item = None # This will be set by subclasses\n-\n- @property\n- def calendar_item_identifier(self) -> str:\n- return self.ek_item.calendarItemIdentifier()\n-\n- @property\n- def calendar_item_external_identifier(self) -> str:\n- return self.ek_item.calendarItemExternalIdentifier()\n-\n- @property\n- def title(self) -> str:\n- return self.ek_item.title()\n-\n- @title.setter\n- def title(self, value: str):\n- self.ek_item.setTitle_(value)\n-\n- @property\n- def calendar(self) -> EventKit.EKCalendar:\n- return self.ek_item.calendar()\n-\n- @calendar.setter\n- def calendar(self, value: EventKit.EKCalendar):\n- self.ek_item.setCalendar_(value)\n-\n- @property\n- def location(self) -> Optional[str]:\n- return self.ek_item.location()\n-\n- @location.setter\n- def location(self, value: Optional[str]):\n- self.ek_item.setLocation_(value)\n-\n- @property\n- def creation_date(self) -> datetime:\n- ns_date = self.ek_item.creationDate()\n- return datetime.fromtimestamp(ns_date.timeIntervalSince1970())\n-\n- @property\n- def last_modified_date(self) -> datetime:\n- ns_date = self.ek_item.lastModifiedDate()\n- return datetime.fromtimestamp(ns_date.timeIntervalSince1970())\n-\n- @property\n- def time_zone(self) -> str:\n- return str(self.ek_item.timeZone())\n-\n- @time_zone.setter\n- def time_zone(self, value: str):\n- self.ek_item.setTimeZone_(EventKit.NSTimeZone.timeZoneWithName_(value))\n-\n- @property\n- def url(self) -> Optional[str]:\n- url = self.ek_item.URL()\n- return str(url) if url else None\n-\n- @url.setter\n- def url(self, value: Optional[str]):\n- if value:\n- self.ek_item.setURL_(NSURL.URLWithString_(value))\n- else:\n- self.ek_item.setURL_(None)\n-\n- @property\n- def notes(self) -> Optional[str]:\n- return self.ek_item.notes()\n-\n- @notes.setter\n- def notes(self, value: Optional[str]):\n- self.ek_item.setNotes_(value)\n-\n- @property\n- def has_attendees(self) -> bool:\n- return self.ek_item.hasAttendees()\n-\n- @property\n- def attendees(self) -> List[EventKit.EKParticipant]:\n- return self.ek_item.attendees()\n-\n- def add_recurrence_rule(self, rule: EventKit.EKRecurrenceRule):\n- self.ek_item.addRecurrenceRule_(rule)\n-\n- def remove_recurrence_rule(self, rule: EventKit.EKRecurrenceRule):\n- self.ek_item.removeRecurrenceRule_(rule)\n-\n- @property\n- def recurrence_rules(self) -> List[EventKit.EKRecurrenceRule]:\n- return self.ek_item.recurrenceRules()\n-\n- def add_alarm(self, alarm: EventKit.EKAlarm):\n- self.ek_item.addAlarm_(alarm)\n-\n- def remove_alarm(self, alarm: EventKit.EKAlarm):\n- self.ek_item.removeAlarm_(alarm)\n-\n- @property\n- def alarms(self) -> List[EventKit.EKAlarm]:\n- return self.ek_item.alarms()\n-\n- def save(self) -> None:\n- raise NotImplementedError(\"Subclasses must implement the save method\")\n-\n- def remove(self) -> None:\n- raise NotImplementedError(\"Subclasses must implement the remove method\")\n+inject.configure(configure_injector)\n" + }, + { + "date": 1724789550567, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,122 @@\n+import objc\n+import EventKit\n+from Foundation import NSDateComponents, NSURL, NSDate\n+from datetime import datetime\n+from typing import Optional, List\n+import inject\n+\n+class CalendarItemError(Exception):\n+ pass\n+\n+class CalendarItem:\n+ @inject.autoparams()\n+ def __init__(self, event_store: EventKit.EKEventStore):\n+ self.event_store = event_store\n+ self.ek_item = None # This will be set by subclasses\n+\n+ @property\n+ def calendar_item_identifier(self) -> str:\n+ return self.ek_item.calendarItemIdentifier()\n+\n+ @property\n+ def calendar_item_external_identifier(self) -> str:\n+ return self.ek_item.calendarItemExternalIdentifier()\n+\n+ @property\n+ def title(self) -> str:\n+ return self.ek_item.title()\n+\n+ @title.setter\n+ def title(self, value: str):\n+ self.ek_item.setTitle_(value)\n+\n+ @property\n+ def calendar(self) -> EventKit.EKCalendar:\n+ return self.ek_item.calendar()\n+\n+ @calendar.setter\n+ def calendar(self, value: EventKit.EKCalendar):\n+ self.ek_item.setCalendar_(value)\n+\n+ @property\n+ def location(self) -> Optional[str]:\n+ return self.ek_item.location()\n+\n+ @location.setter\n+ def location(self, value: Optional[str]):\n+ self.ek_item.setLocation_(value)\n+\n+ @property\n+ def creation_date(self) -> datetime:\n+ ns_date = self.ek_item.creationDate()\n+ return datetime.fromtimestamp(ns_date.timeIntervalSince1970())\n+\n+ @property\n+ def last_modified_date(self) -> datetime:\n+ ns_date = self.ek_item.lastModifiedDate()\n+ return datetime.fromtimestamp(ns_date.timeIntervalSince1970())\n+\n+ @property\n+ def time_zone(self) -> str:\n+ return str(self.ek_item.timeZone())\n+\n+ @time_zone.setter\n+ def time_zone(self, value: str):\n+ self.ek_item.setTimeZone_(EventKit.NSTimeZone.timeZoneWithName_(value))\n+\n+ @property\n+ def url(self) -> Optional[str]:\n+ url = self.ek_item.URL()\n+ return str(url) if url else None\n+\n+ @url.setter\n+ def url(self, value: Optional[str]):\n+ if value:\n+ self.ek_item.setURL_(NSURL.URLWithString_(value))\n+ else:\n+ self.ek_item.setURL_(None)\n+\n+ @property\n+ def notes(self) -> Optional[str]:\n+ return self.ek_item.notes()\n+\n+ @notes.setter\n+ def notes(self, value: Optional[str]):\n+ self.ek_item.setNotes_(value)\n+\n+ @property\n+ def has_attendees(self) -> bool:\n+ return self.ek_item.hasAttendees()\n+\n+ @property\n+ def attendees(self) -> List[EventKit.EKParticipant]:\n+ return self.ek_item.attendees()\n+\n+ def add_recurrence_rule(self, rule: EventKit.EKRecurrenceRule):\n+ self.ek_item.addRecurrenceRule_(rule)\n+\n+ def remove_recurrence_rule(self, rule: EventKit.EKRecurrenceRule):\n+ self.ek_item.removeRecurrenceRule_(rule)\n+\n+ @property\n+ def recurrence_rules(self) -> List[EventKit.EKRecurrenceRule]:\n+ return self.ek_item.recurrenceRules()\n+\n+ def add_alarm(self, alarm: EventKit.EKAlarm):\n+ self.ek_item.addAlarm_(alarm)\n+\n+ def remove_alarm(self, alarm: EventKit.EKAlarm):\n+ self.ek_item.removeAlarm_(alarm)\n+\n+ @property\n+ def alarms(self) -> List[EventKit.EKAlarm]:\n+ alarms = self.ek_item.alarms()\n+ return alarms if alarms is not None else []\n+\n+ def save(self) -> None:\n+ raise NotImplementedError(\"Subclasses must implement the save method\")\n+\n+ def remove(self) -> None:\n+ raise NotImplementedError(\"Subclasses must implement the remove method\")\n+\n+\n" + } + ], + "date": 1724787414924, + "name": "Commit-0", + "content": "import objc\nimport EventKit\nfrom Foundation import NSDateComponents, NSURL\nfrom datetime import datetime\nfrom typing import Optional, List\n\nclass CalendarItemError(Exception):\n pass\n\nclass CalendarItem:\n def __init__(self, event_store: EventKit.EKEventStore):\n self.event_store = event_store\n self.ek_item = None # This will be set by subclasses\n\n @property\n def calendar_item_identifier(self) -> str:\n return self.ek_item.calendarItemIdentifier()\n\n @property\n def calendar_item_external_identifier(self) -> str:\n return self.ek_item.calendarItemExternalIdentifier()\n\n @property\n def title(self) -> str:\n return self.ek_item.title()\n\n @title.setter\n def title(self, value: str):\n self.ek_item.setTitle_(value)\n\n @property\n def calendar(self) -> EventKit.EKCalendar:\n return self.ek_item.calendar()\n\n @calendar.setter\n def calendar(self, value: EventKit.EKCalendar):\n self.ek_item.setCalendar_(value)\n\n @property\n def location(self) -> Optional[str]:\n return self.ek_item.location()\n\n @location.setter\n def location(self, value: Optional[str]):\n self.ek_item.setLocation_(value)\n\n @property\n def creation_date(self) -> datetime:\n return self.ek_item.creationDate().dateValue()\n\n @property\n def last_modified_date(self) -> datetime:\n return self.ek_item.lastModifiedDate().dateValue()\n\n @property\n def time_zone(self) -> str:\n return str(self.ek_item.timeZone())\n\n @time_zone.setter\n def time_zone(self, value: str):\n self.ek_item.setTimeZone_(EventKit.NSTimeZone.timeZoneWithName_(value))\n\n @property\n def url(self) -> Optional[str]:\n url = self.ek_item.URL()\n return str(url) if url else None\n\n @url.setter\n def url(self, value: Optional[str]):\n if value:\n self.ek_item.setURL_(NSURL.URLWithString_(value))\n else:\n self.ek_item.setURL_(None)\n\n @property\n def notes(self) -> Optional[str]:\n return self.ek_item.notes()\n\n @notes.setter\n def notes(self, value: Optional[str]):\n self.ek_item.setNotes_(value)\n\n @property\n def has_attendees(self) -> bool:\n return self.ek_item.hasAttendees()\n\n @property\n def attendees(self) -> List[EventKit.EKParticipant]:\n return self.ek_item.attendees()\n\n def add_recurrence_rule(self, rule: EventKit.EKRecurrenceRule):\n self.ek_item.addRecurrenceRule_(rule)\n\n def remove_recurrence_rule(self, rule: EventKit.EKRecurrenceRule):\n self.ek_item.removeRecurrenceRule_(rule)\n\n @property\n def recurrence_rules(self) -> List[EventKit.EKRecurrenceRule]:\n return self.ek_item.recurrenceRules()\n\n def add_alarm(self, alarm: EventKit.EKAlarm):\n self.ek_item.addAlarm_(alarm)\n\n def remove_alarm(self, alarm: EventKit.EKAlarm):\n self.ek_item.removeAlarm_(alarm)\n\n @property\n def alarms(self) -> List[EventKit.EKAlarm]:\n return self.ek_item.alarms()\n\n def save(self) -> None:\n raise NotImplementedError(\"Subclasses must implement the save method\")\n\n def remove(self) -> None:\n raise NotImplementedError(\"Subclasses must implement the remove method\")\n" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/experiments/cal_apps/eventkit_mocks.py.json b/.lh/src/dspygen/experiments/cal_apps/eventkit_mocks.py.json new file mode 100644 index 0000000..6a16117 --- /dev/null +++ b/.lh/src/dspygen/experiments/cal_apps/eventkit_mocks.py.json @@ -0,0 +1,66 @@ +{ + "sourceFile": "src/dspygen/experiments/cal_apps/eventkit_mocks.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 12, + "patches": [ + { + "date": 1724788294117, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724788343171, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,141 @@\n+from datetime import datetime, timedelta\n+from typing import List, Optional\n+from unittest.mock import MagicMock\n+\n+class MockNSDate:\n+ @classmethod\n+ def date(cls):\n+ return cls()\n+\n+ def timeIntervalSince1970(self):\n+ return datetime.now().timestamp()\n+\n+class MockNSDateComponents:\n+ def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n+ self._year = year\n+ self._month = month\n+ self._day = day\n+ self._hour = hour\n+ self._minute = minute\n+\n+ def year(self): return self._year\n+ def month(self): return self._month\n+ def day(self): return self._day\n+ def hour(self): return self._hour\n+ def minute(self): return self._minute\n+\n+ def setYear_(self, value): self._year = value\n+ def setMonth_(self, value): self._month = value\n+ def setDay_(self, value): self._day = value\n+ def setHour_(self, value): self._hour = value\n+ def setMinute_(self, value): self._minute = value\n+\n+class MockEKAlarm:\n+ @classmethod\n+ def alarmWithRelativeOffset_(cls, offset):\n+ alarm = cls()\n+ alarm.relativeOffset = offset\n+ return alarm\n+\n+class MockEKRecurrenceRule:\n+ def __init__(self, frequency, interval, end):\n+ self.frequency = frequency\n+ self.interval = interval\n+ self.recurrenceEnd = end\n+\n+class MockEKCalendar:\n+ def __init__(self, title):\n+ self._title = title\n+\n+ def title(self):\n+ return self._title\n+\n+class MockEKReminder:\n+ def __init__(self, event_store):\n+ self.title = \"\"\n+ self.calendar = None\n+ self.location = \"\"\n+ self.notes = \"\"\n+ self.url = None\n+ self.alarms = []\n+ self.recurrenceRules = []\n+ self.completed = False\n+ self.priority = 0\n+ self.dueDateComponents = None\n+ self.creationDate = MockNSDate()\n+ self.lastModifiedDate = MockNSDate()\n+ self._identifier = f\"reminder-{id(self)}\"\n+\n+ def setTitle_(self, title):\n+ self.title = title\n+\n+ def setCalendar_(self, calendar):\n+ self.calendar = calendar\n+\n+ def setLocation_(self, location):\n+ self.location = location\n+\n+ def setNotes_(self, notes):\n+ self.notes = notes\n+\n+ def setURL_(self, url):\n+ self.url = url\n+\n+ def addAlarm_(self, alarm):\n+ self.alarms.append(alarm)\n+\n+ def removeAlarm_(self, alarm):\n+ self.alarms.remove(alarm)\n+\n+ def addRecurrenceRule_(self, rule):\n+ self.recurrenceRules = [rule] # Only one rule is supported\n+\n+ def removeRecurrenceRule_(self, rule):\n+ self.recurrenceRules = []\n+\n+ def setCompleted_(self, completed):\n+ self.completed = completed\n+\n+ def setPriority_(self, priority):\n+ self.priority = priority\n+\n+ def setDueDateComponents_(self, components):\n+ self.dueDateComponents = components\n+\n+ def calendarItemIdentifier(self):\n+ return self._identifier\n+\n+ def calendarItemExternalIdentifier(self):\n+ return self._identifier\n+\n+class MockEKEventStore:\n+ def __init__(self):\n+ self.reminders = {}\n+ self.default_calendar = MockEKCalendar(\"Default\")\n+\n+ def saveReminder_commit_error_(self, reminder, commit, error):\n+ self.reminders[reminder.calendarItemIdentifier()] = reminder\n+ return True, None\n+\n+ def removeReminder_commit_error_(self, reminder, commit, error):\n+ del self.reminders[reminder.calendarItemIdentifier()]\n+ return True, None\n+\n+ def calendarItemWithIdentifier_(self, identifier):\n+ return self.reminders.get(identifier)\n+\n+ def defaultCalendarForNewReminders(self):\n+ return self.default_calendar\n+\n+ def requestAccessToEntityType_completion_(self, entity_type, completion):\n+ completion(True, None)\n+\n+class MockEventKit:\n+ EKEventStore = MockEKEventStore\n+ EKReminder = MockEKReminder\n+ EKAlarm = MockEKAlarm\n+ EKRecurrenceRule = MockEKRecurrenceRule\n+ NSDate = MockNSDate\n+ EKEntityTypeReminder = 1\n+ EKRecurrenceFrequencyDaily = 0\n+\n" + }, + { + "date": 1724788349924, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -138,4 +138,7 @@\n NSDate = MockNSDate\n EKEntityTypeReminder = 1\n EKRecurrenceFrequencyDaily = 0\n \n+# Replace the real EventKit with our mock\n+import sys\n+sys.modules['EventKit'] = MockEventKit()\n\\ No newline at end of file\n" + }, + { + "date": 1724788409718, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,140 @@\n+from datetime import datetime, timedelta\n+from typing import List, Optional\n+from unittest.mock import MagicMock\n+\n+class MockNSDate:\n+ @classmethod\n+ def date(cls):\n+ return cls()\n+\n+ def timeIntervalSince1970(self):\n+ return datetime.now().timestamp()\n+\n+class MockNSDateComponents:\n+ def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n+ self._year = year\n+ self._month = month\n+ self._day = day\n+ self._hour = hour\n+ self._minute = minute\n+\n+ def year(self): return self._year\n+ def month(self): return self._month\n+ def day(self): return self._day\n+ def hour(self): return self._hour\n+ def minute(self): return self._minute\n+\n+ def setYear_(self, value): self._year = value\n+ def setMonth_(self, value): self._month = value\n+ def setDay_(self, value): self._day = value\n+ def setHour_(self, value): self._hour = value\n+ def setMinute_(self, value): self._minute = value\n+\n+class MockEKAlarm:\n+ @classmethod\n+ def alarmWithRelativeOffset_(cls, offset):\n+ alarm = cls()\n+ alarm.relativeOffset = offset\n+ return alarm\n+\n+class MockEKRecurrenceRule:\n+ def __init__(self, frequency, interval, end):\n+ self.frequency = frequency\n+ self.interval = interval\n+ self.recurrenceEnd = end\n+\n+class MockEKCalendar:\n+ def __init__(self, title):\n+ self._title = title\n+\n+ def title(self):\n+ return self._title\n+\n+class MockEKReminder:\n+ def __init__(self, event_store):\n+ self.title = \"\"\n+ self.calendar = None\n+ self.location = \"\"\n+ self.notes = \"\"\n+ self.url = None\n+ self.alarms = []\n+ self.recurrenceRules = []\n+ self.completed = False\n+ self.priority = 0\n+ self.dueDateComponents = None\n+ self.creationDate = MockNSDate()\n+ self.lastModifiedDate = MockNSDate()\n+ self._identifier = f\"reminder-{id(self)}\"\n+\n+ def setTitle_(self, title):\n+ self.title = title\n+\n+ def setCalendar_(self, calendar):\n+ self.calendar = calendar\n+\n+ def setLocation_(self, location):\n+ self.location = location\n+\n+ def setNotes_(self, notes):\n+ self.notes = notes\n+\n+ def setURL_(self, url):\n+ self.url = url\n+\n+ def addAlarm_(self, alarm):\n+ self.alarms.append(alarm)\n+\n+ def removeAlarm_(self, alarm):\n+ self.alarms.remove(alarm)\n+\n+ def addRecurrenceRule_(self, rule):\n+ self.recurrenceRules = [rule] # Only one rule is supported\n+\n+ def removeRecurrenceRule_(self, rule):\n+ self.recurrenceRules = []\n+\n+ def setCompleted_(self, completed):\n+ self.completed = completed\n+\n+ def setPriority_(self, priority):\n+ self.priority = priority\n+\n+ def setDueDateComponents_(self, components):\n+ self.dueDateComponents = components\n+\n+ def calendarItemIdentifier(self):\n+ return self._identifier\n+\n+ def calendarItemExternalIdentifier(self):\n+ return self._identifier\n+\n+class MockEKEventStore:\n+ def __init__(self):\n+ self.reminders = {}\n+ self.default_calendar = MockEKCalendar(\"Default\")\n+\n+ def saveReminder_commit_error_(self, reminder, commit, error):\n+ self.reminders[reminder.calendarItemIdentifier()] = reminder\n+ return True, None\n+\n+ def removeReminder_commit_error_(self, reminder, commit, error):\n+ del self.reminders[reminder.calendarItemIdentifier()]\n+ return True, None\n+\n+ def calendarItemWithIdentifier_(self, identifier):\n+ return self.reminders.get(identifier)\n+\n+ def defaultCalendarForNewReminders(self):\n+ return self.default_calendar\n+\n+ def requestAccessToEntityType_completion_(self, entity_type, completion):\n+ completion(True, None)\n+\n+class MockEventKit:\n+ EKEventStore = MockEKEventStore\n+ EKReminder = MockEKReminder\n+ EKAlarm = MockEKAlarm\n+ EKRecurrenceRule = MockEKRecurrenceRule\n+ NSDate = MockNSDate\n+ EKEntityTypeReminder = 1\n+ EKRecurrenceFrequencyDaily = 0\n\\ No newline at end of file\n" + }, + { + "date": 1724788611051, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -136,293 +136,5 @@\n EKAlarm = MockEKAlarm\n EKRecurrenceRule = MockEKRecurrenceRule\n NSDate = MockNSDate\n EKEntityTypeReminder = 1\n- EKRecurrenceFrequencyDaily = 0\n-from datetime import datetime, timedelta\n-from typing import List, Optional\n-from unittest.mock import MagicMock\n-\n-class MockNSDate:\n- @classmethod\n- def date(cls):\n- return cls()\n-\n- def timeIntervalSince1970(self):\n- return datetime.now().timestamp()\n-\n-class MockNSDateComponents:\n- def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n- self._year = year\n- self._month = month\n- self._day = day\n- self._hour = hour\n- self._minute = minute\n-\n- def year(self): return self._year\n- def month(self): return self._month\n- def day(self): return self._day\n- def hour(self): return self._hour\n- def minute(self): return self._minute\n-\n- def setYear_(self, value): self._year = value\n- def setMonth_(self, value): self._month = value\n- def setDay_(self, value): self._day = value\n- def setHour_(self, value): self._hour = value\n- def setMinute_(self, value): self._minute = value\n-\n-class MockEKAlarm:\n- @classmethod\n- def alarmWithRelativeOffset_(cls, offset):\n- alarm = cls()\n- alarm.relativeOffset = offset\n- return alarm\n-\n-class MockEKRecurrenceRule:\n- def __init__(self, frequency, interval, end):\n- self.frequency = frequency\n- self.interval = interval\n- self.recurrenceEnd = end\n-\n-class MockEKCalendar:\n- def __init__(self, title):\n- self._title = title\n-\n- def title(self):\n- return self._title\n-\n-class MockEKReminder:\n- def __init__(self, event_store):\n- self.title = \"\"\n- self.calendar = None\n- self.location = \"\"\n- self.notes = \"\"\n- self.url = None\n- self.alarms = []\n- self.recurrenceRules = []\n- self.completed = False\n- self.priority = 0\n- self.dueDateComponents = None\n- self.creationDate = MockNSDate()\n- self.lastModifiedDate = MockNSDate()\n- self._identifier = f\"reminder-{id(self)}\"\n-\n- def setTitle_(self, title):\n- self.title = title\n-\n- def setCalendar_(self, calendar):\n- self.calendar = calendar\n-\n- def setLocation_(self, location):\n- self.location = location\n-\n- def setNotes_(self, notes):\n- self.notes = notes\n-\n- def setURL_(self, url):\n- self.url = url\n-\n- def addAlarm_(self, alarm):\n- self.alarms.append(alarm)\n-\n- def removeAlarm_(self, alarm):\n- self.alarms.remove(alarm)\n-\n- def addRecurrenceRule_(self, rule):\n- self.recurrenceRules = [rule] # Only one rule is supported\n-\n- def removeRecurrenceRule_(self, rule):\n- self.recurrenceRules = []\n-\n- def setCompleted_(self, completed):\n- self.completed = completed\n-\n- def setPriority_(self, priority):\n- self.priority = priority\n-\n- def setDueDateComponents_(self, components):\n- self.dueDateComponents = components\n-\n- def calendarItemIdentifier(self):\n- return self._identifier\n-\n- def calendarItemExternalIdentifier(self):\n- return self._identifier\n-\n-class MockEKEventStore:\n- def __init__(self):\n- self.reminders = {}\n- self.default_calendar = MockEKCalendar(\"Default\")\n-\n- def saveReminder_commit_error_(self, reminder, commit, error):\n- self.reminders[reminder.calendarItemIdentifier()] = reminder\n- return True, None\n-\n- def removeReminder_commit_error_(self, reminder, commit, error):\n- del self.reminders[reminder.calendarItemIdentifier()]\n- return True, None\n-\n- def calendarItemWithIdentifier_(self, identifier):\n- return self.reminders.get(identifier)\n-\n- def defaultCalendarForNewReminders(self):\n- return self.default_calendar\n-\n- def requestAccessToEntityType_completion_(self, entity_type, completion):\n- completion(True, None)\n-\n-class MockEventKit:\n- EKEventStore = MockEKEventStore\n- EKReminder = MockEKReminder\n- EKAlarm = MockEKAlarm\n- EKRecurrenceRule = MockEKRecurrenceRule\n- NSDate = MockNSDate\n- EKEntityTypeReminder = 1\n- EKRecurrenceFrequencyDaily = 0\n-\n-# Replace the real EventKit with our mock\n-import sys\n-sys.modules['EventKit'] = MockEventKit()\n-from datetime import datetime, timedelta\n-from typing import List, Optional\n-from unittest.mock import MagicMock\n-\n-class MockNSDate:\n- @classmethod\n- def date(cls):\n- return cls()\n-\n- def timeIntervalSince1970(self):\n- return datetime.now().timestamp()\n-\n-class MockNSDateComponents:\n- def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n- self._year = year\n- self._month = month\n- self._day = day\n- self._hour = hour\n- self._minute = minute\n-\n- def year(self): return self._year\n- def month(self): return self._month\n- def day(self): return self._day\n- def hour(self): return self._hour\n- def minute(self): return self._minute\n-\n- def setYear_(self, value): self._year = value\n- def setMonth_(self, value): self._month = value\n- def setDay_(self, value): self._day = value\n- def setHour_(self, value): self._hour = value\n- def setMinute_(self, value): self._minute = value\n-\n-class MockEKAlarm:\n- @classmethod\n- def alarmWithRelativeOffset_(cls, offset):\n- alarm = cls()\n- alarm.relativeOffset = offset\n- return alarm\n-\n-class MockEKRecurrenceRule:\n- def __init__(self, frequency, interval, end):\n- self.frequency = frequency\n- self.interval = interval\n- self.recurrenceEnd = end\n-\n-class MockEKCalendar:\n- def __init__(self, title):\n- self._title = title\n-\n- def title(self):\n- return self._title\n-\n-class MockEKReminder:\n- def __init__(self, event_store):\n- self.title = \"\"\n- self.calendar = None\n- self.location = \"\"\n- self.notes = \"\"\n- self.url = None\n- self.alarms = []\n- self.recurrenceRules = []\n- self.completed = False\n- self.priority = 0\n- self.dueDateComponents = None\n- self.creationDate = MockNSDate()\n- self.lastModifiedDate = MockNSDate()\n- self._identifier = f\"reminder-{id(self)}\"\n-\n- def setTitle_(self, title):\n- self.title = title\n-\n- def setCalendar_(self, calendar):\n- self.calendar = calendar\n-\n- def setLocation_(self, location):\n- self.location = location\n-\n- def setNotes_(self, notes):\n- self.notes = notes\n-\n- def setURL_(self, url):\n- self.url = url\n-\n- def addAlarm_(self, alarm):\n- self.alarms.append(alarm)\n-\n- def removeAlarm_(self, alarm):\n- self.alarms.remove(alarm)\n-\n- def addRecurrenceRule_(self, rule):\n- self.recurrenceRules = [rule] # Only one rule is supported\n-\n- def removeRecurrenceRule_(self, rule):\n- self.recurrenceRules = []\n-\n- def setCompleted_(self, completed):\n- self.completed = completed\n-\n- def setPriority_(self, priority):\n- self.priority = priority\n-\n- def setDueDateComponents_(self, components):\n- self.dueDateComponents = components\n-\n- def calendarItemIdentifier(self):\n- return self._identifier\n-\n- def calendarItemExternalIdentifier(self):\n- return self._identifier\n-\n-class MockEKEventStore:\n- def __init__(self):\n- self.reminders = {}\n- self.default_calendar = MockEKCalendar(\"Default\")\n-\n- def saveReminder_commit_error_(self, reminder, commit, error):\n- self.reminders[reminder.calendarItemIdentifier()] = reminder\n- return True, None\n-\n- def removeReminder_commit_error_(self, reminder, commit, error):\n- del self.reminders[reminder.calendarItemIdentifier()]\n- return True, None\n-\n- def calendarItemWithIdentifier_(self, identifier):\n- return self.reminders.get(identifier)\n-\n- def defaultCalendarForNewReminders(self):\n- return self.default_calendar\n-\n- def requestAccessToEntityType_completion_(self, entity_type, completion):\n- completion(True, None)\n-\n-class MockEventKit:\n- EKEventStore = MockEKEventStore\n- EKReminder = MockEKReminder\n- EKAlarm = MockEKAlarm\n- EKRecurrenceRule = MockEKRecurrenceRule\n- NSDate = MockNSDate\n- EKEntityTypeReminder = 1\n- EKRecurrenceFrequencyDaily = 0\n-\n-# Replace the real EventKit with our mock\n-import sys\n-sys.modules['EventKit'] = MockEventKit()\n\\ No newline at end of file\n+ EKRecurrenceFrequencyDaily = 0\n\\ No newline at end of file\n" + }, + { + "date": 1724788618311, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -50,9 +50,14 @@\n def title(self):\n return self._title\n \n class MockEKReminder:\n+ @classmethod\n+ def reminderWithEventStore_(cls, event_store):\n+ return cls(event_store)\n+\n def __init__(self, event_store):\n+ self.event_store = event_store\n self.title = \"\"\n self.calendar = None\n self.location = \"\"\n self.notes = \"\"\n@@ -107,8 +112,14 @@\n \n def calendarItemExternalIdentifier(self):\n return self._identifier\n \n+ def isCompleted(self):\n+ return self.completed\n+\n+ def hasRecurrenceRules(self):\n+ return len(self.recurrenceRules) > 0\n+\n class MockEKEventStore:\n def __init__(self):\n self.reminders = {}\n self.default_calendar = MockEKCalendar(\"Default\")\n" + }, + { + "date": 1724788775587, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -122,8 +122,9 @@\n class MockEKEventStore:\n def __init__(self):\n self.reminders = {}\n self.default_calendar = MockEKCalendar(\"Default\")\n+ self.reminderStore = self # Add this line\n \n def saveReminder_commit_error_(self, reminder, commit, error):\n self.reminders[reminder.calendarItemIdentifier()] = reminder\n return True, None\n" + }, + { + "date": 1724788866173, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,156 @@\n+from datetime import datetime, timedelta\n+from typing import List, Optional\n+from unittest.mock import MagicMock\n+\n+class MockNSDate:\n+ @classmethod\n+ def date(cls):\n+ return cls()\n+\n+ def timeIntervalSince1970(self):\n+ return datetime.now().timestamp()\n+\n+class MockNSDateComponents:\n+ def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n+ self._year = year\n+ self._month = month\n+ self._day = day\n+ self._hour = hour\n+ self._minute = minute\n+\n+ def year(self): return self._year\n+ def month(self): return self._month\n+ def day(self): return self._day\n+ def hour(self): return self._hour\n+ def minute(self): return self._minute\n+\n+ def setYear_(self, value): self._year = value\n+ def setMonth_(self, value): self._month = value\n+ def setDay_(self, value): self._day = value\n+ def setHour_(self, value): self._hour = value\n+ def setMinute_(self, value): self._minute = value\n+\n+class MockEKAlarm:\n+ @classmethod\n+ def alarmWithRelativeOffset_(cls, offset):\n+ alarm = cls()\n+ alarm.relativeOffset = offset\n+ return alarm\n+\n+class MockEKRecurrenceRule:\n+ def __init__(self, frequency, interval, end):\n+ self.frequency = frequency\n+ self.interval = interval\n+ self.recurrenceEnd = end\n+\n+class MockEKCalendar:\n+ def __init__(self, title):\n+ self._title = title\n+\n+ def title(self):\n+ return self._title\n+\n+class MockEKReminder:\n+ @classmethod\n+ def reminderWithEventStore_(cls, event_store):\n+ return cls(event_store.reminderStore) # Use reminderStore here\n+\n+ def __init__(self, reminder_store):\n+ self.reminder_store = reminder_store\n+ self.title = \"\"\n+ self.calendar = None\n+ self.location = \"\"\n+ self.notes = \"\"\n+ self.url = None\n+ self.alarms = []\n+ self.recurrenceRules = []\n+ self.completed = False\n+ self.priority = 0\n+ self.dueDateComponents = None\n+ self.creationDate = MockNSDate()\n+ self.lastModifiedDate = MockNSDate()\n+ self._identifier = f\"reminder-{id(self)}\"\n+\n+ def setTitle_(self, title):\n+ self.title = title\n+\n+ def setCalendar_(self, calendar):\n+ self.calendar = calendar\n+\n+ def setLocation_(self, location):\n+ self.location = location\n+\n+ def setNotes_(self, notes):\n+ self.notes = notes\n+\n+ def setURL_(self, url):\n+ self.url = url\n+\n+ def addAlarm_(self, alarm):\n+ self.alarms.append(alarm)\n+\n+ def removeAlarm_(self, alarm):\n+ self.alarms.remove(alarm)\n+\n+ def addRecurrenceRule_(self, rule):\n+ self.recurrenceRules = [rule] # Only one rule is supported\n+\n+ def removeRecurrenceRule_(self, rule):\n+ self.recurrenceRules = []\n+\n+ def setCompleted_(self, completed):\n+ self.completed = completed\n+\n+ def setPriority_(self, priority):\n+ self.priority = priority\n+\n+ def setDueDateComponents_(self, components):\n+ self.dueDateComponents = components\n+\n+ def calendarItemIdentifier(self):\n+ return self._identifier\n+\n+ def calendarItemExternalIdentifier(self):\n+ return self._identifier\n+\n+ def isCompleted(self):\n+ return self.completed\n+\n+ def hasRecurrenceRules(self):\n+ return len(self.recurrenceRules) > 0\n+\n+class MockEKEventStore:\n+ def __init__(self):\n+ self.reminders = {}\n+ self.default_calendar = MockEKCalendar(\"Default\")\n+ self.reminderStore = self # Add this line\n+\n+ def saveReminder_commit_error_(self, reminder, commit, error):\n+ self.reminders[reminder.calendarItemIdentifier()] = reminder\n+ return True, None\n+\n+ def removeReminder_commit_error_(self, reminder, commit, error):\n+ del self.reminders[reminder.calendarItemIdentifier()]\n+ return True, None\n+\n+ def calendarItemWithIdentifier_(self, identifier):\n+ return self.reminders.get(identifier)\n+\n+ def defaultCalendarForNewReminders(self):\n+ return self.default_calendar\n+\n+ def requestAccessToEntityType_completion_(self, entity_type, completion):\n+ completion(True, None)\n+\n+class MockEventKit:\n+ EKEventStore = MockEKEventStore\n+ EKReminder = MockEKReminder\n+ EKAlarm = MockEKAlarm\n+ EKRecurrenceRule = MockEKRecurrenceRule\n+ NSDate = MockNSDate\n+ EKEntityTypeReminder = 1\n+ EKRecurrenceFrequencyDaily = 0\n+\n+ @classmethod\n+ def reminderWithEventStore_(cls, event_store):\n+ return MockEKReminder(event_store.reminderStore)\n\\ No newline at end of file\n" + }, + { + "date": 1724788871417, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -152,157 +152,5 @@\n EKRecurrenceFrequencyDaily = 0\n \n @classmethod\n def reminderWithEventStore_(cls, event_store):\n- return MockEKReminder(event_store.reminderStore)\n-from datetime import datetime, timedelta\n-from typing import List, Optional\n-from unittest.mock import MagicMock\n-\n-class MockNSDate:\n- @classmethod\n- def date(cls):\n- return cls()\n-\n- def timeIntervalSince1970(self):\n- return datetime.now().timestamp()\n-\n-class MockNSDateComponents:\n- def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n- self._year = year\n- self._month = month\n- self._day = day\n- self._hour = hour\n- self._minute = minute\n-\n- def year(self): return self._year\n- def month(self): return self._month\n- def day(self): return self._day\n- def hour(self): return self._hour\n- def minute(self): return self._minute\n-\n- def setYear_(self, value): self._year = value\n- def setMonth_(self, value): self._month = value\n- def setDay_(self, value): self._day = value\n- def setHour_(self, value): self._hour = value\n- def setMinute_(self, value): self._minute = value\n-\n-class MockEKAlarm:\n- @classmethod\n- def alarmWithRelativeOffset_(cls, offset):\n- alarm = cls()\n- alarm.relativeOffset = offset\n- return alarm\n-\n-class MockEKRecurrenceRule:\n- def __init__(self, frequency, interval, end):\n- self.frequency = frequency\n- self.interval = interval\n- self.recurrenceEnd = end\n-\n-class MockEKCalendar:\n- def __init__(self, title):\n- self._title = title\n-\n- def title(self):\n- return self._title\n-\n-class MockEKReminder:\n- @classmethod\n- def reminderWithEventStore_(cls, event_store):\n- return cls(event_store)\n-\n- def __init__(self, event_store):\n- self.event_store = event_store\n- self.title = \"\"\n- self.calendar = None\n- self.location = \"\"\n- self.notes = \"\"\n- self.url = None\n- self.alarms = []\n- self.recurrenceRules = []\n- self.completed = False\n- self.priority = 0\n- self.dueDateComponents = None\n- self.creationDate = MockNSDate()\n- self.lastModifiedDate = MockNSDate()\n- self._identifier = f\"reminder-{id(self)}\"\n-\n- def setTitle_(self, title):\n- self.title = title\n-\n- def setCalendar_(self, calendar):\n- self.calendar = calendar\n-\n- def setLocation_(self, location):\n- self.location = location\n-\n- def setNotes_(self, notes):\n- self.notes = notes\n-\n- def setURL_(self, url):\n- self.url = url\n-\n- def addAlarm_(self, alarm):\n- self.alarms.append(alarm)\n-\n- def removeAlarm_(self, alarm):\n- self.alarms.remove(alarm)\n-\n- def addRecurrenceRule_(self, rule):\n- self.recurrenceRules = [rule] # Only one rule is supported\n-\n- def removeRecurrenceRule_(self, rule):\n- self.recurrenceRules = []\n-\n- def setCompleted_(self, completed):\n- self.completed = completed\n-\n- def setPriority_(self, priority):\n- self.priority = priority\n-\n- def setDueDateComponents_(self, components):\n- self.dueDateComponents = components\n-\n- def calendarItemIdentifier(self):\n- return self._identifier\n-\n- def calendarItemExternalIdentifier(self):\n- return self._identifier\n-\n- def isCompleted(self):\n- return self.completed\n-\n- def hasRecurrenceRules(self):\n- return len(self.recurrenceRules) > 0\n-\n-class MockEKEventStore:\n- def __init__(self):\n- self.reminders = {}\n- self.default_calendar = MockEKCalendar(\"Default\")\n- self.reminderStore = self # Add this line\n-\n- def saveReminder_commit_error_(self, reminder, commit, error):\n- self.reminders[reminder.calendarItemIdentifier()] = reminder\n- return True, None\n-\n- def removeReminder_commit_error_(self, reminder, commit, error):\n- del self.reminders[reminder.calendarItemIdentifier()]\n- return True, None\n-\n- def calendarItemWithIdentifier_(self, identifier):\n- return self.reminders.get(identifier)\n-\n- def defaultCalendarForNewReminders(self):\n- return self.default_calendar\n-\n- def requestAccessToEntityType_completion_(self, entity_type, completion):\n- completion(True, None)\n-\n-class MockEventKit:\n- EKEventStore = MockEKEventStore\n- EKReminder = MockEKReminder\n- EKAlarm = MockEKAlarm\n- EKRecurrenceRule = MockEKRecurrenceRule\n- NSDate = MockNSDate\n- EKEntityTypeReminder = 1\n- EKRecurrenceFrequencyDaily = 0\n\\ No newline at end of file\n+ return MockEKReminder(event_store.reminderStore)\n\\ No newline at end of file\n" + }, + { + "date": 1724788960100, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,175 @@\n+from datetime import datetime, timedelta\n+from typing import List, Optional\n+from unittest.mock import MagicMock\n+\n+class MockNSDate:\n+ @classmethod\n+ def date(cls):\n+ return cls()\n+\n+ def timeIntervalSince1970(self):\n+ return datetime.now().timestamp()\n+\n+class MockNSDateComponents:\n+ def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n+ self._year = year\n+ self._month = month\n+ self._day = day\n+ self._hour = hour\n+ self._minute = minute\n+\n+ def year(self): return self._year\n+ def month(self): return self._month\n+ def day(self): return self._day\n+ def hour(self): return self._hour\n+ def minute(self): return self._minute\n+\n+ def setYear_(self, value): self._year = value\n+ def setMonth_(self, value): self._month = value\n+ def setDay_(self, value): self._day = value\n+ def setHour_(self, value): self._hour = value\n+ def setMinute_(self, value): self._minute = value\n+\n+class MockEKAlarm:\n+ @classmethod\n+ def alarmWithRelativeOffset_(cls, offset):\n+ alarm = cls()\n+ alarm.relativeOffset = offset\n+ return alarm\n+\n+class MockEKRecurrenceRule:\n+ def __init__(self, frequency, interval, end):\n+ self.frequency = frequency\n+ self.interval = interval\n+ self.recurrenceEnd = end\n+\n+class MockEKCalendar:\n+ def __init__(self, title):\n+ self._title = title\n+\n+ def title(self):\n+ return self._title\n+\n+class MockEKReminder:\n+ @classmethod\n+ def reminderWithEventStore_(cls, event_store):\n+ return cls(event_store.reminderStore) # Use reminderStore here\n+\n+ def __init__(self, reminder_store):\n+ self.reminder_store = reminder_store\n+ self.title = \"\"\n+ self.calendar = None\n+ self.location = \"\"\n+ self.notes = \"\"\n+ self.url = None\n+ self.alarms = []\n+ self.recurrenceRules = []\n+ self.completed = False\n+ self.priority = 0\n+ self.dueDateComponents = None\n+ self.creationDate = MockNSDate()\n+ self.lastModifiedDate = MockNSDate()\n+ self._identifier = f\"reminder-{id(self)}\"\n+ self.timeZone = \"UTC\"\n+\n+ def setTitle_(self, title):\n+ self.title = title\n+\n+ def setCalendar_(self, calendar):\n+ self.calendar = calendar\n+\n+ def setLocation_(self, location):\n+ self.location = location\n+\n+ def setNotes_(self, notes):\n+ self.notes = notes\n+\n+ def setURL_(self, url):\n+ self.url = url\n+\n+ def addAlarm_(self, alarm):\n+ self.alarms.append(alarm)\n+\n+ def removeAlarm_(self, alarm):\n+ self.alarms.remove(alarm)\n+\n+ def addRecurrenceRule_(self, rule):\n+ self.recurrenceRules = [rule] # Only one rule is supported\n+\n+ def removeRecurrenceRule_(self, rule):\n+ self.recurrenceRules = []\n+\n+ def setCompleted_(self, completed):\n+ self.completed = completed\n+\n+ def setPriority_(self, priority):\n+ self.priority = priority\n+\n+ def setDueDateComponents_(self, components):\n+ self.dueDateComponents = components\n+\n+ def calendarItemIdentifier(self):\n+ return self._identifier\n+\n+ def calendarItemExternalIdentifier(self):\n+ return self._identifier\n+\n+ def isCompleted(self):\n+ return self.completed\n+\n+ def hasRecurrenceRules(self):\n+ return len(self.recurrenceRules) > 0\n+\n+ def timeZone(self):\n+ return self.timeZone\n+\n+ def setTimeZone_(self, value):\n+ self.timeZone = value\n+\n+ def URL(self):\n+ return self.url\n+\n+ def priority(self):\n+ return self.priority\n+\n+ def recurrenceRules(self):\n+ return self.recurrenceRules\n+\n+ def alarms(self):\n+ return self.alarms\n+\n+class MockEKEventStore:\n+ def __init__(self):\n+ self.reminders = {}\n+ self.default_calendar = MockEKCalendar(\"Default\")\n+ self.reminderStore = self # Add this line\n+\n+ def saveReminder_commit_error_(self, reminder, commit, error):\n+ self.reminders[reminder.calendarItemIdentifier()] = reminder\n+ return True, None\n+\n+ def removeReminder_commit_error_(self, reminder, commit, error):\n+ del self.reminders[reminder.calendarItemIdentifier()]\n+ return True, None\n+\n+ def calendarItemWithIdentifier_(self, identifier):\n+ return self.reminders.get(identifier)\n+\n+ def defaultCalendarForNewReminders(self):\n+ return self.default_calendar\n+\n+ def requestAccessToEntityType_completion_(self, entity_type, completion):\n+ completion(True, None)\n+\n+class MockEventKit:\n+ EKEventStore = MockEKEventStore\n+ EKReminder = MockEKReminder\n+ EKAlarm = MockEKAlarm\n+ EKRecurrenceRule = MockEKRecurrenceRule\n+ NSDate = MockNSDate\n+ EKEntityTypeReminder = 1\n+ EKRecurrenceFrequencyDaily = 0\n+\n+ @classmethod\n+ def reminderWithEventStore_(cls, event_store):\n+ return MockEKReminder(event_store.reminderStore)\n\\ No newline at end of file\n" + }, + { + "date": 1724788978260, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -69,9 +69,8 @@\n self.dueDateComponents = None\n self.creationDate = MockNSDate()\n self.lastModifiedDate = MockNSDate()\n self._identifier = f\"reminder-{id(self)}\"\n- self.timeZone = \"UTC\"\n \n def setTitle_(self, title):\n self.title = title\n \n@@ -119,26 +118,8 @@\n \n def hasRecurrenceRules(self):\n return len(self.recurrenceRules) > 0\n \n- def timeZone(self):\n- return self.timeZone\n-\n- def setTimeZone_(self, value):\n- self.timeZone = value\n-\n- def URL(self):\n- return self.url\n-\n- def priority(self):\n- return self.priority\n-\n- def recurrenceRules(self):\n- return self.recurrenceRules\n-\n- def alarms(self):\n- return self.alarms\n-\n class MockEKEventStore:\n def __init__(self):\n self.reminders = {}\n self.default_calendar = MockEKCalendar(\"Default\")\n@@ -167,9 +148,5 @@\n EKAlarm = MockEKAlarm\n EKRecurrenceRule = MockEKRecurrenceRule\n NSDate = MockNSDate\n EKEntityTypeReminder = 1\n- EKRecurrenceFrequencyDaily = 0\n-\n- @classmethod\n- def reminderWithEventStore_(cls, event_store):\n- return MockEKReminder(event_store.reminderStore)\n\\ No newline at end of file\n+ EKRecurrenceFrequencyDaily = 0\n\\ No newline at end of file\n" + }, + { + "date": 1724789177387, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,165 @@\n+from datetime import datetime, timedelta\n+from typing import List, Optional\n+from unittest.mock import MagicMock, patch\n+\n+class MockNSDate:\n+ @classmethod\n+ def date(cls):\n+ return cls()\n+\n+ def timeIntervalSince1970(self):\n+ return datetime.now().timestamp()\n+\n+class MockNSDateComponents:\n+ def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n+ self._year = year\n+ self._month = month\n+ self._day = day\n+ self._hour = hour\n+ self._minute = minute\n+\n+ def year(self): return self._year\n+ def month(self): return self._month\n+ def day(self): return self._day\n+ def hour(self): return self._hour\n+ def minute(self): return self._minute\n+\n+ def setYear_(self, value): self._year = value\n+ def setMonth_(self, value): self._month = value\n+ def setDay_(self, value): self._day = value\n+ def setHour_(self, value): self._hour = value\n+ def setMinute_(self, value): self._minute = value\n+\n+class MockEKAlarm:\n+ @classmethod\n+ def alarmWithRelativeOffset_(cls, offset):\n+ alarm = cls()\n+ alarm.relativeOffset = offset\n+ return alarm\n+\n+class MockEKRecurrenceRule:\n+ def __init__(self, frequency, interval, end):\n+ self.frequency = frequency\n+ self.interval = interval\n+ self.recurrenceEnd = end\n+\n+class MockEKCalendar:\n+ def __init__(self, title):\n+ self._title = title\n+\n+ def title(self):\n+ return self._title\n+\n+class MockEKReminder:\n+ @classmethod\n+ def reminderWithEventStore_(cls, event_store):\n+ return cls(event_store.reminderStore) # Use reminderStore here\n+\n+ def __init__(self, reminder_store):\n+ self.reminder_store = reminder_store\n+ self.title = \"\"\n+ self.calendar = None\n+ self.location = \"\"\n+ self.notes = \"\"\n+ self.url = None\n+ self.alarms = []\n+ self.recurrenceRules = []\n+ self.completed = False\n+ self.priority = 0\n+ self.dueDateComponents = None\n+ self.creationDate = MockNSDate()\n+ self.lastModifiedDate = MockNSDate()\n+ self._identifier = f\"reminder-{id(self)}\"\n+\n+ def setTitle_(self, title):\n+ self.title = title\n+\n+ def setCalendar_(self, calendar):\n+ self.calendar = calendar\n+\n+ def setLocation_(self, location):\n+ self.location = location\n+\n+ def setNotes_(self, notes):\n+ self.notes = notes\n+\n+ def setURL_(self, url):\n+ self.url = url\n+\n+ def addAlarm_(self, alarm):\n+ self.alarms.append(alarm)\n+\n+ def removeAlarm_(self, alarm):\n+ self.alarms.remove(alarm)\n+\n+ def addRecurrenceRule_(self, rule):\n+ self.recurrenceRules = [rule] # Only one rule is supported\n+\n+ def removeRecurrenceRule_(self, rule):\n+ self.recurrenceRules = []\n+\n+ def setCompleted_(self, completed):\n+ self.completed = completed\n+\n+ def setPriority_(self, priority):\n+ self.priority = priority\n+\n+ def setDueDateComponents_(self, components):\n+ self.dueDateComponents = components\n+\n+ def calendarItemIdentifier(self):\n+ return self._identifier\n+\n+ def calendarItemExternalIdentifier(self):\n+ return self._identifier\n+\n+ def isCompleted(self):\n+ return self.completed\n+\n+ def hasRecurrenceRules(self):\n+ return len(self.recurrenceRules) > 0\n+\n+class MockEKEventStore:\n+ def __init__(self):\n+ self.reminders = {}\n+ self.default_calendar = MockEKCalendar(\"Default\")\n+ self.reminderStore = self # Add this line\n+\n+ def saveReminder_commit_error_(self, reminder, commit, error):\n+ self.reminders[reminder.calendarItemIdentifier()] = reminder\n+ return True, None\n+\n+ def removeReminder_commit_error_(self, reminder, commit, error):\n+ del self.reminders[reminder.calendarItemIdentifier()]\n+ return True, None\n+\n+ def calendarItemWithIdentifier_(self, identifier):\n+ return self.reminders.get(identifier)\n+\n+ def defaultCalendarForNewReminders(self):\n+ return self.default_calendar\n+\n+ def requestAccessToEntityType_completion_(self, entity_type, completion):\n+ completion(True, None)\n+\n+class MockEventKit:\n+ EKEventStore = MockEKEventStore\n+ EKReminder = MockEKReminder\n+ EKAlarm = MockEKAlarm\n+ EKRecurrenceRule = MockEKRecurrenceRule\n+ NSDate = MockNSDate\n+ EKEntityTypeReminder = 1\n+ EKRecurrenceFrequencyDaily = 0\n+\n+ @classmethod\n+ def patch(cls):\n+ return patch.multiple(\n+ 'EventKit',\n+ EKEventStore=cls.EKEventStore,\n+ EKReminder=cls.EKReminder,\n+ EKAlarm=cls.EKAlarm,\n+ EKRecurrenceRule=cls.EKRecurrenceRule,\n+ NSDate=cls.NSDate,\n+ EKEntityTypeReminder=cls.EKEntityTypeReminder,\n+ EKRecurrenceFrequencyDaily=cls.EKRecurrenceFrequencyDaily\n+ )\n" + }, + { + "date": 1724789481304, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,165 @@\n+from datetime import datetime, timedelta\n+from typing import List, Optional\n+from unittest.mock import MagicMock\n+\n+class MockNSDate:\n+ @classmethod\n+ def date(cls):\n+ return cls()\n+\n+ def timeIntervalSince1970(self):\n+ return datetime.now().timestamp()\n+\n+class MockNSDateComponents:\n+ def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n+ self._year = year\n+ self._month = month\n+ self._day = day\n+ self._hour = hour\n+ self._minute = minute\n+\n+ def year(self): return self._year\n+ def month(self): return self._month\n+ def day(self): return self._day\n+ def hour(self): return self._hour\n+ def minute(self): return self._minute\n+\n+ def setYear_(self, value): self._year = value\n+ def setMonth_(self, value): self._month = value\n+ def setDay_(self, value): self._day = value\n+ def setHour_(self, value): self._hour = value\n+ def setMinute_(self, value): self._minute = value\n+\n+class MockEKAlarm:\n+ @classmethod\n+ def alarmWithRelativeOffset_(cls, offset):\n+ alarm = cls()\n+ alarm.relativeOffset = offset\n+ return alarm\n+\n+class MockEKRecurrenceRule:\n+ def __init__(self, frequency, interval, end):\n+ self.frequency = frequency\n+ self.interval = interval\n+ self.recurrenceEnd = end\n+\n+class MockEKCalendar:\n+ def __init__(self, title):\n+ self._title = title\n+\n+ def title(self):\n+ return self._title\n+\n+class MockEKReminder:\n+ @classmethod\n+ def reminderWithEventStore_(cls, event_store):\n+ return cls(event_store.reminderStore) # Use reminderStore here\n+\n+ def __init__(self, reminder_store):\n+ self.reminder_store = reminder_store\n+ self.title = \"\"\n+ self.calendar = None\n+ self.location = \"\"\n+ self.notes = \"\"\n+ self.url = None\n+ self.alarms = []\n+ self.recurrenceRules = []\n+ self.completed = False\n+ self.priority = 0\n+ self.dueDateComponents = None\n+ self.creationDate = MockNSDate()\n+ self.lastModifiedDate = MockNSDate()\n+ self._identifier = f\"reminder-{id(self)}\"\n+\n+ def setTitle_(self, title):\n+ self.title = title\n+\n+ def setCalendar_(self, calendar):\n+ self.calendar = calendar\n+\n+ def setLocation_(self, location):\n+ self.location = location\n+\n+ def setNotes_(self, notes):\n+ self.notes = notes\n+\n+ def setURL_(self, url):\n+ self.url = url\n+\n+ def addAlarm_(self, alarm):\n+ self.alarms.append(alarm)\n+\n+ def removeAlarm_(self, alarm):\n+ self.alarms.remove(alarm)\n+\n+ def addRecurrenceRule_(self, rule):\n+ self.recurrenceRules = [rule] # Only one rule is supported\n+\n+ def removeRecurrenceRule_(self, rule):\n+ self.recurrenceRules = []\n+\n+ def setCompleted_(self, completed):\n+ self.completed = completed\n+\n+ def setPriority_(self, priority):\n+ self.priority = priority\n+\n+ def setDueDateComponents_(self, components):\n+ self.dueDateComponents = components\n+\n+ def calendarItemIdentifier(self):\n+ return self._identifier\n+\n+ def calendarItemExternalIdentifier(self):\n+ return self._identifier\n+\n+ def isCompleted(self):\n+ return self.completed\n+\n+ def hasRecurrenceRules(self):\n+ return len(self.recurrenceRules) > 0\n+\n+class MockEKEventStore:\n+ def __init__(self):\n+ self.reminders = {}\n+ self.default_calendar = MockEKCalendar(\"Default\")\n+ self.reminderStore = self # Add this line\n+\n+ def saveReminder_commit_error_(self, reminder, commit, error):\n+ self.reminders[reminder.calendarItemIdentifier()] = reminder\n+ return True, None\n+\n+ def removeReminder_commit_error_(self, reminder, commit, error):\n+ del self.reminders[reminder.calendarItemIdentifier()]\n+ return True, None\n+\n+ def calendarItemWithIdentifier_(self, identifier):\n+ return self.reminders.get(identifier)\n+\n+ def defaultCalendarForNewReminders(self):\n+ return self.default_calendar\n+\n+ def requestAccessToEntityType_completion_(self, entity_type, completion):\n+ completion(True, None)\n+\n+class MockEventKit:\n+ EKEventStore = MockEKEventStore\n+ EKReminder = MockEKReminder\n+ EKAlarm = MockEKAlarm\n+ EKRecurrenceRule = MockEKRecurrenceRule\n+ NSDate = MockNSDate\n+ EKEntityTypeReminder = 1\n+ EKRecurrenceFrequencyDaily = 0\n+\n+ @classmethod\n+ def patch(cls):\n+ return patch.multiple(\n+ 'EventKit',\n+ EKEventStore=cls.EKEventStore,\n+ EKReminder=cls.EKReminder,\n+ EKAlarm=cls.EKAlarm,\n+ EKRecurrenceRule=cls.EKRecurrenceRule,\n+ NSDate=cls.NSDate,\n+ EKEntityTypeReminder=cls.EKEntityTypeReminder,\n+ EKRecurrenceFrequencyDaily=cls.EKRecurrenceFrequencyDaily\n+ )\n" + } + ], + "date": 1724788294117, + "name": "Commit-0", + "content": "from datetime import datetime, timedelta\nfrom typing import List, Optional\nfrom unittest.mock import MagicMock\n\nclass MockNSDate:\n @classmethod\n def date(cls):\n return cls()\n\n def timeIntervalSince1970(self):\n return datetime.now().timestamp()\n\nclass MockNSDateComponents:\n def __init__(self, year=2023, month=1, day=1, hour=0, minute=0):\n self._year = year\n self._month = month\n self._day = day\n self._hour = hour\n self._minute = minute\n\n def year(self): return self._year\n def month(self): return self._month\n def day(self): return self._day\n def hour(self): return self._hour\n def minute(self): return self._minute\n\n def setYear_(self, value): self._year = value\n def setMonth_(self, value): self._month = value\n def setDay_(self, value): self._day = value\n def setHour_(self, value): self._hour = value\n def setMinute_(self, value): self._minute = value\n\nclass MockEKAlarm:\n @classmethod\n def alarmWithRelativeOffset_(cls, offset):\n alarm = cls()\n alarm.relativeOffset = offset\n return alarm\n\nclass MockEKRecurrenceRule:\n def __init__(self, frequency, interval, end):\n self.frequency = frequency\n self.interval = interval\n self.recurrenceEnd = end\n\nclass MockEKCalendar:\n def __init__(self, title):\n self._title = title\n\n def title(self):\n return self._title\n\nclass MockEKReminder:\n def __init__(self, event_store):\n self.title = \"\"\n self.calendar = None\n self.location = \"\"\n self.notes = \"\"\n self.url = None\n self.alarms = []\n self.recurrenceRules = []\n self.completed = False\n self.priority = 0\n self.dueDateComponents = None\n self.creationDate = MockNSDate()\n self.lastModifiedDate = MockNSDate()\n self._identifier = f\"reminder-{id(self)}\"\n\n def setTitle_(self, title):\n self.title = title\n\n def setCalendar_(self, calendar):\n self.calendar = calendar\n\n def setLocation_(self, location):\n self.location = location\n\n def setNotes_(self, notes):\n self.notes = notes\n\n def setURL_(self, url):\n self.url = url\n\n def addAlarm_(self, alarm):\n self.alarms.append(alarm)\n\n def removeAlarm_(self, alarm):\n self.alarms.remove(alarm)\n\n def addRecurrenceRule_(self, rule):\n self.recurrenceRules = [rule] # Only one rule is supported\n\n def removeRecurrenceRule_(self, rule):\n self.recurrenceRules = []\n\n def setCompleted_(self, completed):\n self.completed = completed\n\n def setPriority_(self, priority):\n self.priority = priority\n\n def setDueDateComponents_(self, components):\n self.dueDateComponents = components\n\n def calendarItemIdentifier(self):\n return self._identifier\n\n def calendarItemExternalIdentifier(self):\n return self._identifier\n\nclass MockEKEventStore:\n def __init__(self):\n self.reminders = {}\n self.default_calendar = MockEKCalendar(\"Default\")\n\n def saveReminder_commit_error_(self, reminder, commit, error):\n self.reminders[reminder.calendarItemIdentifier()] = reminder\n return True, None\n\n def removeReminder_commit_error_(self, reminder, commit, error):\n del self.reminders[reminder.calendarItemIdentifier()]\n return True, None\n\n def calendarItemWithIdentifier_(self, identifier):\n return self.reminders.get(identifier)\n\n def defaultCalendarForNewReminders(self):\n return self.default_calendar\n\n def requestAccessToEntityType_completion_(self, entity_type, completion):\n completion(True, None)\n\nclass MockEventKit:\n EKEventStore = MockEKEventStore\n EKReminder = MockEKReminder\n EKAlarm = MockEKAlarm\n EKRecurrenceRule = MockEKRecurrenceRule\n NSDate = MockNSDate\n EKEntityTypeReminder = 1\n EKRecurrenceFrequencyDaily = 0\n\n# Replace the real EventKit with our mock\nimport sys\nsys.modules['EventKit'] = MockEventKit()" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/experiments/cal_apps/reminder.py.json b/.lh/src/dspygen/experiments/cal_apps/reminder.py.json new file mode 100644 index 0000000..ada0035 --- /dev/null +++ b/.lh/src/dspygen/experiments/cal_apps/reminder.py.json @@ -0,0 +1,26 @@ +{ + "sourceFile": "src/dspygen/experiments/cal_apps/reminder.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 2, + "patches": [ + { + "date": 1724784593935, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724784728019, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,1 +1,53 @@\n- \n\\ No newline at end of file\n+import objc\n+import EventKit\n+from datetime import datetime\n+from typing import Optional\n+\n+class Reminder:\n+ def __init__(self, title: str, due_date: Optional[str] = None, flagged: bool = False, completed: bool = False, ek_reminder=None):\n+ self.title = title\n+ self.due_date = due_date\n+ self.flagged = flagged\n+ self.completed = completed\n+ self.ek_reminder = ek_reminder\n+\n+ def mark_as_completed(self):\n+ if self.ek_reminder:\n+ self.ek_reminder.completed = True\n+ self.completed = True\n+\n+ def flag(self):\n+ if self.ek_reminder:\n+ self.ek_reminder.flagged = True\n+ self.flagged = True\n+\n+ def unflag(self):\n+ if self.ek_reminder:\n+ self.ek_reminder.flagged = False\n+ self.flagged = False\n+\n+ def save(self, event_store):\n+ if self.ek_reminder is None:\n+ self.ek_reminder = EventKit.EKReminder.reminderWithEventStore_(event_store)\n+ self.ek_reminder.title = self.title\n+ self.ek_reminder.completed = self.completed\n+ self.ek_reminder.flagged = self.flagged\n+ if self.due_date:\n+ self.ek_reminder.dueDateComponents = self._parse_due_date(self.due_date)\n+ event_store.saveReminder_commit_error_(self.ek_reminder, True, None)\n+\n+ def remove(self, event_store):\n+ if self.ek_reminder:\n+ event_store.removeReminder_commit_error_(self.ek_reminder, True, None)\n+\n+ @staticmethod\n+ def _parse_due_date(due_date_str: str):\n+ date_format = \"%Y-%m-%d %H:%M\"\n+ dt = datetime.strptime(due_date_str, date_format)\n+ components = objc.NSDateComponents()\n+ components.year = dt.year\n+ components.month = dt.month\n+ components.day = dt.day\n+ components.hour = dt.hour\n+ components.minute = dt.minute\n+ return components\n\\ No newline at end of file\n" + }, + { + "date": 1724785181118, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,79 @@\n+import EventKit\n+from datetime import datetime\n+from typing import Optional, List\n+\n+class Reminder:\n+ def __init__(self, event_store: EventKit.EKEventStore, title: str, calendar: EventKit.EKCalendar):\n+ self.event_store = event_store\n+ self.ek_reminder = EventKit.EKReminder.reminderWithEventStore_(event_store)\n+ self.ek_reminder.title = title\n+ self.ek_reminder.calendar = calendar\n+\n+ @property\n+ def title(self) -> str:\n+ return self.ek_reminder.title\n+\n+ @title.setter\n+ def title(self, value: str):\n+ self.ek_reminder.title = value\n+\n+ @property\n+ def due_date(self) -> Optional[datetime]:\n+ if self.ek_reminder.dueDateComponents:\n+ return datetime(\n+ year=self.ek_reminder.dueDateComponents.year,\n+ month=self.ek_reminder.dueDateComponents.month,\n+ day=self.ek_reminder.dueDateComponents.day,\n+ hour=self.ek_reminder.dueDateComponents.hour,\n+ minute=self.ek_reminder.dueDateComponents.minute\n+ )\n+ return None\n+\n+ @due_date.setter\n+ def due_date(self, value: Optional[datetime]):\n+ if value:\n+ components = EventKit.NSDateComponents.alloc().init()\n+ components.year = value.year\n+ components.month = value.month\n+ components.day = value.day\n+ components.hour = value.hour\n+ components.minute = value.minute\n+ self.ek_reminder.dueDateComponents = components\n+ else:\n+ self.ek_reminder.dueDateComponents = None\n+\n+ @property\n+ def flagged(self) -> bool:\n+ return self.ek_reminder.flagged\n+\n+ @flagged.setter\n+ def flagged(self, value: bool):\n+ self.ek_reminder.flagged = value\n+\n+ @property\n+ def completed(self) -> bool:\n+ return self.ek_reminder.completed\n+\n+ @completed.setter\n+ def completed(self, value: bool):\n+ self.ek_reminder.completed = value\n+ if value:\n+ self.ek_reminder.completionDate = EventKit.NSDate.date()\n+ else:\n+ self.ek_reminder.completionDate = None\n+\n+ def add_alarm(self, alarm: EventKit.EKAlarm):\n+ self.ek_reminder.addAlarm_(alarm)\n+\n+ def remove_alarm(self, alarm: EventKit.EKAlarm):\n+ self.ek_reminder.removeAlarm_(alarm)\n+\n+ @property\n+ def alarms(self) -> List[EventKit.EKAlarm]:\n+ return self.ek_reminder.alarms()\n+\n+ def save(self) -> bool:\n+ return self.event_store.saveReminder_commit_error_(self.ek_reminder, True, None)\n+\n+ def remove(self) -> bool:\n+ return self.event_store.removeReminder_commit_error_(self.ek_reminder, True, None)\n\\ No newline at end of file\n" + } + ], + "date": 1724784593935, + "name": "Commit-0", + "content": "import objc\nimport EventKit\nfrom datetime import datetime\nfrom typing import Optional\n\nclass Reminder:\n def __init__(self, title: str, due_date: Optional[str] = None, flagged: bool = False, completed: bool = False, ek_reminder=None):\n self.title = title\n self.due_date = due_date\n self.flagged = flagged\n self.completed = completed\n self.ek_reminder = ek_reminder\n\n def mark_as_completed(self):\n if self.ek_reminder:\n self.ek_reminder.completed = True\n self.completed = True\n\n def flag(self):\n if self.ek_reminder:\n self.ek_reminder.flagged = True\n self.flagged = True\n\n def unflag(self):\n if self.ek_reminder:\n self.ek_reminder.flagged = False\n self.flagged = False\n\n def save(self, event_store):\n if self.ek_reminder is None:\n self.ek_reminder = EventKit.EKReminder.reminderWithEventStore_(event_store)\n self.ek_reminder.title = self.title\n self.ek_reminder.completed = self.completed\n self.ek_reminder.flagged = self.flagged\n if self.due_date:\n self.ek_reminder.dueDateComponents = self._parse_due_date(self.due_date)\n event_store.saveReminder_commit_error_(self.ek_reminder, True, None)\n\n def remove(self, event_store):\n if self.ek_reminder:\n event_store.removeReminder_commit_error_(self.ek_reminder, True, None)\n\n @staticmethod\n def _parse_due_date(due_date_str: str):\n date_format = \"%Y-%m-%d %H:%M\"\n dt = datetime.strptime(due_date_str, date_format)\n components = objc.NSDateComponents()\n components.year = dt.year\n components.month = dt.month\n components.day = dt.day\n components.hour = dt.hour\n components.minute = dt.minute\n return components" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/experiments/cal_apps/reminder_app.py.json b/.lh/src/dspygen/experiments/cal_apps/reminder_app.py.json new file mode 100644 index 0000000..e12a154 --- /dev/null +++ b/.lh/src/dspygen/experiments/cal_apps/reminder_app.py.json @@ -0,0 +1,34 @@ +{ + "sourceFile": "src/dspygen/experiments/cal_apps/reminder_app.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 4, + "patches": [ + { + "date": 1724784607789, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724784647013, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,7 +1,6 @@\n import EventKit\n from typing import List, Optional\n-from .reminder_list import ReminderList\n \n class ReminderApp:\n def __init__(self):\n self.event_store = EventKit.EKEventStore.new()\n" + }, + { + "date": 1724784731115, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,6 +1,7 @@\n import EventKit\n from typing import List, Optional\n+from .reminder_list import ReminderList\n \n class ReminderApp:\n def __init__(self):\n self.event_store = EventKit.EKEventStore.new()\n" + }, + { + "date": 1724784740872, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,56 @@\n+import EventKit\n+from typing import List, Optional\n+\n+class ReminderApp:\n+ def __init__(self):\n+ self.event_store = EventKit.EKEventStore.new()\n+ self.lists: List[ReminderList] = []\n+ self.selected_list: Optional[ReminderList] = None\n+ self._load_existing_lists()\n+\n+ def _load_existing_lists(self):\n+ calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n+ for calendar in calendars:\n+ self.lists.append(ReminderList(calendar.title, self.event_store))\n+\n+ def request_access(self):\n+ \"\"\"Request access to reminders.\"\"\"\n+ def callback(granted, error):\n+ if not granted:\n+ raise PermissionError(\"Access to reminders denied.\")\n+ self.event_store.requestAccessToEntityType_completion_(EventKit.EKEntityTypeReminder, callback)\n+\n+ def add_list(self, reminder_list: ReminderList):\n+ self.lists.append(reminder_list)\n+\n+ def remove_list(self, reminder_list: ReminderList):\n+ if reminder_list.ek_calendar:\n+ self.event_store.removeCalendar_commit_error_(reminder_list.ek_calendar, True, None)\n+ self.lists.remove(reminder_list)\n+\n+ def select_list(self, list_name: str):\n+ for lst in self.lists:\n+ if lst.name == list_name:\n+ self.selected_list = lst\n+ return\n+ raise ValueError(f\"List '{list_name}' not found\")\n+\n+ def add_reminder_to_selected(self, reminder):\n+ if self.selected_list:\n+ self.selected_list.add_reminder(reminder)\n+ else:\n+ raise ValueError(\"No list selected\")\n+\n+ def get_reminders(self, completed: Optional[bool] = None):\n+ if self.selected_list:\n+ return self.selected_list.get_reminders(completed)\n+ else:\n+ raise ValueError(\"No list selected\")\n+\n+ def clear_completed_reminders(self):\n+ if self.selected_list:\n+ completed_reminders = self.selected_list.get_reminders(completed=True)\n+ for reminder in completed_reminders:\n+ self.selected_list.remove_reminder(reminder)\n+ else:\n+ raise ValueError(\"No list selected\")\n\\ No newline at end of file\n" + }, + { + "date": 1724784746236, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,6 +1,7 @@\n import EventKit\n from typing import List, Optional\n+from dspygen.experiments.cal_apps import ReminderList\n \n class ReminderApp:\n def __init__(self):\n self.event_store = EventKit.EKEventStore.new()\n@@ -52,62 +53,5 @@\n completed_reminders = self.selected_list.get_reminders(completed=True)\n for reminder in completed_reminders:\n self.selected_list.remove_reminder(reminder)\n else:\n- raise ValueError(\"No list selected\")\n-import EventKit\n-from typing import List, Optional\n-from .reminder_list import ReminderList\n-\n-class ReminderApp:\n- def __init__(self):\n- self.event_store = EventKit.EKEventStore.new()\n- self.lists: List[ReminderList] = []\n- self.selected_list: Optional[ReminderList] = None\n- self._load_existing_lists()\n-\n- def _load_existing_lists(self):\n- calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n- for calendar in calendars:\n- self.lists.append(ReminderList(calendar.title, self.event_store))\n-\n- def request_access(self):\n- \"\"\"Request access to reminders.\"\"\"\n- def callback(granted, error):\n- if not granted:\n- raise PermissionError(\"Access to reminders denied.\")\n- self.event_store.requestAccessToEntityType_completion_(EventKit.EKEntityTypeReminder, callback)\n-\n- def add_list(self, reminder_list: ReminderList):\n- self.lists.append(reminder_list)\n-\n- def remove_list(self, reminder_list: ReminderList):\n- if reminder_list.ek_calendar:\n- self.event_store.removeCalendar_commit_error_(reminder_list.ek_calendar, True, None)\n- self.lists.remove(reminder_list)\n-\n- def select_list(self, list_name: str):\n- for lst in self.lists:\n- if lst.name == list_name:\n- self.selected_list = lst\n- return\n- raise ValueError(f\"List '{list_name}' not found\")\n-\n- def add_reminder_to_selected(self, reminder):\n- if self.selected_list:\n- self.selected_list.add_reminder(reminder)\n- else:\n- raise ValueError(\"No list selected\")\n-\n- def get_reminders(self, completed: Optional[bool] = None):\n- if self.selected_list:\n- return self.selected_list.get_reminders(completed)\n- else:\n- raise ValueError(\"No list selected\")\n-\n- def clear_completed_reminders(self):\n- if self.selected_list:\n- completed_reminders = self.selected_list.get_reminders(completed=True)\n- for reminder in completed_reminders:\n- self.selected_list.remove_reminder(reminder)\n- else:\n raise ValueError(\"No list selected\")\n\\ No newline at end of file\n" + } + ], + "date": 1724784607789, + "name": "Commit-0", + "content": "import EventKit\nfrom typing import List, Optional\nfrom .reminder_list import ReminderList\n\nclass ReminderApp:\n def __init__(self):\n self.event_store = EventKit.EKEventStore.new()\n self.lists: List[ReminderList] = []\n self.selected_list: Optional[ReminderList] = None\n self._load_existing_lists()\n\n def _load_existing_lists(self):\n calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n for calendar in calendars:\n self.lists.append(ReminderList(calendar.title, self.event_store))\n\n def request_access(self):\n \"\"\"Request access to reminders.\"\"\"\n def callback(granted, error):\n if not granted:\n raise PermissionError(\"Access to reminders denied.\")\n self.event_store.requestAccessToEntityType_completion_(EventKit.EKEntityTypeReminder, callback)\n\n def add_list(self, reminder_list: ReminderList):\n self.lists.append(reminder_list)\n\n def remove_list(self, reminder_list: ReminderList):\n if reminder_list.ek_calendar:\n self.event_store.removeCalendar_commit_error_(reminder_list.ek_calendar, True, None)\n self.lists.remove(reminder_list)\n\n def select_list(self, list_name: str):\n for lst in self.lists:\n if lst.name == list_name:\n self.selected_list = lst\n return\n raise ValueError(f\"List '{list_name}' not found\")\n\n def add_reminder_to_selected(self, reminder):\n if self.selected_list:\n self.selected_list.add_reminder(reminder)\n else:\n raise ValueError(\"No list selected\")\n\n def get_reminders(self, completed: Optional[bool] = None):\n if self.selected_list:\n return self.selected_list.get_reminders(completed)\n else:\n raise ValueError(\"No list selected\")\n\n def clear_completed_reminders(self):\n if self.selected_list:\n completed_reminders = self.selected_list.get_reminders(completed=True)\n for reminder in completed_reminders:\n self.selected_list.remove_reminder(reminder)\n else:\n raise ValueError(\"No list selected\")" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/experiments/cal_apps/reminder_list.py.json b/.lh/src/dspygen/experiments/cal_apps/reminder_list.py.json new file mode 100644 index 0000000..bfd09a8 --- /dev/null +++ b/.lh/src/dspygen/experiments/cal_apps/reminder_list.py.json @@ -0,0 +1,46 @@ +{ + "sourceFile": "src/dspygen/experiments/cal_apps/reminder_list.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 7, + "patches": [ + { + "date": 1724784601591, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724784632543, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,53 @@\n+import EventKit\n+from typing import List, Optional\n+\n+class ReminderList:\n+ def __init__(self, name: str, event_store):\n+ self.name = name\n+ self.event_store = event_store\n+ self.ek_calendar = None\n+ self.reminders: List[Reminder] = []\n+ self._load_ek_calendar()\n+\n+ def _load_ek_calendar(self):\n+ calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n+ for calendar in calendars:\n+ if calendar.title == self.name:\n+ self.ek_calendar = calendar\n+ break\n+ if not self.ek_calendar:\n+ self.ek_calendar = EventKit.EKCalendar.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store)\n+ self.ek_calendar.title = self.name\n+ self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source\n+ self.event_store.saveCalendar_commit_error_(self.ek_calendar, True, None)\n+\n+ def add_reminder(self, reminder: Reminder):\n+ reminder.save(self.event_store)\n+ self.reminders.append(reminder)\n+\n+ def remove_reminder(self, reminder: Reminder):\n+ reminder.remove(self.event_store)\n+ self.reminders.remove(reminder)\n+\n+ def get_reminders(self, completed: Optional[bool] = None) -> List[Reminder]:\n+ predicate = self.event_store.predicateForRemindersInCalendars_([self.ek_calendar])\n+ reminders = []\n+ def callback(results):\n+ for ek_reminder in results:\n+ if completed is None or ek_reminder.completed == completed:\n+ reminders.append(Reminder(\n+ title=ek_reminder.title,\n+ due_date=self._format_due_date(ek_reminder.dueDateComponents),\n+ flagged=ek_reminder.flagged,\n+ completed=ek_reminder.completed,\n+ ek_reminder=ek_reminder\n+ ))\n+ self.reminders = reminders\n+ self.event_store.fetchRemindersMatchingPredicate_completion_(predicate, callback)\n+ return self.reminders\n+\n+ @staticmethod\n+ def _format_due_date(date_components):\n+ if date_components:\n+ return f\"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}\"\n+ return None\n\\ No newline at end of file\n" + }, + { + "date": 1724784639969, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,7 +1,7 @@\n import EventKit\n from typing import List, Optional\n-\n+from ds\n class ReminderList:\n def __init__(self, name: str, event_store):\n self.name = name\n self.event_store = event_store\n@@ -49,59 +49,5 @@\n @staticmethod\n def _format_due_date(date_components):\n if date_components:\n return f\"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}\"\n- return None\n-import EventKit\n-from typing import List, Optional\n-from .reminder import Reminder\n-\n-class ReminderList:\n- def __init__(self, name: str, event_store):\n- self.name = name\n- self.event_store = event_store\n- self.ek_calendar = None\n- self.reminders: List[Reminder] = []\n- self._load_ek_calendar()\n-\n- def _load_ek_calendar(self):\n- calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n- for calendar in calendars:\n- if calendar.title == self.name:\n- self.ek_calendar = calendar\n- break\n- if not self.ek_calendar:\n- self.ek_calendar = EventKit.EKCalendar.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store)\n- self.ek_calendar.title = self.name\n- self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source\n- self.event_store.saveCalendar_commit_error_(self.ek_calendar, True, None)\n-\n- def add_reminder(self, reminder: Reminder):\n- reminder.save(self.event_store)\n- self.reminders.append(reminder)\n-\n- def remove_reminder(self, reminder: Reminder):\n- reminder.remove(self.event_store)\n- self.reminders.remove(reminder)\n-\n- def get_reminders(self, completed: Optional[bool] = None) -> List[Reminder]:\n- predicate = self.event_store.predicateForRemindersInCalendars_([self.ek_calendar])\n- reminders = []\n- def callback(results):\n- for ek_reminder in results:\n- if completed is None or ek_reminder.completed == completed:\n- reminders.append(Reminder(\n- title=ek_reminder.title,\n- due_date=self._format_due_date(ek_reminder.dueDateComponents),\n- flagged=ek_reminder.flagged,\n- completed=ek_reminder.completed,\n- ek_reminder=ek_reminder\n- ))\n- self.reminders = reminders\n- self.event_store.fetchRemindersMatchingPredicate_completion_(predicate, callback)\n- return self.reminders\n-\n- @staticmethod\n- def _format_due_date(date_components):\n- if date_components:\n- return f\"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}\"\n return None\n\\ No newline at end of file\n" + }, + { + "date": 1724784729536, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,54 @@\n+import EventKit\n+from typing import List, Optional\n+from .reminder import Reminder\n+\n+class ReminderList:\n+ def __init__(self, name: str, event_store):\n+ self.name = name\n+ self.event_store = event_store\n+ self.ek_calendar = None\n+ self.reminders: List[Reminder] = []\n+ self._load_ek_calendar()\n+\n+ def _load_ek_calendar(self):\n+ calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n+ for calendar in calendars:\n+ if calendar.title == self.name:\n+ self.ek_calendar = calendar\n+ break\n+ if not self.ek_calendar:\n+ self.ek_calendar = EventKit.EKCalendar.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store)\n+ self.ek_calendar.title = self.name\n+ self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source\n+ self.event_store.saveCalendar_commit_error_(self.ek_calendar, True, None)\n+\n+ def add_reminder(self, reminder: Reminder):\n+ reminder.save(self.event_store)\n+ self.reminders.append(reminder)\n+\n+ def remove_reminder(self, reminder: Reminder):\n+ reminder.remove(self.event_store)\n+ self.reminders.remove(reminder)\n+\n+ def get_reminders(self, completed: Optional[bool] = None) -> List[Reminder]:\n+ predicate = self.event_store.predicateForRemindersInCalendars_([self.ek_calendar])\n+ reminders = []\n+ def callback(results):\n+ for ek_reminder in results:\n+ if completed is None or ek_reminder.completed == completed:\n+ reminders.append(Reminder(\n+ title=ek_reminder.title,\n+ due_date=self._format_due_date(ek_reminder.dueDateComponents),\n+ flagged=ek_reminder.flagged,\n+ completed=ek_reminder.completed,\n+ ek_reminder=ek_reminder\n+ ))\n+ self.reminders = reminders\n+ self.event_store.fetchRemindersMatchingPredicate_completion_(predicate, callback)\n+ return self.reminders\n+\n+ @staticmethod\n+ def _format_due_date(date_components):\n+ if date_components:\n+ return f\"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}\"\n+ return None\n\\ No newline at end of file\n" + }, + { + "date": 1724784751525, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,7 +1,6 @@\n import EventKit\n from typing import List, Optional\n-from .reminder import Reminder\n \n class ReminderList:\n def __init__(self, name: str, event_store):\n self.name = name\n@@ -50,58 +49,5 @@\n @staticmethod\n def _format_due_date(date_components):\n if date_components:\n return f\"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}\"\n- return None\n-import EventKit\n-from typing import List, Optional\n-from ds\n-class ReminderList:\n- def __init__(self, name: str, event_store):\n- self.name = name\n- self.event_store = event_store\n- self.ek_calendar = None\n- self.reminders: List[Reminder] = []\n- self._load_ek_calendar()\n-\n- def _load_ek_calendar(self):\n- calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n- for calendar in calendars:\n- if calendar.title == self.name:\n- self.ek_calendar = calendar\n- break\n- if not self.ek_calendar:\n- self.ek_calendar = EventKit.EKCalendar.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store)\n- self.ek_calendar.title = self.name\n- self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source\n- self.event_store.saveCalendar_commit_error_(self.ek_calendar, True, None)\n-\n- def add_reminder(self, reminder: Reminder):\n- reminder.save(self.event_store)\n- self.reminders.append(reminder)\n-\n- def remove_reminder(self, reminder: Reminder):\n- reminder.remove(self.event_store)\n- self.reminders.remove(reminder)\n-\n- def get_reminders(self, completed: Optional[bool] = None) -> List[Reminder]:\n- predicate = self.event_store.predicateForRemindersInCalendars_([self.ek_calendar])\n- reminders = []\n- def callback(results):\n- for ek_reminder in results:\n- if completed is None or ek_reminder.completed == completed:\n- reminders.append(Reminder(\n- title=ek_reminder.title,\n- due_date=self._format_due_date(ek_reminder.dueDateComponents),\n- flagged=ek_reminder.flagged,\n- completed=ek_reminder.completed,\n- ek_reminder=ek_reminder\n- ))\n- self.reminders = reminders\n- self.event_store.fetchRemindersMatchingPredicate_completion_(predicate, callback)\n- return self.reminders\n-\n- @staticmethod\n- def _format_due_date(date_components):\n- if date_components:\n- return f\"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}\"\n return None\n\\ No newline at end of file\n" + }, + { + "date": 1724784939781, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,6 +1,7 @@\n import EventKit\n from typing import List, Optional\n+from dspygen.experiments.cal_apps import Reminder\n \n class ReminderList:\n def __init__(self, name: str, event_store):\n self.name = name\n@@ -16,9 +17,10 @@\n self.ek_calendar = calendar\n break\n if not self.ek_calendar:\n self.ek_calendar = EventKit.EKCalendar.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store)\n- self.ek_calendar.title = self.name\n+ # Instead of setting the title directly, we'll pass it to the calendar creation method\n+ self.ek_calendar = EventKit.EKCalendar.calendarWithTitle_forEntityType_eventStore_(self.name, EventKit.EKEntityTypeReminder, self.event_store)\n self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source\n self.event_store.saveCalendar_commit_error_(self.ek_calendar, True, None)\n \n def add_reminder(self, reminder: Reminder):\n" + }, + { + "date": 1724784986533, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,59 @@\n+import EventKit\n+from typing import List, Optional\n+from dspygen.experiments.cal_apps import Reminder\n+\n+class ReminderList:\n+ def __init__(self, name: str, event_store):\n+ self.name = name\n+ self.event_store = event_store\n+ self.ek_calendar = None\n+ self.reminders: List[Reminder] = []\n+ self._load_ek_calendar()\n+\n+ def _load_ek_calendar(self):\n+ calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n+ for calendar in calendars:\n+ if calendar.title == self.name:\n+ self.ek_calendar = calendar\n+ break\n+ if not self.ek_calendar:\n+ # Use calendarWithTitle_forEntityType_eventStore_ if available, otherwise fall back to calendarForEntityType_eventStore_\n+ calendar_class = EventKit.EKCalendar\n+ if hasattr(calendar_class, 'calendarWithTitle_forEntityType_eventStore_'):\n+ self.ek_calendar = calendar_class.calendarWithTitle_forEntityType_eventStore_(self.name, EventKit.EKEntityTypeReminder, self.event_store)\n+ else:\n+ self.ek_calendar = calendar_class.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store)\n+ self.ek_calendar.title = self.name\n+ self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source\n+ self.event_store.saveCalendar_commit_error_(self.ek_calendar, True, None)\n+\n+ def add_reminder(self, reminder: Reminder):\n+ reminder.save(self.event_store)\n+ self.reminders.append(reminder)\n+\n+ def remove_reminder(self, reminder: Reminder):\n+ reminder.remove(self.event_store)\n+ self.reminders.remove(reminder)\n+\n+ def get_reminders(self, completed: Optional[bool] = None) -> List[Reminder]:\n+ predicate = self.event_store.predicateForRemindersInCalendars_([self.ek_calendar])\n+ reminders = []\n+ def callback(results):\n+ for ek_reminder in results:\n+ if completed is None or ek_reminder.completed == completed:\n+ reminders.append(Reminder(\n+ title=ek_reminder.title,\n+ due_date=self._format_due_date(ek_reminder.dueDateComponents),\n+ flagged=ek_reminder.flagged,\n+ completed=ek_reminder.completed,\n+ ek_reminder=ek_reminder\n+ ))\n+ self.reminders = reminders\n+ self.event_store.fetchRemindersMatchingPredicate_completion_(predicate, callback)\n+ return self.reminders\n+\n+ @staticmethod\n+ def _format_due_date(date_components):\n+ if date_components:\n+ return f\"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}\"\n+ return None\n\\ No newline at end of file\n" + }, + { + "date": 1724785130192, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -16,67 +16,8 @@\n if calendar.title == self.name:\n self.ek_calendar = calendar\n break\n if not self.ek_calendar:\n- # Use calendarWithTitle_forEntityType_eventStore_ if available, otherwise fall back to calendarForEntityType_eventStore_\n- calendar_class = EventKit.EKCalendar\n- if hasattr(calendar_class, 'calendarWithTitle_forEntityType_eventStore_'):\n- self.ek_calendar = calendar_class.calendarWithTitle_forEntityType_eventStore_(self.name, EventKit.EKEntityTypeReminder, self.event_store)\n- else:\n- self.ek_calendar = calendar_class.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store)\n- self.ek_calendar.title = self.name\n- self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source\n- self.event_store.saveCalendar_commit_error_(self.ek_calendar, True, None)\n-\n- def add_reminder(self, reminder: Reminder):\n- reminder.save(self.event_store)\n- self.reminders.append(reminder)\n-\n- def remove_reminder(self, reminder: Reminder):\n- reminder.remove(self.event_store)\n- self.reminders.remove(reminder)\n-\n- def get_reminders(self, completed: Optional[bool] = None) -> List[Reminder]:\n- predicate = self.event_store.predicateForRemindersInCalendars_([self.ek_calendar])\n- reminders = []\n- def callback(results):\n- for ek_reminder in results:\n- if completed is None or ek_reminder.completed == completed:\n- reminders.append(Reminder(\n- title=ek_reminder.title,\n- due_date=self._format_due_date(ek_reminder.dueDateComponents),\n- flagged=ek_reminder.flagged,\n- completed=ek_reminder.completed,\n- ek_reminder=ek_reminder\n- ))\n- self.reminders = reminders\n- self.event_store.fetchRemindersMatchingPredicate_completion_(predicate, callback)\n- return self.reminders\n-\n- @staticmethod\n- def _format_due_date(date_components):\n- if date_components:\n- return f\"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}\"\n- return None\n-import EventKit\n-from typing import List, Optional\n-from dspygen.experiments.cal_apps import Reminder\n-\n-class ReminderList:\n- def __init__(self, name: str, event_store):\n- self.name = name\n- self.event_store = event_store\n- self.ek_calendar = None\n- self.reminders: List[Reminder] = []\n- self._load_ek_calendar()\n-\n- def _load_ek_calendar(self):\n- calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n- for calendar in calendars:\n- if calendar.title == self.name:\n- self.ek_calendar = calendar\n- break\n- if not self.ek_calendar:\n self.ek_calendar = EventKit.EKCalendar.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store)\n # Instead of setting the title directly, we'll pass it to the calendar creation method\n self.ek_calendar = EventKit.EKCalendar.calendarWithTitle_forEntityType_eventStore_(self.name, EventKit.EKEntityTypeReminder, self.event_store)\n self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source\n" + } + ], + "date": 1724784601591, + "name": "Commit-0", + "content": "import EventKit\nfrom typing import List, Optional\nfrom .reminder import Reminder\n\nclass ReminderList:\n def __init__(self, name: str, event_store):\n self.name = name\n self.event_store = event_store\n self.ek_calendar = None\n self.reminders: List[Reminder] = []\n self._load_ek_calendar()\n\n def _load_ek_calendar(self):\n calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n for calendar in calendars:\n if calendar.title == self.name:\n self.ek_calendar = calendar\n break\n if not self.ek_calendar:\n self.ek_calendar = EventKit.EKCalendar.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store)\n self.ek_calendar.title = self.name\n self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source\n self.event_store.saveCalendar_commit_error_(self.ek_calendar, True, None)\n\n def add_reminder(self, reminder: Reminder):\n reminder.save(self.event_store)\n self.reminders.append(reminder)\n\n def remove_reminder(self, reminder: Reminder):\n reminder.remove(self.event_store)\n self.reminders.remove(reminder)\n\n def get_reminders(self, completed: Optional[bool] = None) -> List[Reminder]:\n predicate = self.event_store.predicateForRemindersInCalendars_([self.ek_calendar])\n reminders = []\n def callback(results):\n for ek_reminder in results:\n if completed is None or ek_reminder.completed == completed:\n reminders.append(Reminder(\n title=ek_reminder.title,\n due_date=self._format_due_date(ek_reminder.dueDateComponents),\n flagged=ek_reminder.flagged,\n completed=ek_reminder.completed,\n ek_reminder=ek_reminder\n ))\n self.reminders = reminders\n self.event_store.fetchRemindersMatchingPredicate_completion_(predicate, callback)\n return self.reminders\n\n @staticmethod\n def _format_due_date(date_components):\n if date_components:\n return f\"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}\"\n return None" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/experiments/event_kit/event_kit_service.py.json b/.lh/src/dspygen/experiments/event_kit/event_kit_service.py.json new file mode 100644 index 0000000..9e3af90 --- /dev/null +++ b/.lh/src/dspygen/experiments/event_kit/event_kit_service.py.json @@ -0,0 +1,22 @@ +{ + "sourceFile": "src/dspygen/experiments/event_kit/event_kit_service.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 1, + "patches": [ + { + "date": 1724705640865, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724705783417, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -95,5 +95,43 @@\n reminders = self.get_reminders(calendar_id)\n reminder = next(r for r in reminders if r.id == reminder_id)\n \n reminder_to_delete = self.store.calendarItemWithIdentifier_(str(reminder.id))\n- self.store.removeReminder_commit_error_(reminder_to_delete, True, None)\n\\ No newline at end of file\n+ self.store.removeReminder_commit_error_(reminder_to_delete, True, None)\n+\n+def print_ekeventstore_info():\n+ print(\"EKEventStore Methods and Properties:\")\n+ print(\"====================================\")\n+ \n+ # Get all attributes of EKEventStore\n+ attributes = dir(EventKit.EKEventStore)\n+ \n+ # Separate methods and properties\n+ methods = []\n+ properties = []\n+ \n+ for attr in attributes:\n+ # Skip private attributes (those starting with underscore)\n+ if attr.startswith('_'):\n+ continue\n+ \n+ # Get the attribute\n+ attr_value = getattr(EventKit.EKEventStore, attr)\n+ \n+ # Check if it's a method or a property\n+ if callable(attr_value):\n+ methods.append(attr)\n+ else:\n+ properties.append(attr)\n+ \n+ # Print methods\n+ print(\"\\nMethods:\")\n+ for method in sorted(methods):\n+ print(f\"- {method}\")\n+ \n+ # Print properties\n+ print(\"\\nProperties:\")\n+ for prop in sorted(properties):\n+ print(f\"- {prop}\")\n+\n+# You can call this function to print the info\n+print_ekeventstore_info()\n\\ No newline at end of file\n" + } + ], + "date": 1724705640865, + "name": "Commit-0", + "content": "import EventKit\nfrom datetime import datetime\nfrom typing import Optional, List\nfrom uuid import UUID, uuid4\nfrom pydantic import BaseModel, Field\n\nstore = EventKit.EKEventStore.new()\n\n\nclass Reminder(BaseModel):\n id: UUID = Field(default_factory=uuid4)\n title: str\n due_date: Optional[datetime] = None\n completed: bool = False\n notes: Optional[str] = None\n calendar_id: UUID\n\n\nclass Calendar(BaseModel):\n id: UUID = Field(default_factory=uuid4)\n title: str\n reminders: List[Reminder] = Field(default_factory=list)\n\n\nclass EventKitService:\n def __init__(self):\n self.store = store\n self.request_access()\n\n def request_access(self):\n def handler(granted, error):\n if not granted:\n raise PermissionError(\"Access to reminders was not granted\")\n\n # Update this line to use the correct method\n self.store.requestAccessToEntityType(EventKit.EKEntityTypeReminder, completionHandler=handler)\n\n def get_calendars(self) -> List[Calendar]:\n calendars = self.store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n return [Calendar(id=UUID(calendar.calendarIdentifier()), title=calendar.title()) for calendar in calendars]\n\n def get_reminders(self, calendar_id: UUID) -> List[Reminder]:\n calendar = next(c for c in self.store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) if UUID(c.calendarIdentifier()) == calendar_id)\n predicate = self.store.predicateForRemindersInCalendars_([calendar])\n reminders = self.store.remindersMatchingPredicate_(predicate)\n\n return [\n Reminder(\n id=UUID(reminder.calendarItemIdentifier()),\n title=reminder.title(),\n due_date=reminder.dueDateComponents().date() if reminder.dueDateComponents() else None,\n completed=reminder.isCompleted(),\n notes=reminder.notes(),\n calendar_id=calendar_id,\n ) for reminder in reminders\n ]\n\n def add_reminder(self, calendar_id: UUID, reminder_data: Reminder) -> Reminder:\n calendar = next(c for c in self.store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) if UUID(c.calendarIdentifier()) == calendar_id)\n reminder = EventKit.EKReminder.reminderWithEventStore_(self.store)\n reminder.title = reminder_data.title\n reminder.calendar = calendar\n\n if reminder_data.due_date:\n reminder_due_date = EventKit.EKAlarm.alarmWithAbsoluteDate_(reminder_data.due_date)\n reminder.addAlarm_(reminder_due_date)\n\n reminder.notes = reminder_data.notes\n reminder.setCompleted_(reminder_data.completed)\n self.store.saveReminder_commit_error_(reminder, True, None)\n\n return Reminder(\n id=UUID(reminder.calendarItemIdentifier()),\n title=reminder.title(),\n due_date=reminder.dueDateComponents().date() if reminder.dueDateComponents() else None,\n completed=reminder.isCompleted(),\n notes=reminder.notes(),\n calendar_id=calendar_id,\n )\n\n def update_reminder(self, calendar_id: UUID, reminder_id: UUID, reminder_data: Reminder) -> Reminder:\n reminders = self.get_reminders(calendar_id)\n reminder = next(r for r in reminders if r.id == reminder_id)\n\n reminder.title = reminder_data.title\n reminder.due_date = reminder_data.due_date\n reminder.completed = reminder_data.completed\n reminder.notes = reminder_data.notes\n\n self.add_reminder(calendar_id, reminder)\n\n return reminder\n\n def delete_reminder(self, calendar_id: UUID, reminder_id: UUID):\n reminders = self.get_reminders(calendar_id)\n reminder = next(r for r in reminders if r.id == reminder_id)\n\n reminder_to_delete = self.store.calendarItemWithIdentifier_(str(reminder.id))\n self.store.removeReminder_commit_error_(reminder_to_delete, True, None)" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/experiments/event_kit/event_kit_store_service.py.json b/.lh/src/dspygen/experiments/event_kit/event_kit_store_service.py.json new file mode 100644 index 0000000..d2273fb --- /dev/null +++ b/.lh/src/dspygen/experiments/event_kit/event_kit_store_service.py.json @@ -0,0 +1,18 @@ +{ + "sourceFile": "src/dspygen/experiments/event_kit/event_kit_store_service.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 0, + "patches": [ + { + "date": 1724705916782, + "content": "Index: \n===================================================================\n--- \n+++ \n" + } + ], + "date": 1724705916782, + "name": "Commit-0", + "content": "import EventKit\nfrom typing import List, Optional, Callable\nfrom uuid import UUID\n\nclass EventKitStoreService:\n def __init__(self):\n self.store = EventKit.EKEventStore.new()\n self.request_access()\n\n def request_access(self):\n def handler(granted: bool, error: Optional[str]):\n if not granted:\n raise PermissionError(\"Access to reminders was not granted\")\n\n self.store.requestAccessToEntityType(EventKit.EKEntityTypeReminder, completionHandler=handler)\n\n def get_calendars(self, entity_type: int) -> List[dict]:\n calendars = self.store.calendarsForEntityType_(entity_type)\n return [\n {\n 'id': UUID(calendar.calendarIdentifier()),\n 'title': calendar.title()\n } for calendar in calendars\n ]\n\n def get_reminders(self, calendar_id: UUID) -> List[dict]:\n calendar = next(c for c in self.store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) \n if UUID(c.calendarIdentifier()) == calendar_id)\n predicate = self.store.predicateForRemindersInCalendars_([calendar])\n reminders = self.store.remindersMatchingPredicate_(predicate)\n\n return [\n {\n 'id': UUID(reminder.calendarItemIdentifier()),\n 'title': reminder.title(),\n 'due_date': reminder.dueDateComponents().date() if reminder.dueDateComponents() else None,\n 'completed': reminder.isCompleted(),\n 'notes': reminder.notes(),\n 'calendar_id': calendar_id,\n } for reminder in reminders\n ]\n\n def add_reminder(self, calendar_id: UUID, reminder_data: dict) -> dict:\n calendar = next(c for c in self.store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) \n if UUID(c.calendarIdentifier()) == calendar_id)\n reminder = EventKit.EKReminder.reminderWithEventStore_(self.store)\n reminder.title = reminder_data['title']\n reminder.calendar = calendar\n\n if reminder_data.get('due_date'):\n reminder_due_date = EventKit.EKAlarm.alarmWithAbsoluteDate_(reminder_data['due_date'])\n reminder.addAlarm_(reminder_due_date)\n\n reminder.notes = reminder_data.get('notes')\n reminder.setCompleted_(reminder_data.get('completed', False))\n self.store.saveReminder_commit_error_(reminder, True, None)\n\n return {\n 'id': UUID(reminder.calendarItemIdentifier()),\n 'title': reminder.title(),\n 'due_date': reminder.dueDateComponents().date() if reminder.dueDateComponents() else None,\n 'completed': reminder.isCompleted(),\n 'notes': reminder.notes(),\n 'calendar_id': calendar_id,\n }\n\n def update_reminder(self, calendar_id: UUID, reminder_id: UUID, reminder_data: dict) -> dict:\n reminders = self.get_reminders(calendar_id)\n reminder = next(r for r in reminders if r['id'] == reminder_id)\n\n updated_reminder = {**reminder, **reminder_data}\n return self.add_reminder(calendar_id, updated_reminder)\n\n def delete_reminder(self, calendar_id: UUID, reminder_id: UUID):\n reminders = self.get_reminders(calendar_id)\n reminder = next(r for r in reminders if r['id'] == reminder_id)\n\n reminder_to_delete = self.store.calendarItemWithIdentifier_(str(reminder['id']))\n self.store.removeReminder_commit_error_(reminder_to_delete, True, None)\n\n def fetch_changes(self, token: str, result_handler: Callable):\n self.store.fetchChangedObjectIDsSinceToken_resultHandler_(token, result_handler)\n\n def commit(self):\n self.store.commit_()\n\n def rollback(self):\n self.store.rollback()\n\n def reset(self):\n self.store.reset()\n\n def get_default_calendar_for_new_reminders(self) -> dict:\n calendar = self.store.defaultCalendarForNewReminders()\n return {\n 'id': UUID(calendar.calendarIdentifier()),\n 'title': calendar.title()\n }\n\n def set_default_calendar_for_new_reminders(self, calendar_id: UUID):\n calendars = self.store.calendarsForEntityType_(EventKit.EKEntityTypeReminder)\n calendar = next(c for c in calendars if UUID(c.calendarIdentifier()) == calendar_id)\n self.store.setDefaultCalendarForNewReminders_(calendar)" + } + ] +} \ No newline at end of file diff --git a/.lh/src/dspygen/experiments/event_kit/workbench.py.json b/.lh/src/dspygen/experiments/event_kit/workbench.py.json new file mode 100644 index 0000000..3a24f02 --- /dev/null +++ b/.lh/src/dspygen/experiments/event_kit/workbench.py.json @@ -0,0 +1,34 @@ +{ + "sourceFile": "src/dspygen/experiments/event_kit/workbench.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 4, + "patches": [ + { + "date": 1724709933369, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724709959030, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -70,4 +70,82 @@\n \n # Print the generated code\n print(wrapper_code, file=\"ekevent_store_wrapper.py\")\n \n+# Create the EKEventStoreWrapper class\n+class EKEventStoreWrapper:\n+ def __init__(self):\n+ self._ekeventstore = EventKit.EKEventStore.alloc().init()\n+\n+ @property\n+ def defaultCalendarForNewReminders(self):\n+ return self._ekeventstore.defaultCalendarForNewReminders()\n+\n+ @property\n+ def sources(self):\n+ return self._ekeventstore.sources()\n+\n+ def calendarsForEntityType_(self, entity_type):\n+ return self._ekeventstore.calendarsForEntityType_(entity_type)\n+\n+ def calendarWithIdentifier_(self, identifier):\n+ return self._ekeventstore.calendarWithIdentifier_(identifier)\n+\n+ def calendarItemWithIdentifier_(self, identifier):\n+ return self._ekeventstore.calendarItemWithIdentifier_(identifier)\n+\n+ def saveCalendar_commit_error_(self, calendar, commit, error):\n+ return self._ekeventstore.saveCalendar_commit_error_(calendar, commit, error)\n+\n+ def removeCalendar_commit_error_(self, calendar, commit, error):\n+ return self._ekeventstore.removeCalendar_commit_error_(calendar, commit, error)\n+\n+ def saveEvent_span_commit_error_(self, event, span, commit, error):\n+ return self._ekeventstore.saveEvent_span_commit_error_(event, span, commit, error)\n+\n+ def removeEvent_span_commit_error_(self, event, span, commit, error):\n+ return self._ekeventstore.removeEvent_span_commit_error_(event, span, commit, error)\n+\n+ def saveReminder_commit_error_(self, reminder, commit, error):\n+ return self._ekeventstore.saveReminder_commit_error_(reminder, commit, error)\n+\n+ def removeReminder_commit_error_(self, reminder, commit, error):\n+ return self._ekeventstore.removeReminder_commit_error_(reminder, commit, error)\n+\n+ def fetchRemindersMatchingPredicate_completion_(self, predicate, completion):\n+ return self._ekeventstore.fetchRemindersMatchingPredicate_completion_(predicate, completion)\n+\n+ def fetchEventsMatchingPredicate_completion_(self, predicate, completion):\n+ return self._ekeventstore.fetchEventsMatchingPredicate_completion_(predicate, completion)\n+\n+ def enumerateEventsMatchingPredicate_usingBlock_(self, predicate, block):\n+ return self._ekeventstore.enumerateEventsMatchingPredicate_usingBlock_(predicate, block)\n+\n+ def predicateForRemindersInCalendars_(self, calendars):\n+ return self._ekeventstore.predicateForRemindersInCalendars_(calendars)\n+\n+ def predicateForIncompleteRemindersWithDueDateStarting_ending_calendars_(self, start_date, end_date, calendars):\n+ return self._ekeventstore.predicateForIncompleteRemindersWithDueDateStarting_ending_calendars_(start_date, end_date, calendars)\n+\n+ def predicateForCompletedRemindersWithCompletionDateStarting_ending_calendars_(self, start_date, end_date, calendars):\n+ return self._ekeventstore.predicateForCompletedRemindersWithCompletionDateStarting_ending_calendars_(start_date, end_date, calendars)\n+\n+ def predicateForEventsWithStartDate_endDate_calendars_(self, start_date, end_date, calendars):\n+ return self._ekeventstore.predicateForEventsWithStartDate_endDate_calendars_(start_date, end_date, calendars)\n+\n+ def commit_(self, error):\n+ return self._ekeventstore.commit_(error)\n+\n+ def reset(self):\n+ return self._ekeventstore.reset()\n+\n+ def refreshSourcesIfNecessary(self):\n+ return self._ekeventstore.refreshSourcesIfNecessary()\n+\n+ def requestAccessToEntityType_completion_(self, entity_type, completion):\n+ return self._ekeventstore.requestAccessToEntityType_completion_(entity_type, completion)\n+\n+ def authorizationStatusForEntityType_(self, entity_type):\n+ return self._ekeventstore.authorizationStatusForEntityType_(entity_type)\n+\n+# Create an instance of the wrapper\n+event_store = EKEventStoreWrapper()\n" + }, + { + "date": 1724709968708, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,74 @@\n+import objc\n+import jinja2\n+\n+# Load EventKit dynamically\n+objc.loadBundle(\"EventKit\", bundle_path=\"/System/Library/Frameworks/EventKit.framework\", module_globals=globals())\n+EKEventStore = objc.lookUpClass('EKEventStore')\n+\n+\n+def extract_ekeventstore_info():\n+ attributes = dir(EKEventStore)\n+\n+ methods = []\n+ properties = []\n+\n+ for attr in attributes:\n+ if attr.startswith('_'):\n+ continue\n+\n+ attr_value = getattr(EKEventStore, attr)\n+\n+ if callable(attr_value):\n+ methods.append(attr)\n+ else:\n+ properties.append(attr)\n+\n+ return methods, properties\n+\n+\n+\n+wrapper_template = \"\"\"\n+class {{ class_name }}Wrapper:\n+ def __init__(self):\n+ self._{{ class_name.lower() }} = {{ class_name }}.alloc().init()\n+\n+ {% for prop in properties %}\n+ @property\n+ def {{ prop|snake_case }}(self):\n+ return self._{{ class_name.lower() }}.{{ prop }}\n+\n+ @{{ prop|snake_case }}.setter\n+ def {{ prop|snake_case }}(self, value):\n+ self._{{ class_name.lower() }}.{{ prop }} = value\n+ {% endfor %}\n+\n+ {% for method in methods %}\n+ def {{ method|snake_case }}(self, *args, **kwargs):\n+ return self._{{ class_name.lower() }}.{{ method }}(*args, **kwargs)\n+ {% endfor %}\n+\"\"\"\n+\n+import jinja2\n+import re\n+\n+def snake_case_filter(s):\n+ return re.sub(r'(? List[Reminder]:\n+ return [\n+ reminder\n+ for account in self.accounts\n+ for reminder_list in account.lists\n+ for reminder in reminder_list.reminders\n+ ]\n+\n+ def get_reminders_by_list(self, list_id: uuid.UUID) -> List[Reminder]:\n+ for account in self.accounts:\n+ for reminder_list in account.lists:\n+ if reminder_list.id == list_id:\n+ return reminder_list.reminders\n+ return []\n+\n+ def get_reminders_by_account(self, account_id: uuid.UUID) -> List[Reminder]:\n+ for account in self.accounts:\n+ if account.id == account_id:\n+ return [\n+ reminder\n+ for reminder_list in account.lists\n+ for reminder in reminder_list.reminders\n+ ]\n+ return []\n\\ No newline at end of file\n" + }, + { + "date": 1724539359809, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -92,31 +92,5 @@\n reminder\n for reminder_list in account.lists\n for reminder in reminder_list.reminders\n ]\n- return []\n-from pydantic import BaseModel, Field, ConfigDict\n-from typing import List, Optional\n-from datetime import datetime, date, time\n-from enum import Enum\n-import uuid\n-\n-class Priority(Enum):\n- NONE = 0\n- LOW = 1\n- MEDIUM = 5\n- HIGH = 9\n-\n-class RecurrenceFrequency(Enum):\n- DAILY = \"daily\"\n- WEEKLY = \"weekly\"\n- MONTHLY = \"monthly\"\n- YEARLY = \"yearly\"\n-\n-class Recurrence(BaseModel):\n- frequency: RecurrenceFrequency\n- interval: int = Field(1, ge=1)\n- end_date: Optional[date] = None\n- end_occurrence_count: Optional[int] = Field(None, ge=1)\n-\n-class Reminder(BaseModel):\n- model_config = ConfigDict(frozen=True)\n\\ No newline at end of file\n+ return []\n\\ No newline at end of file\n" + }, + { + "date": 1724539669616, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,6 +1,7 @@\n+import subprocess\n from pydantic import BaseModel, Field, ConfigDict\n-from typing import List, Optional\n+from typing import List, Optional, Dict\n from datetime import datetime, date, time\n from enum import Enum\n import uuid\n \n@@ -92,5 +93,83 @@\n reminder\n for reminder_list in account.lists\n for reminder in reminder_list.reminders\n ]\n- return []\n\\ No newline at end of file\n+ return []\n+\n+ @classmethod\n+ def from_system(cls) -> 'RemindersAppState':\n+ accounts = cls._fetch_accounts()\n+ return cls(accounts=accounts)\n+\n+ @staticmethod\n+ def _run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ if error:\n+ raise RuntimeError(f\"AppleScript error: {error.decode('utf-8')}\")\n+ return output.decode('utf-8').strip()\n+\n+ @classmethod\n+ def _fetch_accounts(cls) -> List[RemindersAccount]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set accountList to {}\n+ repeat with anAccount in accounts\n+ set end of accountList to {id:id of anAccount, name:name of anAccount}\n+ end repeat\n+ return accountList\n+ end tell\n+ '''\n+ accounts_data = cls._run_applescript(script)\n+ # Parse accounts_data and create RemindersAccount objects\n+ # This is a simplified example; you'll need to implement proper parsing\n+ accounts = []\n+ for account_info in accounts_data.split(', '):\n+ account_id, account_name = account_info.split(':')\n+ account = RemindersAccount(\n+ id=uuid.UUID(account_id),\n+ name=account_name,\n+ type=AccountType.OTHER, # You might need to determine the correct type\n+ lists=cls._fetch_lists(account_id)\n+ )\n+ accounts.append(account)\n+ return accounts\n+\n+ @classmethod\n+ def _fetch_lists(cls, account_id: str) -> List[ReminderList]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set listData to {{}}\n+ set targetAccount to account id \"{account_id}\"\n+ repeat with aList in lists of targetAccount\n+ set listInfo to {{id:id of aList, name:name of aList}}\n+ set end of listData to listInfo\n+ end repeat\n+ return listData\n+ end tell\n+ '''\n+ lists_data = cls._run_applescript(script)\n+ # Parse lists_data and create ReminderList objects\n+ # This is a simplified example; you'll need to implement proper parsing\n+ reminder_lists = []\n+ for list_info in lists_data.split(', '):\n+ list_id, list_name = list_info.split(':')\n+ reminder_list = ReminderList(\n+ id=uuid.UUID(list_id),\n+ name=list_name,\n+ reminders=cls._fetch_reminders(list_id)\n+ )\n+ reminder_lists.append(reminder_list)\n+ return reminder_lists\n+\n+ @classmethod\n+ def _fetch_reminders(cls, list_id: str) -> List[Reminder]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set reminderData to {{}}\n+ set targetList to list id \"{list_id}\"\n+ repeat with aReminder in reminders of targetList\n+ set reminderInfo to {{id:id of aReminder, name:name of aReminder, notes:body of aReminder, dueDate:due date of aReminder}}\n+ set end of reminderData to reminderInfo\n+ end repeat\n+ return reminderData\n\\ No newline at end of file\n" + }, + { + "date": 1724540068837, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -3,8 +3,9 @@\n from typing import List, Optional, Dict\n from datetime import datetime, date, time\n from enum import Enum\n import uuid\n+import ast\n \n class Priority(Enum):\n NONE = 0\n LOW = 1\n@@ -114,19 +115,17 @@\n script = '''\n tell application \"Reminders\"\n set accountList to {}\n repeat with anAccount in accounts\n- set end of accountList to {id:id of anAccount, name:name of anAccount}\n+ set end of accountList to {id of anAccount as string, name of anAccount}\n end repeat\n return accountList\n end tell\n '''\n accounts_data = cls._run_applescript(script)\n- # Parse accounts_data and create RemindersAccount objects\n- # This is a simplified example; you'll need to implement proper parsing\n accounts = []\n- for account_info in accounts_data.split(', '):\n- account_id, account_name = account_info.split(':')\n+ for account_info in ast.literal_eval(accounts_data):\n+ account_id, account_name = account_info\n account = RemindersAccount(\n id=uuid.UUID(account_id),\n name=account_name,\n type=AccountType.OTHER, # You might need to determine the correct type\n@@ -141,10 +140,9 @@\n tell application \"Reminders\"\n set listData to {{}}\n set targetAccount to account id \"{account_id}\"\n repeat with aList in lists of targetAccount\n- set listInfo to {{id:id of aList, name:name of aList}}\n- set end of listData to listInfo\n+ set end of listData to {{id of aList as string, name of aList}}\n end repeat\n return listData\n end tell\n '''\n@@ -171,5 +169,21 @@\n repeat with aReminder in reminders of targetList\n set reminderInfo to {{id:id of aReminder, name:name of aReminder, notes:body of aReminder, dueDate:due date of aReminder}}\n set end of reminderData to reminderInfo\n end repeat\n- return reminderData\n\\ No newline at end of file\n+ return reminderData\n+ end tell\n+ '''\n+ reminders_data = cls._run_applescript(script)\n+ # Parse reminders_data and create Reminder objects\n+ # This is a simplified example; you'll need to implement proper parsing\n+ reminders = []\n+ for reminder_info in reminders_data.split(', '):\n+ reminder_id, title, notes, due_date = reminder_info.split(':')\n+ reminder = Reminder(\n+ id=uuid.UUID(reminder_id),\n+ title=title,\n+ notes=notes if notes != \"missing value\" else None,\n+ due_date=datetime.strptime(due_date, \"%Y-%m-%d\").date() if due_date != \"missing value\" else None\n+ )\n+ reminders.append(reminder)\n+ return reminders\n\\ No newline at end of file\n" + }, + { + "date": 1724540145033, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -3,9 +3,8 @@\n from typing import List, Optional, Dict\n from datetime import datetime, date, time\n from enum import Enum\n import uuid\n-import ast\n \n class Priority(Enum):\n NONE = 0\n LOW = 1\n@@ -115,17 +114,19 @@\n script = '''\n tell application \"Reminders\"\n set accountList to {}\n repeat with anAccount in accounts\n- set end of accountList to {id of anAccount as string, name of anAccount}\n+ set end of accountList to {id:id of anAccount, name:name of anAccount}\n end repeat\n return accountList\n end tell\n '''\n accounts_data = cls._run_applescript(script)\n+ # Parse accounts_data and create RemindersAccount objects\n+ # This is a simplified example; you'll need to implement proper parsing\n accounts = []\n- for account_info in ast.literal_eval(accounts_data):\n- account_id, account_name = account_info\n+ for account_info in accounts_data.split(', '):\n+ account_id, account_name = account_info.split(':')\n account = RemindersAccount(\n id=uuid.UUID(account_id),\n name=account_name,\n type=AccountType.OTHER, # You might need to determine the correct type\n@@ -140,9 +141,10 @@\n tell application \"Reminders\"\n set listData to {{}}\n set targetAccount to account id \"{account_id}\"\n repeat with aList in lists of targetAccount\n- set end of listData to {{id of aList as string, name of aList}}\n+ set listInfo to {{id:id of aList, name:name of aList}}\n+ set end of listData to listInfo\n end repeat\n return listData\n end tell\n '''\n" + }, + { + "date": 1724540202984, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -3,8 +3,9 @@\n from typing import List, Optional, Dict\n from datetime import datetime, date, time\n from enum import Enum\n import uuid\n+import ast\n \n class Priority(Enum):\n NONE = 0\n LOW = 1\n@@ -114,19 +115,17 @@\n script = '''\n tell application \"Reminders\"\n set accountList to {}\n repeat with anAccount in accounts\n- set end of accountList to {id:id of anAccount, name:name of anAccount}\n+ set end of accountList to {id of anAccount as string, name of anAccount}\n end repeat\n return accountList\n end tell\n '''\n accounts_data = cls._run_applescript(script)\n- # Parse accounts_data and create RemindersAccount objects\n- # This is a simplified example; you'll need to implement proper parsing\n accounts = []\n- for account_info in accounts_data.split(', '):\n- account_id, account_name = account_info.split(':')\n+ for account_info in ast.literal_eval(accounts_data):\n+ account_id, account_name = account_info\n account = RemindersAccount(\n id=uuid.UUID(account_id),\n name=account_name,\n type=AccountType.OTHER, # You might need to determine the correct type\n@@ -141,20 +140,17 @@\n tell application \"Reminders\"\n set listData to {{}}\n set targetAccount to account id \"{account_id}\"\n repeat with aList in lists of targetAccount\n- set listInfo to {{id:id of aList, name:name of aList}}\n- set end of listData to listInfo\n+ set end of listData to {{id of aList as string, name of aList}}\n end repeat\n return listData\n end tell\n '''\n lists_data = cls._run_applescript(script)\n- # Parse lists_data and create ReminderList objects\n- # This is a simplified example; you'll need to implement proper parsing\n reminder_lists = []\n- for list_info in lists_data.split(', '):\n- list_id, list_name = list_info.split(':')\n+ for list_info in ast.literal_eval(lists_data):\n+ list_id, list_name = list_info\n reminder_list = ReminderList(\n id=uuid.UUID(list_id),\n name=list_name,\n reminders=cls._fetch_reminders(list_id)\n@@ -168,20 +164,17 @@\n tell application \"Reminders\"\n set reminderData to {{}}\n set targetList to list id \"{list_id}\"\n repeat with aReminder in reminders of targetList\n- set reminderInfo to {{id:id of aReminder, name:name of aReminder, notes:body of aReminder, dueDate:due date of aReminder}}\n- set end of reminderData to reminderInfo\n+ set end of reminderData to {{id of aReminder as string, name of aReminder, body of aReminder, due date of aReminder}}\n end repeat\n return reminderData\n end tell\n '''\n reminders_data = cls._run_applescript(script)\n- # Parse reminders_data and create Reminder objects\n- # This is a simplified example; you'll need to implement proper parsing\n reminders = []\n- for reminder_info in reminders_data.split(', '):\n- reminder_id, title, notes, due_date = reminder_info.split(':')\n+ for reminder_info in ast.literal_eval(reminders_data):\n+ reminder_id, title, notes, due_date = reminder_info\n reminder = Reminder(\n id=uuid.UUID(reminder_id),\n title=title,\n notes=notes if notes != \"missing value\" else None,\n" } ], "date": 1724539089221, diff --git a/.lh/src/dspygen/utils/reminder_tools.py.json b/.lh/src/dspygen/utils/reminder_tools.py.json new file mode 100644 index 0000000..d4bcae4 --- /dev/null +++ b/.lh/src/dspygen/utils/reminder_tools.py.json @@ -0,0 +1,218 @@ +{ + "sourceFile": "src/dspygen/utils/reminder_tools.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 50, + "patches": [ + { + "date": 1724550119288, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724550175147, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,71 @@\n+import subprocess\n+from typing import List, Dict, Any\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+def get_all_lists() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to every list\n+ set listData to {}\n+ repeat with aList in allLists\n+ set end of listData to {id:(id of aList) as string, name:name of aList}\n+ end repeat\n+ return listData\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ return eval(raw_output)\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set listReminders to every reminder in targetList\n+ set reminderData to {{}}\n+ repeat with aReminder in listReminders\n+ set end of reminderData to {{id:(id of aReminder) as string, title:name of aReminder, dueDate:due date of aReminder, notes:body of aReminder}}\n+ end repeat\n+ return reminderData\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ return eval(raw_output)\n+\n+def create_reminder(title: str, notes: str = None, due_date: str = None, list_name: str = None) -> str:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set newReminder to make new reminder\n+ set name of newReminder to \"{title.replace('\"', '\\\\\"')}\"\n+ '''\n+\n+ if notes:\n+ script += f'set body of newReminder to \"{notes.replace('\"', '\\\\\"')}\"\\n'\n+\n+ if due_date:\n+ script += f'set due date of newReminder to date \"{due_date}\"\\n'\n+\n+ if list_name:\n+ script += f'''\n+ set targetList to list \"{list_name}\"\n+ if exists targetList then\n+ move newReminder to targetList\n+ else\n+ set newList to make new list with properties {{name:\"{list_name}\"}}\n+ move newReminder to newList\n+ end if\n+ '''\n+ \n+ script += '''\n+ return id of newReminder as string\n+ end tell\n+ '''\n+ \n+ return run_applescript(script)\n" + }, + { + "date": 1724550216094, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,71 @@\n+import subprocess\n+from typing import List, Dict, Any\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+def get_all_lists() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to every list\n+ set listData to {}\n+ repeat with aList in allLists\n+ copy {id:(id of aList) as string, name:name of aList} to end of listData\n+ end repeat\n+ return listData\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ return eval(raw_output)\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set listReminders to every reminder in targetList\n+ set reminderData to {{}}\n+ repeat with aReminder in listReminders\n+ copy {{id:(id of aReminder) as string, title:name of aReminder, dueDate:due date of aReminder, notes:body of aReminder}} to end of reminderData\n+ end repeat\n+ return reminderData\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ return eval(raw_output)\n+\n+def create_reminder(title: str, notes: str = None, due_date: str = None, list_name: str = None) -> str:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set newReminder to make new reminder\n+ set name of newReminder to \"{title.replace('\"', '\\\\\"')}\"\n+ '''\n+\n+ if notes:\n+ script += f'set body of newReminder to \"{notes.replace('\"', '\\\\\"')}\"\\n'\n+\n+ if due_date:\n+ script += f'set due date of newReminder to date \"{due_date}\"\\n'\n+\n+ if list_name:\n+ script += f'''\n+ set targetList to list \"{list_name}\"\n+ if exists targetList then\n+ move newReminder to targetList\n+ else\n+ set newList to make new list with properties {{name:\"{list_name}\"}}\n+ move newReminder to newList\n+ end if\n+ '''\n+ \n+ script += '''\n+ return id of newReminder as string\n+ end tell\n+ '''\n+ \n+ return run_applescript(script)\n\\ No newline at end of file\n" + }, + { + "date": 1724550229470, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,213 +1,1 @@\n-import subprocess\n-from typing import List, Dict, Any\n \n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to every list\n- set listData to {}\n- repeat with aList in allLists\n- copy {id:(id of aList) as string, name:name of aList} to end of listData\n- end repeat\n- return listData\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- return eval(raw_output)\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set listReminders to every reminder in targetList\n- set reminderData to {{}}\n- repeat with aReminder in listReminders\n- copy {{id:(id of aReminder) as string, title:name of aReminder, dueDate:due date of aReminder, notes:body of aReminder}} to end of reminderData\n- end repeat\n- return reminderData\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- return eval(raw_output)\n-\n-def create_reminder(title: str, notes: str = None, due_date: str = None, list_name: str = None) -> str:\n- script = f'''\n- tell application \"Reminders\"\n- set newReminder to make new reminder\n- set name of newReminder to \"{title.replace('\"', '\\\\\"')}\"\n- '''\n-\n- if notes:\n- script += f'set body of newReminder to \"{notes.replace('\"', '\\\\\"')}\"\\n'\n-\n- if due_date:\n- script += f'set due date of newReminder to date \"{due_date}\"\\n'\n-\n- if list_name:\n- script += f'''\n- set targetList to list \"{list_name}\"\n- if exists targetList then\n- move newReminder to targetList\n- else\n- set newList to make new list with properties {{name:\"{list_name}\"}}\n- move newReminder to newList\n- end if\n- '''\n- \n- script += '''\n- return id of newReminder as string\n- end tell\n- '''\n- \n- return run_applescript(script)\n-import subprocess\n-from typing import List, Dict, Any\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to every list\n- set listData to {}\n- repeat with aList in allLists\n- set end of listData to {id:(id of aList) as string, name:name of aList}\n- end repeat\n- return listData\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- return eval(raw_output)\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set listReminders to every reminder in targetList\n- set reminderData to {{}}\n- repeat with aReminder in listReminders\n- set end of reminderData to {{id:(id of aReminder) as string, title:name of aReminder, dueDate:due date of aReminder, notes:body of aReminder}}\n- end repeat\n- return reminderData\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- return eval(raw_output)\n-\n-def create_reminder(title: str, notes: str = None, due_date: str = None, list_name: str = None) -> str:\n- script = f'''\n- tell application \"Reminders\"\n- set newReminder to make new reminder\n- set name of newReminder to \"{title.replace('\"', '\\\\\"')}\"\n- '''\n-\n- if notes:\n- script += f'set body of newReminder to \"{notes.replace('\"', '\\\\\"')}\"\\n'\n-\n- if due_date:\n- script += f'set due date of newReminder to date \"{due_date}\"\\n'\n-\n- if list_name:\n- script += f'''\n- set targetList to list \"{list_name}\"\n- if exists targetList then\n- move newReminder to targetList\n- else\n- set newList to make new list with properties {{name:\"{list_name}\"}}\n- move newReminder to newList\n- end if\n- '''\n- \n- script += '''\n- return id of newReminder as string\n- end tell\n- '''\n- \n- return run_applescript(script)\n-import subprocess\n-from typing import List, Dict, Any\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to every list\n- set listData to {}\n- repeat with aList in allLists\n- set end of listData to {id:(id of aList) as string, name:name of aList}\n- end repeat\n- return listData\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- return eval(raw_output)\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set listReminders to every reminder in targetList\n- set reminderData to {{}}\n- repeat with aReminder in listReminders\n- set end of reminderData to {{id:(id of aReminder) as string, title:name of aReminder, dueDate:due date of aReminder, notes:body of aReminder}}\n- end repeat\n- return reminderData\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- return eval(raw_output)\n-\n-def create_reminder(title: str, notes: str = None, due_date: str = None, list_name: str = None) -> str:\n- script = f'''\n- tell application \"Reminders\"\n- set newReminder to make new reminder\n- set name of newReminder to \"{title.replace('\"', '\\\\\"')}\"\n- '''\n-\n- if notes:\n- script += f'set body of newReminder to \"{notes.replace('\"', '\\\\\"')}\"\\n'\n-\n- if due_date:\n- script += f'set due date of newReminder to date \"{due_date}\"\\n'\n-\n- if list_name:\n- script += f'''\n- set targetList to list \"{list_name}\"\n- if exists targetList then\n- move newReminder to targetList\n- else\n- set newList to make new list with properties {{name:\"{list_name}\"}}\n- move newReminder to newList\n- end if\n- '''\n- \n- script += '''\n- return id of newReminder as string\n- end tell\n- '''\n- \n- return run_applescript(script)\n\\ No newline at end of file\n" + }, + { + "date": 1724550239230, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,1 +1,51 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n \n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+def get_all_lists() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to every list\n+ set listData to {}\n+ repeat with aList in allLists\n+ set end of listData to {id:id of aList, name:name of aList}\n+ end repeat\n+ return listData as JSON\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set listReminders to every reminder in targetList\n+ set reminderData to {}\n+ repeat with aReminder in listReminders\n+ set end of reminderData to {{id:id of aReminder, title:name of aReminder, dueDate:due date of aReminder, notes:body of aReminder}}\n+ end repeat\n+ return reminderData as JSON\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+def create_reminder(title: str, notes: str = None, due_date: str = None, list_name: str = None) -> str:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set newReminder to make new reminder\n+ set name of newReminder to \"{title.replace('\"', '\\\\\"')}\"\n+ '''\n+\n+ if notes:\n+\n" + }, + { + "date": 1724550741457, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,63 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ \"\"\"\"\"\"\n+\n+ return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n+\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set reminderIDs to id of every reminder in targetList\n+ set reminderTitles to name of every reminder in targetList\n+ set reminderDueDates to due date of every reminder in targetList\n+ set reminderNotes to body of every reminder in targetList\n+ return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ print(get_all_lists())\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724550749474, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -21,9 +21,10 @@\n -- Output the lists\n allLists\n '''\n raw_output = run_applescript(script)\n- \"\"\"\"\"\"\n+ \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n+ \n \n return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n \n \n@@ -60,55 +61,4 @@\n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to every list\n- set listData to {}\n- repeat with aList in allLists\n- set end of listData to {id:id of aList, name:name of aList}\n- end repeat\n- return listData as JSON\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set listReminders to every reminder in targetList\n- set reminderData to {}\n- repeat with aReminder in listReminders\n- set end of reminderData to {{id:id of aReminder, title:name of aReminder, dueDate:due date of aReminder, notes:body of aReminder}}\n- end repeat\n- return reminderData as JSON\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-def create_reminder(title: str, notes: str = None, due_date: str = None, list_name: str = None) -> str:\n- script = f'''\n- tell application \"Reminders\"\n- set newReminder to make new reminder\n- set name of newReminder to \"{title.replace('\"', '\\\\\"')}\"\n- '''\n-\n- if notes:\n-\n" + }, + { + "date": 1724550759762, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,64 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n+ list_ids = raw_output.split(\", \")\n+\n+ return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n+\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set reminderIDs to id of every reminder in targetList\n+ set reminderTitles to name of every reminder in targetList\n+ set reminderDueDates to due date of every reminder in targetList\n+ set reminderNotes to body of every reminder in targetList\n+ return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ print(get_all_lists())\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724550768537, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -23,73 +23,10 @@\n '''\n raw_output = run_applescript(script)\n \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n list_ids = raw_output.split(\", \")\n-\n- return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n-\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set reminderIDs to id of every reminder in targetList\n- set reminderTitles to name of every reminder in targetList\n- set reminderDueDates to due date of every reminder in targetList\n- set reminderNotes to body of every reminder in targetList\n- return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- print(get_all_lists())\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n \n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n- \n-\n return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n \n \n def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n" + }, + { + "date": 1724550774864, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,66 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n+ list_ids = raw_output.split(\", \")\n+\n+ []\n+\n+ return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n+\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set reminderIDs to id of every reminder in targetList\n+ set reminderTitles to name of every reminder in targetList\n+ set reminderDueDates to due date of every reminder in targetList\n+ set reminderNotes to body of every reminder in targetList\n+ return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ print(get_all_lists())\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724550781179, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,66 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n+ list_ids = raw_output.split(\", \")\n+\n+ ids = [list_id for list_id in list_ids if list_id != \"\"]\n+\n+ return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n+\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set reminderIDs to id of every reminder in targetList\n+ set reminderTitles to name of every reminder in targetList\n+ set reminderDueDates to due date of every reminder in targetList\n+ set reminderNotes to body of every reminder in targetList\n+ return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ print(get_all_lists())\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724550788927, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -24,9 +24,9 @@\n raw_output = run_applescript(script)\n \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n list_ids = raw_output.split(\", \")\n \n- ids = [list_id for list_id in list_ids if list_id != \"\"]\n+ ids = [list_id for list_id in list_ids. if list_id != \"\"]\n \n return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n \n \n@@ -63,135 +63,4 @@\n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n- list_ids = raw_output.split(\", \")\n-\n- []\n-\n- return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n-\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set reminderIDs to id of every reminder in targetList\n- set reminderTitles to name of every reminder in targetList\n- set reminderDueDates to due date of every reminder in targetList\n- set reminderNotes to body of every reminder in targetList\n- return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- print(get_all_lists())\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n- list_ids = raw_output.split(\", \")\n- \n-\n- return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n-\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set reminderIDs to id of every reminder in targetList\n- set reminderTitles to name of every reminder in targetList\n- set reminderDueDates to due date of every reminder in targetList\n- set reminderNotes to body of every reminder in targetList\n- return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- print(get_all_lists())\n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724550796347, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -24,10 +24,8 @@\n raw_output = run_applescript(script)\n \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n list_ids = raw_output.split(\", \")\n \n- ids = [list_id for list_id in list_ids. if list_id != \"\"]\n-\n return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n \n \n def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n" + }, + { + "date": 1724550851000, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,64 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ \n+\n+ return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n+\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set reminderIDs to id of every reminder in targetList\n+ set reminderTitles to name of every reminder in targetList\n+ set reminderDueDates to due date of every reminder in targetList\n+ set reminderNotes to body of every reminder in targetList\n+ return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ print(get_all_lists())\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724550860068, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,65 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ # ['list id E4A69F9A-BA15-4296-B217-9F735652A0FA', 'list id B4B66208-A23D-4E10-B49A-36FF4DA3965A', 'list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18', 'list id 378C4398-75DC-418F-B77C-558137394A66', 'list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1', 'list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE', 'list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B']\n+ ids =\n+\n+ return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n+\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set reminderIDs to id of every reminder in targetList\n+ set reminderTitles to name of every reminder in targetList\n+ set reminderDueDates to due date of every reminder in targetList\n+ set reminderNotes to body of every reminder in targetList\n+ return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ print(get_all_lists())\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724550867391, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -23,13 +23,12 @@\n '''\n raw_output = run_applescript(script)\n list_ids = raw_output.split(\", \")\n # ['list id E4A69F9A-BA15-4296-B217-9F735652A0FA', 'list id B4B66208-A23D-4E10-B49A-36FF4DA3965A', 'list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18', 'list id 378C4398-75DC-418F-B77C-558137394A66', 'list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1', 'list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE', 'list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B']\n- ids =\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n \n- return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n+ return ids\n \n-\n def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n script = f'''\n tell application \"Reminders\"\n set targetList to list id \"{list_id}\"\n@@ -62,132 +61,4 @@\n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- \n-\n- return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n-\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set reminderIDs to id of every reminder in targetList\n- set reminderTitles to name of every reminder in targetList\n- set reminderDueDates to due date of every reminder in targetList\n- set reminderNotes to body of every reminder in targetList\n- return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- print(get_all_lists())\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- \"\"\"b'list id E4A69F9A-BA15-4296-B217-9F735652A0FA, list id B4B66208-A23D-4E10-B49A-36FF4DA3965A, list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18, list id 378C4398-75DC-418F-B77C-558137394A66, list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1, list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE, list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B\\n'\"\"\"\n- list_ids = raw_output.split(\", \")\n-\n- return [{'id': list_id, 'name': list_name} for list_id, list_name in zip(list_ids, list_names)]\n-\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set reminderIDs to id of every reminder in targetList\n- set reminderTitles to name of every reminder in targetList\n- set reminderDueDates to due date of every reminder in targetList\n- set reminderNotes to body of every reminder in targetList\n- return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- print(get_all_lists())\n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724550874848, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,64 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ # ['list id E4A69F9A-BA15-4296-B217-9F735652A0FA', 'list id B4B66208-A23D-4E10-B49A-36FF4DA3965A', 'list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18', 'list id 378C4398-75DC-418F-B77C-558137394A66', 'list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1', 'list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE', 'list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B']\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetList to list id \"{list_id}\"\n+ set reminderIDs to id of every reminder in targetList\n+ set reminderTitles to name of every reminder in targetList\n+ set reminderDueDates to due date of every reminder in targetList\n+ set reminderNotes to body of every reminder in targetList\n+ return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n+ end tell\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ print(get_all_lists())\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724550946175, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -22,89 +22,25 @@\n allLists\n '''\n raw_output = run_applescript(script)\n list_ids = raw_output.split(\", \")\n- # ['list id E4A69F9A-BA15-4296-B217-9F735652A0FA', 'list id B4B66208-A23D-4E10-B49A-36FF4DA3965A', 'list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18', 'list id 378C4398-75DC-418F-B77C-558137394A66', 'list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1', 'list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE', 'list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B']\n ids = [list_id.split(\" \")[2] for list_id in list_ids]\n \n return ids\n \n def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set reminderIDs to id of every reminder in targetList\n- set reminderTitles to name of every reminder in targetList\n- set reminderDueDates to due date of every reminder in targetList\n- set reminderNotes to body of every reminder in targetList\n- return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n- end tell\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+ set listID to \"E4A69F9A-BA15-4296-B217-9F735652A0FA\"\n \n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n+tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+end tell\n \n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- print(get_all_lists())\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n+-- Output the reminders\n+remindersInList\n '''\n raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- # ['list id E4A69F9A-BA15-4296-B217-9F735652A0FA', 'list id B4B66208-A23D-4E10-B49A-36FF4DA3965A', 'list id 15DE35D7-37EF-4E2F-B271-57ADB4B71E18', 'list id 378C4398-75DC-418F-B77C-558137394A66', 'list id 93280B69-3D37-4FD4-91D0-83CFFD7D74E1', 'list id 129F5F6F-2749-4ECD-8983-C4A64400C6AE', 'list id 8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B']\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetList to list id \"{list_id}\"\n- set reminderIDs to id of every reminder in targetList\n- set reminderTitles to name of every reminder in targetList\n- set reminderDueDates to due date of every reminder in targetList\n- set reminderNotes to body of every reminder in targetList\n- return {{reminderIDs, reminderTitles, reminderDueDates, reminderNotes}} as JSON\n- end tell\n- '''\n- raw_output = run_applescript(script)\n reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n \n return [\n {\n" + }, + { + "date": 1724550951487, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -30,15 +30,15 @@\n def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n script = f'''\n set listID to \"E4A69F9A-BA15-4296-B217-9F735652A0FA\"\n \n-tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n-end tell\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n \n--- Output the reminders\n-remindersInList\n+ -- Output the reminders\n+ remindersInList\n '''\n raw_output = run_applescript(script)\n reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n \n" + }, + { + "date": 1724551135953, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,1 @@\n+\n" + }, + { + "date": 1724551144890, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,5 +1,4 @@\n-\n import subprocess\n from typing import List, Dict, Any\n import json\n \n@@ -28,18 +27,17 @@\n \n return ids\n \n def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''\n- set listID to \"E4A69F9A-BA15-4296-B217-9F735652A0FA\"\n+ script = f'''set listID to \"{list_id}\"\n \n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n \n- -- Output the reminders\n- remindersInList\n+ -- Output the reminders\n+ remindersInList\n '''\n raw_output = run_applescript(script)\n reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n \n@@ -53,13 +51,20 @@\n for reminder_id, reminder_title, reminder_due_date, reminder_note in\n zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n ]\n \n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ \n+\n+\n def main():\n \"\"\"Main function\"\"\"\n from dspygen.utils.dspy_tools import init_ol\n init_ol()\n- print(get_all_lists())\n+ id = get_all_lists()[0]\n \n+ print(get_reminders_for_list(id))\n \n+\n if __name__ == '__main__':\n main()\n" + }, + { + "date": 1724551159586, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -53,18 +53,28 @@\n ]\n \n \n def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- \n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n \n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n \n+\n def main():\n \"\"\"Main function\"\"\"\n from dspygen.utils.dspy_tools import init_ol\n init_ol()\n id = get_all_lists()[0]\n \n print(get_reminders_for_list(id))\n+ \n \n \n if __name__ == '__main__':\n main()\n" + }, + { + "date": 1724551171486, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,80 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n+\n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(id)[0]['id']\n+ print(get_reminders_for_list(id))\n+\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724551199504, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -38,8 +38,9 @@\n -- Output the reminders\n remindersInList\n '''\n raw_output = run_applescript(script)\n+ \n reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n \n return [\n {\n@@ -77,84 +78,4 @@\n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n-\n- print(get_reminders_for_list(id))\n- \n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724551208336, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,81 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ result =\"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n+ reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n+\n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(id)[0]['id']\n+ print(get_reminders_for_list(id))\n+\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724551216422, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -39,9 +39,9 @@\n remindersInList\n '''\n raw_output = run_applescript(script)\n result =\"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n- reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n+ reminder_ids \n \n return [\n {\n 'id': reminder_id,\n@@ -78,85 +78,4 @@\n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- \n- reminder_ids, reminder_titles, reminder_due_dates, reminder_notes = json.loads(raw_output)\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]['id']\n- print(get_reminders_for_list(id))\n-\n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724551222263, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,81 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n+ reminder_ids = \n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n+\n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(id)[0]['id']\n+ print(get_reminders_for_list(id))\n+\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724551230840, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -39,9 +39,9 @@\n remindersInList\n '''\n raw_output = run_applescript(script)\n result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n- reminder_ids = \n+ reminder_ids = raw\n \n return [\n {\n 'id': reminder_id,\n@@ -78,85 +78,4 @@\n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- result =\"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n- reminder_ids \n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]['id']\n- print(get_reminders_for_list(id))\n-\n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724551236639, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,81 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n+ reminder_ids = raw_output.split()\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n+\n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(id)[0]['id']\n+ print(get_reminders_for_list(id))\n+\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724551242568, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,82 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n+ reminder_ids = raw_output.split(', ')\n+ \n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n+\n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(id)[0]['id']\n+ print(get_reminders_for_list(id))\n+\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724551249109, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,82 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split('')[2] for reminder_id in reminder_ids]\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n+\n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(id)[0]['id']\n+ print(get_reminders_for_list(id))\n+\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724551256747, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,82 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split('//')[1] for reminder_id in reminder_ids]\n+\n+ return [\n+ {\n+ 'id': reminder_id,\n+ 'title': reminder_title,\n+ 'dueDate': reminder_due_date,\n+ 'notes': reminder_note\n+ }\n+ for reminder_id, reminder_title, reminder_due_date, reminder_note in\n+ zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n+ ]\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n+\n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(id)[0]['id']\n+ print(get_reminders_for_list(id))\n+\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724551261946, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,73 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split('//')[1] for reminder_id in reminder_ids]\n+\n+ return ids\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n+\n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(id)[0]['id']\n+ print(get_reminders_for_list(id))\n+\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724551273573, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -38,9 +38,8 @@\n -- Output the reminders\n remindersInList\n '''\n raw_output = run_applescript(script)\n- result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n reminder_ids = raw_output.split(', ')\n ids = [reminder_id.split('//')[1] for reminder_id in reminder_ids]\n \n return ids\n@@ -63,419 +62,11 @@\n \"\"\"Main function\"\"\"\n from dspygen.utils.dspy_tools import init_ol\n init_ol()\n id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]['id']\n+ reminder_id = get_reminders_for_list(id)[0]\n print(get_reminders_for_list(id))\n \n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n- reminder_ids = raw_output.split(', ')\n- ids = [reminder_id.split('//')[1] for reminder_id in reminder_ids]\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]['id']\n- print(get_reminders_for_list(id))\n-\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n- reminder_ids = raw_output.split(', ')\n- ids = [reminder_id.split('')[2] for reminder_id in reminder_ids]\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]['id']\n- print(get_reminders_for_list(id))\n-\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n- reminder_ids = raw_output.split(', ')\n- \n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]['id']\n- print(get_reminders_for_list(id))\n-\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n- reminder_ids = raw_output.split()\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]['id']\n- print(get_reminders_for_list(id))\n-\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- result = \"\"\"reminder id x-apple-reminder://C453D220-3D19-546B-8903-80B32E53EA4D, reminder id x-apple-reminder://31BAB27B-EC21-534D-8C7C-85872CF01FB2, reminder id x-apple-reminder://9B788246-1DA1-56FB-8AA8-9F0B47568E60, reminder id x-apple-reminder://48E6CA98-2A68-55C6-A747-185C109EA670, reminder id x-apple-reminder://671E8FD0-45DC-5380-90AC-AC9CAA00A1D8, reminder id x-apple-reminder://6DE3CB29-A6AF-51DF-9365-4B339DF76448, reminder id x-apple-reminder://CAEA3F43-3A92-527C-8628-217EFAE58341, reminder id x-apple-reminder://89978820-1489-5DC3-A41D-DAFC620E1B9F, reminder id x-apple-reminder://46721AC4-5FFF-5A9E-82EF-21DBDCFEC008, reminder id x-apple-reminder://DF63AAC4-1230-5B2C-A79C-03D8078FDCC0, reminder id x-apple-reminder://F60C10BF-5E4C-54DA-B5C2-6BB80346F7EB, reminder id x-apple-reminder://52C383F6-E621-5480-A4F8-441D335163E7, reminder id x-apple-reminder://CB89176F-1E16-45D1-9D07-797675AAE0DB, reminder id x-apple-reminder://69492E1C-4D2E-4EB5-B08B-EA6A9BDA5A36, reminder id x-apple-reminder://B54E4C70-4073-5C82-8CEB-11A29753A0AA, reminder id x-apple-reminder://6890C5F0-6625-5FC3-BD84-8AE60B7A7A53\"\"\"\n- reminder_ids = raw\n-\n- return [\n- {\n- 'id': reminder_id,\n- 'title': reminder_title,\n- 'dueDate': reminder_due_date,\n- 'notes': reminder_note\n- }\n- for reminder_id, reminder_title, reminder_due_date, reminder_note in\n- zip(reminder_ids, reminder_titles, reminder_due_dates, reminder_notes)\n- ]\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]['id']\n- print(get_reminders_for_list(id))\n-\n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724551279841, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,72 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split('//')[1] for reminder_id in reminder_ids]\n+\n+ return ids\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+ tell application \"Reminders\"\n+ set targetReminder to reminder id \"{reminder_id}\"\n+ end tell\n+\n+ -- Output the reminder\n+ targetReminder\n+ '''\n+ raw_output = run_applescript(script)\n+ return json.loads(raw_output)\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(id)[0]\n+ print(get_reminder_by_id(reminder_id))\n+\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724552782232, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -26,9 +26,9 @@\n ids = [list_id.split(\" \")[2] for list_id in list_ids]\n \n return ids\n \n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n+def get_reminders_for_list(list_id: str) -> List[str]:\n script = f'''set listID to \"{list_id}\"\n \n tell application \"Reminders\"\n set targetList to first list whose id is listID\n@@ -39,106 +39,6 @@\n remindersInList\n '''\n raw_output = run_applescript(script)\n reminder_ids = raw_output.split(', ')\n- ids = [reminder_id.split('//')[1] for reminder_id in reminder_ids]\n+ ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n \n- return ids\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]\n- print(get_reminder_by_id(reminder_id))\n-\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids = raw_output.split(', ')\n- ids = [reminder_id.split('//')[1] for reminder_id in reminder_ids]\n-\n- return ids\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n- tell application \"Reminders\"\n- set targetReminder to reminder id \"{reminder_id}\"\n- end tell\n-\n- -- Output the reminder\n- targetReminder\n- '''\n- raw_output = run_applescript(script)\n- return json.loads(raw_output)\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(id)[0]\n- print(get_reminders_for_list(id))\n-\n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724552817063, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -41,4 +41,48 @@\n raw_output = run_applescript(script)\n reminder_ids = raw_output.split(', ')\n ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n \n+ return ids\n+\n+\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+-- Extract the reminder ID from the URL\n+set reminderID to \"{reminder_id}\"\n+\n+-- Use Reminders app to get the reminder data\n+tell application \"Reminders\"\n+ set theReminder to (first reminder whose id is reminderID)\n+ set reminderName to name of theReminder\n+ set reminderBody to body of theReminder\n+ set reminderDueDate to due date of theReminder\n+ set reminderCompleted to completed of theReminder\n+end tell\n+\n+-- Convert the reminder data to a comma-separated list\n+set csvOutput to reminderID & \", \" & ¬\n+ reminderName & \", \" & ¬\n+ reminderBody & \", \" & ¬\n+ reminderDueDate & \", \" & ¬\n+ (reminderCompleted as string)\n+\n+-- Output the comma-separated list\n+return csvOutput\n+'''\n+ raw_output = run_applescript(script)\n+ return raw_output\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ list_id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(list_id)[0]\n+ print(get_reminder_by_id(reminder_id))\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724552838297, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,8 +1,10 @@\n import subprocess\n from typing import List, Dict, Any\n import json\n \n+from pydantic import BaseModel\n+\n def run_applescript(script: str) -> str:\n process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n output, error = process.communicate()\n \n@@ -44,8 +46,14 @@\n \n return ids\n \n \n+class Reminder(BaseModel):\n+ id: str\n+ name: str\n+ body: str\n+ due_date: str\n+ completed: bool\n \n \n def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n script = f'''\n" + }, + { + "date": 1724552843708, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -47,9 +47,9 @@\n return ids\n \n \n class Reminder(BaseModel):\n- id: str\n+ id: str = \n name: str\n body: str\n due_date: str\n completed: bool\n" + }, + { + "date": 1724552857224, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -47,9 +47,9 @@\n return ids\n \n \n class Reminder(BaseModel):\n- id: str = \n+ id: str = Field(..., min_length=1, max_length=255, description=\"The ID of the reminder \")\n name: str\n body: str\n due_date: str\n completed: bool\n" + }, + { + "date": 1724552867992, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,96 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+from pydantic import BaseModel\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[str]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n+\n+ return ids\n+\n+\n+class Reminder(BaseModel):\n+ id: str = Field(..., min_length=1, max_length=255\")\n+ name: str\n+ body: str\n+ due_date: str\n+ completed: bool\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+-- Extract the reminder ID from the URL\n+set reminderID to \"{reminder_id}\"\n+\n+-- Use Reminders app to get the reminder data\n+tell application \"Reminders\"\n+ set theReminder to (first reminder whose id is reminderID)\n+ set reminderName to name of theReminder\n+ set reminderBody to body of theReminder\n+ set reminderDueDate to due date of theReminder\n+ set reminderCompleted to completed of theReminder\n+end tell\n+\n+-- Convert the reminder data to a comma-separated list\n+set csvOutput to reminderID & \", \" & ¬\n+ reminderName & \", \" & ¬\n+ reminderBody & \", \" & ¬\n+ reminderDueDate & \", \" & ¬\n+ (reminderCompleted as string)\n+\n+-- Output the comma-separated list\n+return csvOutput\n+'''\n+ raw_output = run_applescript(script)\n+ return raw_output\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ list_id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(list_id)[0]\n+ print(get_reminder_by_id(reminder_id))\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724552876506, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,9 +1,9 @@\n import subprocess\n from typing import List, Dict, Any\n import json\n \n-from pydantic import BaseModel\n+from pydantic import BaseModel, Field\n \n def run_applescript(script: str) -> str:\n process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n output, error = process.communicate()\n@@ -47,9 +47,9 @@\n return ids\n \n \n class Reminder(BaseModel):\n- id: str = Field(..., min_length=1, max_length=255\")\n+ id: str = Field(..., min_length=1, max_length=255)\n name: str\n body: str\n due_date: str\n completed: bool\n@@ -93,100 +93,4 @@\n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-from pydantic import BaseModel\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[str]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids = raw_output.split(', ')\n- ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n-\n- return ids\n-\n-\n-class Reminder(BaseModel):\n- id: str = Field(..., min_length=1, max_length=255, description=\"The ID of the reminder \")\n- name: str\n- body: str\n- due_date: str\n- completed: bool\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n--- Extract the reminder ID from the URL\n-set reminderID to \"{reminder_id}\"\n-\n--- Use Reminders app to get the reminder data\n-tell application \"Reminders\"\n- set theReminder to (first reminder whose id is reminderID)\n- set reminderName to name of theReminder\n- set reminderBody to body of theReminder\n- set reminderDueDate to due date of theReminder\n- set reminderCompleted to completed of theReminder\n-end tell\n-\n--- Convert the reminder data to a comma-separated list\n-set csvOutput to reminderID & \", \" & ¬\n- reminderName & \", \" & ¬\n- reminderBody & \", \" & ¬\n- reminderDueDate & \", \" & ¬\n- (reminderCompleted as string)\n-\n--- Output the comma-separated list\n-return csvOutput\n-'''\n- raw_output = run_applescript(script)\n- return raw_output\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- list_id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(list_id)[0]\n- print(get_reminder_by_id(reminder_id))\n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724552893283, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,96 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+from pydantic import BaseModel, Field\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[str]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n+\n+ return ids\n+\n+\n+class Reminder(BaseModel):\n+ id: str = Field(..., min_length=1, max_length=255)\n+ name: str = Field(..., min_length=1, max_length=255)\n+ body: str = Field(..., min_length=1, max_length=1000)\n+ due_date: str = Field(None, min_length=1, max_length=255)\n+ completed: bool\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+-- Extract the reminder ID from the URL\n+set reminderID to \"{reminder_id}\"\n+\n+-- Use Reminders app to get the reminder data\n+tell application \"Reminders\"\n+ set theReminder to (first reminder whose id is reminderID)\n+ set reminderName to name of theReminder\n+ set reminderBody to body of theReminder\n+ set reminderDueDate to due date of theReminder\n+ set reminderCompleted to completed of theReminder\n+end tell\n+\n+-- Convert the reminder data to a comma-separated list\n+set csvOutput to reminderID & \", \" & ¬\n+ reminderName & \", \" & ¬\n+ reminderBody & \", \" & ¬\n+ reminderDueDate & \", \" & ¬\n+ (reminderCompleted as string)\n+\n+-- Output the comma-separated list\n+return csvOutput\n+'''\n+ raw_output = run_applescript(script)\n+ return raw_output\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ list_id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(list_id)[0]\n+ print(get_reminder_by_id(reminder_id))\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724552898386, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,96 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+from pydantic import BaseModel, Field\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+def get_reminders_for_list(list_id: str) -> List[str]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n+\n+ return ids\n+\n+\n+class Reminder(BaseModel):\n+ id: str = Field(..., min_length=1, max_length=255)\n+ name: str = Field(..., min_length=1, max_length=255)\n+ body: str = Field(None, min_length=1, max_length=1000)\n+ due_date: str = Field(None, min_length=1, max_length=255)\n+ completed: bool\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+-- Extract the reminder ID from the URL\n+set reminderID to \"{reminder_id}\"\n+\n+-- Use Reminders app to get the reminder data\n+tell application \"Reminders\"\n+ set theReminder to (first reminder whose id is reminderID)\n+ set reminderName to name of theReminder\n+ set reminderBody to body of theReminder\n+ set reminderDueDate to due date of theReminder\n+ set reminderCompleted to completed of theReminder\n+end tell\n+\n+-- Convert the reminder data to a comma-separated list\n+set csvOutput to reminderID & \", \" & ¬\n+ reminderName & \", \" & ¬\n+ reminderBody & \", \" & ¬\n+ reminderDueDate & \", \" & ¬\n+ (reminderCompleted as string)\n+\n+-- Output the comma-separated list\n+return csvOutput\n+'''\n+ raw_output = run_applescript(script)\n+ return raw_output\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ list_id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(list_id)[0]\n+ print(get_reminder_by_id(reminder_id))\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724552904191, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -51,9 +51,9 @@\n id: str = Field(..., min_length=1, max_length=255)\n name: str = Field(..., min_length=1, max_length=255)\n body: str = Field(None, min_length=1, max_length=1000)\n due_date: str = Field(None, min_length=1, max_length=255)\n- completed: bool\n+ completed: bool = Field(F)\n \n \n def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n script = f'''\n@@ -93,196 +93,4 @@\n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-from pydantic import BaseModel, Field\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[str]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids = raw_output.split(', ')\n- ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n-\n- return ids\n-\n-\n-class Reminder(BaseModel):\n- id: str = Field(..., min_length=1, max_length=255)\n- name: str = Field(..., min_length=1, max_length=255)\n- body: str = Field(..., min_length=1, max_length=1000)\n- due_date: str = Field(None, min_length=1, max_length=255)\n- completed: bool\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n--- Extract the reminder ID from the URL\n-set reminderID to \"{reminder_id}\"\n-\n--- Use Reminders app to get the reminder data\n-tell application \"Reminders\"\n- set theReminder to (first reminder whose id is reminderID)\n- set reminderName to name of theReminder\n- set reminderBody to body of theReminder\n- set reminderDueDate to due date of theReminder\n- set reminderCompleted to completed of theReminder\n-end tell\n-\n--- Convert the reminder data to a comma-separated list\n-set csvOutput to reminderID & \", \" & ¬\n- reminderName & \", \" & ¬\n- reminderBody & \", \" & ¬\n- reminderDueDate & \", \" & ¬\n- (reminderCompleted as string)\n-\n--- Output the comma-separated list\n-return csvOutput\n-'''\n- raw_output = run_applescript(script)\n- return raw_output\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- list_id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(list_id)[0]\n- print(get_reminder_by_id(reminder_id))\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-from pydantic import BaseModel, Field\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-def get_reminders_for_list(list_id: str) -> List[str]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids = raw_output.split(', ')\n- ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n-\n- return ids\n-\n-\n-class Reminder(BaseModel):\n- id: str = Field(..., min_length=1, max_length=255)\n- name: str\n- body: str\n- due_date: str\n- completed: bool\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n--- Extract the reminder ID from the URL\n-set reminderID to \"{reminder_id}\"\n-\n--- Use Reminders app to get the reminder data\n-tell application \"Reminders\"\n- set theReminder to (first reminder whose id is reminderID)\n- set reminderName to name of theReminder\n- set reminderBody to body of theReminder\n- set reminderDueDate to due date of theReminder\n- set reminderCompleted to completed of theReminder\n-end tell\n-\n--- Convert the reminder data to a comma-separated list\n-set csvOutput to reminderID & \", \" & ¬\n- reminderName & \", \" & ¬\n- reminderBody & \", \" & ¬\n- reminderDueDate & \", \" & ¬\n- (reminderCompleted as string)\n-\n--- Output the comma-separated list\n-return csvOutput\n-'''\n- raw_output = run_applescript(script)\n- return raw_output\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- list_id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(list_id)[0]\n- print(get_reminder_by_id(reminder_id))\n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724552932857, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,98 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+from pydantic import BaseModel, Field\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+\n+\n+def get_reminders_for_list(list_id: str) -> List[str]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n+\n+ return ids\n+\n+\n+class Reminder(BaseModel):\n+ id: str = Field(..., min_length=1, max_length=255)\n+ name: str = Field(..., min_length=1, max_length=255)\n+ body: str = Field(None, min_length=1, max_length=1000)\n+ due_date: str = Field(None, min_length=1, max_length=255)\n+ completed: bool = Field(False)\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+-- Extract the reminder ID from the URL\n+set reminderID to \"{reminder_id}\"\n+\n+-- Use Reminders app to get the reminder data\n+tell application \"Reminders\"\n+ set theReminder to (first reminder whose id is reminderID)\n+ set reminderName to name of theReminder\n+ set reminderBody to body of theReminder\n+ set reminderDueDate to due date of theReminder\n+ set reminderCompleted to completed of theReminder\n+end tell\n+\n+-- Convert the reminder data to a comma-separated list\n+set csvOutput to reminderID & \", \" & ¬\n+ reminderName & \", \" & ¬\n+ reminderBody & \", \" & ¬\n+ reminderDueDate & \", \" & ¬\n+ (reminderCompleted as string)\n+\n+-- Output the comma-separated list\n+return csvOutput\n+'''\n+ raw_output = run_applescript(script)\n+ return raw_output\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ list_id = get_all_lists()[0]\n+ reminder_id = get_reminders_for_list(list_id)[0]\n+ print(get_reminder_by_id(reminder_id))\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724552983431, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -29,104 +29,26 @@\n \n return ids\n \n \n-\n-def get_reminders_for_list(list_id: str) -> List[str]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids = raw_output.split(', ')\n- ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n-\n- return ids\n-\n-\n-class Reminder(BaseModel):\n- id: str = Field(..., min_length=1, max_length=255)\n- name: str = Field(..., min_length=1, max_length=255)\n- body: str = Field(None, min_length=1, max_length=1000)\n- due_date: str = Field(None, min_length=1, max_length=255)\n- completed: bool = Field(False)\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n--- Extract the reminder ID from the URL\n-set reminderID to \"{reminder_id}\"\n-\n--- Use Reminders app to get the reminder data\n-tell application \"Reminders\"\n- set theReminder to (first reminder whose id is reminderID)\n- set reminderName to name of theReminder\n- set reminderBody to body of theReminder\n- set reminderDueDate to due date of theReminder\n- set reminderCompleted to completed of theReminder\n-end tell\n-\n--- Convert the reminder data to a comma-separated list\n-set csvOutput to reminderID & \", \" & ¬\n- reminderName & \", \" & ¬\n- reminderBody & \", \" & ¬\n- reminderDueDate & \", \" & ¬\n- (reminderCompleted as string)\n-\n--- Output the comma-separated list\n-return csvOutput\n-'''\n- raw_output = run_applescript(script)\n- return raw_output\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- list_id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(list_id)[0]\n- print(get_reminder_by_id(reminder_id))\n-\n-\n-if __name__ == '__main__':\n- main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-from pydantic import BaseModel, Field\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n+def get_all_list_names() -> List[Dict[str, str]]:\n script = '''\n tell application \"Reminders\"\n- set allLists to lists\n+ set allLists to every list\n+ set listInfo to {}\n+ repeat with aList in allLists\n+ set end of listInfo to {id:id of aList, name:name of aList}\n+ end repeat\n end tell\n-\n- -- Output the lists\n- allLists\n+ return listInfo\n '''\n raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+ \n+ # Parse the output into a list of dictionaries\n+ list_data = json.loads(raw_output.replace(\"'\", '\"'))\n+ \n+ return list_data\n \n- return ids\n \n def get_reminders_for_list(list_id: str) -> List[str]:\n script = f'''set listID to \"{list_id}\"\n \n@@ -149,9 +71,9 @@\n id: str = Field(..., min_length=1, max_length=255)\n name: str = Field(..., min_length=1, max_length=255)\n body: str = Field(None, min_length=1, max_length=1000)\n due_date: str = Field(None, min_length=1, max_length=255)\n- completed: bool = Field(F)\n+ completed: bool = Field(False)\n \n \n def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n script = f'''\n" + }, + { + "date": 1724553096534, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,116 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+from pydantic import BaseModel, Field\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+\n+def get_all_list_names() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to every list\n+ set listInfo to {}\n+ repeat with aList in allLists\n+ set end of listInfo to {id:id of aList, name:name of aList}\n+ end repeat\n+ end tell\n+ return listInfo\n+ '''\n+ raw_output = run_applescript(script)\n+ raw_output = \"\"\"id:E4A69F9A-BA15-4296-B217-9F735652A0FA, name:Self-care, id:B4B66208-A23D-4E10-B49A-36FF4DA3965A, name:Today, id:15DE35D7-37EF-4E2F-B271-57ADB4B71E18, name:Six Item List, id:378C4398-75DC-418F-B77C-558137394A66, name:Social Groups, id:93280B69-3D37-4FD4-91D0-83CFFD7D74E1, name:To Read List, id:129F5F6F-2749-4ECD-8983-C4A64400C6AE, name:New List 3, id:8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B, name:Test Reminders List\"\"\"\n+ # Parse the output into a list of dictionaries\n+ \n+ return list_data\n+\n+\n+def get_reminders_for_list(list_id: str) -> List[str]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n+\n+ return ids\n+\n+\n+class Reminder(BaseModel):\n+ id: str = Field(..., min_length=1, max_length=255)\n+ name: str = Field(..., min_length=1, max_length=255)\n+ body: str = Field(None, min_length=1, max_length=1000)\n+ due_date: str = Field(None, min_length=1, max_length=255)\n+ completed: bool = Field(False)\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+-- Extract the reminder ID from the URL\n+set reminderID to \"{reminder_id}\"\n+\n+-- Use Reminders app to get the reminder data\n+tell application \"Reminders\"\n+ set theReminder to (first reminder whose id is reminderID)\n+ set reminderName to name of theReminder\n+ set reminderBody to body of theReminder\n+ set reminderDueDate to due date of theReminder\n+ set reminderCompleted to completed of theReminder\n+end tell\n+\n+-- Convert the reminder data to a comma-separated list\n+set csvOutput to reminderID & \", \" & ¬\n+ reminderName & \", \" & ¬\n+ reminderBody & \", \" & ¬\n+ reminderDueDate & \", \" & ¬\n+ (reminderCompleted as string)\n+\n+-- Output the comma-separated list\n+return csvOutput\n+'''\n+ raw_output = run_applescript(script)\n+ return raw_output\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ # list_id = get_all_lists()[0]\n+ # reminder_id = get_reminders_for_list(list_id)[0]\n+ # print(get_reminder_by_id(reminder_id))\n+ print(get_all_list_names())\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + }, + { + "date": 1724553102312, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -43,9 +43,9 @@\n '''\n raw_output = run_applescript(script)\n raw_output = \"\"\"id:E4A69F9A-BA15-4296-B217-9F735652A0FA, name:Self-care, id:B4B66208-A23D-4E10-B49A-36FF4DA3965A, name:Today, id:15DE35D7-37EF-4E2F-B271-57ADB4B71E18, name:Six Item List, id:378C4398-75DC-418F-B77C-558137394A66, name:Social Groups, id:93280B69-3D37-4FD4-91D0-83CFFD7D74E1, name:To Read List, id:129F5F6F-2749-4ECD-8983-C4A64400C6AE, name:New List 3, id:8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B, name:Test Reminders List\"\"\"\n # Parse the output into a list of dictionaries\n- \n+ \n return list_data\n \n \n def get_reminders_for_list(list_id: str) -> List[str]:\n@@ -113,120 +113,4 @@\n \n \n if __name__ == '__main__':\n main()\n-import subprocess\n-from typing import List, Dict, Any\n-import json\n-\n-from pydantic import BaseModel, Field\n-\n-def run_applescript(script: str) -> str:\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- \n- if error:\n- raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n- \n- return output.decode('utf-8').strip()\n-\n-\n-def get_all_lists() -> List[str]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to lists\n- end tell\n-\n- -- Output the lists\n- allLists\n- '''\n- raw_output = run_applescript(script)\n- list_ids = raw_output.split(\", \")\n- ids = [list_id.split(\" \")[2] for list_id in list_ids]\n-\n- return ids\n-\n-\n-def get_all_list_names() -> List[Dict[str, str]]:\n- script = '''\n- tell application \"Reminders\"\n- set allLists to every list\n- set listInfo to {}\n- repeat with aList in allLists\n- set end of listInfo to {id:id of aList, name:name of aList}\n- end repeat\n- end tell\n- return listInfo\n- '''\n- raw_output = run_applescript(script)\n- \n- # Parse the output into a list of dictionaries\n- list_data = json.loads(raw_output.replace(\"'\", '\"'))\n- \n- return list_data\n-\n-\n-def get_reminders_for_list(list_id: str) -> List[str]:\n- script = f'''set listID to \"{list_id}\"\n-\n- tell application \"Reminders\"\n- set targetList to first list whose id is listID\n- set remindersInList to reminders of targetList\n- end tell\n-\n- -- Output the reminders\n- remindersInList\n- '''\n- raw_output = run_applescript(script)\n- reminder_ids = raw_output.split(', ')\n- ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n-\n- return ids\n-\n-\n-class Reminder(BaseModel):\n- id: str = Field(..., min_length=1, max_length=255)\n- name: str = Field(..., min_length=1, max_length=255)\n- body: str = Field(None, min_length=1, max_length=1000)\n- due_date: str = Field(None, min_length=1, max_length=255)\n- completed: bool = Field(False)\n-\n-\n-def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n- script = f'''\n--- Extract the reminder ID from the URL\n-set reminderID to \"{reminder_id}\"\n-\n--- Use Reminders app to get the reminder data\n-tell application \"Reminders\"\n- set theReminder to (first reminder whose id is reminderID)\n- set reminderName to name of theReminder\n- set reminderBody to body of theReminder\n- set reminderDueDate to due date of theReminder\n- set reminderCompleted to completed of theReminder\n-end tell\n-\n--- Convert the reminder data to a comma-separated list\n-set csvOutput to reminderID & \", \" & ¬\n- reminderName & \", \" & ¬\n- reminderBody & \", \" & ¬\n- reminderDueDate & \", \" & ¬\n- (reminderCompleted as string)\n-\n--- Output the comma-separated list\n-return csvOutput\n-'''\n- raw_output = run_applescript(script)\n- return raw_output\n-\n-\n-def main():\n- \"\"\"Main function\"\"\"\n- from dspygen.utils.dspy_tools import init_ol\n- init_ol()\n- list_id = get_all_lists()[0]\n- reminder_id = get_reminders_for_list(list_id)[0]\n- print(get_reminder_by_id(reminder_id))\n-\n-\n-if __name__ == '__main__':\n- main()\n" + }, + { + "date": 1724553115274, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -43,9 +43,9 @@\n '''\n raw_output = run_applescript(script)\n raw_output = \"\"\"id:E4A69F9A-BA15-4296-B217-9F735652A0FA, name:Self-care, id:B4B66208-A23D-4E10-B49A-36FF4DA3965A, name:Today, id:15DE35D7-37EF-4E2F-B271-57ADB4B71E18, name:Six Item List, id:378C4398-75DC-418F-B77C-558137394A66, name:Social Groups, id:93280B69-3D37-4FD4-91D0-83CFFD7D74E1, name:To Read List, id:129F5F6F-2749-4ECD-8983-C4A64400C6AE, name:New List 3, id:8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B, name:Test Reminders List\"\"\"\n # Parse the output into a list of dictionaries\n- \n+ name_list\n \n return list_data\n \n \n" + }, + { + "date": 1724553120945, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,117 @@\n+import subprocess\n+from typing import List, Dict, Any\n+import json\n+\n+from pydantic import BaseModel, Field\n+\n+def run_applescript(script: str) -> str:\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ \n+ if error:\n+ raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ \n+ return output.decode('utf-8').strip()\n+\n+\n+def get_all_lists() -> List[str]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to lists\n+ end tell\n+\n+ -- Output the lists\n+ allLists\n+ '''\n+ raw_output = run_applescript(script)\n+ list_ids = raw_output.split(\", \")\n+ ids = [list_id.split(\" \")[2] for list_id in list_ids]\n+\n+ return ids\n+\n+\n+def get_all_list_names() -> List[Dict[str, str]]:\n+ script = '''\n+ tell application \"Reminders\"\n+ set allLists to every list\n+ set listInfo to {}\n+ repeat with aList in allLists\n+ set end of listInfo to {id:id of aList, name:name of aList}\n+ end repeat\n+ end tell\n+ return listInfo\n+ '''\n+ raw_output = run_applescript(script)\n+ raw_output = \"\"\"id:E4A69F9A-BA15-4296-B217-9F735652A0FA, name:Self-care, id:B4B66208-A23D-4E10-B49A-36FF4DA3965A, name:Today, id:15DE35D7-37EF-4E2F-B271-57ADB4B71E18, name:Six Item List, id:378C4398-75DC-418F-B77C-558137394A66, name:Social Groups, id:93280B69-3D37-4FD4-91D0-83CFFD7D74E1, name:To Read List, id:129F5F6F-2749-4ECD-8983-C4A64400C6AE, name:New List 3, id:8CD4A536-5615-4C38-A3C3-FFA8F4BDAC8B, name:Test Reminders List\"\"\"\n+ # Parse the output into a list of dictionaries\n+ name_data \n+ \n+ return list_data\n+\n+\n+def get_reminders_for_list(list_id: str) -> List[str]:\n+ script = f'''set listID to \"{list_id}\"\n+\n+ tell application \"Reminders\"\n+ set targetList to first list whose id is listID\n+ set remindersInList to reminders of targetList\n+ end tell\n+\n+ -- Output the reminders\n+ remindersInList\n+ '''\n+ raw_output = run_applescript(script)\n+ reminder_ids = raw_output.split(', ')\n+ ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids]\n+\n+ return ids\n+\n+\n+class Reminder(BaseModel):\n+ id: str = Field(..., min_length=1, max_length=255)\n+ name: str = Field(..., min_length=1, max_length=255)\n+ body: str = Field(None, min_length=1, max_length=1000)\n+ due_date: str = Field(None, min_length=1, max_length=255)\n+ completed: bool = Field(False)\n+\n+\n+def get_reminder_by_id(reminder_id: str) -> Dict[str, Any]:\n+ script = f'''\n+-- Extract the reminder ID from the URL\n+set reminderID to \"{reminder_id}\"\n+\n+-- Use Reminders app to get the reminder data\n+tell application \"Reminders\"\n+ set theReminder to (first reminder whose id is reminderID)\n+ set reminderName to name of theReminder\n+ set reminderBody to body of theReminder\n+ set reminderDueDate to due date of theReminder\n+ set reminderCompleted to completed of theReminder\n+end tell\n+\n+-- Convert the reminder data to a comma-separated list\n+set csvOutput to reminderID & \", \" & ¬\n+ reminderName & \", \" & ¬\n+ reminderBody & \", \" & ¬\n+ reminderDueDate & \", \" & ¬\n+ (reminderCompleted as string)\n+\n+-- Output the comma-separated list\n+return csvOutput\n+'''\n+ raw_output = run_applescript(script)\n+ return raw_output\n+\n+\n+def main():\n+ \"\"\"Main function\"\"\"\n+ from dspygen.utils.dspy_tools import init_ol\n+ init_ol()\n+ # list_id = get_all_lists()[0]\n+ # reminder_id = get_reminders_for_list(list_id)[0]\n+ # print(get_reminder_by_id(reminder_id))\n+ print(get_all_list_names())\n+\n+\n+if __name__ == '__main__':\n+ main()\n" + } + ], + "date": 1724550119288, + "name": "Commit-0", + "content": "import subprocess\nfrom typing import List, Dict, Any\n\ndef run_applescript(script: str) -> str:\n process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n output, error = process.communicate()\n \n if error:\n raise RuntimeError(f\"AppleScript Error: {error.decode('utf-8')}\")\n \n return output.decode('utf-8').strip()\n\ndef get_all_lists() -> List[Dict[str, str]]:\n script = '''\n tell application \"Reminders\"\n set allLists to every list\n set listData to {}\n repeat with aList in allLists\n set end of listData to {id:(id of aList) as string, name:name of aList}\n end repeat\n return listData\n end tell\n '''\n raw_output = run_applescript(script)\n return eval(raw_output)\n\ndef get_reminders_for_list(list_id: str) -> List[Dict[str, Any]]:\n script = f'''\n tell application \"Reminders\"\n set targetList to list id \"{list_id}\"\n set listReminders to every reminder in targetList\n set reminderData to {{}}\n repeat with aReminder in listReminders\n set end of reminderData to {{id:(id of aReminder) as string, title:name of aReminder, dueDate:due date of aReminder, notes:body of aReminder}}\n end repeat\n return reminderData\n end tell\n '''\n raw_output = run_applescript(script)\n return eval(raw_output)\n\ndef create_reminder(title: str, notes: str = None, due_date: str = None, list_name: str = None) -> str:\n script = f'''\n tell application \"Reminders\"\n set newReminder to make new reminder\n set name of newReminder to \"{title.replace('\"', '\\\\\"')}\"\n '''\n\n if notes:\n script += f'set body of newReminder to \"{notes.replace('\"', '\\\\\"')}\"\\n'\n\n if due_date:\n script += f'set due date of newReminder to date \"{due_date}\"\\n'\n\n if list_name:\n script += f'''\n set targetList to list \"{list_name}\"\n if exists targetList then\n move newReminder to targetList\n else\n set newList to make new list with properties {{name:\"{list_name}\"}}\n move newReminder to newList\n end if\n '''\n \n script += '''\n return id of newReminder as string\n end tell\n '''\n \n return run_applescript(script)\n" + } + ] +} \ No newline at end of file diff --git a/.lh/tests/experiments/cal_apps/conftest.py.json b/.lh/tests/experiments/cal_apps/conftest.py.json new file mode 100644 index 0000000..c8af6d4 --- /dev/null +++ b/.lh/tests/experiments/cal_apps/conftest.py.json @@ -0,0 +1,22 @@ +{ + "sourceFile": "tests/experiments/cal_apps/conftest.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 1, + "patches": [ + { + "date": 1724788408563, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724789173714, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,8 +1,10 @@\n import pytest\n from unittest.mock import patch\n-from dspygen.experiments.cal_apps.eventkit_mocks import MockEventKit\n+from dspygen.experiments.cal_apps.eventkit_mocks import MockEventKit, MockEKReminder\n \n @pytest.fixture(autouse=True)\n def mock_eventkit():\n- with patch.dict('sys.modules', {'EventKit': MockEventKit()}):\n\\ No newline at end of file\n- yield\n+ mock_ek = MockEventKit()\n+ with patch.dict('sys.modules', {'EventKit': mock_ek}):\n+ with patch('EventKit.EKReminder', MockEKReminder):\n+ yield mock_ek\n\\ No newline at end of file\n" + } + ], + "date": 1724788408563, + "name": "Commit-0", + "content": "import pytest\nfrom unittest.mock import patch\nfrom dspygen.experiments.cal_apps.eventkit_mocks import MockEventKit\n\n@pytest.fixture(autouse=True)\ndef mock_eventkit():\n with patch.dict('sys.modules', {'EventKit': MockEventKit()}):\n yield" + } + ] +} \ No newline at end of file diff --git a/.lh/tests/experiments/cal_apps/reminder_app.feature.json b/.lh/tests/experiments/cal_apps/reminder_app.feature.json new file mode 100644 index 0000000..9db987d --- /dev/null +++ b/.lh/tests/experiments/cal_apps/reminder_app.feature.json @@ -0,0 +1,18 @@ +{ + "sourceFile": "tests/experiments/cal_apps/reminder_app.feature", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 0, + "patches": [ + { + "date": 1724784857165, + "content": "Index: \n===================================================================\n--- \n+++ \n" + } + ], + "date": 1724784857165, + "name": "Commit-0", + "content": "Feature: Reminder App Functionality\n As a user of the Reminder App\n I want to manage my reminders and lists\n So that I can organize my tasks effectively\n\n Scenario: Create a new reminder list\n Given the Reminder App is initialized\n When I add a new reminder list called \"Work Tasks\"\n Then the \"Work Tasks\" list should be in the app's lists\n\n Scenario: Add a reminder to a list\n Given the Reminder App is initialized\n And a reminder list called \"Personal Tasks\" exists\n When I select the \"Personal Tasks\" list\n And I add a reminder \"Buy groceries\" with due date \"2023-05-01 18:00\"\n Then the \"Personal Tasks\" list should contain the reminder \"Buy groceries\"\n\n Scenario: Mark a reminder as completed\n Given the Reminder App is initialized\n And a reminder list called \"Home Chores\" exists\n And the list \"Home Chores\" has a reminder \"Clean the kitchen\"\n When I select the \"Home Chores\" list\n And I mark the reminder \"Clean the kitchen\" as completed\n Then the reminder \"Clean the kitchen\" should be marked as completed\n\n Scenario: Remove a reminder list\n Given the Reminder App is initialized\n And a reminder list called \"Temporary Tasks\" exists\n When I remove the \"Temporary Tasks\" list\n Then the \"Temporary Tasks\" list should not be in the app's lists\n\n Scenario: Clear completed reminders\n Given the Reminder App is initialized\n And a reminder list called \"Daily Tasks\" exists\n And the list \"Daily Tasks\" has a completed reminder \"Make bed\"\n And the list \"Daily Tasks\" has an incomplete reminder \"Do laundry\"\n When I select the \"Daily Tasks\" list\n And I clear completed reminders\n Then the \"Daily Tasks\" list should not contain the reminder \"Make bed\"\n And the \"Daily Tasks\" list should contain the reminder \"Do laundry\"" + } + ] +} \ No newline at end of file diff --git a/.lh/tests/experiments/cal_apps/test_reminder.py.json b/.lh/tests/experiments/cal_apps/test_reminder.py.json new file mode 100644 index 0000000..132caf2 --- /dev/null +++ b/.lh/tests/experiments/cal_apps/test_reminder.py.json @@ -0,0 +1,22 @@ +{ + "sourceFile": "tests/experiments/cal_apps/test_reminder.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 1, + "patches": [ + { + "date": 1724788307707, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724788519568, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,173 @@\n+import pytest\n+from datetime import datetime, timedelta\n+from dspygen.experiments.cal_apps.reminder import (\n+ Reminder, create_reminder, read_reminder, update_reminder, delete_reminder, ReminderError\n+)\n+from dspygen.experiments.cal_apps.eventkit_mocks import MockEKEventStore, MockEKCalendar, MockEventKit\n+\n+@pytest.fixture\n+def event_store():\n+ return MockEKEventStore()\n+\n+@pytest.fixture\n+def calendar():\n+ return MockEKCalendar(\"Test Calendar\")\n+\n+class TestReminder:\n+ def test_create_reminder(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar, datetime.now() + timedelta(days=1))\n+ assert reminder.title == \"Test Reminder\"\n+ assert reminder.calendar.title() == \"Test Calendar\"\n+ assert reminder.due_date is not None\n+\n+ def test_read_reminder(self, event_store, calendar):\n+ created_reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ read_reminder_obj = read_reminder(event_store, created_reminder.calendar_item_identifier)\n+ assert read_reminder_obj.title == \"Test Reminder\"\n+ assert read_reminder_obj.calendar.title() == \"Test Calendar\"\n+\n+ def test_update_reminder(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ new_due_date = datetime.now() + timedelta(days=2)\n+ update_reminder(reminder, title=\"Updated Reminder\", due_date=new_due_date, completed=True, priority=2)\n+ assert reminder.title == \"Updated Reminder\"\n+ assert reminder.due_date == new_due_date\n+ assert reminder.completed is True\n+ assert reminder.priority == 2\n+\n+ def test_delete_reminder(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ identifier = reminder.calendar_item_identifier\n+ delete_reminder(reminder)\n+ with pytest.raises(ReminderError):\n+ read_reminder(event_store, identifier)\n+\n+ def test_reminder_properties(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ reminder.location = \"Home\"\n+ reminder.notes = \"Test notes\"\n+ reminder.url = \"https://example.com\"\n+ \n+ assert reminder.location == \"Home\"\n+ assert reminder.notes == \"Test notes\"\n+ assert reminder.url == \"https://example.com\"\n+ assert reminder.creation_date is not None\n+ assert reminder.last_modified_date is not None\n+ assert reminder.time_zone is not None\n+\n+ def test_reminder_alarms(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ alarm = MockEventKit.EKAlarm.alarmWithRelativeOffset_(-3600)\n+ reminder.add_alarm(alarm)\n+ assert len(reminder.alarms) == 1\n+ reminder.remove_alarm(alarm)\n+ assert len(reminder.alarms) == 0\n+\n+ def test_reminder_recurrence(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ rule = MockEventKit.EKRecurrenceRule(\n+ MockEventKit.EKRecurrenceFrequencyDaily,\n+ interval=1,\n+ end=None\n+ )\n+ reminder.set_recurrence_rule(rule)\n+ assert reminder.has_recurrence_rule is True\n+ assert reminder.recurrence_rule is not None\n+ reminder.set_recurrence_rule(None)\n+ assert reminder.has_recurrence_rule is False\n+ assert reminder.recurrence_rule is None\n+\n+ def test_create_reminder_without_due_date(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"No Due Date\", calendar)\n+ assert reminder.due_date is None\n+\n+ def test_update_reminder_partial(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ original_due_date = reminder.due_date\n+ update_reminder(reminder, title=\"Updated Title\")\n+ assert reminder.title == \"Updated Title\"\n+ assert reminder.due_date == original_due_date\n+\n+ def test_reminder_completed_date(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ assert reminder.completed is False\n+ reminder.completed = True\n+ assert reminder.completed is True\n+ # In a real implementation, we'd check for the actual completion date\n+\n+ def test_reminder_priority_range(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ reminder.priority = 0\n+ assert reminder.priority == 0\n+ reminder.priority = 9\n+ assert reminder.priority == 9\n+ # In a real implementation, we might want to test out-of-range values\n+\n+ def test_create_multiple_reminders(self, event_store, calendar):\n+ reminders = [create_reminder(event_store, f\"Reminder {i}\", calendar) for i in range(5)]\n+ assert len(reminders) == 5\n+ for i, reminder in enumerate(reminders):\n+ assert reminder.title == f\"Reminder {i}\"\n+\n+ def test_read_non_existent_reminder(self, event_store):\n+ with pytest.raises(ReminderError):\n+ read_reminder(event_store, \"non-existent-id\")\n+\n+ def test_update_non_existent_reminder(self, event_store, calendar):\n+ non_existent_reminder = Reminder(event_store)\n+ non_existent_reminder.ek_item.calendarItemIdentifier = lambda: \"non-existent-id\"\n+ with pytest.raises(ReminderError):\n+ update_reminder(non_existent_reminder, title=\"Should Fail\")\n+\n+ def test_delete_non_existent_reminder(self, event_store, calendar):\n+ non_existent_reminder = Reminder(event_store)\n+ non_existent_reminder.ek_item.calendarItemIdentifier = lambda: \"non-existent-id\"\n+ with pytest.raises(ReminderError):\n+ delete_reminder(non_existent_reminder)\n+\n+ def test_reminder_attendees(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ assert reminder.has_attendees is False\n+ assert len(reminder.attendees) == 0\n+ # In a real implementation, we'd test adding and removing attendees\n+\n+ def test_reminder_time_zone_change(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ original_tz = reminder.time_zone\n+ reminder.time_zone = \"America/New_York\"\n+ assert reminder.time_zone != original_tz\n+ assert reminder.time_zone == \"America/New_York\"\n+\n+ def test_reminder_url_clearing(self, event_store, calendar):\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ reminder.url = \"https://example.com\"\n+ assert reminder.url == \"https://example.com\"\n+ reminder.url = None\n+ assert reminder.url is None\n+\n+ def test_reminder_notes_long_text(self, event_store, calendar):\n+ long_text = \"A\" * 1000 # 1000 character string\n+ reminder = create_reminder(event_store, \"Test Reminder\", calendar)\n+ reminder.notes = long_text\n+ assert reminder.notes == long_text\n+\n+ def test_reminder_creation_with_all_properties(self, event_store, calendar):\n+ due_date = datetime.now() + timedelta(days=1)\n+ reminder = create_reminder(event_store, \"Full Test\", calendar, due_date)\n+ reminder.location = \"Office\"\n+ reminder.notes = \"Important meeting\"\n+ reminder.url = \"https://meeting.com\"\n+ reminder.priority = 1\n+ alarm = MockEventKit.EKAlarm.alarmWithRelativeOffset_(-1800) # 30 minutes before\n+ reminder.add_alarm(alarm)\n+ \n+ assert reminder.title == \"Full Test\"\n+ assert reminder.calendar.title() == \"Test Calendar\"\n+ assert reminder.due_date == due_date\n+ assert reminder.location == \"Office\"\n+ assert reminder.notes == \"Important meeting\"\n+ assert reminder.url == \"https://meeting.com\"\n+ assert reminder.priority == 1\n+ assert len(reminder.alarms) == 1\n+\n+ # Add more edge cases and integration tests as needed\n" + } + ], + "date": 1724788307707, + "name": "Commit-0", + "content": "import unittest\nfrom datetime import datetime, timedelta\nfrom dspygen.experiments.cal_apps.reminder import Reminder, create_reminder, read_reminder, update_reminder, delete_reminder\nfrom dspygen.experiments.cal_apps.eventkit_mocks import MockEKEventStore, MockEKCalendar\n\nclass TestReminder(unittest.TestCase):\n def setUp(self):\n self.event_store = MockEKEventStore()\n self.calendar = MockEKCalendar(\"Test Calendar\")\n\n def test_create_reminder(self):\n reminder = create_reminder(self.event_store, \"Test Reminder\", self.calendar, datetime.now() + timedelta(days=1))\n self.assertEqual(reminder.title, \"Test Reminder\")\n self.assertEqual(reminder.calendar.title(), \"Test Calendar\")\n self.assertIsNotNone(reminder.due_date)\n\n def test_read_reminder(self):\n created_reminder = create_reminder(self.event_store, \"Test Reminder\", self.calendar)\n read_reminder_obj = read_reminder(self.event_store, created_reminder.calendar_item_identifier)\n self.assertEqual(read_reminder_obj.title, \"Test Reminder\")\n\n def test_update_reminder(self):\n reminder = create_reminder(self.event_store, \"Test Reminder\", self.calendar)\n update_reminder(reminder, title=\"Updated Reminder\", completed=True, priority=2)\n self.assertEqual(reminder.title, \"Updated Reminder\")\n self.assertTrue(reminder.completed)\n self.assertEqual(reminder.priority, 2)\n\n def test_delete_reminder(self):\n reminder = create_reminder(self.event_store, \"Test Reminder\", self.calendar)\n identifier = reminder.calendar_item_identifier\n delete_reminder(reminder)\n with self.assertRaises(Exception):\n read_reminder(self.event_store, identifier)\n\n def test_reminder_properties(self):\n reminder = create_reminder(self.event_store, \"Test Reminder\", self.calendar)\n reminder.location = \"Home\"\n reminder.notes = \"Test notes\"\n reminder.url = \"https://example.com\"\n \n self.assertEqual(reminder.location, \"Home\")\n self.assertEqual(reminder.notes, \"Test notes\")\n self.assertEqual(reminder.url, \"https://example.com\")\n\n def test_reminder_alarms(self):\n reminder = create_reminder(self.event_store, \"Test Reminder\", self.calendar)\n reminder.add_alarm(reminder.ek_item.EKAlarm.alarmWithRelativeOffset_(-3600))\n self.assertEqual(len(reminder.alarms), 1)\n reminder.remove_alarm(reminder.alarms[0])\n self.assertEqual(len(reminder.alarms), 0)\n\n def test_reminder_recurrence(self):\n reminder = create_reminder(self.event_store, \"Test Reminder\", self.calendar)\n rule = reminder.ek_item.EKRecurrenceRule(\n reminder.ek_item.EKRecurrenceFrequencyDaily,\n interval=1,\n end=None\n )\n reminder.add_recurrence_rule(rule)\n self.assertEqual(len(reminder.recurrence_rules), 1)\n reminder.remove_recurrence_rule(rule)\n self.assertEqual(len(reminder.recurrence_rules), 0)\n\nif __name__ == '__main__':\n unittest.main()" + } + ] +} \ No newline at end of file diff --git a/.lh/tests/experiments/cal_apps/test_reminder_app_bdd.py.json b/.lh/tests/experiments/cal_apps/test_reminder_app_bdd.py.json new file mode 100644 index 0000000..fd1ba58 --- /dev/null +++ b/.lh/tests/experiments/cal_apps/test_reminder_app_bdd.py.json @@ -0,0 +1,30 @@ +{ + "sourceFile": "tests/experiments/cal_apps/test_reminder_app_bdd.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 3, + "patches": [ + { + "date": 1724784877104, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724784944759, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -3,15 +3,18 @@\n from dspygen.experiments.cal_apps.reminder_app import ReminderApp\n from dspygen.experiments.cal_apps.reminder_list import ReminderList\n from dspygen.experiments.cal_apps.reminder import Reminder\n \n+\n @pytest.fixture\n def reminder_app():\n app = ReminderApp()\n- # Mock the EventKit functionality\n app.event_store = MockEventStore()\n+ # Mock the EventKit.EKCalendar class\n+ EventKit.EKCalendar = MockCalendar\n return app\n \n+\n class MockEventStore:\n def __init__(self):\n self.calendars = []\n \n@@ -29,106 +32,144 @@\n \n def removeReminder_commit_error_(self, reminder, commit, error):\n pass\n \n+ def defaultCalendarForNewReminders(self):\n+ return MockCalendar(source=MockSource())\n+\n+\n+class MockCalendar:\n+ def __init__(self, title=None, source=None):\n+ self.title = title\n+ self.source = source\n+\n+ @classmethod\n+ def calendarWithTitle_forEntityType_eventStore_(cls, title, entity_type, event_store):\n+ return cls(title=title)\n+\n+\n+class MockSource:\n+ pass\n+\n+\n @scenario('reminder_app.feature', 'Create a new reminder list')\n def test_create_new_reminder_list():\n pass\n \n+\n @scenario('reminder_app.feature', 'Add a reminder to a list')\n def test_add_reminder_to_list():\n pass\n \n+\n @scenario('reminder_app.feature', 'Mark a reminder as completed')\n def test_mark_reminder_as_completed():\n pass\n \n+\n @scenario('reminder_app.feature', 'Remove a reminder list')\n def test_remove_reminder_list():\n pass\n \n+\n @scenario('reminder_app.feature', 'Clear completed reminders')\n def test_clear_completed_reminders():\n pass\n \n+\n @given('the Reminder App is initialized')\n def reminder_app_initialized(reminder_app):\n assert isinstance(reminder_app, ReminderApp)\n \n+\n @when('I add a new reminder list called \"{list_name}\"')\n def add_new_reminder_list(reminder_app, list_name):\n new_list = ReminderList(list_name, reminder_app.event_store)\n reminder_app.add_list(new_list)\n \n+\n @then('the \"{list_name}\" list should be in the app\\'s lists')\n def check_list_in_app_lists(reminder_app, list_name):\n assert any(lst.name == list_name for lst in reminder_app.lists)\n \n+\n @given('a reminder list called \"{list_name}\" exists')\n def reminder_list_exists(reminder_app, list_name):\n new_list = ReminderList(list_name, reminder_app.event_store)\n reminder_app.add_list(new_list)\n \n+\n @when('I select the \"{list_name}\" list')\n def select_reminder_list(reminder_app, list_name):\n reminder_app.select_list(list_name)\n \n+\n @when('I add a reminder \"{title}\" with due date \"{due_date}\"')\n def add_reminder_to_list(reminder_app, title, due_date):\n reminder = Reminder(title, due_date)\n reminder_app.add_reminder_to_selected(reminder)\n \n+\n @then('the \"{list_name}\" list should contain the reminder \"{title}\"')\n def check_reminder_in_list(reminder_app, list_name, title):\n reminders = reminder_app.get_reminders()\n assert any(r.title == title for r in reminders)\n \n+\n @given('the list \"{list_name}\" has a reminder \"{title}\"')\n def list_has_reminder(reminder_app, list_name, title):\n reminder_app.select_list(list_name)\n reminder = Reminder(title)\n reminder_app.add_reminder_to_selected(reminder)\n \n+\n @when('I mark the reminder \"{title}\" as completed')\n def mark_reminder_completed(reminder_app, title):\n reminders = reminder_app.get_reminders()\n for reminder in reminders:\n if reminder.title == title:\n reminder.mark_as_completed()\n break\n \n+\n @then('the reminder \"{title}\" should be marked as completed')\n def check_reminder_completed(reminder_app, title):\n reminders = reminder_app.get_reminders(completed=True)\n assert any(r.title == title for r in reminders)\n \n+\n @when('I remove the \"{list_name}\" list')\n def remove_reminder_list(reminder_app, list_name):\n for lst in reminder_app.lists:\n if lst.name == list_name:\n reminder_app.remove_list(lst)\n break\n \n+\n @then('the \"{list_name}\" list should not be in the app\\'s lists')\n def check_list_not_in_app_lists(reminder_app, list_name):\n assert all(lst.name != list_name for lst in reminder_app.lists)\n \n+\n @given('the list \"{list_name}\" has a completed reminder \"{title}\"')\n def list_has_completed_reminder(reminder_app, list_name, title):\n reminder_app.select_list(list_name)\n reminder = Reminder(title, completed=True)\n reminder_app.add_reminder_to_selected(reminder)\n \n+\n @given('the list \"{list_name}\" has an incomplete reminder \"{title}\"')\n def list_has_incomplete_reminder(reminder_app, list_name, title):\n reminder_app.select_list(list_name)\n reminder = Reminder(title)\n reminder_app.add_reminder_to_selected(reminder)\n \n+\n @when('I clear completed reminders')\n def clear_completed_reminders(reminder_app):\n reminder_app.clear_completed_reminders()\n \n+\n @then('the \"{list_name}\" list should not contain the reminder \"{title}\"')\n def check_reminder_not_in_list(reminder_app, list_name, title):\n reminders = reminder_app.get_reminders()\n assert all(r.title != title for r in reminders)\n" + }, + { + "date": 1724784983192, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -42,8 +42,12 @@\n self.title = title\n self.source = source\n \n @classmethod\n+ def calendarForEntityType_eventStore_(cls, entity_type, event_store):\n+ return cls()\n+\n+ @classmethod\n def calendarWithTitle_forEntityType_eventStore_(cls, title, entity_type, event_store):\n return cls(title=title)\n \n \n" + }, + { + "date": 1724785130186, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -42,12 +42,8 @@\n self.title = title\n self.source = source\n \n @classmethod\n- def calendarForEntityType_eventStore_(cls, entity_type, event_store):\n- return cls()\n-\n- @classmethod\n def calendarWithTitle_forEntityType_eventStore_(cls, title, entity_type, event_store):\n return cls(title=title)\n \n \n" + } + ], + "date": 1724784877104, + "name": "Commit-0", + "content": "import pytest\nfrom pytest_bdd import scenario, given, when, then\nfrom dspygen.experiments.cal_apps.reminder_app import ReminderApp\nfrom dspygen.experiments.cal_apps.reminder_list import ReminderList\nfrom dspygen.experiments.cal_apps.reminder import Reminder\n\n@pytest.fixture\ndef reminder_app():\n app = ReminderApp()\n # Mock the EventKit functionality\n app.event_store = MockEventStore()\n return app\n\nclass MockEventStore:\n def __init__(self):\n self.calendars = []\n\n def calendarsForEntityType_(self, entity_type):\n return self.calendars\n\n def removeCalendar_commit_error_(self, calendar, commit, error):\n self.calendars.remove(calendar)\n\n def saveCalendar_commit_error_(self, calendar, commit, error):\n self.calendars.append(calendar)\n\n def saveReminder_commit_error_(self, reminder, commit, error):\n pass\n\n def removeReminder_commit_error_(self, reminder, commit, error):\n pass\n\n@scenario('reminder_app.feature', 'Create a new reminder list')\ndef test_create_new_reminder_list():\n pass\n\n@scenario('reminder_app.feature', 'Add a reminder to a list')\ndef test_add_reminder_to_list():\n pass\n\n@scenario('reminder_app.feature', 'Mark a reminder as completed')\ndef test_mark_reminder_as_completed():\n pass\n\n@scenario('reminder_app.feature', 'Remove a reminder list')\ndef test_remove_reminder_list():\n pass\n\n@scenario('reminder_app.feature', 'Clear completed reminders')\ndef test_clear_completed_reminders():\n pass\n\n@given('the Reminder App is initialized')\ndef reminder_app_initialized(reminder_app):\n assert isinstance(reminder_app, ReminderApp)\n\n@when('I add a new reminder list called \"{list_name}\"')\ndef add_new_reminder_list(reminder_app, list_name):\n new_list = ReminderList(list_name, reminder_app.event_store)\n reminder_app.add_list(new_list)\n\n@then('the \"{list_name}\" list should be in the app\\'s lists')\ndef check_list_in_app_lists(reminder_app, list_name):\n assert any(lst.name == list_name for lst in reminder_app.lists)\n\n@given('a reminder list called \"{list_name}\" exists')\ndef reminder_list_exists(reminder_app, list_name):\n new_list = ReminderList(list_name, reminder_app.event_store)\n reminder_app.add_list(new_list)\n\n@when('I select the \"{list_name}\" list')\ndef select_reminder_list(reminder_app, list_name):\n reminder_app.select_list(list_name)\n\n@when('I add a reminder \"{title}\" with due date \"{due_date}\"')\ndef add_reminder_to_list(reminder_app, title, due_date):\n reminder = Reminder(title, due_date)\n reminder_app.add_reminder_to_selected(reminder)\n\n@then('the \"{list_name}\" list should contain the reminder \"{title}\"')\ndef check_reminder_in_list(reminder_app, list_name, title):\n reminders = reminder_app.get_reminders()\n assert any(r.title == title for r in reminders)\n\n@given('the list \"{list_name}\" has a reminder \"{title}\"')\ndef list_has_reminder(reminder_app, list_name, title):\n reminder_app.select_list(list_name)\n reminder = Reminder(title)\n reminder_app.add_reminder_to_selected(reminder)\n\n@when('I mark the reminder \"{title}\" as completed')\ndef mark_reminder_completed(reminder_app, title):\n reminders = reminder_app.get_reminders()\n for reminder in reminders:\n if reminder.title == title:\n reminder.mark_as_completed()\n break\n\n@then('the reminder \"{title}\" should be marked as completed')\ndef check_reminder_completed(reminder_app, title):\n reminders = reminder_app.get_reminders(completed=True)\n assert any(r.title == title for r in reminders)\n\n@when('I remove the \"{list_name}\" list')\ndef remove_reminder_list(reminder_app, list_name):\n for lst in reminder_app.lists:\n if lst.name == list_name:\n reminder_app.remove_list(lst)\n break\n\n@then('the \"{list_name}\" list should not be in the app\\'s lists')\ndef check_list_not_in_app_lists(reminder_app, list_name):\n assert all(lst.name != list_name for lst in reminder_app.lists)\n\n@given('the list \"{list_name}\" has a completed reminder \"{title}\"')\ndef list_has_completed_reminder(reminder_app, list_name, title):\n reminder_app.select_list(list_name)\n reminder = Reminder(title, completed=True)\n reminder_app.add_reminder_to_selected(reminder)\n\n@given('the list \"{list_name}\" has an incomplete reminder \"{title}\"')\ndef list_has_incomplete_reminder(reminder_app, list_name, title):\n reminder_app.select_list(list_name)\n reminder = Reminder(title)\n reminder_app.add_reminder_to_selected(reminder)\n\n@when('I clear completed reminders')\ndef clear_completed_reminders(reminder_app):\n reminder_app.clear_completed_reminders()\n\n@then('the \"{list_name}\" list should not contain the reminder \"{title}\"')\ndef check_reminder_not_in_list(reminder_app, list_name, title):\n reminders = reminder_app.get_reminders()\n assert all(r.title != title for r in reminders)\n" + } + ] +} \ No newline at end of file diff --git a/.lh/tests/experiments/test_reminders_models.py.json b/.lh/tests/experiments/test_reminders_models.py.json new file mode 100644 index 0000000..5b27a1d --- /dev/null +++ b/.lh/tests/experiments/test_reminders_models.py.json @@ -0,0 +1,42 @@ +{ + "sourceFile": "tests/experiments/test_reminders_models.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 6, + "patches": [ + { + "date": 1724539735741, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724540059797, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,3 +1,130 @@\n+import pytest\n+from unittest.mock import patch\n+from src.dspygen.experiments.reminders_models import RemindersAppState, RemindersAccount, ReminderList, Reminder, AccountType\n+from uuid import UUID\n \n+@pytest.fixture\n+def mock_applescript_output():\n+ return '''\n+ {{\"12345678-1234-5678-1234-567812345678\", \"iCloud\"}, {\"87654321-4321-8765-4321-876543210987\", \"Local\"}}\n+ '''\n \n+@pytest.fixture\n+def mock_lists_output():\n+ return '''\n+ {{\"11111111-1111-1111-1111-111111111111\", \"Work\"}, {\"22222222-2222-2222-2222-222222222222\", \"Personal\"}}\n+ '''\n \n+@pytest.fixture\n+def mock_reminders_output():\n+ return '''\n+ {{\"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\", \"Buy groceries\", \"Milk and eggs\", \"2023-05-01\"}, \n+ {\"bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb\", \"Call mom\", \"missing value\", \"missing value\"}}\n+ '''\n+\n+@patch.object(RemindersAppState, '_run_applescript')\n+def test_from_system(mock_run_applescript, mock_applescript_output, mock_lists_output, mock_reminders_output):\n+ mock_run_applescript.side_effect = [\n+ mock_applescript_output,\n+ mock_lists_output,\n+ mock_reminders_output,\n+ mock_reminders_output\n+ ]\n+\n+ app_state = RemindersAppState.from_system()\n+\n+ assert len(app_state.accounts) == 2\n+ assert app_state.accounts[0].id == UUID('12345678-1234-5678-1234-567812345678')\n+ assert app_state.accounts[0].name == 'iCloud'\n+ assert app_state.accounts[0].type == AccountType.OTHER\n+ assert len(app_state.accounts[0].lists) == 2\n+\n+ work_list = app_state.accounts[0].lists[0]\n+ assert work_list.id == UUID('11111111-1111-1111-1111-111111111111')\n+ assert work_list.name == 'Work'\n+ assert len(work_list.reminders) == 2\n+\n+ grocery_reminder = work_list.reminders[0]\n+ assert grocery_reminder.id == UUID('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa')\n+ assert grocery_reminder.title == 'Buy groceries'\n+ assert grocery_reminder.notes == 'Milk and eggs'\n+ assert str(grocery_reminder.due_date) == '2023-05-01'\n+\n+ call_mom_reminder = work_list.reminders[1]\n+ assert call_mom_reminder.id == UUID('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb')\n+ assert call_mom_reminder.title == 'Call mom'\n+ assert call_mom_reminder.notes is None\n+ assert call_mom_reminder.due_date is None\n+\n+def test_get_all_reminders():\n+ account1 = RemindersAccount(id=UUID('12345678-1234-5678-1234-567812345678'), name='iCloud', type=AccountType.ICLOUD)\n+ account2 = RemindersAccount(id=UUID('87654321-4321-8765-4321-876543210987'), name='Local', type=AccountType.LOCAL)\n+\n+ list1 = ReminderList(id=UUID('11111111-1111-1111-1111-111111111111'), name='Work')\n+ list2 = ReminderList(id=UUID('22222222-2222-2222-2222-222222222222'), name='Personal')\n+\n+ reminder1 = Reminder(id=UUID('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'), title='Task 1')\n+ reminder2 = Reminder(id=UUID('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'), title='Task 2')\n+ reminder3 = Reminder(id=UUID('cccccccc-cccc-cccc-cccc-cccccccccccc'), title='Task 3')\n+\n+ list1.reminders = [reminder1, reminder2]\n+ list2.reminders = [reminder3]\n+\n+ account1.lists = [list1]\n+ account2.lists = [list2]\n+\n+ app_state = RemindersAppState(accounts=[account1, account2])\n+\n+ all_reminders = app_state.get_all_reminders()\n+ assert len(all_reminders) == 3\n+ assert all(isinstance(reminder, Reminder) for reminder in all_reminders)\n+ assert set(reminder.title for reminder in all_reminders) == {'Task 1', 'Task 2', 'Task 3'}\n+\n+def test_get_reminders_by_list():\n+ account = RemindersAccount(id=UUID('12345678-1234-5678-1234-567812345678'), name='iCloud', type=AccountType.ICLOUD)\n+ list1 = ReminderList(id=UUID('11111111-1111-1111-1111-111111111111'), name='Work')\n+ list2 = ReminderList(id=UUID('22222222-2222-2222-2222-222222222222'), name='Personal')\n+\n+ reminder1 = Reminder(id=UUID('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'), title='Work Task')\n+ reminder2 = Reminder(id=UUID('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'), title='Personal Task')\n+\n+ list1.reminders = [reminder1]\n+ list2.reminders = [reminder2]\n+ account.lists = [list1, list2]\n+\n+ app_state = RemindersAppState(accounts=[account])\n+\n+ work_reminders = app_state.get_reminders_by_list(UUID('11111111-1111-1111-1111-111111111111'))\n+ assert len(work_reminders) == 1\n+ assert work_reminders[0].title == 'Work Task'\n+\n+ personal_reminders = app_state.get_reminders_by_list(UUID('22222222-2222-2222-2222-222222222222'))\n+ assert len(personal_reminders) == 1\n+ assert personal_reminders[0].title == 'Personal Task'\n+\n+def test_get_reminders_by_account():\n+ account1 = RemindersAccount(id=UUID('12345678-1234-5678-1234-567812345678'), name='iCloud', type=AccountType.ICLOUD)\n+ account2 = RemindersAccount(id=UUID('87654321-4321-8765-4321-876543210987'), name='Local', type=AccountType.LOCAL)\n+\n+ list1 = ReminderList(id=UUID('11111111-1111-1111-1111-111111111111'), name='Work')\n+ list2 = ReminderList(id=UUID('22222222-2222-2222-2222-222222222222'), name='Personal')\n+\n+ reminder1 = Reminder(id=UUID('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'), title='iCloud Task 1')\n+ reminder2 = Reminder(id=UUID('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'), title='iCloud Task 2')\n+ reminder3 = Reminder(id=UUID('cccccccc-cccc-cccc-cccc-cccccccccccc'), title='Local Task')\n+\n+ list1.reminders = [reminder1, reminder2]\n+ list2.reminders = [reminder3]\n+\n+ account1.lists = [list1]\n+ account2.lists = [list2]\n+\n+ app_state = RemindersAppState(accounts=[account1, account2])\n+\n+ icloud_reminders = app_state.get_reminders_by_account(UUID('12345678-1234-5678-1234-567812345678'))\n+ assert len(icloud_reminders) == 2\n+ assert set(reminder.title for reminder in icloud_reminders) == {'iCloud Task 1', 'iCloud Task 2'}\n+\n+ local_reminders = app_state.get_reminders_by_account(UUID('87654321-4321-8765-4321-876543210987'))\n+ assert len(local_reminders) == 1\n+ assert local_reminders[0].title == 'Local Task'\n\\ No newline at end of file\n" + }, + { + "date": 1724540135328, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,8 +1,9 @@\n import pytest\n from unittest.mock import patch\n from src.dspygen.experiments.reminders_models import RemindersAppState, RemindersAccount, ReminderList, Reminder, AccountType\n from uuid import UUID\n+import ast\n \n @pytest.fixture\n def mock_applescript_output():\n return '''\n" + }, + { + "date": 1724540145035, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,9 +1,8 @@\n import pytest\n from unittest.mock import patch\n from src.dspygen.experiments.reminders_models import RemindersAppState, RemindersAccount, ReminderList, Reminder, AccountType\n from uuid import UUID\n-import ast\n \n @pytest.fixture\n def mock_applescript_output():\n return '''\n" + }, + { + "date": 1724540150242, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,8 +1,9 @@\n import pytest\n from unittest.mock import patch\n from src.dspygen.experiments.reminders_models import RemindersAppState, RemindersAccount, ReminderList, Reminder, AccountType\n from uuid import UUID\n+import ast\n \n @pytest.fixture\n def mock_applescript_output():\n return '''\n" + }, + { + "date": 1724542780502, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,131 +1,122 @@\n import pytest\n-from unittest.mock import patch\n+from unittest.mock import patch, Mock\n+from faker import Faker\n from src.dspygen.experiments.reminders_models import RemindersAppState, RemindersAccount, ReminderList, Reminder, AccountType\n from uuid import UUID\n-import ast\n+import json\n \n @pytest.fixture\n-def mock_applescript_output():\n- return '''\n- {{\"12345678-1234-5678-1234-567812345678\", \"iCloud\"}, {\"87654321-4321-8765-4321-876543210987\", \"Local\"}}\n- '''\n+def fake():\n+ return Faker()\n \n @pytest.fixture\n-def mock_lists_output():\n- return '''\n- {{\"11111111-1111-1111-1111-111111111111\", \"Work\"}, {\"22222222-2222-2222-2222-222222222222\", \"Personal\"}}\n- '''\n+def mock_applescript_output(fake):\n+ def _generate_output(data_type):\n+ if data_type == 'accounts':\n+ return json.dumps([\n+ {\"id\": fake.uuid4(), \"name\": fake.company()}\n+ for _ in range(2)\n+ ])\n+ elif data_type == 'lists':\n+ return json.dumps([\n+ {\"id\": fake.uuid4(), \"name\": fake.word()}\n+ for _ in range(2)\n+ ])\n+ elif data_type == 'reminders':\n+ return json.dumps([\n+ {\n+ \"id\": fake.uuid4(),\n+ \"title\": fake.sentence(nb_words=3),\n+ \"notes\": fake.paragraph(nb_sentences=1),\n+ \"due_date\": fake.date(pattern=\"%Y-%m-%d\")\n+ },\n+ {\n+ \"id\": fake.uuid4(),\n+ \"title\": fake.sentence(nb_words=3),\n+ \"notes\": \"missing value\",\n+ \"due_date\": \"missing value\"\n+ }\n+ ])\n+ return _generate_output\n \n @pytest.fixture\n-def mock_reminders_output():\n- return '''\n- {{\"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\", \"Buy groceries\", \"Milk and eggs\", \"2023-05-01\"}, \n- {\"bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb\", \"Call mom\", \"missing value\", \"missing value\"}}\n- '''\n+def mock_reminders_app_state(mock_applescript_output):\n+ with patch.object(RemindersAppState, '_run_applescript') as mock_run:\n+ mock_run.side_effect = [\n+ mock_applescript_output('accounts'),\n+ mock_applescript_output('lists'),\n+ mock_applescript_output('reminders'),\n+ mock_applescript_output('reminders')\n+ ]\n+ yield RemindersAppState.from_system()\n \n-@patch.object(RemindersAppState, '_run_applescript')\n-def test_from_system(mock_run_applescript, mock_applescript_output, mock_lists_output, mock_reminders_output):\n- mock_run_applescript.side_effect = [\n- mock_applescript_output,\n- mock_lists_output,\n- mock_reminders_output,\n- mock_reminders_output\n- ]\n+def test_from_system(mock_reminders_app_state):\n+ app_state = mock_reminders_app_state\n \n- app_state = RemindersAppState.from_system()\n-\n assert len(app_state.accounts) == 2\n- assert app_state.accounts[0].id == UUID('12345678-1234-5678-1234-567812345678')\n- assert app_state.accounts[0].name == 'iCloud'\n- assert app_state.accounts[0].type == AccountType.OTHER\n- assert len(app_state.accounts[0].lists) == 2\n+ assert all(isinstance(account, RemindersAccount) for account in app_state.accounts)\n+ assert all(isinstance(account.id, UUID) for account in app_state.accounts)\n+ assert all(isinstance(account.name, str) for account in app_state.accounts)\n+ assert all(account.type == AccountType.OTHER for account in app_state.accounts)\n+ assert all(len(account.lists) == 2 for account in app_state.accounts)\n \n- work_list = app_state.accounts[0].lists[0]\n- assert work_list.id == UUID('11111111-1111-1111-1111-111111111111')\n- assert work_list.name == 'Work'\n- assert len(work_list.reminders) == 2\n+ for account in app_state.accounts:\n+ for reminder_list in account.lists:\n+ assert isinstance(reminder_list, ReminderList)\n+ assert isinstance(reminder_list.id, UUID)\n+ assert isinstance(reminder_list.name, str)\n+ assert len(reminder_list.reminders) == 2\n \n- grocery_reminder = work_list.reminders[0]\n- assert grocery_reminder.id == UUID('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa')\n- assert grocery_reminder.title == 'Buy groceries'\n- assert grocery_reminder.notes == 'Milk and eggs'\n- assert str(grocery_reminder.due_date) == '2023-05-01'\n+ for reminder in reminder_list.reminders:\n+ assert isinstance(reminder, Reminder)\n+ assert isinstance(reminder.id, UUID)\n+ assert isinstance(reminder.title, str)\n+ assert isinstance(reminder.notes, (str, type(None)))\n+ assert isinstance(reminder.due_date, (str, type(None)))\n \n- call_mom_reminder = work_list.reminders[1]\n- assert call_mom_reminder.id == UUID('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb')\n- assert call_mom_reminder.title == 'Call mom'\n- assert call_mom_reminder.notes is None\n- assert call_mom_reminder.due_date is None\n+def test_get_all_reminders(fake):\n+ app_state = create_mock_app_state(fake)\n+ all_reminders = app_state.get_all_reminders()\n \n-def test_get_all_reminders():\n- account1 = RemindersAccount(id=UUID('12345678-1234-5678-1234-567812345678'), name='iCloud', type=AccountType.ICLOUD)\n- account2 = RemindersAccount(id=UUID('87654321-4321-8765-4321-876543210987'), name='Local', type=AccountType.LOCAL)\n-\n- list1 = ReminderList(id=UUID('11111111-1111-1111-1111-111111111111'), name='Work')\n- list2 = ReminderList(id=UUID('22222222-2222-2222-2222-222222222222'), name='Personal')\n-\n- reminder1 = Reminder(id=UUID('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'), title='Task 1')\n\\ No newline at end of file\n- reminder2 = Reminder(id=UUID('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'), title='Task 2')\n- reminder3 = Reminder(id=UUID('cccccccc-cccc-cccc-cccc-cccccccccccc'), title='Task 3')\n-\n- list1.reminders = [reminder1, reminder2]\n- list2.reminders = [reminder3]\n-\n- account1.lists = [list1]\n- account2.lists = [list2]\n-\n- app_state = RemindersAppState(accounts=[account1, account2])\n-\n- all_reminders = app_state.get_all_reminders()\n assert len(all_reminders) == 3\n assert all(isinstance(reminder, Reminder) for reminder in all_reminders)\n- assert set(reminder.title for reminder in all_reminders) == {'Task 1', 'Task 2', 'Task 3'}\n+ assert len(set(reminder.title for reminder in all_reminders)) == 3\n \n-def test_get_reminders_by_list():\n- account = RemindersAccount(id=UUID('12345678-1234-5678-1234-567812345678'), name='iCloud', type=AccountType.ICLOUD)\n- list1 = ReminderList(id=UUID('11111111-1111-1111-1111-111111111111'), name='Work')\n- list2 = ReminderList(id=UUID('22222222-2222-2222-2222-222222222222'), name='Personal')\n+def test_get_reminders_by_list(fake):\n+ app_state = create_mock_app_state(fake)\n+ list_id = app_state.accounts[0].lists[0].id\n \n- reminder1 = Reminder(id=UUID('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'), title='Work Task')\n- reminder2 = Reminder(id=UUID('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'), title='Personal Task')\n+ reminders = app_state.get_reminders_by_list(list_id)\n+ assert len(reminders) == 2\n+ assert all(isinstance(reminder, Reminder) for reminder in reminders)\n+ assert reminders[0].title == app_state.accounts[0].lists[0].reminders[0].title\n \n- list1.reminders = [reminder1]\n- list2.reminders = [reminder2]\n- account.lists = [list1, list2]\n+def test_get_reminders_by_account(fake):\n+ app_state = create_mock_app_state(fake)\n+ account_id = app_state.accounts[0].id\n \n- app_state = RemindersAppState(accounts=[account])\n+ reminders = app_state.get_reminders_by_account(account_id)\n+ assert len(reminders) == 2\n+ assert all(isinstance(reminder, Reminder) for reminder in reminders)\n+ assert set(r.title for r in reminders) == set(r.title for r in app_state.accounts[0].lists[0].reminders)\n \n- work_reminders = app_state.get_reminders_by_list(UUID('11111111-1111-1111-1111-111111111111'))\n- assert len(work_reminders) == 1\n- assert work_reminders[0].title == 'Work Task'\n+def create_mock_app_state(fake):\n+ accounts = [\n+ RemindersAccount(id=UUID(fake.uuid4()), name=fake.company(), type=AccountType.ICLOUD),\n+ RemindersAccount(id=UUID(fake.uuid4()), name=fake.company(), type=AccountType.LOCAL)\n+ ]\n \n- personal_reminders = app_state.get_reminders_by_list(UUID('22222222-2222-2222-2222-222222222222'))\n- assert len(personal_reminders) == 1\n- assert personal_reminders[0].title == 'Personal Task'\n+ for account in accounts:\n+ account.lists = [\n+ ReminderList(id=UUID(fake.uuid4()), name=fake.word())\n+ ]\n+ account.lists[0].reminders = [\n+ Reminder(id=UUID(fake.uuid4()), title=fake.sentence(nb_words=3))\n+ for _ in range(2)\n+ ]\n \n-def test_get_reminders_by_account():\n- account1 = RemindersAccount(id=UUID('12345678-1234-5678-1234-567812345678'), name='iCloud', type=AccountType.ICLOUD)\n- account2 = RemindersAccount(id=UUID('87654321-4321-8765-4321-876543210987'), name='Local', type=AccountType.LOCAL)\n+ accounts[1].lists[0].reminders.append(\n+ Reminder(id=UUID(fake.uuid4()), title=fake.sentence(nb_words=3))\n+ )\n \n- list1 = ReminderList(id=UUID('11111111-1111-1111-1111-111111111111'), name='Work')\n- list2 = ReminderList(id=UUID('22222222-2222-2222-2222-222222222222'), name='Personal')\n-\n- reminder1 = Reminder(id=UUID('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'), title='iCloud Task 1')\n- reminder2 = Reminder(id=UUID('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'), title='iCloud Task 2')\n- reminder3 = Reminder(id=UUID('cccccccc-cccc-cccc-cccc-cccccccccccc'), title='Local Task')\n-\n- list1.reminders = [reminder1, reminder2]\n- list2.reminders = [reminder3]\n-\n- account1.lists = [list1]\n- account2.lists = [list2]\n-\n- app_state = RemindersAppState(accounts=[account1, account2])\n-\n- icloud_reminders = app_state.get_reminders_by_account(UUID('12345678-1234-5678-1234-567812345678'))\n- assert len(icloud_reminders) == 2\n- assert set(reminder.title for reminder in icloud_reminders) == {'iCloud Task 1', 'iCloud Task 2'}\n-\n- local_reminders = app_state.get_reminders_by_account(UUID('87654321-4321-8765-4321-876543210987'))\n- assert len(local_reminders) == 1\n- assert local_reminders[0].title == 'Local Task'\n+ return RemindersAppState(accounts=accounts)\n\\ No newline at end of file\n" + }, + { + "date": 1724544033892, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -3,9 +3,13 @@\n from faker import Faker\n from src.dspygen.experiments.reminders_models import RemindersAppState, RemindersAccount, ReminderList, Reminder, AccountType\n from uuid import UUID\n import json\n+from typer.testing import CliRunner\n+from src.dspygen.experiments.wa_reminders import app\n \n+runner = CliRunner()\n+\n @pytest.fixture\n def fake():\n return Faker()\n \n@@ -118,5 +122,37 @@\n accounts[1].lists[0].reminders.append(\n Reminder(id=UUID(fake.uuid4()), title=fake.sentence(nb_words=3))\n )\n \n- return RemindersAppState(accounts=accounts)\n\\ No newline at end of file\n+ return RemindersAppState(accounts=accounts)\n+\n+def test_list_reminders(mock_reminders_app_state, monkeypatch):\n+ monkeypatch.setattr('src.dspygen.experiments.wa_reminders.RemindersAppState.from_system', lambda: mock_reminders_app_state)\n+ \n+ result = runner.invoke(app, [\"list-reminders\"])\n+ assert result.exit_code == 0\n+ assert \"- \" in result.stdout # Check if at least one reminder is listed\n+ \n+ # Count the number of reminders listed\n+ reminder_count = result.stdout.count(\"- \")\n+ assert reminder_count == 8 # 2 accounts * 2 lists * 2 reminders = 8 total reminders\n+\n+def test_list_reminders_with_list_name(mock_reminders_app_state, monkeypatch):\n+ monkeypatch.setattr('src.dspygen.experiments.wa_reminders.RemindersAppState.from_system', lambda: mock_reminders_app_state)\n+ \n+ list_name = mock_reminders_app_state.accounts[0].lists[0].name\n+ result = runner.invoke(app, [\"list-reminders\", \"--list-name\", list_name])\n+ assert result.exit_code == 0\n+ assert \"- \" in result.stdout\n+ \n+ reminder_count = result.stdout.count(\"- \")\n+ assert reminder_count == 2 # Only reminders from the specified list should be shown\n+\n+def test_list_reminders_empty_list(mock_reminders_app_state, monkeypatch):\n+ # Create a mock state with an empty list\n+ empty_list = ReminderList(id=UUID('12345678-1234-5678-1234-567812345678'), name=\"Empty List\")\n+ mock_reminders_app_state.accounts[0].lists.append(empty_list)\n+ monkeypatch.setattr('src.dspygen.experiments.wa_reminders.RemindersAppState.from_system', lambda: mock_reminders_app_state)\n+ \n+ result = runner.invoke(app, [\"list-reminders\", \"--list-name\", \"Empty List\"])\n+ assert result.exit_code == 0\n+ assert \"No reminders found in list 'Empty List'\" in result.stdout\n\\ No newline at end of file\n" + } + ], + "date": 1724539735741, + "name": "Commit-0", + "content": "\n\n\n" + } + ] +} \ No newline at end of file diff --git a/.lh/tests/experiments/test_wa_reminders.py.json b/.lh/tests/experiments/test_wa_reminders.py.json index 6e38f6b..1983e85 100644 --- a/.lh/tests/experiments/test_wa_reminders.py.json +++ b/.lh/tests/experiments/test_wa_reminders.py.json @@ -3,7 +3,7 @@ "activeCommit": 0, "commits": [ { - "activePatchIndex": 9, + "activePatchIndex": 12, "patches": [ { "date": 1724538008609, @@ -44,6 +44,18 @@ { "date": 1724539113435, "content": "Index: \n===================================================================\n--- \n+++ \n@@ -88,17 +88,15 @@\n f.write(\"invalid,csv,data\\n1,2,3\")\n \n result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n assert result.exit_code != 0\n- assert \"Error validating row\" in result.stdout\n \n def test_import_from_clipboard_invalid_csv(clean_test_list):\n invalid_csv_data = \"invalid,csv,data\\n1,2,3\"\n pyperclip.copy(invalid_csv_data)\n \n result = runner.invoke(app, ['import-from-clipboard', '--list-name', clean_test_list])\n assert result.exit_code != 0\n- assert \"Error validating row\" in result.stdout\n \n # Add new tests for the core functions if needed\n def test_import_reminders_from_file(temp_csv_file, clean_test_list):\n reminders = import_reminders_from_file(temp_csv_file, clean_test_list)\n@@ -110,189 +108,5 @@\n csv_data = \"title,notes,due_date\\nClipboard Reminder,Clipboard Notes,2023-05-03\"\n pyperclip.copy(csv_data)\n reminders = import_reminders_from_clipboard(clean_test_list)\n assert len(reminders) == 1\n- assert reminders[0].title == \"Clipboard Reminder\"\n-import pytest\n-from typer.testing import CliRunner\n-import subprocess\n-import csv\n-import tempfile\n-import os\n-import pyperclip\n-\n-from dspygen.experiments.wa_reminders import app\n-\n-runner = CliRunner()\n-\n-def run_applescript(script):\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- if error:\n- raise Exception(f\"AppleScript Error: {error.decode('utf-8')}\")\n- return output.decode('utf-8').strip()\n-\n-def clear_reminders(list_name):\n- script = f'''\n- tell application \"Reminders\"\n- if not (exists list \"{list_name}\") then\n- make new list with properties {{name:\"{list_name}\"}}\n- end if\n- delete every reminder of list \"{list_name}\"\n- end tell\n- '''\n- run_applescript(script)\n-\n-def get_reminders(list_name):\n- script = f'''\n- tell application \"Reminders\"\n- if not (exists list \"{list_name}\") then\n- make new list with properties {{name:\"{list_name}\"}}\n- end if\n- set reminderList to list \"{list_name}\"\n- set reminderNames to name of every reminder in reminderList\n- return reminderNames\n- end tell\n- '''\n- return run_applescript(script).split(\", \")\n-\n-@pytest.fixture(scope=\"function\")\n-def temp_csv_file():\n- with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.csv') as temp_file:\n- writer = csv.writer(temp_file)\n- writer.writerow(['title', 'notes', 'due_date'])\n- writer.writerow(['Test Reminder 1', 'Test Notes 1', '2023-05-01'])\n- writer.writerow(['Test Reminder 2', 'Test Notes 2', '2023-05-02'])\n- yield temp_file.name\n- os.unlink(temp_file.name)\n-\n-@pytest.fixture(scope=\"function\")\n-def clean_test_list():\n- list_name = \"Test Reminders List\"\n- clear_reminders(list_name)\n- yield list_name\n- clear_reminders(list_name)\n-\n-def test_import_reminders(temp_csv_file, clean_test_list):\n- result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n- assert result.exit_code == 0\n- assert \"All reminders imported successfully.\" in result.stdout\n-\n- reminders = get_reminders(clean_test_list)\n- assert \"Test Reminder 1\" in reminders\n- assert \"Test Reminder 2\" in reminders\n-\n-def test_import_from_clipboard(clean_test_list):\n- csv_data = \"title,notes,due_date\\nClipboard Reminder,Clipboard Notes,2023-05-03\"\n- pyperclip.copy(csv_data)\n-\n- result = runner.invoke(app, ['import-from-clipboard', '--list-name', clean_test_list])\n- assert result.exit_code == 0\n- assert \"All reminders imported successfully from clipboard.\" in result.stdout\n-\n- reminders = get_reminders(clean_test_list)\n- assert \"Clipboard Reminder\" in reminders\n-\n-def test_import_reminders_file_not_found():\n- result = runner.invoke(app, ['import-reminders', 'non_existent_file.csv'])\n- assert result.exit_code != 0\n- assert \"Error: CSV file 'non_existent_file.csv' not found.\" in result.output\n-\n-def test_import_reminders_invalid_csv(temp_csv_file, clean_test_list):\n- with open(temp_csv_file, 'w') as f:\n- f.write(\"invalid,csv,data\\n1,2,3\")\n-\n- result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n- assert result.exit_code != 0\n- assert \"Error validating row\" in result.output\n-import pytest\n-from typer.testing import CliRunner\n-import subprocess\n-import csv\n-import tempfile\n-import os\n-import pyperclip\n-\n-from dspygen.experiments.wa_reminders import app\n-\n-runner = CliRunner()\n-\n-def run_applescript(script):\n- process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n- output, error = process.communicate()\n- if error:\n- raise Exception(f\"AppleScript Error: {error.decode('utf-8')}\")\n- return output.decode('utf-8').strip()\n-\n-def clear_reminders(list_name):\n- script = f'''\n- tell application \"Reminders\"\n- if not (exists list \"{list_name}\") then\n- make new list with properties {{name:\"{list_name}\"}}\n- end if\n- delete every reminder of list \"{list_name}\"\n- end tell\n- '''\n- run_applescript(script)\n-\n-def get_reminders(list_name):\n- script = f'''\n- tell application \"Reminders\"\n- if not (exists list \"{list_name}\") then\n- make new list with properties {{name:\"{list_name}\"}}\n- end if\n- set reminderList to list \"{list_name}\"\n- set reminderNames to name of every reminder in reminderList\n- return reminderNames\n- end tell\n- '''\n- return run_applescript(script).split(\", \")\n-\n-@pytest.fixture(scope=\"function\")\n-def temp_csv_file():\n- with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.csv') as temp_file:\n- writer = csv.writer(temp_file)\n- writer.writerow(['title', 'notes', 'due_date'])\n- writer.writerow(['Test Reminder 1', 'Test Notes 1', '2023-05-01'])\n- writer.writerow(['Test Reminder 2', 'Test Notes 2', '2023-05-02'])\n- yield temp_file.name\n- os.unlink(temp_file.name)\n-\n-@pytest.fixture(scope=\"function\")\n-def clean_test_list():\n- list_name = \"Test Reminders List\"\n- clear_reminders(list_name)\n- yield list_name\n- clear_reminders(list_name)\n-\n-def test_import_reminders(temp_csv_file, clean_test_list):\n- result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n- assert result.exit_code == 0\n- assert \"All reminders imported successfully.\" in result.stdout\n-\n- reminders = get_reminders(clean_test_list)\n- assert \"Test Reminder 1\" in reminders\n- assert \"Test Reminder 2\" in reminders\n-\n-def test_import_from_clipboard(clean_test_list):\n- csv_data = \"title,notes,due_date\\nClipboard Reminder,Clipboard Notes,2023-05-03\"\n- pyperclip.copy(csv_data)\n-\n- result = runner.invoke(app, ['import-from-clipboard', '--list-name', clean_test_list])\n- assert result.exit_code == 0\n- assert \"All reminders imported successfully from clipboard.\" in result.stdout\n-\n- reminders = get_reminders(clean_test_list)\n- assert \"Clipboard Reminder\" in reminders\n-\n-def test_import_reminders_file_not_found():\n- result = runner.invoke(app, ['import-reminders', 'non_existent_file.csv'])\n- assert result.exit_code != 0\n- assert \"Error: CSV file 'non_existent_file.csv' not found.\" in result.output\n-\n-def test_import_reminders_invalid_csv(temp_csv_file, clean_test_list):\n- with open(temp_csv_file, 'w') as f:\n- f.write(\"invalid,csv,data\\n1,2,3\")\n-\n- result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n- assert result.exit_code != 0\n- assert \"Error validating row\" in result.output\n\\ No newline at end of file\n+ assert reminders[0].title == \"Clipboard Reminder\"\n\\ No newline at end of file\n" + }, + { + "date": 1724539266944, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -88,15 +88,17 @@\n f.write(\"invalid,csv,data\\n1,2,3\")\n \n result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n assert result.exit_code != 0\n+ assert \"Error validating row\" in result.stdout\n \n def test_import_from_clipboard_invalid_csv(clean_test_list):\n invalid_csv_data = \"invalid,csv,data\\n1,2,3\"\n pyperclip.copy(invalid_csv_data)\n \n result = runner.invoke(app, ['import-from-clipboard', '--list-name', clean_test_list])\n assert result.exit_code != 0\n+ assert \"Error validating row\" in result.stdout\n \n # Add new tests for the core functions if needed\n def test_import_reminders_from_file(temp_csv_file, clean_test_list):\n reminders = import_reminders_from_file(temp_csv_file, clean_test_list)\n" + }, + { + "date": 1724539382214, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,112 @@\n+import pytest\n+from typer.testing import CliRunner\n+import subprocess\n+import csv\n+import tempfile\n+import os\n+import pyperclip\n+\n+from dspygen.experiments.wa_reminders import app, import_reminders_from_file, import_reminders_from_clipboard\n+\n+runner = CliRunner()\n+\n+def run_applescript(script):\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ if error:\n+ raise Exception(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ return output.decode('utf-8').strip()\n+\n+def clear_reminders(list_name):\n+ script = f'''\n+ tell application \"Reminders\"\n+ if not (exists list \"{list_name}\") then\n+ make new list with properties {{name:\"{list_name}\"}}\n+ end if\n+ delete every reminder of list \"{list_name}\"\n+ end tell\n+ '''\n+ run_applescript(script)\n+\n+def get_reminders(list_name):\n+ script = f'''\n+ tell application \"Reminders\"\n+ if not (exists list \"{list_name}\") then\n+ make new list with properties {{name:\"{list_name}\"}}\n+ end if\n+ set reminderList to list \"{list_name}\"\n+ set reminderNames to name of every reminder in reminderList\n+ return reminderNames\n+ end tell\n+ '''\n+ return run_applescript(script).split(\", \")\n+\n+@pytest.fixture(scope=\"function\")\n+def temp_csv_file():\n+ with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.csv') as temp_file:\n+ writer = csv.writer(temp_file)\n+ writer.writerow(['title', 'notes', 'due_date'])\n+ writer.writerow(['Test Reminder 1', 'Test Notes 1', '2023-05-01'])\n+ writer.writerow(['Test Reminder 2', 'Test Notes 2', '2023-05-02'])\n+ yield temp_file.name\n+ os.unlink(temp_file.name)\n+\n+@pytest.fixture(scope=\"function\")\n+def clean_test_list():\n+ list_name = \"Test Reminders List\"\n+ clear_reminders(list_name)\n+ yield list_name\n+ clear_reminders(list_name)\n+\n+def test_import_reminders(temp_csv_file, clean_test_list):\n+ result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n+ assert result.exit_code == 0\n+ assert \"Successfully imported 2 reminders.\" in result.stdout\n+\n+ reminders = get_reminders(clean_test_list)\n+ assert \"Test Reminder 1\" in reminders\n+ assert \"Test Reminder 2\" in reminders\n+\n+def test_import_from_clipboard(clean_test_list):\n+ csv_data = \"title,notes,due_date\\nClipboard Reminder,Clipboard Notes,2023-05-03\"\n+ pyperclip.copy(csv_data)\n+\n+ result = runner.invoke(app, ['import-from-clipboard', '--list-name', clean_test_list])\n+ assert result.exit_code == 0\n+ assert \"Successfully imported 1 reminders from clipboard.\" in result.stdout\n+\n+ reminders = get_reminders(clean_test_list)\n+ assert \"Clipboard Reminder\" in reminders\n+\n+def test_import_reminders_file_not_found():\n+ result = runner.invoke(app, ['import-reminders', 'non_existent_file.csv'])\n+ assert result.exit_code != 0\n+ assert \"Error: CSV file 'non_existent_file.csv' not found.\" in result.output\n+\n+def test_import_reminders_invalid_csv(temp_csv_file, clean_test_list):\n+ with open(temp_csv_file, 'w') as f:\n+ f.write(\"invalid,csv,data\\n1,2,3\")\n+\n+ result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n+ assert result.exit_code != 0\n+\n+def test_import_from_clipboard_invalid_csv(clean_test_list):\n+ invalid_csv_data = \"invalid,csv,data\\n1,2,3\"\n+ pyperclip.copy(invalid_csv_data)\n+\n+ result = runner.invoke(app, ['import-from-clipboard', '--list-name', clean_test_list])\n+ assert result.exit_code != 0\n+\n+# Add new tests for the core functions if needed\n+def test_import_reminders_from_file(temp_csv_file, clean_test_list):\n+ reminders = import_reminders_from_file(temp_csv_file, clean_test_list)\n+ assert len(reminders) == 2\n+ assert reminders[0].title == \"Test Reminder 1\"\n+ assert reminders[1].title == \"Test Reminder 2\"\n+\n+def test_import_reminders_from_clipboard(clean_test_list):\n+ csv_data = \"title,notes,due_date\\nClipboard Reminder,Clipboard Notes,2023-05-03\"\n+ pyperclip.copy(csv_data)\n+ reminders = import_reminders_from_clipboard(clean_test_list)\n+ assert len(reminders) == 1\n+ assert reminders[0].title == \"Clipboard Reminder\"\n\\ No newline at end of file\n" + }, + { + "date": 1724539479830, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,114 @@\n+import pytest\n+from typer.testing import CliRunner\n+import subprocess\n+import csv\n+import tempfile\n+import os\n+import pyperclip\n+\n+from dspygen.experiments.wa_reminders import app, import_reminders_from_file, import_reminders_from_clipboard\n+\n+runner = CliRunner()\n+\n+def run_applescript(script):\n+ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n+ output, error = process.communicate()\n+ if error:\n+ raise Exception(f\"AppleScript Error: {error.decode('utf-8')}\")\n+ return output.decode('utf-8').strip()\n+\n+def clear_reminders(list_name):\n+ script = f'''\n+ tell application \"Reminders\"\n+ if not (exists list \"{list_name}\") then\n+ make new list with properties {{name:\"{list_name}\"}}\n+ end if\n+ delete every reminder of list \"{list_name}\"\n+ end tell\n+ '''\n+ run_applescript(script)\n+\n+def get_reminders(list_name):\n+ script = f'''\n+ tell application \"Reminders\"\n+ if not (exists list \"{list_name}\") then\n+ make new list with properties {{name:\"{list_name}\"}}\n+ end if\n+ set reminderList to list \"{list_name}\"\n+ set reminderNames to name of every reminder in reminderList\n+ return reminderNames\n+ end tell\n+ '''\n+ return run_applescript(script).split(\", \")\n+\n+@pytest.fixture(scope=\"function\")\n+def temp_csv_file():\n+ with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.csv') as temp_file:\n+ writer = csv.writer(temp_file)\n+ writer.writerow(['title', 'notes', 'due_date'])\n+ writer.writerow(['Test Reminder 1', 'Test Notes 1', '2023-05-01'])\n+ writer.writerow(['Test Reminder 2', 'Test Notes 2', '2023-05-02'])\n+ yield temp_file.name\n+ os.unlink(temp_file.name)\n+\n+@pytest.fixture(scope=\"function\")\n+def clean_test_list():\n+ list_name = \"Test Reminders List\"\n+ clear_reminders(list_name)\n+ yield list_name\n+ clear_reminders(list_name)\n+\n+def test_import_reminders(temp_csv_file, clean_test_list):\n+ result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n+ assert result.exit_code == 0\n+ assert \"Successfully imported 2 reminders.\" in result.stdout\n+\n+ reminders = get_reminders(clean_test_list)\n+ assert \"Test Reminder 1\" in reminders\n+ assert \"Test Reminder 2\" in reminders\n+\n+def test_import_from_clipboard(clean_test_list):\n+ csv_data = \"title,notes,due_date\\nClipboard Reminder,Clipboard Notes,2023-05-03\"\n+ pyperclip.copy(csv_data)\n+\n+ result = runner.invoke(app, ['import-from-clipboard', '--list-name', clean_test_list])\n+ assert result.exit_code == 0\n+ assert \"Successfully imported 1 reminders from clipboard.\" in result.stdout\n+\n+ reminders = get_reminders(clean_test_list)\n+ assert \"Clipboard Reminder\" in reminders\n+\n+def test_import_reminders_file_not_found():\n+ result = runner.invoke(app, ['import-reminders', 'non_existent_file.csv'])\n+ assert result.exit_code != 0\n+ assert \"Error: CSV file 'non_existent_file.csv' not found.\" in result.output\n+\n+def test_import_reminders_invalid_csv(temp_csv_file, clean_test_list):\n+ with open(temp_csv_file, 'w') as f:\n+ f.write(\"invalid,csv,data\\n1,2,3\")\n+\n+ result = runner.invoke(app, ['import-reminders', temp_csv_file, '--list-name', clean_test_list])\n+ assert result.exit_code != 0\n+ assert \"Error validating row\" in result.stdout\n+\n+def test_import_from_clipboard_invalid_csv(clean_test_list):\n+ invalid_csv_data = \"invalid,csv,data\\n1,2,3\"\n+ pyperclip.copy(invalid_csv_data)\n+\n+ result = runner.invoke(app, ['import-from-clipboard', '--list-name', clean_test_list])\n+ assert result.exit_code != 0\n+ assert \"Error validating row\" in result.stdout\n+\n+# Add new tests for the core functions if needed\n+def test_import_reminders_from_file(temp_csv_file, clean_test_list):\n+ reminders = import_reminders_from_file(temp_csv_file, clean_test_list)\n+ assert len(reminders) == 2\n+ assert reminders[0].title == \"Test Reminder 1\"\n+ assert reminders[1].title == \"Test Reminder 2\"\n+\n+def test_import_reminders_from_clipboard(clean_test_list):\n+ csv_data = \"title,notes,due_date\\nClipboard Reminder,Clipboard Notes,2023-05-03\"\n+ pyperclip.copy(csv_data)\n+ reminders = import_reminders_from_clipboard(clean_test_list)\n+ assert len(reminders) == 1\n+ assert reminders[0].title == \"Clipboard Reminder\"\n\\ No newline at end of file\n" } ], "date": 1724538008609, diff --git a/.lh/tests/test_event_kit_service.py.json b/.lh/tests/test_event_kit_service.py.json new file mode 100644 index 0000000..9784c6d --- /dev/null +++ b/.lh/tests/test_event_kit_service.py.json @@ -0,0 +1,22 @@ +{ + "sourceFile": "tests/test_event_kit_service.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 1, + "patches": [ + { + "date": 1724705606170, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724705643280, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -0,0 +1,140 @@\n+import pytest\n+from unittest.mock import Mock, patch\n+from uuid import UUID\n+from datetime import datetime, timedelta\n+from src.dspygen.experiments.event_kit.event_kit_service import EventKitService, Calendar, Reminder\n+\n+@pytest.fixture\n+def mock_event_kit():\n+ with patch('src.dspygen.experiments.event_kit.event_kit_service.EventKit') as mock_ek:\n+ yield mock_ek\n+\n+@pytest.fixture\n+def event_kit_service(mock_event_kit):\n+ return EventKitService()\n+\n+@pytest.fixture\n+def sample_calendar():\n+ return Calendar(id=UUID('12345678-1234-5678-1234-567812345678'), title='Test Calendar')\n+\n+@pytest.fixture\n+def sample_reminder():\n+ return Reminder(\n+ id=UUID('87654321-4321-8765-4321-876543210987'),\n+ title='Test Reminder',\n+ due_date=datetime.now() + timedelta(days=1),\n+ completed=False,\n+ notes='Test notes',\n+ calendar_id=UUID('12345678-1234-5678-1234-567812345678')\n+ )\n+\n+def test_request_access(event_kit_service, mock_event_kit):\n+ # Test successful access request\n+ mock_event_kit.EKEntityTypeReminder = 'reminder'\n+ event_kit_service.store.requestAccessToEntityType.side_effect = lambda entity_type, completionHandler: completionHandler(True, None)\n+ event_kit_service.request_access()\n+\n+ # Test access denied\n+ event_kit_service.store.requestAccessToEntityType.side_effect = lambda entity_type, completionHandler: completionHandler(False, None)\n+ with pytest.raises(PermissionError):\n+ event_kit_service.request_access()\n+\n+def test_get_calendars(event_kit_service, mock_event_kit, sample_calendar):\n+ mock_calendar = Mock()\n+ mock_calendar.calendarIdentifier.return_value = str(sample_calendar.id)\n+ mock_calendar.title.return_value = sample_calendar.title\n+ event_kit_service.store.calendarsForEntityType_.return_value = [mock_calendar]\n+\n+ calendars = event_kit_service.get_calendars()\n+ assert len(calendars) == 1\n+ assert calendars[0].id == sample_calendar.id\n+ assert calendars[0].title == sample_calendar.title\n+\n+def test_get_reminders(event_kit_service, mock_event_kit, sample_calendar, sample_reminder):\n+ mock_calendar = Mock()\n+ mock_calendar.calendarIdentifier.return_value = str(sample_calendar.id)\n+ event_kit_service.store.calendarsForEntityType_.return_value = [mock_calendar]\n+\n+ mock_reminder = Mock()\n+ mock_reminder.calendarItemIdentifier.return_value = str(sample_reminder.id)\n+ mock_reminder.title.return_value = sample_reminder.title\n+ mock_reminder.dueDateComponents.return_value.date.return_value = sample_reminder.due_date\n+ mock_reminder.isCompleted.return_value = sample_reminder.completed\n+ mock_reminder.notes.return_value = sample_reminder.notes\n+\n+ event_kit_service.store.remindersMatchingPredicate_.return_value = [mock_reminder]\n+\n+ reminders = event_kit_service.get_reminders(sample_calendar.id)\n+ assert len(reminders) == 1\n+ assert reminders[0].id == sample_reminder.id\n+ assert reminders[0].title == sample_reminder.title\n+ assert reminders[0].due_date == sample_reminder.due_date\n+ assert reminders[0].completed == sample_reminder.completed\n+ assert reminders[0].notes == sample_reminder.notes\n+ assert reminders[0].calendar_id == sample_calendar.id\n+\n+def test_add_reminder(event_kit_service, mock_event_kit, sample_calendar, sample_reminder):\n+ mock_calendar = Mock()\n+ mock_calendar.calendarIdentifier.return_value = str(sample_calendar.id)\n+ event_kit_service.store.calendarsForEntityType_.return_value = [mock_calendar]\n+\n+ mock_new_reminder = Mock()\n+ mock_new_reminder.calendarItemIdentifier.return_value = str(sample_reminder.id)\n+ mock_new_reminder.title.return_value = sample_reminder.title\n+ mock_new_reminder.dueDateComponents.return_value.date.return_value = sample_reminder.due_date\n+ mock_new_reminder.isCompleted.return_value = sample_reminder.completed\n+ mock_new_reminder.notes.return_value = sample_reminder.notes\n+\n+ mock_event_kit.EKReminder.reminderWithEventStore_.return_value = mock_new_reminder\n+\n+ added_reminder = event_kit_service.add_reminder(sample_calendar.id, sample_reminder)\n+ assert added_reminder.id == sample_reminder.id\n+ assert added_reminder.title == sample_reminder.title\n+ assert added_reminder.due_date == sample_reminder.due_date\n+ assert added_reminder.completed == sample_reminder.completed\n+ assert added_reminder.notes == sample_reminder.notes\n+ assert added_reminder.calendar_id == sample_calendar.id\n+\n+ event_kit_service.store.saveReminder_commit_error_.assert_called_once()\n+\n+def test_update_reminder(event_kit_service, mock_event_kit, sample_calendar, sample_reminder):\n+ event_kit_service.get_reminders = Mock(return_value=[sample_reminder])\n+ event_kit_service.add_reminder = Mock(return_value=sample_reminder)\n+\n+ updated_reminder_data = sample_reminder.copy()\n+ updated_reminder_data.title = \"Updated Title\"\n+ updated_reminder_data.completed = True\n+\n+ updated_reminder = event_kit_service.update_reminder(sample_calendar.id, sample_reminder.id, updated_reminder_data)\n+ \n+ assert updated_reminder.id == sample_reminder.id\n+ assert updated_reminder.title == \"Updated Title\"\n+ assert updated_reminder.completed == True\n+ event_kit_service.add_reminder.assert_called_once()\n+\n+def test_delete_reminder(event_kit_service, mock_event_kit, sample_calendar, sample_reminder):\n+ event_kit_service.get_reminders = Mock(return_value=[sample_reminder])\n+ mock_reminder_to_delete = Mock()\n+ event_kit_service.store.calendarItemWithIdentifier_.return_value = mock_reminder_to_delete\n+\n+ event_kit_service.delete_reminder(sample_calendar.id, sample_reminder.id)\n+\n+ event_kit_service.store.removeReminder_commit_error_.assert_called_once_with(mock_reminder_to_delete, True, None)\n+\n+def test_reminder_not_found(event_kit_service, sample_calendar):\n+ event_kit_service.get_reminders = Mock(return_value=[])\n+ \n+ with pytest.raises(StopIteration):\n+ event_kit_service.update_reminder(sample_calendar.id, UUID('00000000-0000-0000-0000-000000000000'), Reminder(title=\"Non-existent Reminder\", calendar_id=sample_calendar.id))\n+\n+ with pytest.raises(StopIteration):\n+ event_kit_service.delete_reminder(sample_calendar.id, UUID('00000000-0000-0000-0000-000000000000'))\n+\n+def test_calendar_not_found(event_kit_service, mock_event_kit):\n+ event_kit_service.store.calendarsForEntityType_.return_value = []\n+ \n+ with pytest.raises(StopIteration):\n+ event_kit_service.get_reminders(UUID('00000000-0000-0000-0000-000000000000'))\n+\n+ with pytest.raises(StopIteration):\n+ event_kit_service.add_reminder(UUID('00000000-0000-0000-0000-000000000000'), Reminder(title=\"Test Reminder\", calendar_id=UUID('00000000-0000-0000-0000-000000000000')))\n\\ No newline at end of file\n" + } + ], + "date": 1724705606170, + "name": "Commit-0", + "content": "import pytest\nfrom unittest.mock import Mock, patch\nfrom uuid import UUID\nfrom datetime import datetime, timedelta\nfrom src.dspygen.experiments.event_kit.event_kit_service import EventKitService, Calendar, Reminder\n\n@pytest.fixture\ndef mock_event_kit():\n with patch('src.dspygen.experiments.event_kit.event_kit_service.EventKit') as mock_ek:\n yield mock_ek\n\n@pytest.fixture\ndef event_kit_service(mock_event_kit):\n return EventKitService()\n\n@pytest.fixture\ndef sample_calendar():\n return Calendar(id=UUID('12345678-1234-5678-1234-567812345678'), title='Test Calendar')\n\n@pytest.fixture\ndef sample_reminder():\n return Reminder(\n id=UUID('87654321-4321-8765-4321-876543210987'),\n title='Test Reminder',\n due_date=datetime.now() + timedelta(days=1),\n completed=False,\n notes='Test notes',\n calendar_id=UUID('12345678-1234-5678-1234-567812345678')\n )\n\ndef test_request_access(event_kit_service, mock_event_kit):\n # Test successful access request\n mock_event_kit.EKEntityTypeReminder = 'reminder'\n event_kit_service.store.requestAccessToEntityType_completion.side_effect = lambda entity_type, handler: handler(True, None)\n event_kit_service.request_access()\n\n # Test access denied\n event_kit_service.store.requestAccessToEntityType_completion.side_effect = lambda entity_type, handler: handler(False, None)\n with pytest.raises(PermissionError):\n event_kit_service.request_access()\n\ndef test_get_calendars(event_kit_service, mock_event_kit, sample_calendar):\n mock_calendar = Mock()\n mock_calendar.calendarIdentifier.return_value = str(sample_calendar.id)\n mock_calendar.title.return_value = sample_calendar.title\n event_kit_service.store.calendarsForEntityType_.return_value = [mock_calendar]\n\n calendars = event_kit_service.get_calendars()\n assert len(calendars) == 1\n assert calendars[0].id == sample_calendar.id\n assert calendars[0].title == sample_calendar.title\n\ndef test_get_reminders(event_kit_service, mock_event_kit, sample_calendar, sample_reminder):\n mock_calendar = Mock()\n mock_calendar.calendarIdentifier.return_value = str(sample_calendar.id)\n event_kit_service.store.calendarsForEntityType_.return_value = [mock_calendar]\n\n mock_reminder = Mock()\n mock_reminder.calendarItemIdentifier.return_value = str(sample_reminder.id)\n mock_reminder.title.return_value = sample_reminder.title\n mock_reminder.dueDateComponents.return_value.date.return_value = sample_reminder.due_date\n mock_reminder.isCompleted.return_value = sample_reminder.completed\n mock_reminder.notes.return_value = sample_reminder.notes\n\n event_kit_service.store.remindersMatchingPredicate_.return_value = [mock_reminder]\n\n reminders = event_kit_service.get_reminders(sample_calendar.id)\n assert len(reminders) == 1\n assert reminders[0].id == sample_reminder.id\n assert reminders[0].title == sample_reminder.title\n assert reminders[0].due_date == sample_reminder.due_date\n assert reminders[0].completed == sample_reminder.completed\n assert reminders[0].notes == sample_reminder.notes\n assert reminders[0].calendar_id == sample_calendar.id\n\ndef test_add_reminder(event_kit_service, mock_event_kit, sample_calendar, sample_reminder):\n mock_calendar = Mock()\n mock_calendar.calendarIdentifier.return_value = str(sample_calendar.id)\n event_kit_service.store.calendarsForEntityType_.return_value = [mock_calendar]\n\n mock_new_reminder = Mock()\n mock_new_reminder.calendarItemIdentifier.return_value = str(sample_reminder.id)\n mock_new_reminder.title.return_value = sample_reminder.title\n mock_new_reminder.dueDateComponents.return_value.date.return_value = sample_reminder.due_date\n mock_new_reminder.isCompleted.return_value = sample_reminder.completed\n mock_new_reminder.notes.return_value = sample_reminder.notes\n\n mock_event_kit.EKReminder.reminderWithEventStore_.return_value = mock_new_reminder\n\n added_reminder = event_kit_service.add_reminder(sample_calendar.id, sample_reminder)\n assert added_reminder.id == sample_reminder.id\n assert added_reminder.title == sample_reminder.title\n assert added_reminder.due_date == sample_reminder.due_date\n assert added_reminder.completed == sample_reminder.completed\n assert added_reminder.notes == sample_reminder.notes\n assert added_reminder.calendar_id == sample_calendar.id\n\n event_kit_service.store.saveReminder_commit_error_.assert_called_once()\n\ndef test_update_reminder(event_kit_service, mock_event_kit, sample_calendar, sample_reminder):\n event_kit_service.get_reminders = Mock(return_value=[sample_reminder])\n event_kit_service.add_reminder = Mock(return_value=sample_reminder)\n\n updated_reminder_data = sample_reminder.copy()\n updated_reminder_data.title = \"Updated Title\"\n updated_reminder_data.completed = True\n\n updated_reminder = event_kit_service.update_reminder(sample_calendar.id, sample_reminder.id, updated_reminder_data)\n \n assert updated_reminder.id == sample_reminder.id\n assert updated_reminder.title == \"Updated Title\"\n assert updated_reminder.completed == True\n event_kit_service.add_reminder.assert_called_once()\n\ndef test_delete_reminder(event_kit_service, mock_event_kit, sample_calendar, sample_reminder):\n event_kit_service.get_reminders = Mock(return_value=[sample_reminder])\n mock_reminder_to_delete = Mock()\n event_kit_service.store.calendarItemWithIdentifier_.return_value = mock_reminder_to_delete\n\n event_kit_service.delete_reminder(sample_calendar.id, sample_reminder.id)\n\n event_kit_service.store.removeReminder_commit_error_.assert_called_once_with(mock_reminder_to_delete, True, None)\n\ndef test_reminder_not_found(event_kit_service, sample_calendar):\n event_kit_service.get_reminders = Mock(return_value=[])\n \n with pytest.raises(StopIteration):\n event_kit_service.update_reminder(sample_calendar.id, UUID('00000000-0000-0000-0000-000000000000'), Reminder(title=\"Non-existent Reminder\", calendar_id=sample_calendar.id))\n\n with pytest.raises(StopIteration):\n event_kit_service.delete_reminder(sample_calendar.id, UUID('00000000-0000-0000-0000-000000000000'))\n\ndef test_calendar_not_found(event_kit_service, mock_event_kit):\n event_kit_service.store.calendarsForEntityType_.return_value = []\n \n with pytest.raises(StopIteration):\n event_kit_service.get_reminders(UUID('00000000-0000-0000-0000-000000000000'))\n\n with pytest.raises(StopIteration):\n event_kit_service.add_reminder(UUID('00000000-0000-0000-0000-000000000000'), Reminder(title=\"Test Reminder\", calendar_id=UUID('00000000-0000-0000-0000-000000000000')))" + } + ] +} \ No newline at end of file diff --git a/.lh/tests/test_event_kit_service_integration.py.json b/.lh/tests/test_event_kit_service_integration.py.json new file mode 100644 index 0000000..0617f4b --- /dev/null +++ b/.lh/tests/test_event_kit_service_integration.py.json @@ -0,0 +1,22 @@ +{ + "sourceFile": "tests/test_event_kit_service_integration.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 1, + "patches": [ + { + "date": 1724705985838, + "content": "Index: \n===================================================================\n--- \n+++ \n" + }, + { + "date": 1724709877602, + "content": "Index: \n===================================================================\n--- \n+++ \n@@ -1,115 +1,1 @@\n-import pytest\n-from uuid import UUID\n-from datetime import datetime, timedelta\n-from src.dspygen.experiments.event_kit.event_kit_service import EventKitService, Reminder, Calendar\n-\n-@pytest.fixture(scope=\"module\")\n-def event_kit_service():\n- return EventKitService()\n-\n-@pytest.fixture(scope=\"module\")\n-def test_calendar(event_kit_service):\n- calendars = event_kit_service.get_calendars()\n- test_calendar = next((cal for cal in calendars if cal.title == \"Test Calendar\"), None)\n- \n- if not test_calendar:\n- # Create a test calendar if it doesn't exist\n- # Note: This is a placeholder. You may need to implement calendar creation in EventKitService\n- raise NotImplementedError(\"Test calendar creation not implemented\")\n- \n- return test_calendar\n-\n-def test_get_calendars(event_kit_service):\n- calendars = event_kit_service.get_calendars()\n- assert len(calendars) > 0\n- assert all(isinstance(cal, Calendar) for cal in calendars)\n-\n-def test_get_reminders(event_kit_service, test_calendar):\n- reminders = event_kit_service.get_reminders(test_calendar.id)\n- assert isinstance(reminders, list)\n- assert all(isinstance(reminder, Reminder) for reminder in reminders)\n-\n-def test_add_reminder(event_kit_service, test_calendar):\n- new_reminder = Reminder(\n- title=\"Test Reminder\",\n- due_date=datetime.now() + timedelta(days=1),\n- notes=\"This is a test reminder\",\n- calendar_id=test_calendar.id\n- )\n- \n- added_reminder = event_kit_service.add_reminder(test_calendar.id, new_reminder)\n- assert isinstance(added_reminder, Reminder)\n- assert added_reminder.title == new_reminder.title\n- assert added_reminder.notes == new_reminder.notes\n- \n- # Verify the reminder was actually added\n- reminders = event_kit_service.get_reminders(test_calendar.id)\n- assert any(r.id == added_reminder.id for r in reminders)\n- \n- return added_reminder\n-\n-def test_update_reminder(event_kit_service, test_calendar):\n- # First, add a reminder\n- original_reminder = test_add_reminder(event_kit_service, test_calendar)\n- \n- # Update the reminder\n- updated_data = Reminder(\n- title=\"Updated Test Reminder\",\n- due_date=datetime.now() + timedelta(days=2),\n- notes=\"This reminder has been updated\",\n- completed=True,\n- calendar_id=test_calendar.id\n- )\n- \n- updated_reminder = event_kit_service.update_reminder(test_calendar.id, original_reminder.id, updated_data)\n- assert isinstance(updated_reminder, Reminder)\n- assert updated_reminder.id == original_reminder.id\n- assert updated_reminder.title == updated_data.title\n- assert updated_reminder.notes == updated_data.notes\n- assert updated_reminder.completed == updated_data.completed\n- \n- # Verify the reminder was actually updated\n- reminders = event_kit_service.get_reminders(test_calendar.id)\n- assert any(r.id == updated_reminder.id and r.title == updated_data.title for r in reminders)\n-\n-def test_delete_reminder(event_kit_service, test_calendar):\n- # First, add a reminder\n- reminder_to_delete = test_add_reminder(event_kit_service, test_calendar)\n- \n- # Delete the reminder\n- event_kit_service.delete_reminder(test_calendar.id, reminder_to_delete.id)\n- \n- # Verify the reminder was actually deleted\n- reminders = event_kit_service.get_reminders(test_calendar.id)\n- assert all(r.id != reminder_to_delete.id for r in reminders)\n-\n-def test_reminder_lifecycle(event_kit_service, test_calendar):\n- # Add a reminder\n- new_reminder = Reminder(\n- title=\"Lifecycle Test Reminder\",\n- due_date=datetime.now() + timedelta(days=1),\n- notes=\"This is a lifecycle test reminder\",\n- calendar_id=test_calendar.id\n- )\n- added_reminder = event_kit_service.add_reminder(test_calendar.id, new_reminder)\n- \n- # Update the reminder\n- updated_data = Reminder(\n- title=\"Updated Lifecycle Test Reminder\",\n- due_date=datetime.now() + timedelta(days=2),\n- notes=\"This reminder has been updated in the lifecycle test\",\n- completed=True,\n- calendar_id=test_calendar.id\n- )\n- updated_reminder = event_kit_service.update_reminder(test_calendar.id, added_reminder.id, updated_data)\n- \n- # Verify the update\n- reminders = event_kit_service.get_reminders(test_calendar.id)\n- assert any(r.id == updated_reminder.id and r.title == updated_data.title for r in reminders)\n- \n- # Delete the reminder\n- event_kit_service.delete_reminder(test_calendar.id, updated_reminder.id)\n- \n- # Verify the deletion\n- reminders = event_kit_service.get_reminders(test_calendar.id)\n- assert all(r.id != updated_reminder.id for r in reminders)\n\\ No newline at end of file\n+ \n\\ No newline at end of file\n" + } + ], + "date": 1724705985838, + "name": "Commit-0", + "content": "import pytest\nfrom uuid import UUID\nfrom datetime import datetime, timedelta\nfrom src.dspygen.experiments.event_kit.event_kit_service import EventKitService, Reminder, Calendar\n\n@pytest.fixture(scope=\"module\")\ndef event_kit_service():\n return EventKitService()\n\n@pytest.fixture(scope=\"module\")\ndef test_calendar(event_kit_service):\n calendars = event_kit_service.get_calendars()\n test_calendar = next((cal for cal in calendars if cal.title == \"Test Calendar\"), None)\n \n if not test_calendar:\n # Create a test calendar if it doesn't exist\n # Note: This is a placeholder. You may need to implement calendar creation in EventKitService\n raise NotImplementedError(\"Test calendar creation not implemented\")\n \n return test_calendar\n\ndef test_get_calendars(event_kit_service):\n calendars = event_kit_service.get_calendars()\n assert len(calendars) > 0\n assert all(isinstance(cal, Calendar) for cal in calendars)\n\ndef test_get_reminders(event_kit_service, test_calendar):\n reminders = event_kit_service.get_reminders(test_calendar.id)\n assert isinstance(reminders, list)\n assert all(isinstance(reminder, Reminder) for reminder in reminders)\n\ndef test_add_reminder(event_kit_service, test_calendar):\n new_reminder = Reminder(\n title=\"Test Reminder\",\n due_date=datetime.now() + timedelta(days=1),\n notes=\"This is a test reminder\",\n calendar_id=test_calendar.id\n )\n \n added_reminder = event_kit_service.add_reminder(test_calendar.id, new_reminder)\n assert isinstance(added_reminder, Reminder)\n assert added_reminder.title == new_reminder.title\n assert added_reminder.notes == new_reminder.notes\n \n # Verify the reminder was actually added\n reminders = event_kit_service.get_reminders(test_calendar.id)\n assert any(r.id == added_reminder.id for r in reminders)\n \n return added_reminder\n\ndef test_update_reminder(event_kit_service, test_calendar):\n # First, add a reminder\n original_reminder = test_add_reminder(event_kit_service, test_calendar)\n \n # Update the reminder\n updated_data = Reminder(\n title=\"Updated Test Reminder\",\n due_date=datetime.now() + timedelta(days=2),\n notes=\"This reminder has been updated\",\n completed=True,\n calendar_id=test_calendar.id\n )\n \n updated_reminder = event_kit_service.update_reminder(test_calendar.id, original_reminder.id, updated_data)\n assert isinstance(updated_reminder, Reminder)\n assert updated_reminder.id == original_reminder.id\n assert updated_reminder.title == updated_data.title\n assert updated_reminder.notes == updated_data.notes\n assert updated_reminder.completed == updated_data.completed\n \n # Verify the reminder was actually updated\n reminders = event_kit_service.get_reminders(test_calendar.id)\n assert any(r.id == updated_reminder.id and r.title == updated_data.title for r in reminders)\n\ndef test_delete_reminder(event_kit_service, test_calendar):\n # First, add a reminder\n reminder_to_delete = test_add_reminder(event_kit_service, test_calendar)\n \n # Delete the reminder\n event_kit_service.delete_reminder(test_calendar.id, reminder_to_delete.id)\n \n # Verify the reminder was actually deleted\n reminders = event_kit_service.get_reminders(test_calendar.id)\n assert all(r.id != reminder_to_delete.id for r in reminders)\n\ndef test_reminder_lifecycle(event_kit_service, test_calendar):\n # Add a reminder\n new_reminder = Reminder(\n title=\"Lifecycle Test Reminder\",\n due_date=datetime.now() + timedelta(days=1),\n notes=\"This is a lifecycle test reminder\",\n calendar_id=test_calendar.id\n )\n added_reminder = event_kit_service.add_reminder(test_calendar.id, new_reminder)\n \n # Update the reminder\n updated_data = Reminder(\n title=\"Updated Lifecycle Test Reminder\",\n due_date=datetime.now() + timedelta(days=2),\n notes=\"This reminder has been updated in the lifecycle test\",\n completed=True,\n calendar_id=test_calendar.id\n )\n updated_reminder = event_kit_service.update_reminder(test_calendar.id, added_reminder.id, updated_data)\n \n # Verify the update\n reminders = event_kit_service.get_reminders(test_calendar.id)\n assert any(r.id == updated_reminder.id and r.title == updated_data.title for r in reminders)\n \n # Delete the reminder\n event_kit_service.delete_reminder(test_calendar.id, updated_reminder.id)\n \n # Verify the deletion\n reminders = event_kit_service.get_reminders(test_calendar.id)\n assert all(r.id != updated_reminder.id for r in reminders)" + } + ] +} \ No newline at end of file diff --git a/.lh/tests/test_reminder_app.py.json b/.lh/tests/test_reminder_app.py.json new file mode 100644 index 0000000..d1c74b2 --- /dev/null +++ b/.lh/tests/test_reminder_app.py.json @@ -0,0 +1,18 @@ +{ + "sourceFile": "tests/test_reminder_app.py", + "activeCommit": 0, + "commits": [ + { + "activePatchIndex": 0, + "patches": [ + { + "date": 1724784526871, + "content": "Index: \n===================================================================\n--- \n+++ \n" + } + ], + "date": 1724784526871, + "name": "Commit-0", + "content": "import pytest\nfrom pytest_bdd import scenarios, given, when, then\nfrom ReminderApp import ReminderApp, Reminder, ReminderList\n\n# Load the Gherkin scenarios\nscenarios('../features/reminder_app.feature')\n\n@pytest.fixture\ndef reminder_app():\n app = ReminderApp()\n app.request_access()\n return app\n\n@given('the ReminderApp is initialized')\ndef initialize_app(reminder_app):\n pass # The fixture handles this\n\n@given('I have granted access to reminders')\ndef grant_access(reminder_app):\n pass # The fixture handles this\n\n@given('I create a new list named \"Test List\"')\ndef create_list(reminder_app):\n try:\n reminder_app.select_list(\"Test List\")\n except ValueError:\n test_list = ReminderList(\"Test List\", reminder_app.event_store)\n reminder_app.add_list(test_list)\n reminder_app.select_list(\"Test List\")\n\n@when('I add a reminder titled \"{title}\" with due date \"{due_date}\" to the \"{list_name}\"')\ndef add_reminder(reminder_app, title, due_date, list_name):\n reminder_app.select_list(list_name)\n reminder = Reminder(title=title, due_date=due_date)\n reminder_app.add_reminder_to_selected(reminder)\n\n@when('I mark the reminder \"{title}\" as completed')\ndef mark_reminder_as_completed(reminder_app, title):\n reminders = reminder_app.get_reminders()\n for reminder in reminders:\n if reminder.title == title:\n reminder.mark_as_completed()\n reminder.save(reminder_app.event_store)\n break\n\n@when('I clear completed reminders from \"{list_name}\"')\ndef clear_completed_reminders(reminder_app, list_name):\n reminder_app.select_list(list_name)\n reminder_app.clear_completed_reminders()\n\n@then('the reminder \"{title}\" should exist in the \"{list_name}\"')\ndef verify_reminder_exists(reminder_app, title, list_name):\n reminder_app.select_list(list_name)\n reminders = reminder_app.get_reminders()\n assert any(reminder.title == title for reminder in reminders), f\"Reminder '{title}' does not exist.\"\n\n@then('the reminder \"{title}\" should be marked as completed in the \"{list_name}\"')\ndef verify_reminder_completed(reminder_app, title, list_name):\n reminder_app.select_list(list_name)\n reminders = reminder_app.get_reminders(completed=True)\n assert any(reminder.title == title for reminder in reminders), f\"Reminder '{title}' is not marked as completed.\"\n\n@then('the reminder \"{title}\" should no longer exist in the \"{list_name}\"')\ndef verify_reminder_cleared(reminder_app, title, list_name):\n reminder_app.select_list(list_name)\n reminders = reminder_app.get_reminders()\n assert all(reminder.title != title for reminder in reminders), f\"Completed reminder '{title}' was not cleared.\"" + } + ] +} \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index ee861ce..516e93d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -5847,6 +5847,2856 @@ files = [ {file = "pykka-4.0.2.tar.gz", hash = "sha256:05e687c426922b0084d79f22a6c1813e0c4e0c59d8f860aa32c18c5f6127e276"}, ] +[[package]] +name = "pyobjc" +version = "10.3.1" +description = "Python<->ObjC Interoperability Module" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-10.3.1-py3-none-any.whl", hash = "sha256:dfa9ff44a353b9d0bf1245c25c94d1eee6d0cb26d9c5433bbcd67a265f7654ae"}, + {file = "pyobjc-10.3.1.tar.gz", hash = "sha256:476dd5c72394e4cfcdac6dfd756839011a0159353247f45e3e07cc0b3536c9d4"}, +] + +[package.dependencies] +pyobjc-core = "10.3.1" +pyobjc-framework-Accessibility = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-Accounts = {version = "10.3.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-AddressBook = "10.3.1" +pyobjc-framework-AdServices = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-AdSupport = {version = "10.3.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-AppleScriptKit = "10.3.1" +pyobjc-framework-AppleScriptObjC = {version = "10.3.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-ApplicationServices = "10.3.1" +pyobjc-framework-AppTrackingTransparency = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-AudioVideoBridging = {version = "10.3.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-AuthenticationServices = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-AutomaticAssessmentConfiguration = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-Automator = "10.3.1" +pyobjc-framework-AVFoundation = {version = "10.3.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-AVKit = {version = "10.3.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-AVRouting = {version = "10.3.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-BackgroundAssets = {version = "10.3.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-BrowserEngineKit = {version = "10.3.1", markers = "platform_release >= \"23.4\""} +pyobjc-framework-BusinessChat = {version = "10.3.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-CalendarStore = {version = "10.3.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-CallKit = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-CFNetwork = "10.3.1" +pyobjc-framework-Cinematic = {version = "10.3.1", markers = "platform_release >= \"23.0\""} +pyobjc-framework-ClassKit = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-CloudKit = {version = "10.3.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-Cocoa = "10.3.1" +pyobjc-framework-Collaboration = {version = "10.3.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-ColorSync = {version = "10.3.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-Contacts = {version = "10.3.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-ContactsUI = {version = "10.3.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-CoreAudio = "10.3.1" +pyobjc-framework-CoreAudioKit = "10.3.1" +pyobjc-framework-CoreBluetooth = {version = "10.3.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-CoreData = "10.3.1" +pyobjc-framework-CoreHaptics = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-CoreLocation = {version = "10.3.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-CoreMedia = {version = "10.3.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-CoreMediaIO = {version = "10.3.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-CoreMIDI = "10.3.1" +pyobjc-framework-CoreML = {version = "10.3.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-CoreMotion = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-CoreServices = "10.3.1" +pyobjc-framework-CoreSpotlight = {version = "10.3.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-CoreText = "10.3.1" +pyobjc-framework-CoreWLAN = {version = "10.3.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-CryptoTokenKit = {version = "10.3.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-DataDetection = {version = "10.3.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-DeviceCheck = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-DictionaryServices = {version = "10.3.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-DiscRecording = "10.3.1" +pyobjc-framework-DiscRecordingUI = "10.3.1" +pyobjc-framework-DiskArbitration = "10.3.1" +pyobjc-framework-DVDPlayback = "10.3.1" +pyobjc-framework-EventKit = {version = "10.3.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-ExceptionHandling = "10.3.1" +pyobjc-framework-ExecutionPolicy = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-ExtensionKit = {version = "10.3.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-ExternalAccessory = {version = "10.3.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-FileProvider = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-FileProviderUI = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-FinderSync = {version = "10.3.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-FSEvents = {version = "10.3.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-GameCenter = {version = "10.3.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-GameController = {version = "10.3.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-GameKit = {version = "10.3.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-GameplayKit = {version = "10.3.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-HealthKit = {version = "10.3.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-ImageCaptureCore = {version = "10.3.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-InputMethodKit = {version = "10.3.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-InstallerPlugins = "10.3.1" +pyobjc-framework-InstantMessage = {version = "10.3.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-Intents = {version = "10.3.1", markers = "platform_release >= \"16.0\""} +pyobjc-framework-IntentsUI = {version = "10.3.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-IOBluetooth = "10.3.1" +pyobjc-framework-IOBluetoothUI = "10.3.1" +pyobjc-framework-IOSurface = {version = "10.3.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-iTunesLibrary = {version = "10.3.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-KernelManagement = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-LatentSemanticMapping = "10.3.1" +pyobjc-framework-LaunchServices = "10.3.1" +pyobjc-framework-libdispatch = {version = "10.3.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-libxpc = {version = "10.3.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-LinkPresentation = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-LocalAuthentication = {version = "10.3.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-LocalAuthenticationEmbeddedUI = {version = "10.3.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-MailKit = {version = "10.3.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-MapKit = {version = "10.3.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-MediaAccessibility = {version = "10.3.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-MediaLibrary = {version = "10.3.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-MediaPlayer = {version = "10.3.1", markers = "platform_release >= \"16.0\""} +pyobjc-framework-MediaToolbox = {version = "10.3.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-Metal = {version = "10.3.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-MetalFX = {version = "10.3.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-MetalKit = {version = "10.3.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-MetalPerformanceShaders = {version = "10.3.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-MetalPerformanceShadersGraph = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-MetricKit = {version = "10.3.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-MLCompute = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-ModelIO = {version = "10.3.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-MultipeerConnectivity = {version = "10.3.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-NaturalLanguage = {version = "10.3.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-NetFS = {version = "10.3.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-Network = {version = "10.3.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-NetworkExtension = {version = "10.3.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-NotificationCenter = {version = "10.3.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-OpenDirectory = {version = "10.3.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-OSAKit = "10.3.1" +pyobjc-framework-OSLog = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-PassKit = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-PencilKit = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-PHASE = {version = "10.3.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-Photos = {version = "10.3.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-PhotosUI = {version = "10.3.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-PreferencePanes = "10.3.1" +pyobjc-framework-PubSub = {version = "10.3.1", markers = "platform_release >= \"9.0\" and platform_release < \"18.0\""} +pyobjc-framework-PushKit = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-Quartz = "10.3.1" +pyobjc-framework-QuickLookThumbnailing = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-ReplayKit = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-SafariServices = {version = "10.3.1", markers = "platform_release >= \"16.0\""} +pyobjc-framework-SafetyKit = {version = "10.3.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-SceneKit = {version = "10.3.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-ScreenCaptureKit = {version = "10.3.1", markers = "platform_release >= \"21.4\""} +pyobjc-framework-ScreenSaver = "10.3.1" +pyobjc-framework-ScreenTime = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-ScriptingBridge = {version = "10.3.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-SearchKit = "10.3.1" +pyobjc-framework-Security = "10.3.1" +pyobjc-framework-SecurityFoundation = "10.3.1" +pyobjc-framework-SecurityInterface = "10.3.1" +pyobjc-framework-SensitiveContentAnalysis = {version = "10.3.1", markers = "platform_release >= \"23.0\""} +pyobjc-framework-ServiceManagement = {version = "10.3.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-SharedWithYou = {version = "10.3.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-SharedWithYouCore = {version = "10.3.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-ShazamKit = {version = "10.3.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-Social = {version = "10.3.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-SoundAnalysis = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-Speech = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-SpriteKit = {version = "10.3.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-StoreKit = {version = "10.3.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-Symbols = {version = "10.3.1", markers = "platform_release >= \"23.0\""} +pyobjc-framework-SyncServices = "10.3.1" +pyobjc-framework-SystemConfiguration = "10.3.1" +pyobjc-framework-SystemExtensions = {version = "10.3.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-ThreadNetwork = {version = "10.3.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-UniformTypeIdentifiers = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-UserNotifications = {version = "10.3.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-UserNotificationsUI = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-VideoSubscriberAccount = {version = "10.3.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-VideoToolbox = {version = "10.3.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-Virtualization = {version = "10.3.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-Vision = {version = "10.3.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-WebKit = "10.3.1" + +[package.extras] +allbindings = ["pyobjc-core (==10.3.1)", "pyobjc-framework-AVFoundation (==10.3.1)", "pyobjc-framework-AVKit (==10.3.1)", "pyobjc-framework-AVRouting (==10.3.1)", "pyobjc-framework-Accessibility (==10.3.1)", "pyobjc-framework-Accounts (==10.3.1)", "pyobjc-framework-AdServices (==10.3.1)", "pyobjc-framework-AdSupport (==10.3.1)", "pyobjc-framework-AddressBook (==10.3.1)", "pyobjc-framework-AppTrackingTransparency (==10.3.1)", "pyobjc-framework-AppleScriptKit (==10.3.1)", "pyobjc-framework-AppleScriptObjC (==10.3.1)", "pyobjc-framework-ApplicationServices (==10.3.1)", "pyobjc-framework-AudioVideoBridging (==10.3.1)", "pyobjc-framework-AuthenticationServices (==10.3.1)", "pyobjc-framework-AutomaticAssessmentConfiguration (==10.3.1)", "pyobjc-framework-Automator (==10.3.1)", "pyobjc-framework-BackgroundAssets (==10.3.1)", "pyobjc-framework-BrowserEngineKit (==10.3.1)", "pyobjc-framework-BusinessChat (==10.3.1)", "pyobjc-framework-CFNetwork (==10.3.1)", "pyobjc-framework-CalendarStore (==10.3.1)", "pyobjc-framework-CallKit (==10.3.1)", "pyobjc-framework-Cinematic (==10.3.1)", "pyobjc-framework-ClassKit (==10.3.1)", "pyobjc-framework-CloudKit (==10.3.1)", "pyobjc-framework-Cocoa (==10.3.1)", "pyobjc-framework-Collaboration (==10.3.1)", "pyobjc-framework-ColorSync (==10.3.1)", "pyobjc-framework-Contacts (==10.3.1)", "pyobjc-framework-ContactsUI (==10.3.1)", "pyobjc-framework-CoreAudio (==10.3.1)", "pyobjc-framework-CoreAudioKit (==10.3.1)", "pyobjc-framework-CoreBluetooth (==10.3.1)", "pyobjc-framework-CoreData (==10.3.1)", "pyobjc-framework-CoreHaptics (==10.3.1)", "pyobjc-framework-CoreLocation (==10.3.1)", "pyobjc-framework-CoreMIDI (==10.3.1)", "pyobjc-framework-CoreML (==10.3.1)", "pyobjc-framework-CoreMedia (==10.3.1)", "pyobjc-framework-CoreMediaIO (==10.3.1)", "pyobjc-framework-CoreMotion (==10.3.1)", "pyobjc-framework-CoreServices (==10.3.1)", "pyobjc-framework-CoreSpotlight (==10.3.1)", "pyobjc-framework-CoreText (==10.3.1)", "pyobjc-framework-CoreWLAN (==10.3.1)", "pyobjc-framework-CryptoTokenKit (==10.3.1)", "pyobjc-framework-DVDPlayback (==10.3.1)", "pyobjc-framework-DataDetection (==10.3.1)", "pyobjc-framework-DeviceCheck (==10.3.1)", "pyobjc-framework-DictionaryServices (==10.3.1)", "pyobjc-framework-DiscRecording (==10.3.1)", "pyobjc-framework-DiscRecordingUI (==10.3.1)", "pyobjc-framework-DiskArbitration (==10.3.1)", "pyobjc-framework-EventKit (==10.3.1)", "pyobjc-framework-ExceptionHandling (==10.3.1)", "pyobjc-framework-ExecutionPolicy (==10.3.1)", "pyobjc-framework-ExtensionKit (==10.3.1)", "pyobjc-framework-ExternalAccessory (==10.3.1)", "pyobjc-framework-FSEvents (==10.3.1)", "pyobjc-framework-FileProvider (==10.3.1)", "pyobjc-framework-FileProviderUI (==10.3.1)", "pyobjc-framework-FinderSync (==10.3.1)", "pyobjc-framework-GameCenter (==10.3.1)", "pyobjc-framework-GameController (==10.3.1)", "pyobjc-framework-GameKit (==10.3.1)", "pyobjc-framework-GameplayKit (==10.3.1)", "pyobjc-framework-HealthKit (==10.3.1)", "pyobjc-framework-IOBluetooth (==10.3.1)", "pyobjc-framework-IOBluetoothUI (==10.3.1)", "pyobjc-framework-IOSurface (==10.3.1)", "pyobjc-framework-ImageCaptureCore (==10.3.1)", "pyobjc-framework-InputMethodKit (==10.3.1)", "pyobjc-framework-InstallerPlugins (==10.3.1)", "pyobjc-framework-InstantMessage (==10.3.1)", "pyobjc-framework-Intents (==10.3.1)", "pyobjc-framework-IntentsUI (==10.3.1)", "pyobjc-framework-KernelManagement (==10.3.1)", "pyobjc-framework-LatentSemanticMapping (==10.3.1)", "pyobjc-framework-LaunchServices (==10.3.1)", "pyobjc-framework-LinkPresentation (==10.3.1)", "pyobjc-framework-LocalAuthentication (==10.3.1)", "pyobjc-framework-LocalAuthenticationEmbeddedUI (==10.3.1)", "pyobjc-framework-MLCompute (==10.3.1)", "pyobjc-framework-MailKit (==10.3.1)", "pyobjc-framework-MapKit (==10.3.1)", "pyobjc-framework-MediaAccessibility (==10.3.1)", "pyobjc-framework-MediaLibrary (==10.3.1)", "pyobjc-framework-MediaPlayer (==10.3.1)", "pyobjc-framework-MediaToolbox (==10.3.1)", "pyobjc-framework-Metal (==10.3.1)", "pyobjc-framework-MetalFX (==10.3.1)", "pyobjc-framework-MetalKit (==10.3.1)", "pyobjc-framework-MetalPerformanceShaders (==10.3.1)", "pyobjc-framework-MetalPerformanceShadersGraph (==10.3.1)", "pyobjc-framework-MetricKit (==10.3.1)", "pyobjc-framework-ModelIO (==10.3.1)", "pyobjc-framework-MultipeerConnectivity (==10.3.1)", "pyobjc-framework-NaturalLanguage (==10.3.1)", "pyobjc-framework-NetFS (==10.3.1)", "pyobjc-framework-Network (==10.3.1)", "pyobjc-framework-NetworkExtension (==10.3.1)", "pyobjc-framework-NotificationCenter (==10.3.1)", "pyobjc-framework-OSAKit (==10.3.1)", "pyobjc-framework-OSLog (==10.3.1)", "pyobjc-framework-OpenDirectory (==10.3.1)", "pyobjc-framework-PHASE (==10.3.1)", "pyobjc-framework-PassKit (==10.3.1)", "pyobjc-framework-PencilKit (==10.3.1)", "pyobjc-framework-Photos (==10.3.1)", "pyobjc-framework-PhotosUI (==10.3.1)", "pyobjc-framework-PreferencePanes (==10.3.1)", "pyobjc-framework-PubSub (==10.3.1)", "pyobjc-framework-PushKit (==10.3.1)", "pyobjc-framework-Quartz (==10.3.1)", "pyobjc-framework-QuickLookThumbnailing (==10.3.1)", "pyobjc-framework-ReplayKit (==10.3.1)", "pyobjc-framework-SafariServices (==10.3.1)", "pyobjc-framework-SafetyKit (==10.3.1)", "pyobjc-framework-SceneKit (==10.3.1)", "pyobjc-framework-ScreenCaptureKit (==10.3.1)", "pyobjc-framework-ScreenSaver (==10.3.1)", "pyobjc-framework-ScreenTime (==10.3.1)", "pyobjc-framework-ScriptingBridge (==10.3.1)", "pyobjc-framework-SearchKit (==10.3.1)", "pyobjc-framework-Security (==10.3.1)", "pyobjc-framework-SecurityFoundation (==10.3.1)", "pyobjc-framework-SecurityInterface (==10.3.1)", "pyobjc-framework-SensitiveContentAnalysis (==10.3.1)", "pyobjc-framework-ServiceManagement (==10.3.1)", "pyobjc-framework-SharedWithYou (==10.3.1)", "pyobjc-framework-SharedWithYouCore (==10.3.1)", "pyobjc-framework-ShazamKit (==10.3.1)", "pyobjc-framework-Social (==10.3.1)", "pyobjc-framework-SoundAnalysis (==10.3.1)", "pyobjc-framework-Speech (==10.3.1)", "pyobjc-framework-SpriteKit (==10.3.1)", "pyobjc-framework-StoreKit (==10.3.1)", "pyobjc-framework-Symbols (==10.3.1)", "pyobjc-framework-SyncServices (==10.3.1)", "pyobjc-framework-SystemConfiguration (==10.3.1)", "pyobjc-framework-SystemExtensions (==10.3.1)", "pyobjc-framework-ThreadNetwork (==10.3.1)", "pyobjc-framework-UniformTypeIdentifiers (==10.3.1)", "pyobjc-framework-UserNotifications (==10.3.1)", "pyobjc-framework-UserNotificationsUI (==10.3.1)", "pyobjc-framework-VideoSubscriberAccount (==10.3.1)", "pyobjc-framework-VideoToolbox (==10.3.1)", "pyobjc-framework-Virtualization (==10.3.1)", "pyobjc-framework-Vision (==10.3.1)", "pyobjc-framework-WebKit (==10.3.1)", "pyobjc-framework-iTunesLibrary (==10.3.1)", "pyobjc-framework-libdispatch (==10.3.1)", "pyobjc-framework-libxpc (==10.3.1)"] + +[[package]] +name = "pyobjc-core" +version = "10.3.1" +description = "Python<->ObjC Interoperability Module" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_core-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ea46d2cda17921e417085ac6286d43ae448113158afcf39e0abe484c58fb3d78"}, + {file = "pyobjc_core-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:899d3c84d2933d292c808f385dc881a140cf08632907845043a333a9d7c899f9"}, + {file = "pyobjc_core-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6ff5823d13d0a534cdc17fa4ad47cf5bee4846ce0fd27fc40012e12b46db571b"}, + {file = "pyobjc_core-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2581e8e68885bcb0e11ec619e81ef28e08ee3fac4de20d8cc83bc5af5bcf4a90"}, + {file = "pyobjc_core-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ea98d4c2ec39ca29e62e0327db21418696161fb138ee6278daf2acbedf7ce504"}, + {file = "pyobjc_core-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:4c179c26ee2123d0aabffb9dbc60324b62b6f8614fb2c2328b09386ef59ef6d8"}, + {file = "pyobjc_core-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cb901fce65c9be420c40d8a6ee6fff5ff27c6945f44fd7191989b982baa66dea"}, + {file = "pyobjc_core-10.3.1.tar.gz", hash = "sha256:b204a80ccc070f9ab3f8af423a3a25a6fd787e228508d00c4c30f8ac538ba720"}, +] + +[[package]] +name = "pyobjc-framework-accessibility" +version = "10.3.1" +description = "Wrappers for the framework Accessibility on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Accessibility-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:4a1b10d2098b5e3887d4e52b13c2d7619f248ceeaa4e78bb21c51c25c7d391c3"}, + {file = "pyobjc_framework_Accessibility-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:4926eeef40d750215f0787d2124407a4c65bc03407e402ea47901b713e8765e5"}, + {file = "pyobjc_framework_Accessibility-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b5b9d7373d1a8a06f57baca2f67279c3b0c61ecfb17fa6da964e0e275e7d18ed"}, + {file = "pyobjc_framework_Accessibility-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:94dbc5f223e6485820c14e7dee99d8f4d5cbf0600353033822dcab7ec4bc998e"}, + {file = "pyobjc_framework_accessibility-10.3.1.tar.gz", hash = "sha256:c973306417441e6bed5f9be6154e6399aa7f38fa9b6bcf3368fa42d92ef3030b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-accounts" +version = "10.3.1" +description = "Wrappers for the framework Accounts on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Accounts-10.3.1-py2.py3-none-any.whl", hash = "sha256:451488f91263afd23233287f223ba00c0ee5c93d64cd10e133d72bc6a0fc48aa"}, + {file = "pyobjc_framework_accounts-10.3.1.tar.gz", hash = "sha256:3d55738e7b3290af8cd4993fd2b670242a952deb995a69911be2a1be4c509a86"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-addressbook" +version = "10.3.1" +description = "Wrappers for the framework AddressBook on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AddressBook-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:02ab8cb2300d55beaddee4f113a5c4a78ef737eda6c704678487529e391062e2"}, + {file = "pyobjc_framework_AddressBook-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:1cfa893c21920f5420f3e57da314315e92c855a83f0718482dc33bdb859b9f24"}, + {file = "pyobjc_framework_AddressBook-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:7aa89a352f1729de1cb4d7841906487d9db752c2802af5695596b1cf5290acfb"}, + {file = "pyobjc_framework_AddressBook-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:f25864847b4a81289dd08e7052455699ee011a4df98f4da0b07f46523c212592"}, + {file = "pyobjc_framework_addressbook-10.3.1.tar.gz", hash = "sha256:cde99b855c39b56ca52479b0a1e2daa3ef5de12cebfe780c3c802a5f59a484cc"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-adservices" +version = "10.3.1" +description = "Wrappers for the framework AdServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AdServices-10.3.1-py2.py3-none-any.whl", hash = "sha256:c839c4267ad8443393e4d138396026764ee43776164da8a8ed9ac248b7d9c0d9"}, + {file = "pyobjc_framework_adservices-10.3.1.tar.gz", hash = "sha256:28123eb111d023f708e1d86f5f3f76bd4f6bb0d932466863f84b3e322b11537a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-adsupport" +version = "10.3.1" +description = "Wrappers for the framework AdSupport on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AdSupport-10.3.1-py2.py3-none-any.whl", hash = "sha256:0e403ec206ada472b2c0b129ed656342a97c20110ca8398ab907100516b0e48c"}, + {file = "pyobjc_framework_adsupport-10.3.1.tar.gz", hash = "sha256:ba85a00cf20c42501d8083092f7ca0fcd1e616b1725e6512e75bcb60a6d58528"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-applescriptkit" +version = "10.3.1" +description = "Wrappers for the framework AppleScriptKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AppleScriptKit-10.3.1-py2.py3-none-any.whl", hash = "sha256:97ce878ff334b6853405a62e164debb9e6695110e64db5ed596008c0fde84970"}, + {file = "pyobjc_framework_applescriptkit-10.3.1.tar.gz", hash = "sha256:add2e63598b699666bcf00ac59f6f1046266df1665bec71b142cd21b89037064"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-applescriptobjc" +version = "10.3.1" +description = "Wrappers for the framework AppleScriptObjC on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AppleScriptObjC-10.3.1-py2.py3-none-any.whl", hash = "sha256:2d64c74a4af48656bb407eb177fe5f1d3c0f7bd9c578e5583dffde8e3d55f5df"}, + {file = "pyobjc_framework_applescriptobjc-10.3.1.tar.gz", hash = "sha256:a87101d86b08e06e2c0e51630ac76d4c70f01cf1ed7af281f3138e63146e279b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-applicationservices" +version = "10.3.1" +description = "Wrappers for the framework ApplicationServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ApplicationServices-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b694260d423c470cb90c3a7009cfde93e332ea6fb4b9b9526ad3acbd33460e3d"}, + {file = "pyobjc_framework_ApplicationServices-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d886ba1f65df47b77ff7546f3fc9bc7d08cfb6b3c04433b719f6b0689a2c0d1f"}, + {file = "pyobjc_framework_ApplicationServices-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:be157f2c3ffb254064ef38249670af8cada5e519a714d2aa5da3740934d89bc8"}, + {file = "pyobjc_framework_ApplicationServices-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:57737f41731661e4a3b78793ec9173f61242a32fa560c3e4e58484465d049c32"}, + {file = "pyobjc_framework_ApplicationServices-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c429eca69ee675e781e4e55f79e939196b47f02560ad865b1ba9ac753b90bd77"}, + {file = "pyobjc_framework_ApplicationServices-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:4f1814a17041a20adca454044080b52e39a4ebc567ad2c6a48866dd4beaa192a"}, + {file = "pyobjc_framework_ApplicationServices-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1252f1137f83eb2c6b9968d8c591363e8859dd2484bc9441d8f365bcfb43a0e4"}, + {file = "pyobjc_framework_applicationservices-10.3.1.tar.gz", hash = "sha256:f27cb64aa4d129ce671fd42638c985eb2a56d544214a95fe3214a007eacc4790"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreText = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-apptrackingtransparency" +version = "10.3.1" +description = "Wrappers for the framework AppTrackingTransparency on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AppTrackingTransparency-10.3.1-py2.py3-none-any.whl", hash = "sha256:7c0e3a5cad402e8c3c5da1f070be0f49bb827e6d9e5165744f64e082633a4b45"}, + {file = "pyobjc_framework_apptrackingtransparency-10.3.1.tar.gz", hash = "sha256:2e381db5f7d3985207b5ff2975e41bf0f9147080345b2e1b4b242f8799290d04"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-audiovideobridging" +version = "10.3.1" +description = "Wrappers for the framework AudioVideoBridging on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AudioVideoBridging-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8accf87f136a6aa71d89d3a2204127b48e64ec25d3e1159f0f23ede0c4d70e59"}, + {file = "pyobjc_framework_AudioVideoBridging-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4f6067b2f50fb48c9ecb521b8865d93dfbd46510a4322cc2041b1e917678f39b"}, + {file = "pyobjc_framework_AudioVideoBridging-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1aebc6c1aafb3cdfc5f9fad2dfe2dfccfbab159dc8dbfe54cfea777108e80e44"}, + {file = "pyobjc_framework_AudioVideoBridging-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b1fb0af1df78800205cd7a7cd90e58b640513bbb944fe6a8d89df43e626a27a8"}, + {file = "pyobjc_framework_AudioVideoBridging-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2cc18c005c72a74654a000a1d6d405b6cb12b1d6c09be9bd6b58502ae06035e7"}, + {file = "pyobjc_framework_AudioVideoBridging-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:b61dc632c31875cb090521b0139d61f528e5fe5fedf4055524522c0aa808a77d"}, + {file = "pyobjc_framework_AudioVideoBridging-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8de78207e617d4d89c66b4a66ff4ff49b60822249d2a68fc9356dd09475f0103"}, + {file = "pyobjc_framework_audiovideobridging-10.3.1.tar.gz", hash = "sha256:b2c1d5977a92915f6af2203e3b4c9b8a8392bc51e0fc13ccb393589419387119"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-authenticationservices" +version = "10.3.1" +description = "Wrappers for the framework AuthenticationServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AuthenticationServices-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:fa0a11fb64e30f14f01ec2d3a2a89a3e1a554db62111b0612f1782722b6dd534"}, + {file = "pyobjc_framework_AuthenticationServices-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:e2753cdd5480f97753dc32d9f41d7e6cb75b09f7ce950b2eea4a9851e0a437db"}, + {file = "pyobjc_framework_AuthenticationServices-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:91c2cc0e963d6ac44c3a6014270b54e6499f1aae64d82482d96114c38fb99817"}, + {file = "pyobjc_framework_AuthenticationServices-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:d715bbdf1c94ea838830930a41de0554905760943cff1510268d8e485c826ee8"}, + {file = "pyobjc_framework_authenticationservices-10.3.1.tar.gz", hash = "sha256:0ac834f4a5cbe3cf20acd4f6a96df77bc643a1ae248e394d06964db9fe0d6310"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-automaticassessmentconfiguration" +version = "10.3.1" +description = "Wrappers for the framework AutomaticAssessmentConfiguration on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AutomaticAssessmentConfiguration-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:f717f6df5886123a55584f8dd85626c42387f5b55edcd3d68ff306b3fe56a206"}, + {file = "pyobjc_framework_AutomaticAssessmentConfiguration-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:ab84a771835f346e8a45d19e05f0c2ef8bb3dca81461fb2acc6c9f031794ec63"}, + {file = "pyobjc_framework_AutomaticAssessmentConfiguration-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:66fd582549ef602a8bcaadb57de8a06cb0dc0367c2a508b20c580fde2232daed"}, + {file = "pyobjc_framework_AutomaticAssessmentConfiguration-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:578512ae1443e031c3fbfec7eefa71e5ac5fc8cac892ad7183c5ac0b894d494d"}, + {file = "pyobjc_framework_automaticassessmentconfiguration-10.3.1.tar.gz", hash = "sha256:f7846d04493e90eddbacfb7cffebc11b3f76f0800d3dc2bec39441732a20ac56"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-automator" +version = "10.3.1" +description = "Wrappers for the framework Automator on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Automator-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:63632d2c1d069ca29a077b15ab20a0a0acc0a5f33ee322c9c8cc854702c66549"}, + {file = "pyobjc_framework_Automator-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:4bc8afe0a52bee09f7f99bdfc62100654f08113de47e74488c0af2afcd646e23"}, + {file = "pyobjc_framework_Automator-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:8609e1295030d2a46916965cd070072a90b6528abc25ae4d02e50818d2cb252f"}, + {file = "pyobjc_framework_Automator-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:2f482464b3f91405a5a59e3b96ae89c5062af81023ea0fc803353fdfe8cc4a9d"}, + {file = "pyobjc_framework_automator-10.3.1.tar.gz", hash = "sha256:330042475479f054ac98abd568b523fc0165c39eeefffc23bd65d35780939316"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-avfoundation" +version = "10.3.1" +description = "Wrappers for the framework AVFoundation on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AVFoundation-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:0896f6650df35f0229d1fb3aa3fbf632647dd815d4921cb61d9eb7fa26be6237"}, + {file = "pyobjc_framework_AVFoundation-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:0cb27cc95288d95df7504adf474596f8855de7fa7798bbc1bbfbdfbbcb940952"}, + {file = "pyobjc_framework_AVFoundation-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb606ef0806d952a04db45ae691167678121df1d8d7c2f8cc73745695097033"}, + {file = "pyobjc_framework_AVFoundation-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:00889eb915479aa9ea392cdd241e4b635ae0fa3114f043d08cf3e1d1b5a23bd4"}, + {file = "pyobjc_framework_avfoundation-10.3.1.tar.gz", hash = "sha256:2f94bee3a4217b46d9416cad066e4f357bf0f344079c328736114451ae19ae94"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreAudio = ">=10.3.1" +pyobjc-framework-CoreMedia = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-avkit" +version = "10.3.1" +description = "Wrappers for the framework AVKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AVKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:bb6025331e5ed493d5ca0a35fab14026820e0d8b0a091fc6010b4ef77aa4bf16"}, + {file = "pyobjc_framework_AVKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:675832ec9c088c2010bd9cd9f912ff5c45ff608d7d94233347d49f1b91f690ca"}, + {file = "pyobjc_framework_AVKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:1d92e1d5d098af87667f3eac0609c39c58320c095cdcb7737958cc4895569f22"}, + {file = "pyobjc_framework_AVKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:91bf61fa8d8ef3764345b085038a4081165a8c54b4f0c2a11ee07f86a1556689"}, + {file = "pyobjc_framework_avkit-10.3.1.tar.gz", hash = "sha256:97ca35b5f0cec98f5c8521fedb8537bb23d82739b7102e4ac732d3c3944c8ccc"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-avrouting" +version = "10.3.1" +description = "Wrappers for the framework AVRouting on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_AVRouting-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:30b05ea44f21d481e39905684c79176c04060e0e92c1ad31756fed6aa39b07df"}, + {file = "pyobjc_framework_AVRouting-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:af940e322cb9ce9d79b47b829c5df41ac4980aca2cda1fbe1ead4ed0f9f589a4"}, + {file = "pyobjc_framework_AVRouting-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3e5101311ee84c884c0eba201b3b7f92e1a2325132a9e44b9b7ad84cdd28b4c2"}, + {file = "pyobjc_framework_AVRouting-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:186e891c2a271492612b3db2b5c2050c56ed1bfce1f6146de8dbf05e7cd7623b"}, + {file = "pyobjc_framework_avrouting-10.3.1.tar.gz", hash = "sha256:7026059b24daf8e1da05d7867f450e82abe412fe5c438faf9344f46e3b83da39"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-backgroundassets" +version = "10.3.1" +description = "Wrappers for the framework BackgroundAssets on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_BackgroundAssets-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:f725d33a5d633c514e4973489e1bdca391976a5c04443451acaaacc5ccd4095e"}, + {file = "pyobjc_framework_BackgroundAssets-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:14cc84ad7bef64986fe240d23205870fc40dd7b1d2a1819d3dd7924c4898b5c2"}, + {file = "pyobjc_framework_BackgroundAssets-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e28624ecfba067b5e0fc91d5818cb3d20d0ba189a7e8a724678abbecc233c13e"}, + {file = "pyobjc_framework_BackgroundAssets-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:aed2307c7fdd690e4dd214cbfacf4e7d5dd07e6cdd88ce1c02c4ddde3deea843"}, + {file = "pyobjc_framework_backgroundassets-10.3.1.tar.gz", hash = "sha256:5e1198f81db6f30ead2a55e8ea39264f9fce83dcf8e31a68e5f0ea08c5cfe9b5"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-browserenginekit" +version = "10.3.1" +description = "Wrappers for the framework BrowserEngineKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_BrowserEngineKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:86c92ef4e79db4066f7887426e99cfec8902fc8949fb666359cf2a9e519106fc"}, + {file = "pyobjc_framework_BrowserEngineKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:69766ba235976e0a1961d3925228d2ef12808298acd0cd66fe9e883424f0f9a4"}, + {file = "pyobjc_framework_BrowserEngineKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5394a5a801563834764ae46204f8ce4d61a0e2d4567716361eaf5f5e3a27aba7"}, + {file = "pyobjc_framework_BrowserEngineKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:d5aeff43abed7e87f637086a05f1b77083cfc7cab07c09c447ae2b23621b2945"}, + {file = "pyobjc_framework_browserenginekit-10.3.1.tar.gz", hash = "sha256:0f6ea100bcf06f2b3f915dab27cf2f038698b39510fb47d3769f72ff62c1e80b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreAudio = ">=10.3.1" +pyobjc-framework-CoreMedia = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-businesschat" +version = "10.3.1" +description = "Wrappers for the framework BusinessChat on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_BusinessChat-10.3.1-py2.py3-none-any.whl", hash = "sha256:952b60f558e3d3498e6191d717bf62c1803f4e1ad040ae29d130090671ec004f"}, + {file = "pyobjc_framework_businesschat-10.3.1.tar.gz", hash = "sha256:53e52981f9da336fcaf6783e82509e06faf8868931213ac70e6bd7395a5859a4"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-calendarstore" +version = "10.3.1" +description = "Wrappers for the framework CalendarStore on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CalendarStore-10.3.1-py2.py3-none-any.whl", hash = "sha256:7afb59e793ea6d28706423faa50bb1f25532d8ed7388c8540596ce41891445ca"}, + {file = "pyobjc_framework_calendarstore-10.3.1.tar.gz", hash = "sha256:21f627b0afb9a667794b451dd3a03f12ea3f74358dc5977c33b8ecc8b9736c27"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-callkit" +version = "10.3.1" +description = "Wrappers for the framework CallKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CallKit-10.3.1-py2.py3-none-any.whl", hash = "sha256:495354bea298efdc81c970154083b83aff985f2c294d4883a62de3cc4129e34e"}, + {file = "pyobjc_framework_callkit-10.3.1.tar.gz", hash = "sha256:350390023e9ac98ff6c91b1f51da2489eef2e23aa649d0f63c13cf1d8be1e0df"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-cfnetwork" +version = "10.3.1" +description = "Wrappers for the framework CFNetwork on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CFNetwork-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:e6027a90c5442e36a4ef91c9e10896efb5bc1bb4743d732adf3422112922f6cf"}, + {file = "pyobjc_framework_CFNetwork-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:dff41296378029f1a5e9cedbc133b243f096a93fcc8d6985c555459328cfe11e"}, + {file = "pyobjc_framework_CFNetwork-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:01f1c4c43792e993c613b5b8923953eea774d4a7567fbc1861edb2c6c0cfa770"}, + {file = "pyobjc_framework_CFNetwork-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:f6a5d6fe5e230cc0d53b9673902f1571ab68b542f3630d7c1319ea1e3e480f22"}, + {file = "pyobjc_framework_cfnetwork-10.3.1.tar.gz", hash = "sha256:0e4c51a75dbf4e2b1c0d4ee60a363f9d31d682d2dd2f6b74aded769d2d883aa8"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-cinematic" +version = "10.3.1" +description = "Wrappers for the framework Cinematic on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Cinematic-10.3.1-py2.py3-none-any.whl", hash = "sha256:48bf35d594f4f010266a028bbf93bd953cc78db7658d3c614e219b482c8d73b2"}, + {file = "pyobjc_framework_cinematic-10.3.1.tar.gz", hash = "sha256:7edaaa7e325aeb39cd0c33329c25783dd54af294229884556daad36d1d1b9d72"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-AVFoundation = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreMedia = ">=10.3.1" +pyobjc-framework-Metal = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-classkit" +version = "10.3.1" +description = "Wrappers for the framework ClassKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ClassKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:980d2605296428d177b0111af914d0dd4a0c5116da5ae944cdd8b6bba733e758"}, + {file = "pyobjc_framework_ClassKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:17dec45d5ec7db663bc87ddf80b8185d2134177f265a12a9a6df778901183412"}, + {file = "pyobjc_framework_ClassKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b74155902851e8e2b31b34c606dd33f9e24d9b8992568cc71b60e1ddc553d99e"}, + {file = "pyobjc_framework_ClassKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:776a600182b7de58676ac661b235356f46683e758d99db1cf60f52aac335389f"}, + {file = "pyobjc_framework_classkit-10.3.1.tar.gz", hash = "sha256:e15700d32007bf77c5c740bc9931c864bb7739cdfcd2b0595377c3ed35ecfe25"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-cloudkit" +version = "10.3.1" +description = "Wrappers for the framework CloudKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CloudKit-10.3.1-py2.py3-none-any.whl", hash = "sha256:53670f47320063b80aa60edd2d813308dce85dfd2112461dd13c060aa9e5b47a"}, + {file = "pyobjc_framework_cloudkit-10.3.1.tar.gz", hash = "sha256:4c7db72c2bb2fcf63365df91bf2eefa83cee4004606b901e1da89b75da652309"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Accounts = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreData = ">=10.3.1" +pyobjc-framework-CoreLocation = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-cocoa" +version = "10.3.1" +description = "Wrappers for the Cocoa frameworks on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Cocoa-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4cb4f8491ab4d9b59f5187e42383f819f7a46306a4fa25b84f126776305291d1"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5f31021f4f8fdf873b57a97ee1f3c1620dbe285e0b4eaed73dd0005eb72fd773"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11b4e0bad4bbb44a4edda128612f03cdeab38644bbf174de0c13129715497296"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:de5e62e5ccf2871a94acf3bf79646b20ea893cc9db78afa8d1fe1b0d0f7cbdb0"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c5af24610ab639bd1f521ce4500484b40787f898f691b7a23da3339e6bc8b90"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:a7151186bb7805deea434fae9a4423335e6371d105f29e73cc2036c6779a9dbc"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:743d2a1ac08027fd09eab65814c79002a1d0421d7c0074ffd1217b6560889744"}, + {file = "pyobjc_framework_cocoa-10.3.1.tar.gz", hash = "sha256:1cf20714daaa986b488fb62d69713049f635c9d41a60c8da97d835710445281a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-collaboration" +version = "10.3.1" +description = "Wrappers for the framework Collaboration on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Collaboration-10.3.1-py2.py3-none-any.whl", hash = "sha256:889b1e00bdea09c2423e9b8d493492ec45a70787ddc533bf67d060c7ec0e1f78"}, + {file = "pyobjc_framework_collaboration-10.3.1.tar.gz", hash = "sha256:bbca3de3679b058cbb89ad911e3bdfe491a02b4fa219d5f9219c022774ba237a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-colorsync" +version = "10.3.1" +description = "Wrappers for the framework ColorSync on Mac OS X" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ColorSync-10.3.1-py2.py3-none-any.whl", hash = "sha256:0c37075e9b0f1dabc0aa1755687e1a5dada08ae0914ebb593c7810bf8090cf83"}, + {file = "pyobjc_framework_colorsync-10.3.1.tar.gz", hash = "sha256:180960ed6f76084b35073eff49fcca41a8fa883c3236949a40f75daa28ee8f94"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-contacts" +version = "10.3.1" +description = "Wrappers for the framework Contacts on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Contacts-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:401e40ff638712d011fe54c7b1e9929af994e87cb03d129cd95df2fb90439e4e"}, + {file = "pyobjc_framework_Contacts-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:83de186cd4037171c63899987caa66cc01527688b15176e899cf1a06e6baab09"}, + {file = "pyobjc_framework_Contacts-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e0bbffb430505ad3f91fd58f65b0a6e7535ab5bb28c2ca69ee8a6349f3edfe3c"}, + {file = "pyobjc_framework_Contacts-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:d47f694977cf33f5d0b73e2f111edcd57f2ef0cd9a6a38e03b1dea965b8657cc"}, + {file = "pyobjc_framework_contacts-10.3.1.tar.gz", hash = "sha256:7120b5593a20e936cb5589b93ef7fd5558c86bd6ec8003f427afb87c04bbea20"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-contactsui" +version = "10.3.1" +description = "Wrappers for the framework ContactsUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ContactsUI-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:0e939e46ccff1e07e7fa6768a35d646b7302886a99b9efe6b31dea4ea67674ad"}, + {file = "pyobjc_framework_ContactsUI-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:4adc77f2fb7ae4e2999cfd72f5d3b8e0e039880f9d60cb8e15050607b249c730"}, + {file = "pyobjc_framework_ContactsUI-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:1a605d93b4826cd4646cced6383cb253e65c8babcfd230d5894c1c4d67f6e147"}, + {file = "pyobjc_framework_ContactsUI-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:62ae604a000233c729712e420de734c97afdd9187fdd0bef8e61fbc8c4f6eda0"}, + {file = "pyobjc_framework_contactsui-10.3.1.tar.gz", hash = "sha256:51601501d5bc94c59ad458c7bb1d1994c497b373307dad8bd2ea2aa348f66c4a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Contacts = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coreaudio" +version = "10.3.1" +description = "Wrappers for the framework CoreAudio on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreAudio-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:76a37e27cfdd67e4dcf27f57b680a881c4a2f3bf44ce3b31d7cdb32596e1e269"}, + {file = "pyobjc_framework_CoreAudio-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bd58e69cabbc987d0c2854ab2d13516889cfe4a2094b80296591ad7df0f30e40"}, + {file = "pyobjc_framework_CoreAudio-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e0aeca61a425d846afc92350ffba970e1e503469182f5f0ea436de98cfd00d96"}, + {file = "pyobjc_framework_CoreAudio-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:21cecd1b023b6960d1071c106345656de45a399196701b07c7e5c076321f25ad"}, + {file = "pyobjc_framework_CoreAudio-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:443b14cc6e64e09e6fb4eae61f6ac1ce19618d9074ae1627d75754fa434ef87f"}, + {file = "pyobjc_framework_CoreAudio-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:4f8d4c4c4fa0529f178ef6d3676cfe08c9e8ae20c3cdbfe067b562d7395debfa"}, + {file = "pyobjc_framework_CoreAudio-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b93cc6f670feea29f8f4cd2a9511d2220aefde41a89912d5ab8eb06a198e344b"}, + {file = "pyobjc_framework_coreaudio-10.3.1.tar.gz", hash = "sha256:c81c709bf955aea474a4de380b187f3c2e56c864ca7de520b08362b73070c795"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coreaudiokit" +version = "10.3.1" +description = "Wrappers for the framework CoreAudioKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreAudioKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:dfc967bc448cc0a1fce932e6af15ad42f5ea3eb2f793396e364cf39005c812eb"}, + {file = "pyobjc_framework_CoreAudioKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:6634f3f15d257e93cad4644eb08f5b32376e8a8a7ae2e95d99d36d935b5e9ba2"}, + {file = "pyobjc_framework_CoreAudioKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c2bf1b0c9f6c1d27c98b87bf4cf1ba3d0fa550dd771de948614ca21d15779a01"}, + {file = "pyobjc_framework_CoreAudioKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:d5b3adabd7278e64a0deab6d0f6912bfcc667bc26054f5141a556897157dd8f9"}, + {file = "pyobjc_framework_coreaudiokit-10.3.1.tar.gz", hash = "sha256:81f35d5dc45cda043e01f0ca045311f4aebc36c51cb71e859b30ea0edf90b3db"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreAudio = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-corebluetooth" +version = "10.3.1" +description = "Wrappers for the framework CoreBluetooth on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreBluetooth-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:c89ee6fba0ed359c46b4908a7d01f88f133be025bd534cbbf4fb9c183e62fc97"}, + {file = "pyobjc_framework_CoreBluetooth-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:2f261a386aa6906f9d4601d35ff71a13315dbca1a0698bf1f1ecfe3971de4648"}, + {file = "pyobjc_framework_CoreBluetooth-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5211df0da2e8be511d9a54a48505dd7af0c4d04546fe2027dd723801d633c6ba"}, + {file = "pyobjc_framework_CoreBluetooth-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:b8becd4e406be289a2d423611d3ad40730532a1f6728effb2200e68c9c04c3e8"}, + {file = "pyobjc_framework_corebluetooth-10.3.1.tar.gz", hash = "sha256:dc5d326ab5541b8b68e7e920aa8363851e779cb8c33842f6cfeef4674cc62f94"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coredata" +version = "10.3.1" +description = "Wrappers for the framework CoreData on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreData-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:2313aba4236f3a909d2747f4327da83be884adadb734a602ed4319addf88edd7"}, + {file = "pyobjc_framework_CoreData-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:065ff3058f4bc8544422ad1f10dff037bdeed25263cc8ec5c609e54231bf9347"}, + {file = "pyobjc_framework_CoreData-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:049acf980e5226b132a4285c3a94cc8266380e57050c8fd4caec3c5df4ef8c4d"}, + {file = "pyobjc_framework_CoreData-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:2f1f4e1217fc02f66435dc2a5cb2e0b41c684c435f13d96bf05cd3d1e0ad4e2c"}, + {file = "pyobjc_framework_coredata-10.3.1.tar.gz", hash = "sha256:8a75094942c8f3ddc1bcbde920c87658d7bb4c7534a4652e60db42d17f4b4a4a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-corehaptics" +version = "10.3.1" +description = "Wrappers for the framework CoreHaptics on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreHaptics-10.3.1-py2.py3-none-any.whl", hash = "sha256:163b83ea727cbac5c0963d16ffda89c9f1626ed633d5e52830c7918b8599a693"}, + {file = "pyobjc_framework_corehaptics-10.3.1.tar.gz", hash = "sha256:5a7cc117c0b64428e1f08dc9c8b76dbc5d8f61f80dc41e911d11ddee4e0e2059"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-corelocation" +version = "10.3.1" +description = "Wrappers for the framework CoreLocation on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreLocation-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:4cc83a730db7f78ca5ceef45ea4c992084d8c90bed189939fa3f51f8e9ea83ae"}, + {file = "pyobjc_framework_CoreLocation-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:97d5aa35214e417c9a03ac7209630dc445b98652932642dd0497f1ec52624bfe"}, + {file = "pyobjc_framework_CoreLocation-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:86d0e00b7eef5a3e2f01ea309cdcf58807b251138008edcfc65d3c31af8a5bd2"}, + {file = "pyobjc_framework_CoreLocation-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:5c4ded6388f99a18ce2b9d7082b8a43a19b6d9f8f121e2147d10bb37a25e1714"}, + {file = "pyobjc_framework_corelocation-10.3.1.tar.gz", hash = "sha256:8ae54e5bd4c07f7224639d815f7a6537fadee17c11cb35dd99c2804bac1825ab"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coremedia" +version = "10.3.1" +description = "Wrappers for the framework CoreMedia on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreMedia-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ef02d87f12ba54e6182ea72fd5732cf6d348982c4263dc9c0b11e4163fbb877"}, + {file = "pyobjc_framework_CoreMedia-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e63b002cf5e34540cba3f3a1704603ea0fb076ffc1ea42c2393a0679f40846de"}, + {file = "pyobjc_framework_CoreMedia-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c6eaf48f202becab10679e3b5dd62607ddec2739495db45882524592cabf3997"}, + {file = "pyobjc_framework_CoreMedia-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:98b8ab02e6ec979007b706e05166e16bd61121e47fbc6e449f4b2de2c58f3cb6"}, + {file = "pyobjc_framework_CoreMedia-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:77ca460cc35e39b9f820d9f20e93bfa89439b23dfb350ba201448b1ee958902c"}, + {file = "pyobjc_framework_CoreMedia-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:6ed3adf48fe3001d1b5acce688ecd5b75e0fa5f56d9f296ec120748cd36f2d24"}, + {file = "pyobjc_framework_CoreMedia-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b5bbed395bb8a8b0b4b8bb5475fd19f2a28d385c4d3a783cb590c9ea5e801baa"}, + {file = "pyobjc_framework_coremedia-10.3.1.tar.gz", hash = "sha256:bc3e0cddf5f546b5d8407d8f46b203f1bd4396ad5dbfdc0d064a560b3fe31221"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coremediaio" +version = "10.3.1" +description = "Wrappers for the framework CoreMediaIO on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreMediaIO-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:07e19e89489a372ebea9e8a5cfaf1ec03fd570e65ed3fa2dfa44719d1e337a36"}, + {file = "pyobjc_framework_CoreMediaIO-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:c3bc3d8f3648b6a4126983119d9fc4e21d2c7ec06beb284c57039ca1033ceb03"}, + {file = "pyobjc_framework_CoreMediaIO-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b158612a62cabd7f61c1f2a4d08d4cb4682e1b2ba140a4d09ca88b1ae3014443"}, + {file = "pyobjc_framework_CoreMediaIO-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:b3e9a9813bf5331bd0981e0a66ff380c5c927854f644e5cb62a2beaabd73b15f"}, + {file = "pyobjc_framework_coremediaio-10.3.1.tar.gz", hash = "sha256:5da3ed78475223dd3400fdb55fb97d543a248086f5cf8b77bf4aceac3df1513c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coremidi" +version = "10.3.1" +description = "Wrappers for the framework CoreMIDI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreMIDI-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:00a6869c2365b90cdf6e1ed0bbde6d87fe4daaa40ed243ee810e3cc3945f185a"}, + {file = "pyobjc_framework_CoreMIDI-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:92d04962f7ea63be03127880d4659f718f5b44b6a57a0e619a96d9def619bddb"}, + {file = "pyobjc_framework_CoreMIDI-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:1be5f2d3c0c7c23817ad49a25d8cf8c84b9e420bd5fedc0065ec1322f5d5f2ab"}, + {file = "pyobjc_framework_CoreMIDI-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:bbe2bfb537e8adcca703a2c76b21ca1741d32691205af00a5ec67c025ee5d8e1"}, + {file = "pyobjc_framework_coremidi-10.3.1.tar.gz", hash = "sha256:818454b56edae082a3a4b4366a7e93b8bb54856be01ee21bb8527a22a4732efc"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coreml" +version = "10.3.1" +description = "Wrappers for the framework CoreML on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:c1fdcc0487807afa9cd0f88f25697e0e2e093d0219e8e1aa42aa3674dd78c2cb"}, + {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:21c87e84c807b5dbe61e0f016d9aefa32d3212f175cc4b976b5c08770be7a58c"}, + {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a0877aed5d4cdbb63d1246cd5384c09d78a0667e83c435a1257d10017c11c1a4"}, + {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4bd3f1acfb3245727727b71cbcf7d21a33d7e00fa488e41ad01527764b969b92"}, + {file = "pyobjc_framework_coreml-10.3.1.tar.gz", hash = "sha256:6b7091142cfaafee76f1a804329e7a4e3aeca921eea8644e9ceba4cc2751f705"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coremotion" +version = "10.3.1" +description = "Wrappers for the framework CoreMotion on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreMotion-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f8c320df1806ccd8c2b1ac32c9b9a7337816ff13cf338a710a2f15ee550f58cb"}, + {file = "pyobjc_framework_CoreMotion-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a003478eeb520c7f28be4d9dc8f9e02df6ffa8921d46c8879e2b298c9fbc6926"}, + {file = "pyobjc_framework_CoreMotion-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:63c8f831ad522212627f99ae8d6f34161628230afd544203646e7d66596d6437"}, + {file = "pyobjc_framework_CoreMotion-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9b78d2bcc71149821a49266eb548faea23abd7a25b7cd3f7a7f20b1d343a8786"}, + {file = "pyobjc_framework_CoreMotion-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:28b431e448b884830c846d156d9c6626b265d9ede70ad233d77ceceb67366a17"}, + {file = "pyobjc_framework_CoreMotion-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:7d4f95398ac5741a6dd1711e129f6173111385e26d858c59be8462543f62a8a1"}, + {file = "pyobjc_framework_CoreMotion-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:89c78be31e276aa88d848b69a2f8d11360deaa7297222bd5369ecd1910de166d"}, + {file = "pyobjc_framework_coremotion-10.3.1.tar.gz", hash = "sha256:6ba61ffd360473b018702b9ae025eb16b8aaa45c6e533121522f26eef93a9f71"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coreservices" +version = "10.3.1" +description = "Wrappers for the framework CoreServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreServices-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:58d5708ee0a2ad7eea180864fe68123a2464b987ea089d0646ce69e2002500b0"}, + {file = "pyobjc_framework_CoreServices-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:9d43b77fa11af139ba39d94921e695cf804226737f68167f8bdb8f1c449c932e"}, + {file = "pyobjc_framework_CoreServices-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e6c7b6bb821cc7fb4f04c08560d460783a7fa08093f5e153241bf10296a16cb4"}, + {file = "pyobjc_framework_CoreServices-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:ccb64113ee612a05308ab8ed57ec224e22445d5a125bec11e24c35d58d1f77e4"}, + {file = "pyobjc_framework_coreservices-10.3.1.tar.gz", hash = "sha256:2e46d008ee4ff586420175888c45f8eb0f002ed5b840c8f7893c560af01b2d72"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-FSEvents = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-corespotlight" +version = "10.3.1" +description = "Wrappers for the framework CoreSpotlight on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreSpotlight-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:4aa9b01b8d722ba9e803ec4a2329ee8da0bdecb9a004a668b793b957544a6d81"}, + {file = "pyobjc_framework_CoreSpotlight-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:9684f735fd3d3e8fae447e90a2c246bf6a8d4ca37f619174208d65daa86d9ca0"}, + {file = "pyobjc_framework_CoreSpotlight-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:31b2a1309c747bb6e4d1ddc8368885af2948af55441fbf9817ebac193c1b815b"}, + {file = "pyobjc_framework_CoreSpotlight-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:ba5a20e860af7246da67bb00db15d8bd5c5110b8a12a44568bd68030f51db478"}, + {file = "pyobjc_framework_corespotlight-10.3.1.tar.gz", hash = "sha256:6b8ad243a65943d631434a9ff4696458cdd3d0cb631cfeb501a967fe29445c30"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coretext" +version = "10.3.1" +description = "Wrappers for the framework CoreText on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreText-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd6123cfccc38e32be884d1a13fb62bd636ecb192b9e8ae2b8011c977dec229e"}, + {file = "pyobjc_framework_CoreText-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:834142a14235bd80edaef8d3a28d1e203ed3c988810a9b78005df7c561390288"}, + {file = "pyobjc_framework_CoreText-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ae6c09d29eeaf30a67aa70e08a465b1f1e47d12e22b3a34ae8bc8fdb7e2e7342"}, + {file = "pyobjc_framework_CoreText-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:51ca95df1db9401366f11a7467f64be57f9a0630d31c357237d4062df0216938"}, + {file = "pyobjc_framework_CoreText-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b75bdc267945b3f33c937c108d79405baf9d7c4cd530f922e5df243082a5031"}, + {file = "pyobjc_framework_CoreText-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:029b24c338f58fc32a004256d8559507e4f366dfe4eb09d3144273d536012d90"}, + {file = "pyobjc_framework_CoreText-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:418a55047dbff999fcd2b78cca167c4105587020b6c51567cfa28993bbfdc8ed"}, + {file = "pyobjc_framework_coretext-10.3.1.tar.gz", hash = "sha256:b8fa2d5078ed774431ae64ba886156e319aec0b8c6cc23dabfd86778265b416f"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-corewlan" +version = "10.3.1" +description = "Wrappers for the framework CoreWLAN on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreWLAN-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:0b9b9a6f54c11b6adcb04eb07686c8a8372140619876073d6355498da7ecd074"}, + {file = "pyobjc_framework_CoreWLAN-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:8d68dabd2fdb74e5263f1e05fa039621c197907347e045cd672a54b3ac537140"}, + {file = "pyobjc_framework_CoreWLAN-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:995260e02f858ffa0781ec0d632e60e0567c45fd551102d36fe67a351f81697e"}, + {file = "pyobjc_framework_CoreWLAN-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:e7120d4f7a73cfc283ca499165e8aaf2628bfb82773917e144c293447cabbdba"}, + {file = "pyobjc_framework_corewlan-10.3.1.tar.gz", hash = "sha256:d340d976b5d072b917c6d3de130cb4e7a944ee0fdf4e1335b2aa6b1d4d6b4e14"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-cryptotokenkit" +version = "10.3.1" +description = "Wrappers for the framework CryptoTokenKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CryptoTokenKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:6c88948bc8d30cd125ae29ffe551315e08c0fb49654d4f36ba4b3f0fe2f85259"}, + {file = "pyobjc_framework_CryptoTokenKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf0735d5d8e3ff61650deaa9670df62032dc218b865f21cd6b36b0d4c00b88ae"}, + {file = "pyobjc_framework_CryptoTokenKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:bd58e48912a9b044c0203e39938b2108cab9b3a4903134ebb1ef610b45570802"}, + {file = "pyobjc_framework_CryptoTokenKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:b53fdc79a095d327dff7e68e2545b0825437520f105b1341e5f638e8e1afb490"}, + {file = "pyobjc_framework_cryptotokenkit-10.3.1.tar.gz", hash = "sha256:ef1c4a3b9bc5429eceda59724279428e1f8740df2c5a511d061b244113b6fd97"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-datadetection" +version = "10.3.1" +description = "Wrappers for the framework DataDetection on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_DataDetection-10.3.1-py2.py3-none-any.whl", hash = "sha256:618ea90267fd4b83d09b557b67342ad5f3ac579090020e081dca6c664f1ae598"}, + {file = "pyobjc_framework_datadetection-10.3.1.tar.gz", hash = "sha256:5394350cd7e7f40562dc0777f26dd9ddf4a595d20cb6e3cd601938e9490c963e"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-devicecheck" +version = "10.3.1" +description = "Wrappers for the framework DeviceCheck on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_DeviceCheck-10.3.1-py2.py3-none-any.whl", hash = "sha256:9a3b291a2583bac2b65ff902c4b7872c1068736e249765906f530ae5a6eb8085"}, + {file = "pyobjc_framework_devicecheck-10.3.1.tar.gz", hash = "sha256:7f6f95c84dc3d1f62aa07061f79b47d19463390d977e5afb444ef9fdd9177a9d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-dictionaryservices" +version = "10.3.1" +description = "Wrappers for the framework DictionaryServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_DictionaryServices-10.3.1-py2.py3-none-any.whl", hash = "sha256:e40933bc96764450dff16cd8ca8080ec83157a93ed43574441848ea52f24918d"}, + {file = "pyobjc_framework_dictionaryservices-10.3.1.tar.gz", hash = "sha256:c9fb8ed1b92f63c6f568bcdbadf628baab1cb8bb4cd01dbd65424d59c236a552"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-CoreServices = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-discrecording" +version = "10.3.1" +description = "Wrappers for the framework DiscRecording on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_DiscRecording-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:99ee7b1762c7e2a4e0b74c36416f4095695ea33505c7de03875a4f46a5729af7"}, + {file = "pyobjc_framework_DiscRecording-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:c4233f2649e34be2dd158752f0f0180c7db4ee705cc14aa62bc03c1f77318ca3"}, + {file = "pyobjc_framework_DiscRecording-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54016cd30b81f1f065d3a4d90b008c1bcfa77891cc79c68d72dff65e9d81e083"}, + {file = "pyobjc_framework_DiscRecording-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:da84170af530cda7b1f32023d5e8b98b62914c573c6ef571e562473d0b94fe6f"}, + {file = "pyobjc_framework_discrecording-10.3.1.tar.gz", hash = "sha256:47865c9a0d24366b6ede01d326d57404346c3d01e249f417bd2b0b3de00d6c54"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-discrecordingui" +version = "10.3.1" +description = "Wrappers for the framework DiscRecordingUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_DiscRecordingUI-10.3.1-py2.py3-none-any.whl", hash = "sha256:cb25c70117a5c5eeb4ef74a96da48e2da171f01b7e92d1b7bbd7808068e8960c"}, + {file = "pyobjc_framework_discrecordingui-10.3.1.tar.gz", hash = "sha256:4b9c804a97c89001feddb58106cdc3e099e241314f7c4de062842d27b1318b68"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-DiscRecording = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-diskarbitration" +version = "10.3.1" +description = "Wrappers for the framework DiskArbitration on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_DiskArbitration-10.3.1-py2.py3-none-any.whl", hash = "sha256:f0f727435da388efd035bdd510607a5f5769b22be2361afc5b8d4ee081c70cce"}, + {file = "pyobjc_framework_diskarbitration-10.3.1.tar.gz", hash = "sha256:0776318cb56f8e095066a880812c4fc5db2071687846e23a000a947a079f6c6c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-dvdplayback" +version = "10.3.1" +description = "Wrappers for the framework DVDPlayback on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_DVDPlayback-10.3.1-py2.py3-none-any.whl", hash = "sha256:c0fb2e96ce4eae8def642f1c4beaec2da3cdf61db1562d4b5199d1334d1a10fe"}, + {file = "pyobjc_framework_dvdplayback-10.3.1.tar.gz", hash = "sha256:1f7c22624dee9b1b54def15f12a3f7cacb28052cd864a845eb24b7f59de12257"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-eventkit" +version = "10.3.1" +description = "Wrappers for the framework Accounts on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_EventKit-10.3.1-py2.py3-none-any.whl", hash = "sha256:ad9f42431bd058ff72feba3bbce6fbd88b2a278c3b2c1cdb4625ea5f60f1ecda"}, + {file = "pyobjc_framework_eventkit-10.3.1.tar.gz", hash = "sha256:3eef14ba439be1c5bc47da561ccea3941daba663577efac7a58e3031d27e056b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-exceptionhandling" +version = "10.3.1" +description = "Wrappers for the framework ExceptionHandling on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ExceptionHandling-10.3.1-py2.py3-none-any.whl", hash = "sha256:79843a681a1d0f9ee2b7014dcf7e1182c99c83e49cf6cea81df934ebbdf4050b"}, + {file = "pyobjc_framework_exceptionhandling-10.3.1.tar.gz", hash = "sha256:ff6208777739f8a886d0cbfe20692b41cc4e5e0607419c47d2c5d405b6b4c6ee"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-executionpolicy" +version = "10.3.1" +description = "Wrappers for the framework ExecutionPolicy on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ExecutionPolicy-10.3.1-py2.py3-none-any.whl", hash = "sha256:f2eb203fa4c7dcf18a0ab3a4a94cb30a9f82cf888c237994dbbdb15adf01c8d2"}, + {file = "pyobjc_framework_executionpolicy-10.3.1.tar.gz", hash = "sha256:cc066dc8378fc2a1a4e6129c4d09e2076dc9a5b09925f8dd959aad591cbf9a44"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-extensionkit" +version = "10.3.1" +description = "Wrappers for the framework ExtensionKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ExtensionKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:e2b54a5b32c959fc1500936b73c7ebd6d7ffcad23d74b9a6ff3db4ea5660f731"}, + {file = "pyobjc_framework_ExtensionKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:f5b1e9c7e3a64224acae7b4c2d26d2a654edc54382e9e88aa3b056f4033508f8"}, + {file = "pyobjc_framework_ExtensionKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:62bc537cbeabb24667434c82515827e64c31d761bdcd02cc3ea6bb6a9a35873e"}, + {file = "pyobjc_framework_ExtensionKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:c66797352b71a944810447c81133935656d8ea9bb847775a1532cf06d8deb1d3"}, + {file = "pyobjc_framework_extensionkit-10.3.1.tar.gz", hash = "sha256:91946030195fa17c5248655b10786ea60b9aee7d83a4627ba56768600b4e7674"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-externalaccessory" +version = "10.3.1" +description = "Wrappers for the framework ExternalAccessory on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ExternalAccessory-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:4395607570f1dd91abd786422fc516f83b4b2a5185321e6581d33dbe74a52c63"}, + {file = "pyobjc_framework_ExternalAccessory-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:3fcdbb2338e7bd0fb66e9074dc95f2f989146ae92c66eb4282cfc1a6533cbe6c"}, + {file = "pyobjc_framework_ExternalAccessory-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b076ba07c84b1f4ef9a8a1aa095b66416119b1484b5111b2dd3041f2d301d1a1"}, + {file = "pyobjc_framework_ExternalAccessory-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4771cddfed6422502831a9bf88fa572918d1ca71a3e34e068f442d1197630267"}, + {file = "pyobjc_framework_externalaccessory-10.3.1.tar.gz", hash = "sha256:3ba1a7242448126b4af0fb93963790d0066766bcba2770d935111093e87b7b83"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-fileprovider" +version = "10.3.1" +description = "Wrappers for the framework FileProvider on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_FileProvider-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:36f66bbd308fdf80d8fe21b89212af4b89bc80dff8cee5f785d5a6fcce942bec"}, + {file = "pyobjc_framework_FileProvider-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b44bcbf3d826fd8a0cbc53142c65655433d553205fb36811486757e2089e6c5f"}, + {file = "pyobjc_framework_FileProvider-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b28294768dc71190019c2b2638e27b7ebf6edb65a90721b86613083bd86f6b2d"}, + {file = "pyobjc_framework_FileProvider-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bb07a0b7e259030c7bc034c590c77a22e44427320c99bf74e5348551fe0da011"}, + {file = "pyobjc_framework_FileProvider-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e61b20aef5083df2303bf36f181fb83b02b9a7f4868af0e9229d94d7bc1828f"}, + {file = "pyobjc_framework_FileProvider-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:2ad657fa433d1922f40d581e87af1c2f7002c4835fa49235fdb3909eda23e1e8"}, + {file = "pyobjc_framework_FileProvider-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e66548dfc9e81489bc66e245c97760c457371c25ced87a28bdeca655b548447e"}, + {file = "pyobjc_framework_fileprovider-10.3.1.tar.gz", hash = "sha256:63a4160e6cbede0f682145f4303ed889bd9f3c9fccfecdc32636a8d95aeceeab"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-fileproviderui" +version = "10.3.1" +description = "Wrappers for the framework FileProviderUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_FileProviderUI-10.3.1-py2.py3-none-any.whl", hash = "sha256:14be680a7fc78def5174ec5a6d890d407678cff723d6b359bba66bc0a78bd31a"}, + {file = "pyobjc_framework_fileproviderui-10.3.1.tar.gz", hash = "sha256:2a3f3b9b81aff216df76bc72c8e8730d7ba7f3b2412720f68b722bae58f82797"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-FileProvider = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-findersync" +version = "10.3.1" +description = "Wrappers for the framework FinderSync on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_FinderSync-10.3.1-py2.py3-none-any.whl", hash = "sha256:d4778de8a9b386c16812d470d1ad44d7370970d1dbc75d8bea390d4f5cd12be4"}, + {file = "pyobjc_framework_findersync-10.3.1.tar.gz", hash = "sha256:b4a08e0a87c54f62623038de1929fab018fe44fca5372a455bb524b9f90e9196"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-fsevents" +version = "10.3.1" +description = "Wrappers for the framework FSEvents on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_FSEvents-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:7348e1aa268819b005e1ab648b5bac348052d3513aacf768c2c3999d6ffbf81e"}, + {file = "pyobjc_framework_FSEvents-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:420736c645e15006c1ed962767bfd164b1d5dba7d9dc3cd9730e4c9922b05c27"}, + {file = "pyobjc_framework_FSEvents-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:56b48def729acaa0b7c27335a40519ca7d17e6d45649ba68e0f9f1c70e902994"}, + {file = "pyobjc_framework_FSEvents-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:282ebeeba0190524fe1d5d21d729ebcb7034e379a8039a6ccdf5f5c6e4470e02"}, + {file = "pyobjc_framework_fsevents-10.3.1.tar.gz", hash = "sha256:6269fd8aa3f62d8a6312e316043aca6d7d792812bff09b617bbd6ca9f0f6e440"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-gamecenter" +version = "10.3.1" +description = "Wrappers for the framework GameCenter on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_GameCenter-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:eba1058859fb30bef8227ce649dcf7531545aeff81c3cfd3e3b80ef8fe87bf70"}, + {file = "pyobjc_framework_GameCenter-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:3329261e8a6a3b0df3abd4a7a3cc66cc8e47be919279a08249e08f94a0e4448f"}, + {file = "pyobjc_framework_GameCenter-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:d2420c7d28f9eab337955a1872179295ba92e3d8db0e5b1b8d40442e7079d711"}, + {file = "pyobjc_framework_GameCenter-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:6bd556e798cf52b94434c48cabf299060dd79b668f0021826995ceee520db8af"}, + {file = "pyobjc_framework_gamecenter-10.3.1.tar.gz", hash = "sha256:221ae88ee69816b95861b1a0dc781c1c17775d38fcf0388327620535479b6a07"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-gamecontroller" +version = "10.3.1" +description = "Wrappers for the framework GameController on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_GameController-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:cfb754d29660e90f295ba443cc84fb189e5ca9d1f019c35a382cb24dd4e08bf8"}, + {file = "pyobjc_framework_GameController-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:a7a1e34a4ebcf9f653bc4a066b7d08d9124d462bc7e1c434ead983a6ae093382"}, + {file = "pyobjc_framework_GameController-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a23bb9c97063fb334990cac20dcab1389942495cb028350a232faebb804d73c2"}, + {file = "pyobjc_framework_GameController-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:e90afaa5a5d28771e60b4f60ff89b80037d4e9e558d680872810216299aea1a8"}, + {file = "pyobjc_framework_gamecontroller-10.3.1.tar.gz", hash = "sha256:f9f252b5fed5de2a8c7fdd2e302b6ed6e0b82015d7da75b28984c5ea5909345e"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-gamekit" +version = "10.3.1" +description = "Wrappers for the framework GameKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_GameKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:57930e2b65296719b2998c9816ab844983460f3358c57a120f09ebe78013b64c"}, + {file = "pyobjc_framework_GameKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:5634ac5f8b3569355f4fe8b2e6a06450d8aee555119607f7d738f5c85900c1b6"}, + {file = "pyobjc_framework_GameKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:83f689c959cdfaa311f6702d9e99402faf47e390334fb3880d255dc72e2d2a90"}, + {file = "pyobjc_framework_GameKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:c861e575ed4543241adbc53162fb651395ba73c68a697f4b5aceaa61754e19c1"}, + {file = "pyobjc_framework_gamekit-10.3.1.tar.gz", hash = "sha256:7d21a8f45c32ac94ce0e70b6c6fe72928fe75cb1a6bd6d7715e2bf39b291b70b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-gameplaykit" +version = "10.3.1" +description = "Wrappers for the framework GameplayKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_GameplayKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:cb54cfc4dbc69f1888c59ddce9da97ddc03f5003794fe47d56942a89c478e138"}, + {file = "pyobjc_framework_GameplayKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:eb49a732c82b17ff66f6e878b2cb9ba27e2222be303a337f2af4ed1a34a404bf"}, + {file = "pyobjc_framework_GameplayKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:8a0c2148e9b421922accfe565a398effe9622653c71d0bb4eb1b69ac90ee257f"}, + {file = "pyobjc_framework_GameplayKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:628406ca0d0ce283cc0735a4e532dd04a3a4d57a4c22c3ee4338ba64d1b13790"}, + {file = "pyobjc_framework_gameplaykit-10.3.1.tar.gz", hash = "sha256:2035b81f7bc34b93636753cc3f9b06cd08171afc5c95bb2327a82fd3195f3c36"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-SpriteKit = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-healthkit" +version = "10.3.1" +description = "Wrappers for the framework HealthKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_HealthKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:80aee8bf0e7af6e434e9023c2d2050c2a2fe8e53abbf0e1f2285a932836fdd17"}, + {file = "pyobjc_framework_HealthKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac9abec44c02edfe7f2151f529bac1c9544fb99ee1caffff55b331281b374463"}, + {file = "pyobjc_framework_HealthKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b64d4e61a8009a0a5586d464b591186570f654b20937f78941875ef3b7865505"}, + {file = "pyobjc_framework_HealthKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:5bfcaac3a3947d070611d1fed1abe8858e049ef0ab1050f46974a7333b6369f6"}, + {file = "pyobjc_framework_healthkit-10.3.1.tar.gz", hash = "sha256:45622fedb42bbd95dcc096248bbc41dacd857d9db120ff7310f74f3bad4b23e1"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-imagecapturecore" +version = "10.3.1" +description = "Wrappers for the framework ImageCaptureCore on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ImageCaptureCore-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:649e0b7bf428ad3fe90faaf63dbd09d234563a32b3cee5a6f2d28ab31927bd54"}, + {file = "pyobjc_framework_ImageCaptureCore-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:5bab844c665b3ac07b191e94130f543eb23c5cfd014035f025efacb7a48aa68c"}, + {file = "pyobjc_framework_ImageCaptureCore-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:0fd14f9183c1fcee67cf09f36ccbe156186da84a83419917fd3ca81a5de23d97"}, + {file = "pyobjc_framework_ImageCaptureCore-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:d625d84094f51dd4389d1dea7c53480c3311dd19447d96b3c9eb06be5a935fd6"}, + {file = "pyobjc_framework_imagecapturecore-10.3.1.tar.gz", hash = "sha256:9ce83c38b8ccee6b022faadb9cd7b8716119092cd41b6c2cabce3670101119bf"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-inputmethodkit" +version = "10.3.1" +description = "Wrappers for the framework InputMethodKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_InputMethodKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:d1c3beb88f94eb6b0bdc458ef49f331d064c0260758134cef1cf941684f46c83"}, + {file = "pyobjc_framework_InputMethodKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:d0f7538ac549b61afc93df895375114464f778e06a66a4c2684cbbf247a8f4c7"}, + {file = "pyobjc_framework_InputMethodKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:7f5ff42a59209f3ede24181e5d1bb8d69f8ad428189f177c1bfd55d328f85575"}, + {file = "pyobjc_framework_InputMethodKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:3fcd444b97cf2343a6c37b828dcc85080cc6a2c5ba508010dae4ebe836480d2b"}, + {file = "pyobjc_framework_inputmethodkit-10.3.1.tar.gz", hash = "sha256:637ba2da38da5f558443b4529b33bab276380336e977807347ee9dad81d42109"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-installerplugins" +version = "10.3.1" +description = "Wrappers for the framework InstallerPlugins on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_InstallerPlugins-10.3.1-py2.py3-none-any.whl", hash = "sha256:2b32cde6fb8bbb3e1ffd04d7acbe3132291ad5937fc7af5820062e8aece7b5cc"}, + {file = "pyobjc_framework_installerplugins-10.3.1.tar.gz", hash = "sha256:280808bbce36090b59197756fdb56c19838845a5fc25966a435dbc5fc4ddbbf0"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-instantmessage" +version = "10.3.1" +description = "Wrappers for the framework InstantMessage on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_InstantMessage-10.3.1-py2.py3-none-any.whl", hash = "sha256:51a096e55a423423dbfbf19cc976a49915987ce68b9038f8ce3db9c3cde11718"}, + {file = "pyobjc_framework_instantmessage-10.3.1.tar.gz", hash = "sha256:bb1560a2f92a2def179b6381c17d406331b7818fa0fd1ba98f09ed94415f8a7b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-intents" +version = "10.3.1" +description = "Wrappers for the framework Intents on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Intents-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:4d5a899e8cffd63096aec69edafac78e76d591afd07059a96377d6893ba56649"}, + {file = "pyobjc_framework_Intents-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:b6da33ba8a1e6ae169eb67c1c83bf4e0aeb365fb368162ba002ef26cdc9f853f"}, + {file = "pyobjc_framework_Intents-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:332e5b74dceb8315e289d462058b9ec65544562936098b50b8003999954032b6"}, + {file = "pyobjc_framework_Intents-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:6e77fea5fc4136888459c8ece7d48fe3eac3a37c665e9ba8aaeb18c1671eb083"}, + {file = "pyobjc_framework_intents-10.3.1.tar.gz", hash = "sha256:89f0ed49c515b75c8811d9f6771ac635e799dfaf11921172729f8e0857c8c0e9"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-intentsui" +version = "10.3.1" +description = "Wrappers for the framework Intents on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_IntentsUI-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:23a606af7ea47bd899012b896e0b2d10c677f7facec80197ab45a3bcf899874b"}, + {file = "pyobjc_framework_IntentsUI-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bd2fed37c96f1d97abcbd6d98b2da90ba2c744f968e2c4e0735dce77bbbc95f4"}, + {file = "pyobjc_framework_IntentsUI-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e9fe0ba78c9dd500ef9c13227dd1a60e39df460c84180d8325f5022edd80178b"}, + {file = "pyobjc_framework_IntentsUI-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6c124ceb8e7b7a1f3fb6c2c159e47f9dca42ece6e1645d763235660ea98e7915"}, + {file = "pyobjc_framework_IntentsUI-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bfed2841fc9099cad850e058e3dfa23845a0988e53666f5ffc82cd1b91bbe824"}, + {file = "pyobjc_framework_IntentsUI-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:d6a802bc5ccb01a22c312f4dfaf88300a2edd4db2e2f7568b10d29176ae05edd"}, + {file = "pyobjc_framework_IntentsUI-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3ae02ba54c689cd672bfc49c039d18cc5e9515d7d95608bcbb34357ae90fd9ff"}, + {file = "pyobjc_framework_intentsui-10.3.1.tar.gz", hash = "sha256:68f42cabbd36889060d07b21f156f1dae78243d42b34c652448c687d07cbca62"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Intents = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-iobluetooth" +version = "10.3.1" +description = "Wrappers for the framework IOBluetooth on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_IOBluetooth-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:cdd8bd3da07c6935657bbcf47e6fc6b3b7a2ed9bd7e8ef83bbbd5f4a0e8884f3"}, + {file = "pyobjc_framework_IOBluetooth-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:d5c7ca666050b63c5dd87ede54beebdba7fc12a60bd754d77155da9f7e60618c"}, + {file = "pyobjc_framework_IOBluetooth-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9f90d8ea40f770b41ad97e17e19ad10e49daa1684f750e681db42707dbec9768"}, + {file = "pyobjc_framework_IOBluetooth-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:17303009a3c1ac48eaaa2c3a96a114ef47adcb1fffbf965e7538447bb02adde1"}, + {file = "pyobjc_framework_iobluetooth-10.3.1.tar.gz", hash = "sha256:bca424889d7fdd5bcb728d312e91ee681e73c0c2ac16ba37068603d699043d39"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-iobluetoothui" +version = "10.3.1" +description = "Wrappers for the framework IOBluetoothUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_IOBluetoothUI-10.3.1-py2.py3-none-any.whl", hash = "sha256:ae283c3fecbeb99adba9b3c3d5d06caaad741da726fc7a1dd50ecc0376e03ae8"}, + {file = "pyobjc_framework_iobluetoothui-10.3.1.tar.gz", hash = "sha256:6db82aeb360641b878f8ed73c2074db0425664d9411317b2e01962e0929fa29c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-IOBluetooth = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-iosurface" +version = "10.3.1" +description = "Wrappers for the framework IOSurface on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_IOSurface-10.3.1-py2.py3-none-any.whl", hash = "sha256:4171a33a09ee006ad28ba29e6d12cee821e2c0ba09b4beddae8db16580fb9bc7"}, + {file = "pyobjc_framework_iosurface-10.3.1.tar.gz", hash = "sha256:94e4a109a94f0e365bd60ce68aab6ff166fef6f30a40f7682c76902f5fc3aa34"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-ituneslibrary" +version = "10.3.1" +description = "Wrappers for the framework iTunesLibrary on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_iTunesLibrary-10.3.1-py2.py3-none-any.whl", hash = "sha256:9485e986f6075d04e10c196e5dc36e4c3b60116a45849683a61c876e5fb45fde"}, + {file = "pyobjc_framework_ituneslibrary-10.3.1.tar.gz", hash = "sha256:3899f8555ae02f6441a711892cdc6537404215b3d5f8a7ea4594f7460c58c9b2"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-kernelmanagement" +version = "10.3.1" +description = "Wrappers for the framework KernelManagement on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_KernelManagement-10.3.1-py2.py3-none-any.whl", hash = "sha256:e07134bf3815370d3d9c37f9813edec12758f86fdbbbc67036ab72e8b767ddee"}, + {file = "pyobjc_framework_kernelmanagement-10.3.1.tar.gz", hash = "sha256:04c41bc0d0ce014318acf9e333aba302092d2698ec408cbf0b022f3a507ecfa1"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-latentsemanticmapping" +version = "10.3.1" +description = "Wrappers for the framework LatentSemanticMapping on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_LatentSemanticMapping-10.3.1-py2.py3-none-any.whl", hash = "sha256:c80c709b983273c8f29e86a04c52e98e8e6b0e723a400f7d6036fcabfd850367"}, + {file = "pyobjc_framework_latentsemanticmapping-10.3.1.tar.gz", hash = "sha256:0bca94fd00f59f49874c8266bfacb09a7c56ad13b4d405c241421cef201f8943"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-launchservices" +version = "10.3.1" +description = "Wrappers for the framework LaunchServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_LaunchServices-10.3.1-py2.py3-none-any.whl", hash = "sha256:3ce840027b43c4bd95dc31aaa9b4bfff1d431e782669b4c95e2b12d386c05000"}, + {file = "pyobjc_framework_launchservices-10.3.1.tar.gz", hash = "sha256:7f16af2acabca0c2953eb7333bfe652bf853bb9d9e59b771f9d228468bccdea3"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-CoreServices = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-libdispatch" +version = "10.3.1" +description = "Wrappers for libdispatch on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_libdispatch-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5543aea8acd53fb02bcf962b003a2a9c2bdacf28dc290c31a3d2de7543ef8392"}, + {file = "pyobjc_framework_libdispatch-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3e0db3138aae333f0b87b42586bc016430a76638af169aab9cef6afee4e5f887"}, + {file = "pyobjc_framework_libdispatch-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b209dbc9338cd87e053ede4d782b8c445bcc0b9a3d0365a6ffa1f9cd5143c301"}, + {file = "pyobjc_framework_libdispatch-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a74e62314376dc2d34bc5d4a86cedaf5795786178ebccd0553c58e8fa73400a3"}, + {file = "pyobjc_framework_libdispatch-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8e8fb27ac86d48605eb2107ac408ed8de281751df81f5430fe66c8228d7626b8"}, + {file = "pyobjc_framework_libdispatch-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:0a7a19afef70c98b3b527fb2c9adb025444bcb50f65c8d7b949f1efb51bde577"}, + {file = "pyobjc_framework_libdispatch-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:109044cddecb3332cbb75f14819cd01b98aacfefe91204c776b491eccc58a112"}, + {file = "pyobjc_framework_libdispatch-10.3.1.tar.gz", hash = "sha256:f5c3475498cb32f54d75e21952670e4a32c8517fb2db2e90869f634edc942446"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-libxpc" +version = "10.3.1" +description = "Wrappers for xpc on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_libxpc-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9e287591a708f96e4e3d1929425a50c4e83188eb8bf3094b688de149946ac752"}, + {file = "pyobjc_framework_libxpc-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0afba29b6bf5c3de3ef51f60e06c026ab7be7ce44600047dece5d3bf4e758af"}, + {file = "pyobjc_framework_libxpc-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:123b72dff148a56d48120448bd9742190326f87661f4ae6f5363e112de0e554f"}, + {file = "pyobjc_framework_libxpc-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:72a35a21f4bbbfb4a5c4c23e3180c3273b7720fe4cd150b975cb5d08cbc4fe13"}, + {file = "pyobjc_framework_libxpc-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d14f6fa976df50de90affa41b4dc2381554fe1e8503564f54cd71a8c6cc4b0eb"}, + {file = "pyobjc_framework_libxpc-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:0d8a5d29952db92d9d7112c642ba7cdc9d8496118ec14e8186f93353b092a818"}, + {file = "pyobjc_framework_libxpc-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f4232996766f4c21f80da51344296651f40ec8fc14f353fca0bc75af718ee950"}, + {file = "pyobjc_framework_libxpc-10.3.1.tar.gz", hash = "sha256:b3c9e9fd281b5610e3bef486e91570b0afa8ab8eb0c01c0baa5e2ec49ccb7329"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-linkpresentation" +version = "10.3.1" +description = "Wrappers for the framework LinkPresentation on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_LinkPresentation-10.3.1-py2.py3-none-any.whl", hash = "sha256:e49ac094eb3a60a87f37edc24657feb051614a4d4464ad2580831288ead521f9"}, + {file = "pyobjc_framework_linkpresentation-10.3.1.tar.gz", hash = "sha256:535d452cc33d61074ba9bad7707d6c0a23d474fb045ed4322e5f87bfb0b7e865"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-localauthentication" +version = "10.3.1" +description = "Wrappers for the framework LocalAuthentication on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_LocalAuthentication-10.3.1-py2.py3-none-any.whl", hash = "sha256:565910d7d2075cd53c6d4ffdbb15d9b93267f1b1ba4c502d354778865d0dc2ec"}, + {file = "pyobjc_framework_localauthentication-10.3.1.tar.gz", hash = "sha256:ad85411f1899a2ba89349df6a92db99fcaa80a4232a4934a1a176c60698d46b1"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Security = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-localauthenticationembeddedui" +version = "10.3.1" +description = "Wrappers for the framework LocalAuthenticationEmbeddedUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_LocalAuthenticationEmbeddedUI-10.3.1-py2.py3-none-any.whl", hash = "sha256:d69ef723f4525e6476e51bd166d56e97c9274500f98aa209a659e7567793dc01"}, + {file = "pyobjc_framework_localauthenticationembeddedui-10.3.1.tar.gz", hash = "sha256:f915190f6106b9f9234750abf48f87445c364ccbca8f8dd565bba1b66ddd55a3"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-LocalAuthentication = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-mailkit" +version = "10.3.1" +description = "Wrappers for the framework MailKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MailKit-10.3.1-py2.py3-none-any.whl", hash = "sha256:7c403525e01bed0888946552e512ca4d1b018c3f6ef3d293fff85b90dc02a411"}, + {file = "pyobjc_framework_mailkit-10.3.1.tar.gz", hash = "sha256:90ad82786ae01a275aeec842e73b1fef12d9f91a67edcde8ff6a145859dc9f92"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-mapkit" +version = "10.3.1" +description = "Wrappers for the framework MapKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MapKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:cfee94ad82e673eaebc3159732b5cff1fc4f7e3bee6f17cc4fabd641c260b769"}, + {file = "pyobjc_framework_MapKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:dd65d6eff1397afc0b2108b0e9387a6c2390b1387731a8e0dd8298b8d0641635"}, + {file = "pyobjc_framework_MapKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ffadc4968c3d815dd8ffc2867e962546a8681620c704888dfe1e7aa718cb3d90"}, + {file = "pyobjc_framework_MapKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:f14f90bcb68baee70a838b3cecb9d909da43175da49cbe90dd6cca57c37a6ae5"}, + {file = "pyobjc_framework_mapkit-10.3.1.tar.gz", hash = "sha256:f433228c404b9ef4a66e808995daccc1306f7123296317651078a6a734ac1ab0"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreLocation = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-mediaaccessibility" +version = "10.3.1" +description = "Wrappers for the framework MediaAccessibility on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MediaAccessibility-10.3.1-py2.py3-none-any.whl", hash = "sha256:c4304ea53c7e85320b58d773cce2288f62dcb5b9c5a295be1ecfaa6645a9fea6"}, + {file = "pyobjc_framework_mediaaccessibility-10.3.1.tar.gz", hash = "sha256:c249e1eee636e77b5f00db3bf85174cb3e0cb53ca991a17e53a1f200377f4289"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-medialibrary" +version = "10.3.1" +description = "Wrappers for the framework MediaLibrary on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MediaLibrary-10.3.1-py2.py3-none-any.whl", hash = "sha256:25f16d610e3ea5d983175a6c07351596bd5dd2fcca194f1eac5686c670bbdb3b"}, + {file = "pyobjc_framework_medialibrary-10.3.1.tar.gz", hash = "sha256:703ffd0904fc86d4fbfbbd4952be43e91a6d477c53ce2868e4c18c3eb295f5c6"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-mediaplayer" +version = "10.3.1" +description = "Wrappers for the framework MediaPlayer on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MediaPlayer-10.3.1-py2.py3-none-any.whl", hash = "sha256:5b428cc28e57c1778bd431156c3adb948650f7503f266689559d0ece94b34e8a"}, + {file = "pyobjc_framework_mediaplayer-10.3.1.tar.gz", hash = "sha256:97043df5ef89d4fbe217813e8f4ee1e226d8a43dee4eac00fff95e6b8a7772be"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-AVFoundation = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-mediatoolbox" +version = "10.3.1" +description = "Wrappers for the framework MediaToolbox on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MediaToolbox-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:d4ef616e233c40fcac99298ee4ab95a9b6439cffe28e96ce07b66c00f598bd30"}, + {file = "pyobjc_framework_MediaToolbox-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:a8acfa377b593b043e8c9ff1aa6cbbde92b7feaea60578ea2d0b61ac3edd15dc"}, + {file = "pyobjc_framework_MediaToolbox-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:f989f07304dae82b1307e179f185a80b66ed36b0dd15d1b3bf6ec8092b766100"}, + {file = "pyobjc_framework_MediaToolbox-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4114fb3749dacf6dd83113823b846e77671c0e8b1209ca6e4402f09e6727c185"}, + {file = "pyobjc_framework_mediatoolbox-10.3.1.tar.gz", hash = "sha256:f141056dce0dc16ec21be596fea58acb4a668045f53e12a0f250990d936b44f2"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-metal" +version = "10.3.1" +description = "Wrappers for the framework Metal on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Metal-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:4a42f3aa47eb5e0d3f29bf07f239c2ba33725701546ea6d3c5d019133e0fbce1"}, + {file = "pyobjc_framework_Metal-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:cc33d05e376d3a2f42da24b397f6353d9cb8e5990c79c9255a82637b7b8f256c"}, + {file = "pyobjc_framework_Metal-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:22762ba170d0fc4538dd7f582da1fd7673160e369eca74efe3d6d35bfdd50522"}, + {file = "pyobjc_framework_Metal-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:7fef3ebfd6cfbd7cbfe45aaa86dd32034303d933871d8450f4c990dbdefda176"}, + {file = "pyobjc_framework_metal-10.3.1.tar.gz", hash = "sha256:495307db0bfd2063f28b7c8fa350af71afcfbf5f5f2186a6a751b4cb2ef46a1a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-metalfx" +version = "10.3.1" +description = "Wrappers for the framework MetalFX on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MetalFX-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:ea4bed69e6a9ab4cd4fa6160554cb7df72316e849a34b839bf8d9c69ab445b24"}, + {file = "pyobjc_framework_MetalFX-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:f3ecae357688a4730191d57ffbc3db6abb950b756e8b98f23689d4bf08f34c20"}, + {file = "pyobjc_framework_MetalFX-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:0179ce8ac828b6d6e2542d2d4f68850290eb3f16112205a758419225dd51b448"}, + {file = "pyobjc_framework_MetalFX-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:b3ae624f7e0a5c60b856889753af560b7cbd1a5f47db01f120a668e429afd1c9"}, + {file = "pyobjc_framework_metalfx-10.3.1.tar.gz", hash = "sha256:3ea0f259397523a84a320b3925dcaaa5c039494accc3cb412b63e6f7f66f9513"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Metal = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-metalkit" +version = "10.3.1" +description = "Wrappers for the framework MetalKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MetalKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:c198c61d967812837538a793b1ff862bbd868d954abcd6ee558662c45c4dbf12"}, + {file = "pyobjc_framework_MetalKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:7c0155d731766be52cf18de6ad61339c16217bde330e17ef50808366856c1b85"}, + {file = "pyobjc_framework_MetalKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:48ae5e7c81c97e231c52036c8e2acb22bb59feaf0cb13f7678c87b16d9faaf9f"}, + {file = "pyobjc_framework_MetalKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:de632a7cdca1a0a13097a363dd441b9550ad91de6da6c88952c77acfd4b3a100"}, + {file = "pyobjc_framework_metalkit-10.3.1.tar.gz", hash = "sha256:905eaad9dce29082efd5cc56195337d2e8bff86ccfad36ec5127f818155ec038"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Metal = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-metalperformanceshaders" +version = "10.3.1" +description = "Wrappers for the framework MetalPerformanceShaders on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MetalPerformanceShaders-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:a6f72fd528033ff0b176e909394edfc34f90b711fc6dcb225ba41b042929b71a"}, + {file = "pyobjc_framework_MetalPerformanceShaders-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:59c971d79c0d02a451571cd0122296aba05b46d7eecedea75ed8ce892d1119a1"}, + {file = "pyobjc_framework_MetalPerformanceShaders-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:969bc8caea30d71f963fb763c8d837f36d403e47c1ff6ed449ceb09783322944"}, + {file = "pyobjc_framework_MetalPerformanceShaders-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:b02da6a5dc9088cadf38dce21aa39027bc668493876d3af684b91f039f123df2"}, + {file = "pyobjc_framework_metalperformanceshaders-10.3.1.tar.gz", hash = "sha256:1a9e91dc9e748834c95b7a596b943203761f6533352631c7abe612f804b23d50"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Metal = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-metalperformanceshadersgraph" +version = "10.3.1" +description = "Wrappers for the framework MetalPerformanceShadersGraph on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MetalPerformanceShadersGraph-10.3.1-py2.py3-none-any.whl", hash = "sha256:a0288c53a024bc47348da2ccd8dc980d389dacc9d1d33b3412614e88732dc424"}, + {file = "pyobjc_framework_metalperformanceshadersgraph-10.3.1.tar.gz", hash = "sha256:4bf2045036f97dcaabbf16ee8527f1787c7e9366611b9b9ed4bfabc81c19343f"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-MetalPerformanceShaders = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-metrickit" +version = "10.3.1" +description = "Wrappers for the framework MetricKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MetricKit-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ad28bb10e452b33af285137fb89f573294759571fa02d66201b78304add91513"}, + {file = "pyobjc_framework_MetricKit-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:59b6959d6f79f71080d386ad08665c19e52d0cc57943716da180bbb3369c9569"}, + {file = "pyobjc_framework_MetricKit-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f73d240b5e8f2351d6c2258b71a6d06b45ec964523f54acf05af50dc4ffac821"}, + {file = "pyobjc_framework_MetricKit-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:58dbfc7b9ae7701a59b9b2a5a5f874a9e393f10b27f39155714d1b49ea725226"}, + {file = "pyobjc_framework_MetricKit-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f462b68c22632f952d52b7c858d03727315107bb22c0a2152994baec1350534b"}, + {file = "pyobjc_framework_MetricKit-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:321ea41e7dcfb142f6ef91916cdfb5296a9888571f7c1ccd8799e51b1fc4a6c5"}, + {file = "pyobjc_framework_MetricKit-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3460fad9a31f6331884775905bb55d38db621b2f3613f44fd037777eb304d787"}, + {file = "pyobjc_framework_metrickit-10.3.1.tar.gz", hash = "sha256:f0b96fe9da0e26759f38d9e4cdf7d9c8be9c6ba35403bc8e675183a6f81dd0b3"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-mlcompute" +version = "10.3.1" +description = "Wrappers for the framework MLCompute on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MLCompute-10.3.1-py2.py3-none-any.whl", hash = "sha256:e5f8d98ee43fc795f44dab322299cf8957d7e6acb54139cecebfc7f4b2562b6c"}, + {file = "pyobjc_framework_mlcompute-10.3.1.tar.gz", hash = "sha256:9ac94b0a9511fedceacda846865daa05358eec5a4bf62be534b69eb4d7aced9b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-modelio" +version = "10.3.1" +description = "Wrappers for the framework ModelIO on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ModelIO-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:e841be15f1847ffe1d30e0efdbc57d3c6f1a2db7553946bc15dde0d8f57b620d"}, + {file = "pyobjc_framework_ModelIO-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:53d4cc794e0dbc94e622ed164556f82db723f9c3b2d9dbf72bdf44468eb4efa5"}, + {file = "pyobjc_framework_ModelIO-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:856e8d63c10238f4b23d30b9fb903d64b9f2b44e4f30f30a28bfc665e1adc5ac"}, + {file = "pyobjc_framework_ModelIO-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:b59069c79c0865334e0036b1938e009addf035bfec36f7d4d871037c14c7accd"}, + {file = "pyobjc_framework_modelio-10.3.1.tar.gz", hash = "sha256:b1da37d10c38c63006d5173b49d18891b2db2c9acdbb6dbd21c73f17c0ccab7e"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-multipeerconnectivity" +version = "10.3.1" +description = "Wrappers for the framework MultipeerConnectivity on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_MultipeerConnectivity-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:1c0b65734f1e9b907c6198b035ad47c49819711c49694fe73cdf475be37db82e"}, + {file = "pyobjc_framework_MultipeerConnectivity-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:f0e466da15a3daf2c140be66da99ac0526b584fbd6dc08ed82e542e706964449"}, + {file = "pyobjc_framework_MultipeerConnectivity-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5538caad124908481ee43755d439898f9d7eb0f200856ba246c730ca5fd77e15"}, + {file = "pyobjc_framework_MultipeerConnectivity-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:5350d13115b252bf6fa374dba1ef13ffd746b15b16f45d1b77b9231aebdf5b57"}, + {file = "pyobjc_framework_multipeerconnectivity-10.3.1.tar.gz", hash = "sha256:eb801d44194eb7eafcb0a21094c4ce78bcf41ed727125b048755838b59de3271"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-naturallanguage" +version = "10.3.1" +description = "Wrappers for the framework NaturalLanguage on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_NaturalLanguage-10.3.1-py2.py3-none-any.whl", hash = "sha256:d0e47fad66bb74fa68b50093500f5cb49d8a772b522f8c92e725f2e65942dd9c"}, + {file = "pyobjc_framework_naturallanguage-10.3.1.tar.gz", hash = "sha256:49f19d0dba34802696a270d690db310ff03f1c85d6fb411734cb13667db90dd9"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-netfs" +version = "10.3.1" +description = "Wrappers for the framework NetFS on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_NetFS-10.3.1-py2.py3-none-any.whl", hash = "sha256:84faa7325c4ecc2f4ad199d8c52cebcb520ad2e7713f356c7a5a849839398d77"}, + {file = "pyobjc_framework_netfs-10.3.1.tar.gz", hash = "sha256:46466917f7b0aca3772bf4dfd586b583992c60ecd71c39f7d28ff7665d057637"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-network" +version = "10.3.1" +description = "Wrappers for the framework Network on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Network-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:56df88c10b948b3b09dd6d0e9061da33683e294d0450efd9076354f41e214f58"}, + {file = "pyobjc_framework_Network-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:0336fc0b80a2481d3a032b94e7dfddbb8d0f1ec10e36e80ad424a028b00679ac"}, + {file = "pyobjc_framework_Network-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:1e2cbc4d209b6789d8a3bd85cfe472bae50ca2d54355beb25b8336ed65d846e0"}, + {file = "pyobjc_framework_Network-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:c665f3dcfb1375835dd0c6ce10079f22be73f92213fc3d48b176d9c67fc221a9"}, + {file = "pyobjc_framework_network-10.3.1.tar.gz", hash = "sha256:87a5839d4ab2ae452b4e563bd7a00569557ede4b8cd1eb77c973cdf45fb8f5ab"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-networkextension" +version = "10.3.1" +description = "Wrappers for the framework NetworkExtension on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_NetworkExtension-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:baacdb4ad595d5c5ce9660e10ea476fab9bfd1a1def2357eae7918f5019bb8c0"}, + {file = "pyobjc_framework_NetworkExtension-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:c1efc35dc4ddced3f0e5400e8ae9b28b7585f0cf5701023dd957f3cbd58d361f"}, + {file = "pyobjc_framework_NetworkExtension-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aeba32d9b9809bb1296d85da00f0c221daf54b25fd864dc9bf03a7007f5ad601"}, + {file = "pyobjc_framework_NetworkExtension-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:1c8ef5fce8846fb3bf459bedf7a31ff0428a9c3184c8b26ced8e322c956e8ec0"}, + {file = "pyobjc_framework_networkextension-10.3.1.tar.gz", hash = "sha256:c5a094862061565ca6d37457db42f55f344ec24dd7604ddf5d72e20ae7f63fdd"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-notificationcenter" +version = "10.3.1" +description = "Wrappers for the framework NotificationCenter on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_NotificationCenter-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:2818922c2c3f45721515733b452d20a507368a87b793fa976c21945773582abc"}, + {file = "pyobjc_framework_NotificationCenter-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:e08264759b84a21631e143afce1696920207d418be7f8853dbde18dbc7881667"}, + {file = "pyobjc_framework_NotificationCenter-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:1560edad4e9fe01cbf3a70bb6e2668985e13903497d3fdc92276d6cecf9e4742"}, + {file = "pyobjc_framework_NotificationCenter-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:992ea7c86d0330cf10113b829525d74a95d97d0d7245e4e277f75ecbb37b596e"}, + {file = "pyobjc_framework_notificationcenter-10.3.1.tar.gz", hash = "sha256:3e6efe0fe6389601bb87086f5585fa7e74b2143236b7d5afd02b617a73656419"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-opendirectory" +version = "10.3.1" +description = "Wrappers for the framework OpenDirectory on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_OpenDirectory-10.3.1-py2.py3-none-any.whl", hash = "sha256:7e787e65409aad082faed2ed0c2cd52cccea61702d9c83b6acdcac3fa50a562f"}, + {file = "pyobjc_framework_opendirectory-10.3.1.tar.gz", hash = "sha256:cddc25632eebeb6bf0d886ae0fc919d574e458c597691226ba15bbf134ab51a6"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-osakit" +version = "10.3.1" +description = "Wrappers for the framework OSAKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_OSAKit-10.3.1-py2.py3-none-any.whl", hash = "sha256:aaa60e6f455febe45f9be6487c59f11450de81bd7f49a6e4db576a38bcaf1c68"}, + {file = "pyobjc_framework_osakit-10.3.1.tar.gz", hash = "sha256:0af326b831fa29fca11ffe2b641807ad3c233be9eb403e62328fa784528da4ab"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-oslog" +version = "10.3.1" +description = "Wrappers for the framework OSLog on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_OSLog-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:4799619f9ae12287923e2bc39fc021c75ea4e8bcb0e8ff44201f1018d017db98"}, + {file = "pyobjc_framework_OSLog-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:7ff719367249c09318a87df47ef8e1c8d18ab5f4b9e94862e7ca9c8fad21ed9a"}, + {file = "pyobjc_framework_OSLog-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5ae0848bf6de69c95802f11bb4aff5c2edac5c5e6179b9a06a0e4fe05ed48b53"}, + {file = "pyobjc_framework_OSLog-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:cded4c706fcf3fd78ef257ab096f4f8cefc70cca81553d2fae88841aaf5d620d"}, + {file = "pyobjc_framework_oslog-10.3.1.tar.gz", hash = "sha256:592c3e50cf824c2c07779771aa0065de2dbb4c615de43e8949b39d19ba04d744"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreMedia = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-passkit" +version = "10.3.1" +description = "Wrappers for the framework PassKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_PassKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:ce09205aae4e15d3639d76a558c072ae106e8c7dafe9a451c5e27967498b74cd"}, + {file = "pyobjc_framework_PassKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:79ff6fa8ad4c0f9b4a992122b22e2b2b4200534221eb1bfe86bf473fb3c7ca23"}, + {file = "pyobjc_framework_PassKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:bbb71ac6fc51da06d0fd6cb4d83eb79b704c2bab694a93899d3f83c753c9740b"}, + {file = "pyobjc_framework_PassKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:d41409ee24eee2318023c3ba23218db152fc262ebcbea9021dc533fe80a73f32"}, + {file = "pyobjc_framework_passkit-10.3.1.tar.gz", hash = "sha256:4c3eea19c1ae3edf6e7858ab815bcd8ecf517a146928ce6a843910729372f010"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-pencilkit" +version = "10.3.1" +description = "Wrappers for the framework PencilKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_PencilKit-10.3.1-py2.py3-none-any.whl", hash = "sha256:dc05376fbc5887391ff4e778b6f4b2fa20264aac58cd5fe5f47e4930186c1674"}, + {file = "pyobjc_framework_pencilkit-10.3.1.tar.gz", hash = "sha256:4dfd8e0179be5ecf67b768317a88d86d93df1c8674d422afa14957cf80e6e01f"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-phase" +version = "10.3.1" +description = "Wrappers for the framework PHASE on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_PHASE-10.3.1-py2.py3-none-any.whl", hash = "sha256:eec5a38983d65a4cf022dd01dc6f290ec163399e79592203443b4115ea3c8510"}, + {file = "pyobjc_framework_phase-10.3.1.tar.gz", hash = "sha256:5be2ea5d36ea9620f5278f5ad3b02cc243511be3b137aa28b1523e8f6da54f99"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-AVFoundation = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-photos" +version = "10.3.1" +description = "Wrappers for the framework Photos on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Photos-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:9a382201dd14a3f3076d8689267d63520803a1ad1716fb66df5c1bb578bc6384"}, + {file = "pyobjc_framework_Photos-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:9c72efff52bed483b0dfaa569a21355f7620f25672a0245c5db8c1df86abc7b8"}, + {file = "pyobjc_framework_Photos-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:4841948ce4fe3d5060ec08e760b0b6e476e923782f32b9af2ffe8eb2a4fbb385"}, + {file = "pyobjc_framework_Photos-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:50710703d18d0b13c48e02ab4edcca72a67ee20aac2a75664bfb725c8cb3a677"}, + {file = "pyobjc_framework_photos-10.3.1.tar.gz", hash = "sha256:8d538c399720062523694f7669aa82dcb75a7b192fb4aca93cf782d04e4c39be"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-photosui" +version = "10.3.1" +description = "Wrappers for the framework PhotosUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_PhotosUI-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:88665561d9ef7e9fd2ceb4e7e5da0fc3412a397d4c48a2121250462781106d30"}, + {file = "pyobjc_framework_PhotosUI-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:3254605c33e090742d0303a3b5b8ddab5489dbf28ea8a287566106e6887ee561"}, + {file = "pyobjc_framework_PhotosUI-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9370e36bb4ae1e7128006ff6a6b43448ebf8586784749e2a1fa30bbb2ef8fedf"}, + {file = "pyobjc_framework_PhotosUI-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:a756c3bbf945ceaa7d184c41053c2a9c1a89b32ffcdf752664b1180927b22cb2"}, + {file = "pyobjc_framework_photosui-10.3.1.tar.gz", hash = "sha256:e9eb961c6be1f3e00d76cc0a8ec15b50ac0692bd5b5c86268ad08f6d09cf390d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-preferencepanes" +version = "10.3.1" +description = "Wrappers for the framework PreferencePanes on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_PreferencePanes-10.3.1-py2.py3-none-any.whl", hash = "sha256:319b58b6c8f876f67e879b3a4f74afd6d892aa43a7f9ef4320819265b281c9e5"}, + {file = "pyobjc_framework_preferencepanes-10.3.1.tar.gz", hash = "sha256:eef150416a39a0109a8a37e9978ac4a55ad0b125ef6053a7431524ede5c69783"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-pubsub" +version = "10.3.1" +description = "Wrappers for the framework PubSub on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_PubSub-10.3.1-py2.py3-none-any.whl", hash = "sha256:dd8bc334b3acbdd82163d511bc71af7addc98dfaf473736545487f3168836dcd"}, + {file = "pyobjc_framework_pubsub-10.3.1.tar.gz", hash = "sha256:d123e75288c2f9d785ed1c4d92a96e5118c4b6f1cd9c55605eb4b4a74c2e36f4"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-pushkit" +version = "10.3.1" +description = "Wrappers for the framework PushKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_PushKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:39e21ac2b9a529e99d6d33c439c96d4d2bb97d2c56bd6d92b2c5bd497e925851"}, + {file = "pyobjc_framework_PushKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:e20f94ad3fbebf34c613c880e655d0f918d891b0a70763f99bb5d11e0af65c73"}, + {file = "pyobjc_framework_PushKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:79f0e66b88473e7fdef304dce06d7d63c3e5e38b12deafcd06a5bd3506ed9398"}, + {file = "pyobjc_framework_PushKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:ee90959fc7b171930cffdf07cb7865d56a2cb4b723c5826ccf95d6e865dee4bd"}, + {file = "pyobjc_framework_pushkit-10.3.1.tar.gz", hash = "sha256:cc4da5382cf48c29637af1c633490203358a6ab0c76f0c006079cf144eeb9568"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-quartz" +version = "10.3.1" +description = "Wrappers for the Quartz frameworks on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Quartz-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ef4fd315ed2bc42ef77fdeb2bae28a88ec986bd7b8079a87ba3b3475348f96e"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:96578d4a3e70164efe44ad7dc320ecd4e211758ffcde5dcd694de1bbdfe090a4"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ca35f92486869a41847a1703bb176aab8a53dbfd8e678d1f4d68d8e6e1581c71"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:00a0933267e3a46ea4afcc35d117b2efb920f06de797fa66279c52e7057e3590"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a161bedb4c5257a02ad56a910cd7eefb28bdb0ea78607df0d70ed4efe4ea54c1"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:d7a8028e117a94923a511944bfa9daf9744e212f06cf89010c60934a479863a5"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de00c983b3267eb26fa42c6ed9f15e2bf006bde8afa7fe2b390646aa21a5d6fc"}, + {file = "pyobjc_framework_quartz-10.3.1.tar.gz", hash = "sha256:b6d7e346d735c9a7f147cd78e6da79eeae416a0b7d3874644c83a23786c6f886"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-quicklookthumbnailing" +version = "10.3.1" +description = "Wrappers for the framework QuickLookThumbnailing on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_QuickLookThumbnailing-10.3.1-py2.py3-none-any.whl", hash = "sha256:e5095c0ad8cf1f91a6ed9aa5c4fb7c9b1da122d495ce131bae8d7faa06da9505"}, + {file = "pyobjc_framework_quicklookthumbnailing-10.3.1.tar.gz", hash = "sha256:ee26be78df9ce46ffa6f971f4ce167a0e98f38167aeb86cfc1b41270f15c96a3"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-replaykit" +version = "10.3.1" +description = "Wrappers for the framework ReplayKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ReplayKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:1d89020e770763947c0e3e3a201b541b81b455656e574d390ad0b0e32a67640a"}, + {file = "pyobjc_framework_ReplayKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:b753658337d25964acb83f5edc465b772f276b4c88fc8bd03ad633b4466f6bd4"}, + {file = "pyobjc_framework_ReplayKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fafbc37ef6e44ac5019b4a4b751b3de6d5983500705e8dea2fc62134f8c0dc24"}, + {file = "pyobjc_framework_ReplayKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:22ca748ae8325e41e0526f13822d2c477ab879cb2d454eee1db47ca91353c986"}, + {file = "pyobjc_framework_replaykit-10.3.1.tar.gz", hash = "sha256:21762c8674b629fb670c3cbd515c593f1b5f98ee24ee4834a09055cb08849068"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-safariservices" +version = "10.3.1" +description = "Wrappers for the framework SafariServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SafariServices-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:c8afb977b5858d3fd27136146db46a9f2ec43c35f5af269dbcb51c46a422dd7e"}, + {file = "pyobjc_framework_SafariServices-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:adb0332cbfa086892524efa253c873ecc4a8b00c60db45be3362759c4b4ae87d"}, + {file = "pyobjc_framework_SafariServices-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:7a171f08527c6bd297633e72bc597d68ec74419b5315f8c8122311537a8a6340"}, + {file = "pyobjc_framework_SafariServices-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:aaba0ea92410820d94fef0b93d337478f0e416967cb2aa4e667dd4d1bb561c1e"}, + {file = "pyobjc_framework_safariservices-10.3.1.tar.gz", hash = "sha256:9c5278576e7c28c3d93e74ebe5d39d07c5c91572ddf03ea01cc45d9a06dc8d0a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-safetykit" +version = "10.3.1" +description = "Wrappers for the framework SafetyKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SafetyKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:e554cb94bc2f89f525ccaa4ed827390d188eba8bb24049acdc764f3dfee9af08"}, + {file = "pyobjc_framework_SafetyKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:8eb160cc4f3b7e6d58f2eecc205f016afd5f4278b9641e49d5ef9c4df7b6df8c"}, + {file = "pyobjc_framework_SafetyKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3674b92d8b72d0a6006cb899ec2f605d1d5a6a59ff2d90c51ee2ccfd0f069d10"}, + {file = "pyobjc_framework_SafetyKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:ac700aa2cbddc8a31626815886e42d0d1591572914c2b15df2dd07871ee84568"}, + {file = "pyobjc_framework_safetykit-10.3.1.tar.gz", hash = "sha256:8421be801ce29053e67a2c91673913562c3ad9d4bb1fbaa934a3a365d8bff12d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-scenekit" +version = "10.3.1" +description = "Wrappers for the framework SceneKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SceneKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:7a108ef1a660a7928d1d44e415c84f544d296745d5350235addaab82777b080a"}, + {file = "pyobjc_framework_SceneKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:08fb5dd8c10a5624a0bf3dd9f448b2fe4c8b9c7c3c98708d28b0b4c72dd2a107"}, + {file = "pyobjc_framework_SceneKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:08601223416fa048d9468f961b170e3c2009d7e2434eea92c12ee12f6c672961"}, + {file = "pyobjc_framework_SceneKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:2984a543221190547bff603a6a59c931cda7099b91ac7412e11c962e8f6c3bc1"}, + {file = "pyobjc_framework_scenekit-10.3.1.tar.gz", hash = "sha256:99cf0db3055d9bae0a8643400e528a8c012235db8ee6a1864ea0b03a0854c9d0"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-screencapturekit" +version = "10.3.1" +description = "Wrappers for the framework ScreenCaptureKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ScreenCaptureKit-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e69a1e15502543c80c084399d7e06d6ebfb089a3afd248860e24dd03e654456a"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0953f8d43bd7f0012decebe34401d361c4a64472190960204b3214e4850e4ef2"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a80928dc483046ac72294fd576c53f793045aad700b740ec9591b23a3ccc011d"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4d8e280a076e7bc40eaa9730f97da84421b891c30f6e3fdea4f6c30bdb298243"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:757a62e30ae68307d4705288bb808d91e10569c8ba3b54192bb5bbaaddcfa802"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:c55a2bdc3ff934841a668db1b5b2f74b9352696419ce87fea31637b89a04b6c7"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a0ccf558123fe0b7fcfbb74280678aa0f0973c96765a03cb658fd4d8c5e732e9"}, + {file = "pyobjc_framework_screencapturekit-10.3.1.tar.gz", hash = "sha256:cb1a2e746e0f98ea14a11ea35d059d38587340beeeb905812085e2c7ceb14e0c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreMedia = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-screensaver" +version = "10.3.1" +description = "Wrappers for the framework ScreenSaver on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ScreenSaver-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:31bffb17ec131509c4cc584e98328497310ea644c764b50fb6bf7850617ec5a5"}, + {file = "pyobjc_framework_ScreenSaver-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:ff25ad7cfffa116feaa117989f0a4b68dd6b7318aea4320ece6f75caf0092cfa"}, + {file = "pyobjc_framework_ScreenSaver-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:51e5bce05a3ada526c5c19b21cfb383cd7653d78f175c5abaf500a67ddab1c19"}, + {file = "pyobjc_framework_ScreenSaver-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:616ffb4bac2a56108778e33be6fe75b28f19511157abc411960b72324276635d"}, + {file = "pyobjc_framework_screensaver-10.3.1.tar.gz", hash = "sha256:0bbc5b574f12e95f6f6e48ced40b601e46e560ef6786845c15c57d78e6cd083e"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-screentime" +version = "10.3.1" +description = "Wrappers for the framework ScreenTime on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ScreenTime-10.3.1-py2.py3-none-any.whl", hash = "sha256:d4f8a0784dc7d7060dadae2e4b5aae5e1afe8bbf453ce49cbb1860b8920114c3"}, + {file = "pyobjc_framework_screentime-10.3.1.tar.gz", hash = "sha256:351179d5bf951aa754c72f50ba8785212adf1b26abe10149c750fafd0a3108ae"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-scriptingbridge" +version = "10.3.1" +description = "Wrappers for the framework ScriptingBridge on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ScriptingBridge-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:3a88e1a6c6b7d8935ab4baa9dcdeccb9cb08a44906bdd69b77302f48c88408d9"}, + {file = "pyobjc_framework_ScriptingBridge-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:66b55a9c12572f9bd6c00fd0a5aa5353354e7b717e37ffd1e843614d2fbde3d5"}, + {file = "pyobjc_framework_ScriptingBridge-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:387c0720842a1285afde5b56c43d9ed1332736ff8f6119ba6c6a551018552182"}, + {file = "pyobjc_framework_ScriptingBridge-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:90022f44f2bf0563bf5a75669198b9d778f76ece719f237750e9c5fcb00a601d"}, + {file = "pyobjc_framework_scriptingbridge-10.3.1.tar.gz", hash = "sha256:6bfb45efd0a1cda38a37154afe69f86ea086d5cbdfbc33b3e31c0bda97537fe9"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-searchkit" +version = "10.3.1" +description = "Wrappers for the framework SearchKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SearchKit-10.3.1-py2.py3-none-any.whl", hash = "sha256:48ec776603e350405c7311f29d5941e0e9d6b6a75e2aec69e0acd28be0979905"}, + {file = "pyobjc_framework_searchkit-10.3.1.tar.gz", hash = "sha256:7efb76b7af9d8f0f08efb91543f4dba0b00261ed41abb121ada80175cc82d65d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-CoreServices = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-security" +version = "10.3.1" +description = "Wrappers for the framework Security on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Security-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9de850e5d29cb8605c0d7f7fb4a8d29ad5ece6c58a2ab16fba3f985e6b9ee05a"}, + {file = "pyobjc_framework_Security-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:499372b4b87de0198601e0c6b3d3e43d48605218149a5808c6567b601147a9bf"}, + {file = "pyobjc_framework_Security-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b3daed9661bd80245dd8dbc738a17870226969db27f6dbb3424ec0ebdbb6ba83"}, + {file = "pyobjc_framework_Security-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6120e91282985bcec3b44c1bc4f9c26d40cd07b4ac3dc81f745d73c13f8b5523"}, + {file = "pyobjc_framework_Security-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:43450895cd84256b313b547c9b256a4c0dc4b91195ec3e744f4f247d3cda0b77"}, + {file = "pyobjc_framework_Security-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:de52be2ce5ea98f2c224fea248227dcb3e7028d9814d0894ea6ea3c6da0f9160"}, + {file = "pyobjc_framework_Security-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:df39effeeb79482dd5805fd05e34a7c3ab30233a6e06e251cf7f8620430574fe"}, + {file = "pyobjc_framework_security-10.3.1.tar.gz", hash = "sha256:0d4e679a8aebaef9b54bd24e2fe2794ad5c28d601b6d140ed38370594bcb6fa0"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-securityfoundation" +version = "10.3.1" +description = "Wrappers for the framework SecurityFoundation on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SecurityFoundation-10.3.1-py2.py3-none-any.whl", hash = "sha256:c352cde672c9c2afa89575c362a0714e589c118485cec49ba230327e92c8a9a6"}, + {file = "pyobjc_framework_securityfoundation-10.3.1.tar.gz", hash = "sha256:414b13acabfae584729cd614e27247d250ec225d31140e8d971aa08536d6150c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Security = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-securityinterface" +version = "10.3.1" +description = "Wrappers for the framework SecurityInterface on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SecurityInterface-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:7a9bbca70e8a27bd79a0b8846f7d08b693dd309ff780f92f713fee57ff9d3ddf"}, + {file = "pyobjc_framework_SecurityInterface-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:b964ecbde276611c14fd70884ab9c08c4aae75633deda1a29813dbe42dc83dd6"}, + {file = "pyobjc_framework_SecurityInterface-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:8c2998c09767f0214891c553fadb8ec72a8273c95fca820c44cb11f3b0cdb8a4"}, + {file = "pyobjc_framework_SecurityInterface-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:d913d30d04c9f01679ead33c95ad53dade587995f48c778a6de4d7da239b43e3"}, + {file = "pyobjc_framework_securityinterface-10.3.1.tar.gz", hash = "sha256:cd25f342a2b53cbffd134443506d5e75c96ba7145135debb8932c1252d57269a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Security = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-sensitivecontentanalysis" +version = "10.3.1" +description = "Wrappers for the framework SensitiveContentAnalysis on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SensitiveContentAnalysis-10.3.1-py2.py3-none-any.whl", hash = "sha256:6b5cfe771a28300d766ff14ff81313fda946943d54a039d5574478a070933e03"}, + {file = "pyobjc_framework_sensitivecontentanalysis-10.3.1.tar.gz", hash = "sha256:ac8dd18d77ccc0bb4eb24839cf39da9981db64e53f52b09636e47bd7b3066f84"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-servicemanagement" +version = "10.3.1" +description = "Wrappers for the framework ServiceManagement on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ServiceManagement-10.3.1-py2.py3-none-any.whl", hash = "sha256:6b7ca0de9cf74439df0947aae29f5f31d58eeacb0ff55e1465faed540d31de4b"}, + {file = "pyobjc_framework_servicemanagement-10.3.1.tar.gz", hash = "sha256:d048a803ad34c997dcc99ba778fca9d91cc5adfa1d115202e4bf22d9b04fd92c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-sharedwithyou" +version = "10.3.1" +description = "Wrappers for the framework SharedWithYou on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SharedWithYou-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:175cb32c93c55511f86ccf02b1da2fdcbc2a0f92422d451ff5dd4a864b3f3faf"}, + {file = "pyobjc_framework_SharedWithYou-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:8a1ee78d6220e02e073c5fe6fea8f223ef870086c1afe60f346e7bb3dbdcb165"}, + {file = "pyobjc_framework_SharedWithYou-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:824d56ecf85dbaa938a2db42bf2f5a55a4e9f94019dee2dc90578040cc2bbd3c"}, + {file = "pyobjc_framework_SharedWithYou-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:bc37e1c86f460095085a5060149ca013d4dcb9b54337887bff86a2e07302c0f1"}, + {file = "pyobjc_framework_sharedwithyou-10.3.1.tar.gz", hash = "sha256:7e35b631bc77b040151515e4fee9c8f47bc313924fc3e5970e940f1343db039b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-SharedWithYouCore = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-sharedwithyoucore" +version = "10.3.1" +description = "Wrappers for the framework SharedWithYouCore on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SharedWithYouCore-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:b0fb4e84e15765d913d5383b61004b7ff9a637f198ec7c3dee07632f3a4e2b4c"}, + {file = "pyobjc_framework_SharedWithYouCore-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:9b480058016216e5a3715e3ff50f5430159ec4235dcd110141f53637f5dbb51d"}, + {file = "pyobjc_framework_SharedWithYouCore-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:17a5e29f832d395030b1ab5dfcf43dad2a9c0f917e6b443ac383dea06e3aa304"}, + {file = "pyobjc_framework_SharedWithYouCore-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:1e51f315b5b16b340a1a12d4a0f3244f1925f14c9e148ca4dfdcfad6baa7ee5a"}, + {file = "pyobjc_framework_sharedwithyoucore-10.3.1.tar.gz", hash = "sha256:e4768b7fdb18730e225bbebc9c9f9acfa7e44e648875816aff8c7e7f0e82afbf"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-shazamkit" +version = "10.3.1" +description = "Wrappers for the framework ShazamKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ShazamKit-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dac6a729d7fed5e96ac4cb2a7894c79002670b4c06559ef4795dfe8c6fa15dda"}, + {file = "pyobjc_framework_ShazamKit-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc77fde1503ec1f96d7b9a05ad784d29d94065732f0cfe089321be423e5045f3"}, + {file = "pyobjc_framework_ShazamKit-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:012560cab1997c1da6e19388b5192f68dcdf806c2f8d7bd1e66da37512d18b30"}, + {file = "pyobjc_framework_ShazamKit-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4356bdcb9ca50da243b9d79da27851b799483865072f7c86a8a9674300d31819"}, + {file = "pyobjc_framework_ShazamKit-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:26dafb6ac23c15d8cdee4c2083757aac29fad4f945b97f120f6351aed5cdab72"}, + {file = "pyobjc_framework_ShazamKit-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:95e4e717cb7a675544e08c53fb86d55715aa5d633b4ec35737fb02293098d368"}, + {file = "pyobjc_framework_ShazamKit-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:808bdfe5dcfc44d4c1df3ae3f384396908e9a1d3832e34408950db522859e91e"}, + {file = "pyobjc_framework_shazamkit-10.3.1.tar.gz", hash = "sha256:deef11a43e773b876df31eeadbfc447892fda0607e314ca2afb2c012284cfa32"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-social" +version = "10.3.1" +description = "Wrappers for the framework Social on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Social-10.3.1-py2.py3-none-any.whl", hash = "sha256:f83617c07db7c8bd15b3b9e0878ab2b6a286dcbd9a8c7f451da204f75db880e9"}, + {file = "pyobjc_framework_social-10.3.1.tar.gz", hash = "sha256:d1303cf3860ad02a8795c099e17888923505a9c45be407da50721a9a8a5b2efd"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-soundanalysis" +version = "10.3.1" +description = "Wrappers for the framework SoundAnalysis on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SoundAnalysis-10.3.1-py2.py3-none-any.whl", hash = "sha256:ef67207ff4045e5db37f017bdcd07d4b42464c86fe6c3b56524f6f22a9cde216"}, + {file = "pyobjc_framework_soundanalysis-10.3.1.tar.gz", hash = "sha256:faa533644231f99dbdc2fcc3ecb9181c5df4f4dc68d42856729214021c83c881"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-speech" +version = "10.3.1" +description = "Wrappers for the framework Speech on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Speech-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:07afd82d76b98b67a78c07098a814a0b862bcf00fc072d49d8da435202008a18"}, + {file = "pyobjc_framework_Speech-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:444994d062286ff2769e07425d511503b2047b381afad1d64c8517ef4e44d01f"}, + {file = "pyobjc_framework_Speech-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e7fad907f9c0c49c5272f316d20e66ba0415038203ca277381753b035c16061a"}, + {file = "pyobjc_framework_Speech-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:2294b60e1ab59b1340b820e6fee67766a959edd580d73e3b938f15653805d64c"}, + {file = "pyobjc_framework_speech-10.3.1.tar.gz", hash = "sha256:5b77b1d1ced0d1ad7244037b865dda2b83e8f9562d76d1e9fa4fea3b89e437b8"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-spritekit" +version = "10.3.1" +description = "Wrappers for the framework SpriteKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SpriteKit-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:31a5ce3ba471bf12f3e9ae3b5865d400e4e70ab4bb94317880783ee04c07b1f5"}, + {file = "pyobjc_framework_SpriteKit-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:af355eccc18437e0932e1b327817e8f50d194bfa471b65b4733185ba606ab792"}, + {file = "pyobjc_framework_SpriteKit-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c3fd6aaecd7abd6ebc83d4c37a22950d55b75911fdb99628b2677f44085a0212"}, + {file = "pyobjc_framework_SpriteKit-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a1f0537bc0331cca58cc50307f3b114ab8bfd51576df3038b6037353aa77085f"}, + {file = "pyobjc_framework_SpriteKit-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ffe7a07c8a3e17552e73b517b4fdcff7b2e6ca7e89b093a5daccfc285708216c"}, + {file = "pyobjc_framework_SpriteKit-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:e1d79aab298f7b42436b2468e37ff84718f1b8b579c1440de7002a55d5f8762e"}, + {file = "pyobjc_framework_SpriteKit-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cd08925baf8b3f511842f49fb5512ae56875a923d23254fcc022124788180d47"}, + {file = "pyobjc_framework_spritekit-10.3.1.tar.gz", hash = "sha256:2c11f35f48302f487c51ba8030f5cf79493a9dc0993dd901016ae4b8d8047c8b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-storekit" +version = "10.3.1" +description = "Wrappers for the framework StoreKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_StoreKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:f9c50a980846b236884504ad42690d49935bda3de5d779fca3cdfb16d43fa8d1"}, + {file = "pyobjc_framework_StoreKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:b3846b249a6fc5d26c80320098858978e0a16f46e98fc998075f16f539ac89fc"}, + {file = "pyobjc_framework_StoreKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c3575facbb3d238b8c9f3054c1422488414d89a42906dbcbfdbb47ef8be3da66"}, + {file = "pyobjc_framework_StoreKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:2b5848f0e08b42dd4dabe5822b436b904a697e923f529ccaad910dfb822b2b9d"}, + {file = "pyobjc_framework_storekit-10.3.1.tar.gz", hash = "sha256:913b4aad7dc31df7d8011c54a695da65cc57819f4b48c98abaed4e6d9ff7d323"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-symbols" +version = "10.3.1" +description = "Wrappers for the framework Symbols on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Symbols-10.3.1-py2.py3-none-any.whl", hash = "sha256:6e171da5af2612e186cc4cf896ad7f2672c021a1fc18bc8ef49b79c4c831202d"}, + {file = "pyobjc_framework_symbols-10.3.1.tar.gz", hash = "sha256:3e3f35ef3646b5f9c0653d9dbf5693cf87de3df04420cb2679dad74c75965d18"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-syncservices" +version = "10.3.1" +description = "Wrappers for the framework SyncServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SyncServices-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:aa98a38f59f230da7817dc08055c8049fa961193af16caa262c51e4ec8b5de20"}, + {file = "pyobjc_framework_SyncServices-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:9d3798cc745143d44da101bb0eb9d482326b761f48c3699251191e9c3656ee6c"}, + {file = "pyobjc_framework_SyncServices-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:97020a88d743a6f12ed3f72d062ab96712a7cc0e7b0293c7c5860c014002cc73"}, + {file = "pyobjc_framework_SyncServices-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:b9b7bc58b04654172968cdc1cfe74b43ca0ad2e03c24c7921234a57be2c22985"}, + {file = "pyobjc_framework_syncservices-10.3.1.tar.gz", hash = "sha256:1cd5e3eaf85a11996184afad1da47037cd921e302ccb35fe388b19f91a685669"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreData = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-systemconfiguration" +version = "10.3.1" +description = "Wrappers for the framework SystemConfiguration on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SystemConfiguration-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:200c4b7d3483e5ccb86d4d5783ace8c26d4b3f9130684280f30080d53f62d4c5"}, + {file = "pyobjc_framework_SystemConfiguration-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:403392b0e2085cf528547d468bc523fbee418381bb61446eb4aa1f9a1c8a8494"}, + {file = "pyobjc_framework_SystemConfiguration-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:f38a824261a30dc9961e13a7b9759dd0c77e1c7c4681e3c80c5751c560735289"}, + {file = "pyobjc_framework_SystemConfiguration-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4e8816524cbb6c6ea9e1c596fc9a16c91f2063eba394135be9437bdbd469e125"}, + {file = "pyobjc_framework_systemconfiguration-10.3.1.tar.gz", hash = "sha256:1bf6ffe98faa4e208bf594c857ba23cd56fe404bc579188ff53b704844d9c402"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-systemextensions" +version = "10.3.1" +description = "Wrappers for the framework SystemExtensions on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_SystemExtensions-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:b24edd33c71cb02a16bdd9b26d3a229a6b2a815c26a4c908b1b8b6cdf4f6c84a"}, + {file = "pyobjc_framework_SystemExtensions-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:e2a24501a782d2b6f7fa339619eb5c988db6b31a6043d029f40f67c54fd9399e"}, + {file = "pyobjc_framework_SystemExtensions-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:1cacd2356142307cf221d568f3e7adda654c28c90c223db3830746f4c2b12aea"}, + {file = "pyobjc_framework_SystemExtensions-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:6561876b2fd5c40620073fae9b924f2d8e0110e8573756ffc9521e4fbc825249"}, + {file = "pyobjc_framework_systemextensions-10.3.1.tar.gz", hash = "sha256:34412e75c95a585d222ea23efc3eba436210ec0345cec6c7dc78d16e027d03e1"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-threadnetwork" +version = "10.3.1" +description = "Wrappers for the framework ThreadNetwork on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_ThreadNetwork-10.3.1-py2.py3-none-any.whl", hash = "sha256:95ddbed8a114cc1f05db613bb53247465ec48ccaad2b56f5da466317808fc32b"}, + {file = "pyobjc_framework_threadnetwork-10.3.1.tar.gz", hash = "sha256:1038210a8e5dfa86aefd10894563913e767e95d1c1bd4333ae5f9c6cabbb3ce9"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-uniformtypeidentifiers" +version = "10.3.1" +description = "Wrappers for the framework UniformTypeIdentifiers on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_UniformTypeIdentifiers-10.3.1-py2.py3-none-any.whl", hash = "sha256:8bd1516ccec1807e2ad92a071242d83e9d1eda08ddbfae04dacc30d76c3d734c"}, + {file = "pyobjc_framework_uniformtypeidentifiers-10.3.1.tar.gz", hash = "sha256:1985fee7e1f1157db36f3c19ee0ad273677eeff10467f575086246bbeffcdf50"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-usernotifications" +version = "10.3.1" +description = "Wrappers for the framework UserNotifications on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_UserNotifications-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:d85c293e0520530ac7152b3f293c5606f0495b7727de331ef4e198278bf40e98"}, + {file = "pyobjc_framework_UserNotifications-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:0001bb25f15e6f8cac81bcb58cab8161a15a6fe41f6c475e8da364c913bdb090"}, + {file = "pyobjc_framework_UserNotifications-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:0bba49b0f290f5597b94a80608c785b61d61aa3885cdf05529862e47fe1cec67"}, + {file = "pyobjc_framework_UserNotifications-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:59294fa6110778de145c9299c220990d057a6a171d37ab5d8a6ab1780bf7888f"}, + {file = "pyobjc_framework_usernotifications-10.3.1.tar.gz", hash = "sha256:ddb5de88fb659c2241429b6408ddcabbfc0c2c9e4a7f5f543a6fab1c4953403b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-usernotificationsui" +version = "10.3.1" +description = "Wrappers for the framework UserNotificationsUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_UserNotificationsUI-10.3.1-py2.py3-none-any.whl", hash = "sha256:bc6cb92a6ac947e8fe9685f3c1964c5a9f98e576b936b0bbff8c528f47f976d2"}, + {file = "pyobjc_framework_usernotificationsui-10.3.1.tar.gz", hash = "sha256:80390b5361bb6014dc32d0afbf581280e7762a4f67460a736f461f613d397094"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-UserNotifications = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-videosubscriberaccount" +version = "10.3.1" +description = "Wrappers for the framework VideoSubscriberAccount on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_VideoSubscriberAccount-10.3.1-py2.py3-none-any.whl", hash = "sha256:4b489f0007dce8ea17f37316175dac2768cd173a4d4c7a1d5f87fb3991c1e518"}, + {file = "pyobjc_framework_videosubscriberaccount-10.3.1.tar.gz", hash = "sha256:f62509e976b805bc76ff5928444677ac542b52dd9f7781ac0731d7c4b22bed96"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-videotoolbox" +version = "10.3.1" +description = "Wrappers for the framework VideoToolbox on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_VideoToolbox-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:bc52aa91f568060e0087762f2a4d876bf7b683e5396779e93925252e26f0330b"}, + {file = "pyobjc_framework_VideoToolbox-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:3d20ea92b597f4758f24ed8e19f7a7a372faf6478d739e7cb7f7cd73d3e8617a"}, + {file = "pyobjc_framework_VideoToolbox-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:761e3cd05090f5d9e9fbae2c25e3f352f19aa86a0d02a1189b94ec5c4bc37111"}, + {file = "pyobjc_framework_VideoToolbox-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:7d4fb38f95e91f62d14b05fafcc6197775e9eaf4e5b698bc1fb313756f59b10d"}, + {file = "pyobjc_framework_videotoolbox-10.3.1.tar.gz", hash = "sha256:7ebc281523b2b37aff17ce6eabd0c81081864b3e3e4a83ae72b18fd70c57c521"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreMedia = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-virtualization" +version = "10.3.1" +description = "Wrappers for the framework Virtualization on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Virtualization-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:c046abcebf6a64a47ea50311f3e4aaae424dbac719e847cd15b375ebe99a51ed"}, + {file = "pyobjc_framework_Virtualization-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:dc14f6c3deaf367adff18b509e766dc78c4695a4cd76e4aad3ff4b1e207a4635"}, + {file = "pyobjc_framework_Virtualization-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:bd79c1bb45113957f24cbf8b6d0ff175361c52c97e326313ecd76cfa015f6cef"}, + {file = "pyobjc_framework_Virtualization-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:6e5e6645e31acd07d30b1607c4cdaf0ae0e4d8223471a8a089004c2deb6fdea5"}, + {file = "pyobjc_framework_virtualization-10.3.1.tar.gz", hash = "sha256:8348ddef18eb943d151e5b5977e4d410012ee2e3f6048c16f7cfe0c1a73536cb"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-vision" +version = "10.3.1" +description = "Wrappers for the framework Vision on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:dff3582678930461a0bb11bf070854d49f6944a851dc89edc63fac93c75ddf39"}, + {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:32626183c51674efb3b5738e2884c3fea37edca010117cf71bd72cb3c49c869a"}, + {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2473b346a112c51ac485184305bd13c402e0db45f2df3d277315bd49efba18e9"}, + {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4302e2c5f68c9667ecd4273809cbc4611af6368b123d69596e5b088f1b1aa16b"}, + {file = "pyobjc_framework_vision-10.3.1.tar.gz", hash = "sha256:aa071656d395afc2d624600a9f30d6a3344aa747bf37f613ff3972158c40881c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreML = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-webkit" +version = "10.3.1" +description = "Wrappers for the framework WebKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_WebKit-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:df52913e4c3cb77d4551d9848e30be01b82cace54cede850c88a7e0ab41a20a9"}, + {file = "pyobjc_framework_WebKit-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:207a7aa57817d3ab3fa033e42ab612f8c00521f13ff2871547c92cd94ed51f85"}, + {file = "pyobjc_framework_WebKit-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c0d4c1ba0fafae503a8df95e7b6bd4236951ba72508ec62809e37825f382c635"}, + {file = "pyobjc_framework_WebKit-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:c8e3334978a1bd927ea14ed73f56d6741561a69d31d082d2b23d1b48446917c8"}, + {file = "pyobjc_framework_webkit-10.3.1.tar.gz", hash = "sha256:7ad9f4eb91a6dff39848d9c2ab71f170aeab4b6396bcec8e5a780739f9be4222"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + [[package]] name = "pyparsing" version = "3.1.2" @@ -8675,4 +11525,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = ">=3.10,<4.0" -content-hash = "1d65657956b09d2246b27cc2e1ce3a6831b870e39dfd1d0523e43965a8991b96" +content-hash = "ad78afb40e930bd6cb40083294536d3b94e9e87bcfd2df7a07bb1142e74d0d5f" diff --git a/pyproject.toml b/pyproject.toml index 7ce502c..96de247 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -77,6 +77,8 @@ osascript = "^2020.12.3" websockets = "^12.0" realtime = "^2.0.1" trafilatura = "^1.12.1" +pyobjc = "^10.3.1" +pyobjc-framework-eventkit = "^10.3.1" [tool.poetry.group.test.dependencies] # https://python-poetry.org/docs/master/managing-dependencies/ coverage = { extras = ["toml"], version = ">=7.2.5" } diff --git a/src/dspygen/__init__.py b/src/dspygen/__init__.py index 7623f48..297291b 100644 --- a/src/dspygen/__init__.py +++ b/src/dspygen/__init__.py @@ -1,4 +1,15 @@ +import inject +import EventKit + # import inject # from dspygen.di_configure import configure # # inject.configure(configure) + +# Configure the injector +# def configure_injector(binder): +# event_store = EventKit.EKEventStore.alloc().init() +# binder.bind(EventKit.EKEventStore, event_store) +# binder.bind(EventKit.EKReminder, EventKit.EKReminder.reminderWithEventStore_(event_store)) +# +# inject.configure(configure_injector) \ No newline at end of file diff --git a/src/dspygen/experiments/cal_apps/__init__.py b/src/dspygen/experiments/cal_apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/dspygen/experiments/cal_apps/calendar_item.py b/src/dspygen/experiments/cal_apps/calendar_item.py index d77828a..cea07bf 100644 --- a/src/dspygen/experiments/cal_apps/calendar_item.py +++ b/src/dspygen/experiments/cal_apps/calendar_item.py @@ -3,11 +3,13 @@ from Foundation import NSDateComponents, NSURL, NSDate from datetime import datetime from typing import Optional, List +import inject class CalendarItemError(Exception): pass class CalendarItem: + @inject.autoparams() def __init__(self, event_store: EventKit.EKEventStore): self.event_store = event_store self.ek_item = None # This will be set by subclasses @@ -116,3 +118,5 @@ def save(self) -> None: def remove(self) -> None: raise NotImplementedError("Subclasses must implement the remove method") + + diff --git a/src/dspygen/experiments/cal_apps/calendar_set.py b/src/dspygen/experiments/cal_apps/calendar_set.py new file mode 100644 index 0000000..ab5dcdf --- /dev/null +++ b/src/dspygen/experiments/cal_apps/calendar_set.py @@ -0,0 +1,40 @@ +import objc +import EventKit +from Foundation import NSDateComponents, NSCalendar + +# Initialize the Event Store +event_store = EventKit.EKEventStore.alloc().init() + +# Request access to reminders +def request_access_callback(granted, error): + if not granted: + raise PermissionError("Access to reminders denied.") + +event_store.requestAccessToEntityType_completion_(EventKit.EKEntityTypeReminder, request_access_callback) + +# Get the default calendar for new reminders +default_calendar = event_store.defaultCalendarForNewReminders() + +# Create a new reminder +reminder = EventKit.EKReminder.reminderWithEventStore_(event_store) + +# Set the reminder properties using the appropriate setter methods or properties +reminder.setTitle_("New Reminder") +reminder.setNotes_("This is a test reminder.") +reminder.setCalendar_(default_calendar) # Set the calendar + +# Set the due date using NSDateComponents +due_date = NSDateComponents.alloc().init() +due_date.setYear_(2024) +due_date.setMonth_(8) +due_date.setDay_(28) +due_date.setHour_(7) + +reminder.setDueDateComponents_(due_date) + +# Save the reminder +success, error = event_store.saveReminder_commit_error_(reminder, True, objc.nil) +if not success: + raise Exception("Failed to save reminder:", error) + +print(f"Reminder '{reminder.title()}' set in calendar '{reminder.calendar().title()}'") \ No newline at end of file diff --git a/src/dspygen/experiments/cal_apps/eventkit_mocks.py b/src/dspygen/experiments/cal_apps/eventkit_mocks.py new file mode 100644 index 0000000..7d4955e --- /dev/null +++ b/src/dspygen/experiments/cal_apps/eventkit_mocks.py @@ -0,0 +1,165 @@ +from datetime import datetime, timedelta +from typing import List, Optional +from unittest.mock import MagicMock + +class MockNSDate: + @classmethod + def date(cls): + return cls() + + def timeIntervalSince1970(self): + return datetime.now().timestamp() + +class MockNSDateComponents: + def __init__(self, year=2023, month=1, day=1, hour=0, minute=0): + self._year = year + self._month = month + self._day = day + self._hour = hour + self._minute = minute + + def year(self): return self._year + def month(self): return self._month + def day(self): return self._day + def hour(self): return self._hour + def minute(self): return self._minute + + def setYear_(self, value): self._year = value + def setMonth_(self, value): self._month = value + def setDay_(self, value): self._day = value + def setHour_(self, value): self._hour = value + def setMinute_(self, value): self._minute = value + +class MockEKAlarm: + @classmethod + def alarmWithRelativeOffset_(cls, offset): + alarm = cls() + alarm.relativeOffset = offset + return alarm + +class MockEKRecurrenceRule: + def __init__(self, frequency, interval, end): + self.frequency = frequency + self.interval = interval + self.recurrenceEnd = end + +class MockEKCalendar: + def __init__(self, title): + self._title = title + + def title(self): + return self._title + +class MockEKReminder: + @classmethod + def reminderWithEventStore_(cls, event_store): + return cls(event_store.reminderStore) # Use reminderStore here + + def __init__(self, reminder_store): + self.reminder_store = reminder_store + self.title = "" + self.calendar = None + self.location = "" + self.notes = "" + self.url = None + self.alarms = [] + self.recurrenceRules = [] + self.completed = False + self.priority = 0 + self.dueDateComponents = None + self.creationDate = MockNSDate() + self.lastModifiedDate = MockNSDate() + self._identifier = f"reminder-{id(self)}" + + def setTitle_(self, title): + self.title = title + + def setCalendar_(self, calendar): + self.calendar = calendar + + def setLocation_(self, location): + self.location = location + + def setNotes_(self, notes): + self.notes = notes + + def setURL_(self, url): + self.url = url + + def addAlarm_(self, alarm): + self.alarms.append(alarm) + + def removeAlarm_(self, alarm): + self.alarms.remove(alarm) + + def addRecurrenceRule_(self, rule): + self.recurrenceRules = [rule] # Only one rule is supported + + def removeRecurrenceRule_(self, rule): + self.recurrenceRules = [] + + def setCompleted_(self, completed): + self.completed = completed + + def setPriority_(self, priority): + self.priority = priority + + def setDueDateComponents_(self, components): + self.dueDateComponents = components + + def calendarItemIdentifier(self): + return self._identifier + + def calendarItemExternalIdentifier(self): + return self._identifier + + def isCompleted(self): + return self.completed + + def hasRecurrenceRules(self): + return len(self.recurrenceRules) > 0 + +class MockEKEventStore: + def __init__(self): + self.reminders = {} + self.default_calendar = MockEKCalendar("Default") + self.reminderStore = self # Add this line + + def saveReminder_commit_error_(self, reminder, commit, error): + self.reminders[reminder.calendarItemIdentifier()] = reminder + return True, None + + def removeReminder_commit_error_(self, reminder, commit, error): + del self.reminders[reminder.calendarItemIdentifier()] + return True, None + + def calendarItemWithIdentifier_(self, identifier): + return self.reminders.get(identifier) + + def defaultCalendarForNewReminders(self): + return self.default_calendar + + def requestAccessToEntityType_completion_(self, entity_type, completion): + completion(True, None) + +class MockEventKit: + EKEventStore = MockEKEventStore + EKReminder = MockEKReminder + EKAlarm = MockEKAlarm + EKRecurrenceRule = MockEKRecurrenceRule + NSDate = MockNSDate + EKEntityTypeReminder = 1 + EKRecurrenceFrequencyDaily = 0 + + @classmethod + def patch(cls): + return patch.multiple( + 'EventKit', + EKEventStore=cls.EKEventStore, + EKReminder=cls.EKReminder, + EKAlarm=cls.EKAlarm, + EKRecurrenceRule=cls.EKRecurrenceRule, + NSDate=cls.NSDate, + EKEntityTypeReminder=cls.EKEntityTypeReminder, + EKRecurrenceFrequencyDaily=cls.EKRecurrenceFrequencyDaily + ) diff --git a/src/dspygen/experiments/cal_apps/reminder.py b/src/dspygen/experiments/cal_apps/reminder.py index dd54202..f97a20a 100644 --- a/src/dspygen/experiments/cal_apps/reminder.py +++ b/src/dspygen/experiments/cal_apps/reminder.py @@ -1,8 +1,11 @@ +from __future__ import annotations + import objc import EventKit from Foundation import NSDateComponents from datetime import datetime, timedelta from typing import Optional +import inject from dspygen.experiments.cal_apps.calendar_item import CalendarItemError, CalendarItem @@ -10,14 +13,18 @@ class ReminderError(CalendarItemError): pass + class Reminder(CalendarItem): - def __init__(self, event_store: EventKit.EKEventStore): + @inject.autoparams() + def __init__(self, event_store: EventKit.EKEventStore, ek_reminder: EventKit.EKReminder = EventKit.EKReminder): super().__init__(event_store) - self.ek_item = EventKit.EKReminder.reminderWithEventStore_(event_store) + self.ek_item = ek_reminder @classmethod - def create(cls, event_store: EventKit.EKEventStore, title: str, calendar: EventKit.EKCalendar) -> 'Reminder': - reminder = cls(event_store) + @inject.autoparams() + def create(cls, event_store: EventKit.EKEventStore, title: str, calendar: EventKit.EKCalendar, + ek_reminder: EventKit.EKReminder = EventKit.EKReminder): + reminder = cls(event_store, ek_reminder) reminder.title = title reminder.calendar = calendar return reminder @@ -95,8 +102,9 @@ def remove(self) -> None: if not success: raise ReminderError(f"Failed to remove reminder: {error}") +@inject.autoparams() def create_reminder(event_store: EventKit.EKEventStore, title: str, calendar: EventKit.EKCalendar, - due_date: Optional[datetime] = None) -> Reminder: + due_date: Optional[datetime] = None): reminder = Reminder.create(event_store, title, calendar) if due_date: reminder.due_date = due_date @@ -104,7 +112,8 @@ def create_reminder(event_store: EventKit.EKEventStore, title: str, calendar: Ev print(f"Reminder '{title}' created successfully.") return reminder -def read_reminder(event_store: EventKit.EKEventStore, reminder_id: str) -> Reminder: +@inject.autoparams() +def read_reminder(event_store: EventKit.EKEventStore, reminder_id: str): ek_reminder = event_store.calendarItemWithIdentifier_(reminder_id) if ek_reminder and isinstance(ek_reminder, EventKit.EKReminder): reminder = Reminder(event_store) @@ -128,9 +137,8 @@ def update_reminder(reminder: Reminder, title: Optional[str] = None, due_date: O def delete_reminder(reminder: Reminder) -> None: reminder.remove() -def main(): - event_store = EventKit.EKEventStore.alloc().init() - +@inject.autoparams() +def main(event_store: EventKit.EKEventStore): def request_access_callback(granted, error): if not granted: raise PermissionError("Access to reminders denied.") @@ -140,7 +148,7 @@ def request_access_callback(granted, error): default_calendar = event_store.defaultCalendarForNewReminders() # Create a new reminder - new_reminder = create_reminder(event_store, "Test Reminder", default_calendar, datetime.now() + timedelta(days=1)) + new_reminder = create_reminder(title="Test Reminder", calendar=default_calendar, due_date=datetime.now() + timedelta(days=1)) # Test calendar item functions print(f"Calendar Item Identifier: {new_reminder.calendar_item_identifier}") diff --git a/src/dspygen/experiments/cal_apps/reminder_app.py b/src/dspygen/experiments/cal_apps/reminder_app.py new file mode 100644 index 0000000..a49a070 --- /dev/null +++ b/src/dspygen/experiments/cal_apps/reminder_app.py @@ -0,0 +1,57 @@ +import EventKit +from typing import List, Optional +from dspygen.experiments.cal_apps import ReminderList + +class ReminderApp: + def __init__(self): + self.event_store = EventKit.EKEventStore.new() + self.lists: List[ReminderList] = [] + self.selected_list: Optional[ReminderList] = None + self._load_existing_lists() + + def _load_existing_lists(self): + calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) + for calendar in calendars: + self.lists.append(ReminderList(calendar.title, self.event_store)) + + def request_access(self): + """Request access to reminders.""" + def callback(granted, error): + if not granted: + raise PermissionError("Access to reminders denied.") + self.event_store.requestAccessToEntityType_completion_(EventKit.EKEntityTypeReminder, callback) + + def add_list(self, reminder_list: ReminderList): + self.lists.append(reminder_list) + + def remove_list(self, reminder_list: ReminderList): + if reminder_list.ek_calendar: + self.event_store.removeCalendar_commit_error_(reminder_list.ek_calendar, True, None) + self.lists.remove(reminder_list) + + def select_list(self, list_name: str): + for lst in self.lists: + if lst.name == list_name: + self.selected_list = lst + return + raise ValueError(f"List '{list_name}' not found") + + def add_reminder_to_selected(self, reminder): + if self.selected_list: + self.selected_list.add_reminder(reminder) + else: + raise ValueError("No list selected") + + def get_reminders(self, completed: Optional[bool] = None): + if self.selected_list: + return self.selected_list.get_reminders(completed) + else: + raise ValueError("No list selected") + + def clear_completed_reminders(self): + if self.selected_list: + completed_reminders = self.selected_list.get_reminders(completed=True) + for reminder in completed_reminders: + self.selected_list.remove_reminder(reminder) + else: + raise ValueError("No list selected") \ No newline at end of file diff --git a/src/dspygen/experiments/cal_apps/reminder_list.py b/src/dspygen/experiments/cal_apps/reminder_list.py new file mode 100644 index 0000000..874f46e --- /dev/null +++ b/src/dspygen/experiments/cal_apps/reminder_list.py @@ -0,0 +1,55 @@ +import EventKit +from typing import List, Optional +from dspygen.experiments.cal_apps import Reminder + +class ReminderList: + def __init__(self, name: str, event_store): + self.name = name + self.event_store = event_store + self.ek_calendar = None + self.reminders: List[Reminder] = [] + self._load_ek_calendar() + + def _load_ek_calendar(self): + calendars = self.event_store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) + for calendar in calendars: + if calendar.title == self.name: + self.ek_calendar = calendar + break + if not self.ek_calendar: + self.ek_calendar = EventKit.EKCalendar.calendarForEntityType_eventStore_(EventKit.EKEntityTypeReminder, self.event_store) + # Instead of setting the title directly, we'll pass it to the calendar creation method + self.ek_calendar = EventKit.EKCalendar.calendarWithTitle_forEntityType_eventStore_(self.name, EventKit.EKEntityTypeReminder, self.event_store) + self.ek_calendar.source = self.event_store.defaultCalendarForNewReminders().source + self.event_store.saveCalendar_commit_error_(self.ek_calendar, True, None) + + def add_reminder(self, reminder: Reminder): + reminder.save(self.event_store) + self.reminders.append(reminder) + + def remove_reminder(self, reminder: Reminder): + reminder.remove(self.event_store) + self.reminders.remove(reminder) + + def get_reminders(self, completed: Optional[bool] = None) -> List[Reminder]: + predicate = self.event_store.predicateForRemindersInCalendars_([self.ek_calendar]) + reminders = [] + def callback(results): + for ek_reminder in results: + if completed is None or ek_reminder.completed == completed: + reminders.append(Reminder( + title=ek_reminder.title, + due_date=self._format_due_date(ek_reminder.dueDateComponents), + flagged=ek_reminder.flagged, + completed=ek_reminder.completed, + ek_reminder=ek_reminder + )) + self.reminders = reminders + self.event_store.fetchRemindersMatchingPredicate_completion_(predicate, callback) + return self.reminders + + @staticmethod + def _format_due_date(date_components): + if date_components: + return f"{date_components.year}-{date_components.month:02d}-{date_components.day:02d} {date_components.hour:02d}:{date_components.minute:02d}" + return None \ No newline at end of file diff --git a/src/dspygen/experiments/event_kit/__init__.py b/src/dspygen/experiments/event_kit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/dspygen/experiments/event_kit/ekevent_store_wrapper.py b/src/dspygen/experiments/event_kit/ekevent_store_wrapper.py new file mode 100644 index 0000000..4a5fc26 --- /dev/null +++ b/src/dspygen/experiments/event_kit/ekevent_store_wrapper.py @@ -0,0 +1,2078 @@ + +class EKEventStoreWrapper: + def __init__(self): + import EventKit + self._ekeventstore = EventKit.EKEventStore.alloc().init() + + def cxx_destruct(self, *args, **kwargs): + return self._ekeventstore.cxx_destruct(*args, **kwargs) + + def caml_type(self, *args, **kwargs): + return self._ekeventstore.CAMLType(*args, **kwargs) + + def caml_type_for_key_(self, *args, **kwargs): + return self._ekeventstore.CAMLTypeForKey_(*args, **kwargs) + + def caml_type_supported_for_key_(self, *args, **kwargs): + return self._ekeventstore.CAMLTypeSupportedForKey_(*args, **kwargs) + + def c_a_add_value_multiplied_by_(self, *args, **kwargs): + return self._ekeventstore.CA_addValue_multipliedBy_(*args, **kwargs) + + def c_a_archiving_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.CA_archivingValueForKey_(*args, **kwargs) + + def c_a_copy_numeric_value_(self, *args, **kwargs): + return self._ekeventstore.CA_copyNumericValue_(*args, **kwargs) + + def c_a_copy_render_value(self, *args, **kwargs): + return self._ekeventstore.CA_copyRenderValue(*args, **kwargs) + + def c_a_copy_render_value_with_colorspace_(self, *args, **kwargs): + return self._ekeventstore.CA_copyRenderValueWithColorspace_(*args, **kwargs) + + def c_a_distance_to_value_(self, *args, **kwargs): + return self._ekeventstore.CA_distanceToValue_(*args, **kwargs) + + def c_a_interpolate_value_by_fraction_(self, *args, **kwargs): + return self._ekeventstore.CA_interpolateValue_byFraction_(*args, **kwargs) + + def c_a_interpolate_values___interpolator_(self, *args, **kwargs): + return self._ekeventstore.CA_interpolateValues___interpolator_(*args, **kwargs) + + def c_a_numeric_value_count(self, *args, **kwargs): + return self._ekeventstore.CA_numericValueCount(*args, **kwargs) + + def c_a_prepare_render_value(self, *args, **kwargs): + return self._ekeventstore.CA_prepareRenderValue(*args, **kwargs) + + def c_a_round_to_integer_from_value_(self, *args, **kwargs): + return self._ekeventstore.CA_roundToIntegerFromValue_(*args, **kwargs) + + def c_a_validate_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.CA_validateValue_forKey_(*args, **kwargs) + + def c_k_assign_to_container_with_id_(self, *args, **kwargs): + return self._ekeventstore.CKAssignToContainerWithID_(*args, **kwargs) + + def c_k_description(self, *args, **kwargs): + return self._ekeventstore.CKDescription(*args, **kwargs) + + def c_k_description_class_name(self, *args, **kwargs): + return self._ekeventstore.CKDescriptionClassName(*args, **kwargs) + + def c_k_description_properties_with_public_private_should_expand_(self, *args, **kwargs): + return self._ekeventstore.CKDescriptionPropertiesWithPublic_private_shouldExpand_(*args, **kwargs) + + def c_k_description_redact_avoid_short_description_(self, *args, **kwargs): + return self._ekeventstore.CKDescriptionRedact_avoidShortDescription_(*args, **kwargs) + + def c_k_description_should_print_pointer(self, *args, **kwargs): + return self._ekeventstore.CKDescriptionShouldPrintPointer(*args, **kwargs) + + def c_k_expanded_description(self, *args, **kwargs): + return self._ekeventstore.CKExpandedDescription(*args, **kwargs) + + def c_k_object_description_redact_(self, *args, **kwargs): + return self._ekeventstore.CKObjectDescriptionRedact_(*args, **kwargs) + + def c_k_object_description_redact_avoid_short_description_(self, *args, **kwargs): + return self._ekeventstore.CKObjectDescriptionRedact_avoidShortDescription_(*args, **kwargs) + + def c_k_properties_description(self, *args, **kwargs): + return self._ekeventstore.CKPropertiesDescription(*args, **kwargs) + + def c_k_redacted_description(self, *args, **kwargs): + return self._ekeventstore.CKRedactedDescription(*args, **kwargs) + + def c_k_unredacted_description(self, *args, **kwargs): + return self._ekeventstore.CKUnredactedDescription(*args, **kwargs) + + def cal_class_name(self, *args, **kwargs): + return self._ekeventstore.CalClassName(*args, **kwargs) + + def i_c_s_data_for_calendar_items_options_(self, *args, **kwargs): + return self._ekeventstore.ICSDataForCalendarItems_options_(*args, **kwargs) + + def i_c_s_data_for_calendar_items_prevent_line_folding_(self, *args, **kwargs): + return self._ekeventstore.ICSDataForCalendarItems_preventLineFolding_(*args, **kwargs) + + def n_s_lifeguard_autorelease(self, *args, **kwargs): + return self._ekeventstore.NSLifeguard_autorelease(*args, **kwargs) + + def n_s_representation(self, *args, **kwargs): + return self._ekeventstore.NSRepresentation(*args, **kwargs) + + def n_s_observation_for_key_path_options_block_(self, *args, **kwargs): + return self._ekeventstore.NS_observationForKeyPath_options_block_(*args, **kwargs) + + def n_s_observation_for_key_paths_options_block_(self, *args, **kwargs): + return self._ekeventstore.NS_observationForKeyPaths_options_block_(*args, **kwargs) + + def r_b_s_is_x_p_c_object(self, *args, **kwargs): + return self._ekeventstore.RBSIsXPCObject(*args, **kwargs) + + def s_c_n_u_i_name(self, *args, **kwargs): + return self._ekeventstore.SCNUI_name(*args, **kwargs) + + def s_c_n_setup_display_link_with_queue_screen_policy_(self, *args, **kwargs): + return self._ekeventstore.SCN_setupDisplayLinkWithQueue_screen_policy_(*args, **kwargs) + + def v_n_compute_device_performance_score(self, *args, **kwargs): + return self._ekeventstore.VNComputeDevicePerformanceScore(*args, **kwargs) + + def v_n_compute_device_type(self, *args, **kwargs): + return self._ekeventstore.VNComputeDeviceType(*args, **kwargs) + + def ab_case_insensitive_is_equal_(self, *args, **kwargs): + return self._ekeventstore.abCaseInsensitiveIsEqual_(*args, **kwargs) + + def ab_dictionary_with_values_for_key_paths_(self, *args, **kwargs): + return self._ekeventstore.abDictionaryWithValuesForKeyPaths_(*args, **kwargs) + + def ab_remove_observer_ignoring_exceptions_for_key_path_(self, *args, **kwargs): + return self._ekeventstore.abRemoveObserverIgnoringExceptions_forKeyPath_(*args, **kwargs) + + def accept_suggested_event_(self, *args, **kwargs): + return self._ekeventstore.acceptSuggestedEvent_(*args, **kwargs) + + def accept_suggested_event_place_on_calendar_(self, *args, **kwargs): + return self._ekeventstore.acceptSuggestedEvent_placeOnCalendar_(*args, **kwargs) + + def access_granted_for_entity_type_(self, *args, **kwargs): + return self._ekeventstore.accessGrantedForEntityType_(*args, **kwargs) + + def accessibility_add_temporary_child_(self, *args, **kwargs): + return self._ekeventstore.accessibilityAddTemporaryChild_(*args, **kwargs) + + def accessibility_allows_overridden_attributes_when_ignored(self, *args, **kwargs): + return self._ekeventstore.accessibilityAllowsOverriddenAttributesWhenIgnored(*args, **kwargs) + + def accessibility_array_attribute_count_(self, *args, **kwargs): + return self._ekeventstore.accessibilityArrayAttributeCount_(*args, **kwargs) + + def accessibility_array_attribute_values_index_max_count_(self, *args, **kwargs): + return self._ekeventstore.accessibilityArrayAttributeValues_index_maxCount_(*args, **kwargs) + + def accessibility_attribute_value_for_parameter_(self, *args, **kwargs): + return self._ekeventstore.accessibilityAttributeValue_forParameter_(*args, **kwargs) + + def accessibility_attributed_value_for_string_attribute_attribute_for_parameter_(self, *args, **kwargs): + return self._ekeventstore.accessibilityAttributedValueForStringAttributeAttributeForParameter_(*args, **kwargs) + + def accessibility_braille_map_render_region(self, *args, **kwargs): + return self._ekeventstore.accessibilityBrailleMapRenderRegion(*args, **kwargs) + + def accessibility_braille_map_renderer(self, *args, **kwargs): + return self._ekeventstore.accessibilityBrailleMapRenderer(*args, **kwargs) + + def accessibility_decode_overridden_attributes_(self, *args, **kwargs): + return self._ekeventstore.accessibilityDecodeOverriddenAttributes_(*args, **kwargs) + + def accessibility_encode_overridden_attributes_(self, *args, **kwargs): + return self._ekeventstore.accessibilityEncodeOverriddenAttributes_(*args, **kwargs) + + def accessibility_index_for_child_u_i_element_attribute_for_parameter_(self, *args, **kwargs): + return self._ekeventstore.accessibilityIndexForChildUIElementAttributeForParameter_(*args, **kwargs) + + def accessibility_index_of_child_(self, *args, **kwargs): + return self._ekeventstore.accessibilityIndexOfChild_(*args, **kwargs) + + def accessibility_overridden_attributes(self, *args, **kwargs): + return self._ekeventstore.accessibilityOverriddenAttributes(*args, **kwargs) + + def accessibility_parameterized_attribute_names(self, *args, **kwargs): + return self._ekeventstore.accessibilityParameterizedAttributeNames(*args, **kwargs) + + def accessibility_perform_show_menu_of_child_(self, *args, **kwargs): + return self._ekeventstore.accessibilityPerformShowMenuOfChild_(*args, **kwargs) + + def accessibility_presenter_process_identifier(self, *args, **kwargs): + return self._ekeventstore.accessibilityPresenterProcessIdentifier(*args, **kwargs) + + def accessibility_remove_temporary_child_(self, *args, **kwargs): + return self._ekeventstore.accessibilityRemoveTemporaryChild_(*args, **kwargs) + + def accessibility_replace_range_with_text_(self, *args, **kwargs): + return self._ekeventstore.accessibilityReplaceRange_withText_(*args, **kwargs) + + def accessibility_set_override_value_for_attribute_(self, *args, **kwargs): + return self._ekeventstore.accessibilitySetOverrideValue_forAttribute_(*args, **kwargs) + + def accessibility_set_presenter_process_identifier_(self, *args, **kwargs): + return self._ekeventstore.accessibilitySetPresenterProcessIdentifier_(*args, **kwargs) + + def accessibility_should_send_notification_(self, *args, **kwargs): + return self._ekeventstore.accessibilityShouldSendNotification_(*args, **kwargs) + + def accessibility_should_use_unique_id(self, *args, **kwargs): + return self._ekeventstore.accessibilityShouldUseUniqueId(*args, **kwargs) + + def accessibility_supports_custom_element_data(self, *args, **kwargs): + return self._ekeventstore.accessibilitySupportsCustomElementData(*args, **kwargs) + + def accessibility_supports_notifications(self, *args, **kwargs): + return self._ekeventstore.accessibilitySupportsNotifications(*args, **kwargs) + + def accessibility_supports_overridden_attributes(self, *args, **kwargs): + return self._ekeventstore.accessibilitySupportsOverriddenAttributes(*args, **kwargs) + + def accessibility_temporary_children(self, *args, **kwargs): + return self._ekeventstore.accessibilityTemporaryChildren(*args, **kwargs) + + def accessibility_visible_area(self, *args, **kwargs): + return self._ekeventstore.accessibilityVisibleArea(*args, **kwargs) + + def acknowledge_notifications_error_(self, *args, **kwargs): + return self._ekeventstore.acknowledgeNotifications_error_(*args, **kwargs) + + def acquire_default_calendar_for_new_events(self, *args, **kwargs): + return self._ekeventstore.acquireDefaultCalendarForNewEvents(*args, **kwargs) + + def acquire_default_calendar_for_new_reminders(self, *args, **kwargs): + return self._ekeventstore.acquireDefaultCalendarForNewReminders(*args, **kwargs) + + def add_chained_observers_(self, *args, **kwargs): + return self._ekeventstore.addChainedObservers_(*args, **kwargs) + + def add_exchange_delegate_with_name_email_address_to_source_completion_(self, *args, **kwargs): + return self._ekeventstore.addExchangeDelegateWithName_emailAddress_toSource_completion_(*args, **kwargs) + + def add_object_to_both_sides_of_relationship_with_key_(self, *args, **kwargs): + return self._ekeventstore.addObject_toBothSidesOfRelationshipWithKey_(*args, **kwargs) + + def add_object_to_property_with_key_(self, *args, **kwargs): + return self._ekeventstore.addObject_toPropertyWithKey_(*args, **kwargs) + + def add_observation_transformer_(self, *args, **kwargs): + return self._ekeventstore.addObservationTransformer_(*args, **kwargs) + + def add_observer_block_(self, *args, **kwargs): + return self._ekeventstore.addObserverBlock_(*args, **kwargs) + + def add_observer_(self, *args, **kwargs): + return self._ekeventstore.addObserver_(*args, **kwargs) + + def add_observer_for_key_path_options_context_(self, *args, **kwargs): + return self._ekeventstore.addObserver_forKeyPath_options_context_(*args, **kwargs) + + def add_observer_for_observable_key_path_(self, *args, **kwargs): + return self._ekeventstore.addObserver_forObservableKeyPath_(*args, **kwargs) + + def address_validation_status_(self, *args, **kwargs): + return self._ekeventstore.addressValidationStatus_(*args, **kwargs) + + def alarm_occurrences_between_start_date_end_date_in_calendars_completion_(self, *args, **kwargs): + return self._ekeventstore.alarmOccurrencesBetweenStartDate_endDate_inCalendars_completion_(*args, **kwargs) + + def alarm_with_external_id_(self, *args, **kwargs): + return self._ekeventstore.alarmWithExternalID_(*args, **kwargs) + + def alarm_with_u_u_id_(self, *args, **kwargs): + return self._ekeventstore.alarmWithUUID_(*args, **kwargs) + + def all_events_with_unique_id_occurrence_date_(self, *args, **kwargs): + return self._ekeventstore.allEventsWithUniqueId_occurrenceDate_(*args, **kwargs) + + def all_property_keys(self, *args, **kwargs): + return self._ekeventstore.allPropertyKeys(*args, **kwargs) + + def allow_access_to_events_only(self, *args, **kwargs): + return self._ekeventstore.allowAccessToEventsOnly(*args, **kwargs) + + def allow_delegate_sources(self, *args, **kwargs): + return self._ekeventstore.allowDelegateSources(*args, **kwargs) + + def allows_birthday_modifications(self, *args, **kwargs): + return self._ekeventstore.allowsBirthdayModifications(*args, **kwargs) + + def allows_weak_reference(self, *args, **kwargs): + return self._ekeventstore.allowsWeakReference(*args, **kwargs) + + def analytics_send_event_appending_client_bundle_id_to_payload_(self, *args, **kwargs): + return self._ekeventstore.analyticsSendEvent_appendingClientBundleIDToPayload_(*args, **kwargs) + + def attachment_with_u_u_id_(self, *args, **kwargs): + return self._ekeventstore.attachmentWithUUID_(*args, **kwargs) + + def attribute_keys(self, *args, **kwargs): + return self._ekeventstore.attributeKeys(*args, **kwargs) + + def auto_content_accessing_proxy(self, *args, **kwargs): + return self._ekeventstore.autoContentAccessingProxy(*args, **kwargs) + + def automatic_location_geocoding_allowed(self, *args, **kwargs): + return self._ekeventstore.automaticLocationGeocodingAllowed(*args, **kwargs) + + def autorelease(self, *args, **kwargs): + return self._ekeventstore.autorelease(*args, **kwargs) + + def awake_after_using_coder_(self, *args, **kwargs): + return self._ekeventstore.awakeAfterUsingCoder_(*args, **kwargs) + + def awake_from_nib(self, *args, **kwargs): + return self._ekeventstore.awakeFromNib(*args, **kwargs) + + def backup_database_to_destination_with_format_error_(self, *args, **kwargs): + return self._ekeventstore.backupDatabaseToDestination_withFormat_error_(*args, **kwargs) + + def begin_cal_d_a_v_server_simulation_with_hostname_(self, *args, **kwargs): + return self._ekeventstore.beginCalDAVServerSimulationWithHostname_(*args, **kwargs) + + def bind_to_object_with_key_path_options_(self, *args, **kwargs): + return self._ekeventstore.bind_toObject_withKeyPath_options_(*args, **kwargs) + + def birthday_calendar_enabled(self, *args, **kwargs): + return self._ekeventstore.birthdayCalendarEnabled(*args, **kwargs) + + def birthday_calendar_version(self, *args, **kwargs): + return self._ekeventstore.birthdayCalendarVersion(*args, **kwargs) + + def bool_value_safe(self, *args, **kwargs): + return self._ekeventstore.boolValueSafe(*args, **kwargs) + + def bool_value_safe_(self, *args, **kwargs): + return self._ekeventstore.boolValueSafe_(*args, **kwargs) + + def bs_is_plistable_type(self, *args, **kwargs): + return self._ekeventstore.bs_isPlistableType(*args, **kwargs) + + def bs_secure_encoded(self, *args, **kwargs): + return self._ekeventstore.bs_secureEncoded(*args, **kwargs) + + def cache_constraints_for_object_with_c_a_d_object_id_(self, *args, **kwargs): + return self._ekeventstore.cacheConstraints_forObjectWithCADObjectID_(*args, **kwargs) + + def cache_validation_status_for_address_status_(self, *args, **kwargs): + return self._ekeventstore.cacheValidationStatusForAddress_status_(*args, **kwargs) + + def cached_constraints_for_calendar_(self, *args, **kwargs): + return self._ekeventstore.cachedConstraintsForCalendar_(*args, **kwargs) + + def cached_constraints_for_event_or_source_with_c_a_d_object_id_(self, *args, **kwargs): + return self._ekeventstore.cachedConstraintsForEventOrSourceWithCADObjectID_(*args, **kwargs) + + def cached_constraints_for_event_(self, *args, **kwargs): + return self._ekeventstore.cachedConstraintsForEvent_(*args, **kwargs) + + def cached_constraints_for_reminder_(self, *args, **kwargs): + return self._ekeventstore.cachedConstraintsForReminder_(*args, **kwargs) + + def cached_constraints_for_source_(self, *args, **kwargs): + return self._ekeventstore.cachedConstraintsForSource_(*args, **kwargs) + + def calendar_item_with_identifier_(self, *args, **kwargs): + return self._ekeventstore.calendarItemWithIdentifier_(*args, **kwargs) + + def calendar_items_with_external_identifier_(self, *args, **kwargs): + return self._ekeventstore.calendarItemsWithExternalIdentifier_(*args, **kwargs) + + def calendar_items_with_external_identifier_in_calendars_(self, *args, **kwargs): + return self._ekeventstore.calendarItemsWithExternalIdentifier_inCalendars_(*args, **kwargs) + + def calendar_items_with_unique_identifier_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.calendarItemsWithUniqueIdentifier_inCalendar_(*args, **kwargs) + + def calendar_sources_and_defaults_queue(self, *args, **kwargs): + return self._ekeventstore.calendarSourcesAndDefaultsQueue(*args, **kwargs) + + def calendar_with_c_a_d_id_(self, *args, **kwargs): + return self._ekeventstore.calendarWithCADID_(*args, **kwargs) + + def calendar_with_external_id_(self, *args, **kwargs): + return self._ekeventstore.calendarWithExternalID_(*args, **kwargs) + + def calendar_with_external_u_r_i_(self, *args, **kwargs): + return self._ekeventstore.calendarWithExternalURI_(*args, **kwargs) + + def calendar_with_id_(self, *args, **kwargs): + return self._ekeventstore.calendarWithID_(*args, **kwargs) + + def calendar_with_identifier_(self, *args, **kwargs): + return self._ekeventstore.calendarWithIdentifier_(*args, **kwargs) + + def calendar_with_unique_id_(self, *args, **kwargs): + return self._ekeventstore.calendarWithUniqueID_(*args, **kwargs) + + def calendars(self, *args, **kwargs): + return self._ekeventstore.calendars(*args, **kwargs) + + def calendars_for_entity_type_(self, *args, **kwargs): + return self._ekeventstore.calendarsForEntityType_(*args, **kwargs) + + def calendars_for_entity_type_in_source_(self, *args, **kwargs): + return self._ekeventstore.calendarsForEntityType_inSource_(*args, **kwargs) + + def calendars_with_identifiers_(self, *args, **kwargs): + return self._ekeventstore.calendarsWithIdentifiers_(*args, **kwargs) + + def calendars_with_object_ids_(self, *args, **kwargs): + return self._ekeventstore.calendarsWithObjectIDs_(*args, **kwargs) + + def can_modify_calendar_database(self, *args, **kwargs): + return self._ekeventstore.canModifyCalendarDatabase(*args, **kwargs) + + def can_modify_suggested_event_calendar(self, *args, **kwargs): + return self._ekeventstore.canModifySuggestedEventCalendar(*args, **kwargs) + + def cancel_fetch_request_(self, *args, **kwargs): + return self._ekeventstore.cancelFetchRequest_(*args, **kwargs) + + def changed_object_ids_since_token_result_handler_(self, *args, **kwargs): + return self._ekeventstore.changedObjectIDsSinceToken_resultHandler_(*args, **kwargs) + + def changes_since_sequence_token_completion_(self, *args, **kwargs): + return self._ekeventstore.changesSinceSequenceToken_completion_(*args, **kwargs) + + def ck_bind_in_statement_at_index_(self, *args, **kwargs): + return self._ekeventstore.ck_bindInStatement_atIndex_(*args, **kwargs) + + def cksqlcs_append_s_q_l_constant_value_to_string_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_appendSQLConstantValueToString_(*args, **kwargs) + + def cksqlcs_archived_object_binding_value_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_archivedObjectBindingValue_(*args, **kwargs) + + def cksqlcs_bind_archived_object_index_db_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_bindArchivedObject_index_db_(*args, **kwargs) + + def cksqlcs_bind_blob_index_db_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_bindBlob_index_db_(*args, **kwargs) + + def cksqlcs_bind_double_index_db_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_bindDouble_index_db_(*args, **kwargs) + + def cksqlcs_bind_int64_index_db_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_bindInt64_index_db_(*args, **kwargs) + + def cksqlcs_bind_text_index_db_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_bindText_index_db_(*args, **kwargs) + + def cksqlcs_blob_binding_value_destructor_error_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_blobBindingValue_destructor_error_(*args, **kwargs) + + def cksqlcs_double_binding_value_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_doubleBindingValue_(*args, **kwargs) + + def cksqlcs_int64_binding_value_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_int64BindingValue_(*args, **kwargs) + + def cksqlcs_text_binding_value_destructor_error_(self, *args, **kwargs): + return self._ekeventstore.cksqlcs_textBindingValue_destructor_error_(*args, **kwargs) + + def class_code(self, *args, **kwargs): + return self._ekeventstore.classCode(*args, **kwargs) + + def class_description(self, *args, **kwargs): + return self._ekeventstore.classDescription(*args, **kwargs) + + def class_description_for_destination_key_(self, *args, **kwargs): + return self._ekeventstore.classDescriptionForDestinationKey_(*args, **kwargs) + + def class_for_archiver(self, *args, **kwargs): + return self._ekeventstore.classForArchiver(*args, **kwargs) + + def class_for_coder(self, *args, **kwargs): + return self._ekeventstore.classForCoder(*args, **kwargs) + + def class_for_keyed_archiver(self, *args, **kwargs): + return self._ekeventstore.classForKeyedArchiver(*args, **kwargs) + + def class_for_port_coder(self, *args, **kwargs): + return self._ekeventstore.classForPortCoder(*args, **kwargs) + + def class_name(self, *args, **kwargs): + return self._ekeventstore.className(*args, **kwargs) + + def class__(self, *args, **kwargs): + return self._ekeventstore.class__(*args, **kwargs) + + def clear_properties(self, *args, **kwargs): + return self._ekeventstore.clearProperties(*args, **kwargs) + + def clear_superfluous_changes(self, *args, **kwargs): + return self._ekeventstore.clearSuperfluousChanges(*args, **kwargs) + + def client_can_modify_sources(self, *args, **kwargs): + return self._ekeventstore.clientCanModifySources(*args, **kwargs) + + def closest_cached_occurrence_to_date_for_event_object_id_(self, *args, **kwargs): + return self._ekeventstore.closestCachedOccurrenceToDate_forEventObjectID_(*args, **kwargs) + + def closest_cached_occurrence_to_date_for_event_object_id_prefers_forward_search_(self, *args, **kwargs): + return self._ekeventstore.closestCachedOccurrenceToDate_forEventObjectID_prefersForwardSearch_(*args, **kwargs) + + def coerce_value_for_scripting_properties_(self, *args, **kwargs): + return self._ekeventstore.coerceValueForScriptingProperties_(*args, **kwargs) + + def coerce_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.coerceValue_forKey_(*args, **kwargs) + + def color_string_for_new_calendar(self, *args, **kwargs): + return self._ekeventstore.colorStringForNewCalendar(*args, **kwargs) + + def combine_event_calendars_with_reminder_calendars_(self, *args, **kwargs): + return self._ekeventstore.combineEventCalendars_withReminderCalendars_(*args, **kwargs) + + def combined_reminder_and_event_sources(self, *args, **kwargs): + return self._ekeventstore.combinedReminderAndEventSources(*args, **kwargs) + + def commit_objects_error_(self, *args, **kwargs): + return self._ekeventstore.commitObjects_error_(*args, **kwargs) + + def commit_with_rollback_for_new_clients_(self, *args, **kwargs): + return self._ekeventstore.commitWithRollbackForNewClients_(*args, **kwargs) + + def commit_with_rollback_(self, *args, **kwargs): + return self._ekeventstore.commitWithRollback_(*args, **kwargs) + + def commit_(self, *args, **kwargs): + return self._ekeventstore.commit_(*args, **kwargs) + + def confirm_suggested_event_(self, *args, **kwargs): + return self._ekeventstore.confirmSuggestedEvent_(*args, **kwargs) + + def conforms_to_protocol_(self, *args, **kwargs): + return self._ekeventstore.conformsToProtocol_(*args, **kwargs) + + def connection(self, *args, **kwargs): + return self._ekeventstore.connection(*args, **kwargs) + + def constraints_cache_queue(self, *args, **kwargs): + return self._ekeventstore.constraintsCacheQueue(*args, **kwargs) + + def consume_all_changes_up_to_token_(self, *args, **kwargs): + return self._ekeventstore.consumeAllChangesUpToToken_(*args, **kwargs) + + def consume_all_changes_up_to_token_except_error_(self, *args, **kwargs): + return self._ekeventstore.consumeAllChangesUpToToken_except_error_(*args, **kwargs) + + def copy(self, *args, **kwargs): + return self._ekeventstore.copy(*args, **kwargs) + + def copy_c_g_color_for_new_calendar(self, *args, **kwargs): + return self._ekeventstore.copyCGColorForNewCalendar(*args, **kwargs) + + def copy_scripting_value_for_key_with_properties_(self, *args, **kwargs): + return self._ekeventstore.copyScriptingValue_forKey_withProperties_(*args, **kwargs) + + def count_of_events_from_start_date_to_end_date_(self, *args, **kwargs): + return self._ekeventstore.countOfEventsFromStartDate_toEndDate_(*args, **kwargs) + + def create_key_value_binding_for_key_type_mask_(self, *args, **kwargs): + return self._ekeventstore.createKeyValueBindingForKey_typeMask_(*args, **kwargs) + + def creator_team_identifier_for_event_(self, *args, **kwargs): + return self._ekeventstore.creatorTeamIdentifierForEvent_(*args, **kwargs) + + def daemon_restarted(self, *args, **kwargs): + return self._ekeventstore.daemonRestarted(*args, **kwargs) + + def data_protection_observer(self, *args, **kwargs): + return self._ekeventstore.dataProtectionObserver(*args, **kwargs) + + def database(self, *args, **kwargs): + return self._ekeventstore.database(*args, **kwargs) + + def database_path(self, *args, **kwargs): + return self._ekeventstore.databasePath(*args, **kwargs) + + def database_restore_generation_changed_externally_(self, *args, **kwargs): + return self._ekeventstore.databaseRestoreGenerationChangedExternally_(*args, **kwargs) + + def db_changed_queue(self, *args, **kwargs): + return self._ekeventstore.dbChangedQueue(*args, **kwargs) + + def db_stats_by_source(self, *args, **kwargs): + return self._ekeventstore.dbStatsBySource(*args, **kwargs) + + def dealloc(self, *args, **kwargs): + return self._ekeventstore.dealloc(*args, **kwargs) + + def debug_description(self, *args, **kwargs): + return self._ekeventstore.debugDescription(*args, **kwargs) + + def default_all_day_alarm(self, *args, **kwargs): + return self._ekeventstore.defaultAllDayAlarm(*args, **kwargs) + + def default_all_day_alarm_offset(self, *args, **kwargs): + return self._ekeventstore.defaultAllDayAlarmOffset(*args, **kwargs) + + def default_calendar_for_new_events(self, *args, **kwargs): + return self._ekeventstore.defaultCalendarForNewEvents(*args, **kwargs) + + def default_calendar_for_new_events_in_delegate_source_(self, *args, **kwargs): + return self._ekeventstore.defaultCalendarForNewEventsInDelegateSource_(*args, **kwargs) + + def default_calendar_for_new_reminders(self, *args, **kwargs): + return self._ekeventstore.defaultCalendarForNewReminders(*args, **kwargs) + + def default_local_calendar(self, *args, **kwargs): + return self._ekeventstore.defaultLocalCalendar(*args, **kwargs) + + def default_timed_alarm(self, *args, **kwargs): + return self._ekeventstore.defaultTimedAlarm(*args, **kwargs) + + def default_timed_alarm_offset(self, *args, **kwargs): + return self._ekeventstore.defaultTimedAlarmOffset(*args, **kwargs) + + def delegate_sources(self, *args, **kwargs): + return self._ekeventstore.delegateSources(*args, **kwargs) + + def delegate_sources_for_source_(self, *args, **kwargs): + return self._ekeventstore.delegateSourcesForSource_(*args, **kwargs) + + def delete_calendar_for_entity_type_error_(self, *args, **kwargs): + return self._ekeventstore.deleteCalendar_forEntityType_error_(*args, **kwargs) + + def delete_draft_of_event_with_occurrence_id_(self, *args, **kwargs): + return self._ekeventstore.deleteDraftOfEventWithOccurrenceID_(*args, **kwargs) + + def delete_suggested_event_(self, *args, **kwargs): + return self._ekeventstore.deleteSuggestedEvent_(*args, **kwargs) + + def deleted_object_ids(self, *args, **kwargs): + return self._ekeventstore.deletedObjectIDs(*args, **kwargs) + + def deleted_object_ids_pending_commit(self, *args, **kwargs): + return self._ekeventstore.deletedObjectIDsPendingCommit(*args, **kwargs) + + def deleted_objects(self, *args, **kwargs): + return self._ekeventstore.deletedObjects(*args, **kwargs) + + def description(self, *args, **kwargs): + return self._ekeventstore.description(*args, **kwargs) + + def description_at_indent_(self, *args, **kwargs): + return self._ekeventstore.descriptionAtIndent_(*args, **kwargs) + + def dictionary_with_values_for_keys_(self, *args, **kwargs): + return self._ekeventstore.dictionaryWithValuesForKeys_(*args, **kwargs) + + def did_change_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.didChangeValueForKey_(*args, **kwargs) + + def did_change_value_for_key_with_set_mutation_using_objects_(self, *args, **kwargs): + return self._ekeventstore.didChangeValueForKey_withSetMutation_usingObjects_(*args, **kwargs) + + def did_change_values_at_indexes_for_key_(self, *args, **kwargs): + return self._ekeventstore.didChange_valuesAtIndexes_forKey_(*args, **kwargs) + + def do_events_have_occurrences_after_date_(self, *args, **kwargs): + return self._ekeventstore.doEvents_haveOccurrencesAfterDate_(*args, **kwargs) + + def does_contain_(self, *args, **kwargs): + return self._ekeventstore.doesContain_(*args, **kwargs) + + def does_not_recognize_selector_(self, *args, **kwargs): + return self._ekeventstore.doesNotRecognizeSelector_(*args, **kwargs) + + def double_value_safe(self, *args, **kwargs): + return self._ekeventstore.doubleValueSafe(*args, **kwargs) + + def double_value_safe_(self, *args, **kwargs): + return self._ekeventstore.doubleValueSafe_(*args, **kwargs) + + def enable_source_sync_status_changes(self, *args, **kwargs): + return self._ekeventstore.enableSourceSyncStatusChanges(*args, **kwargs) + + def encode_with_caml_writer_(self, *args, **kwargs): + return self._ekeventstore.encodeWithCAMLWriter_(*args, **kwargs) + + def end_cal_d_a_v_server_simulation_(self, *args, **kwargs): + return self._ekeventstore.endCalDAVServerSimulation_(*args, **kwargs) + + def ensure_loaded_properties_for_objects_(self, *args, **kwargs): + return self._ekeventstore.ensureLoadedProperties_forObjects_(*args, **kwargs) + + def entity_name(self, *args, **kwargs): + return self._ekeventstore.entityName(*args, **kwargs) + + def enumerate_events_matching_predicate_using_block_(self, *args, **kwargs): + return self._ekeventstore.enumerateEventsMatchingPredicate_usingBlock_(*args, **kwargs) + + def event_access_level(self, *args, **kwargs): + return self._ekeventstore.eventAccessLevel(*args, **kwargs) + + def event_for_object_id_occurrence_date_(self, *args, **kwargs): + return self._ekeventstore.eventForObjectID_occurrenceDate_(*args, **kwargs) + + def event_for_object_id_occurrence_date_check_valid_(self, *args, **kwargs): + return self._ekeventstore.eventForObjectID_occurrenceDate_checkValid_(*args, **kwargs) + + def event_for_u_id_occurrence_date_(self, *args, **kwargs): + return self._ekeventstore.eventForUID_occurrenceDate_(*args, **kwargs) + + def event_for_u_id_occurrence_date_check_valid_(self, *args, **kwargs): + return self._ekeventstore.eventForUID_occurrenceDate_checkValid_(*args, **kwargs) + + def event_notification_count(self, *args, **kwargs): + return self._ekeventstore.eventNotificationCount(*args, **kwargs) + + def event_notification_count_excluding_unchecked_calendars_expanded_(self, *args, **kwargs): + return self._ekeventstore.eventNotificationCountExcludingUncheckedCalendars_expanded_(*args, **kwargs) + + def event_notification_count_expanded_(self, *args, **kwargs): + return self._ekeventstore.eventNotificationCountExpanded_(*args, **kwargs) + + def event_notification_count_for_source_excluding_delegate_sources_filtered_by_shows_notifications_flag_exclude_object_ids_(self, *args, **kwargs): + return self._ekeventstore.eventNotificationCountForSource_excludingDelegateSources_filteredByShowsNotificationsFlag_excludeObjectIDs_(*args, **kwargs) + + def event_notification_count_for_source_excluding_delegate_sources_filtered_by_shows_notifications_flag_exclude_object_ids_expanded_(self, *args, **kwargs): + return self._ekeventstore.eventNotificationCountForSource_excludingDelegateSources_filteredByShowsNotificationsFlag_excludeObjectIDs_expanded_(*args, **kwargs) + + def event_notifications(self, *args, **kwargs): + return self._ekeventstore.eventNotifications(*args, **kwargs) + + def event_notifications_after_date_(self, *args, **kwargs): + return self._ekeventstore.eventNotificationsAfterDate_(*args, **kwargs) + + def event_notifications_after_date_excluding_unchecked_calendars_filtered_by_shows_notifications_flag_earliest_expiring_notification_(self, *args, **kwargs): + return self._ekeventstore.eventNotificationsAfterDate_excludingUncheckedCalendars_filteredByShowsNotificationsFlag_earliestExpiringNotification_(*args, **kwargs) + + def event_notifications_after_date_filtered_by_shows_notifications_flag_earliest_expiring_notification_(self, *args, **kwargs): + return self._ekeventstore.eventNotificationsAfterDate_filteredByShowsNotificationsFlag_earliestExpiringNotification_(*args, **kwargs) + + def event_notifications_excluding_unchecked_calendars_filtered_by_shows_notifications_flag_earliest_expiring_notification_(self, *args, **kwargs): + return self._ekeventstore.eventNotificationsExcludingUncheckedCalendars_filteredByShowsNotificationsFlag_earliestExpiringNotification_(*args, **kwargs) + + def event_object_ids_matching_predicate_(self, *args, **kwargs): + return self._ekeventstore.eventObjectIDsMatchingPredicate_(*args, **kwargs) + + def event_source_for_reminder_source_(self, *args, **kwargs): + return self._ekeventstore.eventSourceForReminderSource_(*args, **kwargs) + + def event_source_id_for_reminder_source_id_(self, *args, **kwargs): + return self._ekeventstore.eventSourceIDForReminderSourceID_(*args, **kwargs) + + def event_source_id_to_reminder_source_id_mapping(self, *args, **kwargs): + return self._ekeventstore.eventSourceIDToReminderSourceIDMapping(*args, **kwargs) + + def event_source_map(self, *args, **kwargs): + return self._ekeventstore.eventSourceMap(*args, **kwargs) + + def event_sources(self, *args, **kwargs): + return self._ekeventstore.eventSources(*args, **kwargs) + + def event_store_identifier(self, *args, **kwargs): + return self._ekeventstore.eventStoreIdentifier(*args, **kwargs) + + def event_with_external_u_r_i_(self, *args, **kwargs): + return self._ekeventstore.eventWithExternalURI_(*args, **kwargs) + + def event_with_identifier_(self, *args, **kwargs): + return self._ekeventstore.eventWithIdentifier_(*args, **kwargs) + + def event_with_recurrence_identifier_(self, *args, **kwargs): + return self._ekeventstore.eventWithRecurrenceIdentifier_(*args, **kwargs) + + def event_with_u_u_id_(self, *args, **kwargs): + return self._ekeventstore.eventWithUUID_(*args, **kwargs) + + def event_with_u_u_id_is_in_calendars_(self, *args, **kwargs): + return self._ekeventstore.eventWithUUID_isInCalendars_(*args, **kwargs) + + def event_with_u_u_id_occurrence_date_(self, *args, **kwargs): + return self._ekeventstore.eventWithUUID_occurrenceDate_(*args, **kwargs) + + def event_with_unique_id_(self, *args, **kwargs): + return self._ekeventstore.eventWithUniqueId_(*args, **kwargs) + + def event_with_unique_id_occurrence_date_(self, *args, **kwargs): + return self._ekeventstore.eventWithUniqueId_occurrenceDate_(*args, **kwargs) + + def event_with_unique_identifier_(self, *args, **kwargs): + return self._ekeventstore.eventWithUniqueIdentifier_(*args, **kwargs) + + def events_exist_on_calendar_(self, *args, **kwargs): + return self._ekeventstore.eventsExistOnCalendar_(*args, **kwargs) + + def events_marked_schedule_agent_client_exist_on_calendar_(self, *args, **kwargs): + return self._ekeventstore.eventsMarkedScheduleAgentClientExistOnCalendar_(*args, **kwargs) + + def events_matching_predicate_(self, *args, **kwargs): + return self._ekeventstore.eventsMatchingPredicate_(*args, **kwargs) + + def events_with_errors_per_source_id(self, *args, **kwargs): + return self._ekeventstore.eventsWithErrorsPerSourceID(*args, **kwargs) + + def events_with_external_identifier_in_calendars_(self, *args, **kwargs): + return self._ekeventstore.eventsWithExternalIdentifier_inCalendars_(*args, **kwargs) + + def events_with_identifiers_(self, *args, **kwargs): + return self._ekeventstore.eventsWithIdentifiers_(*args, **kwargs) + + def events_with_u_u_id_to_occurrence_date_map_in_calendars_(self, *args, **kwargs): + return self._ekeventstore.eventsWithUUIDToOccurrenceDateMap_inCalendars_(*args, **kwargs) + + def exposed_bindings(self, *args, **kwargs): + return self._ekeventstore.exposedBindings(*args, **kwargs) + + def fetch_changed_object_ids_since_token_result_handler_(self, *args, **kwargs): + return self._ekeventstore.fetchChangedObjectIDsSinceToken_resultHandler_(*args, **kwargs) + + def fetch_changed_object_ids_(self, *args, **kwargs): + return self._ekeventstore.fetchChangedObjectIDs_(*args, **kwargs) + + def fetch_event_counts_in_range_in_calendars_exclusion_options_completion_(self, *args, **kwargs): + return self._ekeventstore.fetchEventCountsInRange_inCalendars_exclusionOptions_completion_(*args, **kwargs) + + def fetch_events_matching_predicate_result_handler_(self, *args, **kwargs): + return self._ekeventstore.fetchEventsMatchingPredicate_resultHandler_(*args, **kwargs) + + def fetch_granted_delegates_for_source_results_(self, *args, **kwargs): + return self._ekeventstore.fetchGrantedDelegatesForSource_results_(*args, **kwargs) + + def fetch_reminders_matching_predicate_completion_(self, *args, **kwargs): + return self._ekeventstore.fetchRemindersMatchingPredicate_completion_(*args, **kwargs) + + def fetch_storage_usage(self, *args, **kwargs): + return self._ekeventstore.fetchStorageUsage(*args, **kwargs) + + def finalize(self, *args, **kwargs): + return self._ekeventstore.finalize(*args, **kwargs) + + def finish_observing(self, *args, **kwargs): + return self._ekeventstore.finishObserving(*args, **kwargs) + + def flush_key_bindings(self, *args, **kwargs): + return self._ekeventstore.flushKeyBindings(*args, **kwargs) + + def forward_invocation_(self, *args, **kwargs): + return self._ekeventstore.forwardInvocation_(*args, **kwargs) + + def forwarding_target_for_selector_(self, *args, **kwargs): + return self._ekeventstore.forwardingTargetForSelector_(*args, **kwargs) + + def fp__ivar_description_for_class_(self, *args, **kwargs): + return self._ekeventstore.fp__ivarDescriptionForClass_(*args, **kwargs) + + def fp__method_description_for_class_(self, *args, **kwargs): + return self._ekeventstore.fp__methodDescriptionForClass_(*args, **kwargs) + + def fp_ivar_description(self, *args, **kwargs): + return self._ekeventstore.fp_ivarDescription(*args, **kwargs) + + def fp_method_description(self, *args, **kwargs): + return self._ekeventstore.fp_methodDescription(*args, **kwargs) + + def fp_short_method_description(self, *args, **kwargs): + return self._ekeventstore.fp_shortMethodDescription(*args, **kwargs) + + def future_scheduled_events_exist_on_calendar_(self, *args, **kwargs): + return self._ekeventstore.futureScheduledEventsExistOnCalendar_(*args, **kwargs) + + def get_maps_with_reminder_source_map_event_source_map_(self, *args, **kwargs): + return self._ekeventstore.getMapsWithReminderSourceMap_eventSourceMap_(*args, **kwargs) + + def get_subscribed_calendars_source_create_if_needed_with_error_(self, *args, **kwargs): + return self._ekeventstore.getSubscribedCalendarsSourceCreateIfNeededWithError_(*args, **kwargs) + + def handle_external_database_change_notification_(self, *args, **kwargs): + return self._ekeventstore.handleExternalDatabaseChangeNotification_(*args, **kwargs) + + def handle_query_with_unbound_key_(self, *args, **kwargs): + return self._ekeventstore.handleQueryWithUnboundKey_(*args, **kwargs) + + def handle_take_value_for_unbound_key_(self, *args, **kwargs): + return self._ekeventstore.handleTakeValue_forUnboundKey_(*args, **kwargs) + + def has_immediately_eligible_travel_events(self, *args, **kwargs): + return self._ekeventstore.hasImmediatelyEligibleTravelEvents(*args, **kwargs) + + def hash(self, *args, **kwargs): + return self._ekeventstore.hash(*args, **kwargs) + + def hide_calendars_from_notification_center_error_(self, *args, **kwargs): + return self._ekeventstore.hideCalendarsFromNotificationCenter_error_(*args, **kwargs) + + def if_set_value_if_non_nil_for_key_(self, *args, **kwargs): + return self._ekeventstore.if_setValueIfNonNil_forKey_(*args, **kwargs) + + def if_set_value_if_y_e_s_for_key_(self, *args, **kwargs): + return self._ekeventstore.if_setValueIfYES_forKey_(*args, **kwargs) + + def ignore_external_changes(self, *args, **kwargs): + return self._ekeventstore.ignoreExternalChanges(*args, **kwargs) + + def image_cache(self, *args, **kwargs): + return self._ekeventstore.imageCache(*args, **kwargs) + + def implements_selector_(self, *args, **kwargs): + return self._ekeventstore.implementsSelector_(*args, **kwargs) + + def import_events_with_external_ids_from_i_c_s_data_into_calendars_options_batch_size_(self, *args, **kwargs): + return self._ekeventstore.importEventsWithExternalIDs_fromICSData_intoCalendars_options_batchSize_(*args, **kwargs) + + def import_i_c_s_data_into_calendar_options_(self, *args, **kwargs): + return self._ekeventstore.importICSData_intoCalendar_options_(*args, **kwargs) + + def import_i_c_s_data_into_calendars_options_(self, *args, **kwargs): + return self._ekeventstore.importICSData_intoCalendars_options_(*args, **kwargs) + + def import_i_c_s_into_calendar_options_(self, *args, **kwargs): + return self._ekeventstore.importICS_intoCalendar_options_(*args, **kwargs) + + def import_v_c_s_data_into_calendars_error_(self, *args, **kwargs): + return self._ekeventstore.importVCSData_intoCalendars_error_(*args, **kwargs) + + def inbox_replied_section_has_content(self, *args, **kwargs): + return self._ekeventstore.inboxRepliedSectionHasContent(*args, **kwargs) + + def inbox_replied_section_items(self, *args, **kwargs): + return self._ekeventstore.inboxRepliedSectionItems(*args, **kwargs) + + def info_for_binding_(self, *args, **kwargs): + return self._ekeventstore.infoForBinding_(*args, **kwargs) + + def init(self, *args, **kwargs): + return self._ekeventstore.init(*args, **kwargs) + + def init_with_access_to_entity_types_(self, *args, **kwargs): + return self._ekeventstore.initWithAccessToEntityTypes_(*args, **kwargs) + + def init_with_birthday_calendar_modifications(self, *args, **kwargs): + return self._ekeventstore.initWithBirthdayCalendarModifications(*args, **kwargs) + + def init_with_e_k_options_(self, *args, **kwargs): + return self._ekeventstore.initWithEKOptions_(*args, **kwargs) + + def init_with_e_k_options_path_change_tracking_client_id_enable_property_modification_logging_allow_delegate_sources_(self, *args, **kwargs): + return self._ekeventstore.initWithEKOptions_path_changeTrackingClientId_enablePropertyModificationLogging_allowDelegateSources_(*args, **kwargs) + + def init_with_e_k_options_path_change_tracking_client_id_enable_property_modification_logging_allow_delegate_sources_allowed_source_identifiers_(self, *args, **kwargs): + return self._ekeventstore.initWithEKOptions_path_changeTrackingClientId_enablePropertyModificationLogging_allowDelegateSources_allowedSourceIdentifiers_(*args, **kwargs) + + def init_with_e_k_options_path_conainer_provider_change_tracking_client_id_enable_property_modification_logging_allow_delegate_sources_allowed_source_identifiers_(self, *args, **kwargs): + return self._ekeventstore.initWithEKOptions_path_conainerProvider_changeTrackingClientId_enablePropertyModificationLogging_allowDelegateSources_allowedSourceIdentifiers_(*args, **kwargs) + + def init_with_e_k_options_path_sources_(self, *args, **kwargs): + return self._ekeventstore.initWithEKOptions_path_sources_(*args, **kwargs) + + def init_with_options_path_(self, *args, **kwargs): + return self._ekeventstore.initWithOptions_path_(*args, **kwargs) + + def init_with_options_path_allow_delegate_sources_(self, *args, **kwargs): + return self._ekeventstore.initWithOptions_path_allowDelegateSources_(*args, **kwargs) + + def init_with_options_path_change_tracking_client_id_enable_property_modification_logging_allow_delegate_sources_(self, *args, **kwargs): + return self._ekeventstore.initWithOptions_path_changeTrackingClientId_enablePropertyModificationLogging_allowDelegateSources_(*args, **kwargs) + + def init_with_sources_(self, *args, **kwargs): + return self._ekeventstore.initWithSources_(*args, **kwargs) + + def init_with_store_type_options_(self, *args, **kwargs): + return self._ekeventstore.initWithStoreType_options_(*args, **kwargs) + + def initialize_e_k_event_store_plus_reminders(self, *args, **kwargs): + return self._ekeventstore.initializeEKEventStorePlusReminders(*args, **kwargs) + + def insert_suggested_event_calendar(self, *args, **kwargs): + return self._ekeventstore.insertSuggestedEventCalendar(*args, **kwargs) + + def insert_value_at_index_in_property_with_key_(self, *args, **kwargs): + return self._ekeventstore.insertValue_atIndex_inPropertyWithKey_(*args, **kwargs) + + def insert_value_in_property_with_key_(self, *args, **kwargs): + return self._ekeventstore.insertValue_inPropertyWithKey_(*args, **kwargs) + + def inserted_object_ids(self, *args, **kwargs): + return self._ekeventstore.insertedObjectIDs(*args, **kwargs) + + def inserted_objects(self, *args, **kwargs): + return self._ekeventstore.insertedObjects(*args, **kwargs) + + def inserted_persistent_object_with_entity_name_(self, *args, **kwargs): + return self._ekeventstore.insertedPersistentObjectWithEntityName_(*args, **kwargs) + + def int64_value_safe(self, *args, **kwargs): + return self._ekeventstore.int64ValueSafe(*args, **kwargs) + + def int64_value_safe_(self, *args, **kwargs): + return self._ekeventstore.int64ValueSafe_(*args, **kwargs) + + def invalidate_reminder_source_maps(self, *args, **kwargs): + return self._ekeventstore.invalidateReminderSourceMaps(*args, **kwargs) + + def inverse_for_relationship_key_(self, *args, **kwargs): + return self._ekeventstore.inverseForRelationshipKey_(*args, **kwargs) + + def is_case_insensitive_like_(self, *args, **kwargs): + return self._ekeventstore.isCaseInsensitiveLike_(*args, **kwargs) + + def is_current_process_creator_of_event_(self, *args, **kwargs): + return self._ekeventstore.isCurrentProcessCreatorOfEvent_(*args, **kwargs) + + def is_data_protected(self, *args, **kwargs): + return self._ekeventstore.isDataProtected(*args, **kwargs) + + def is_equal_to_(self, *args, **kwargs): + return self._ekeventstore.isEqualTo_(*args, **kwargs) + + def is_equal_(self, *args, **kwargs): + return self._ekeventstore.isEqual_(*args, **kwargs) + + def is_fault(self, *args, **kwargs): + return self._ekeventstore.isFault(*args, **kwargs) + + def is_greater_than_or_equal_to_(self, *args, **kwargs): + return self._ekeventstore.isGreaterThanOrEqualTo_(*args, **kwargs) + + def is_greater_than_(self, *args, **kwargs): + return self._ekeventstore.isGreaterThan_(*args, **kwargs) + + def is_kind_of_class_(self, *args, **kwargs): + return self._ekeventstore.isKindOfClass_(*args, **kwargs) + + def is_less_than_or_equal_to_(self, *args, **kwargs): + return self._ekeventstore.isLessThanOrEqualTo_(*args, **kwargs) + + def is_less_than_(self, *args, **kwargs): + return self._ekeventstore.isLessThan_(*args, **kwargs) + + def is_like_(self, *args, **kwargs): + return self._ekeventstore.isLike_(*args, **kwargs) + + def is_member_of_class_(self, *args, **kwargs): + return self._ekeventstore.isMemberOfClass_(*args, **kwargs) + + def is_n_s_array__(self, *args, **kwargs): + return self._ekeventstore.isNSArray__(*args, **kwargs) + + def is_n_s_c_f_constant_string__(self, *args, **kwargs): + return self._ekeventstore.isNSCFConstantString__(*args, **kwargs) + + def is_n_s_data__(self, *args, **kwargs): + return self._ekeventstore.isNSData__(*args, **kwargs) + + def is_n_s_date__(self, *args, **kwargs): + return self._ekeventstore.isNSDate__(*args, **kwargs) + + def is_n_s_dictionary__(self, *args, **kwargs): + return self._ekeventstore.isNSDictionary__(*args, **kwargs) + + def is_n_s_number__(self, *args, **kwargs): + return self._ekeventstore.isNSNumber__(*args, **kwargs) + + def is_n_s_object__(self, *args, **kwargs): + return self._ekeventstore.isNSObject__(*args, **kwargs) + + def is_n_s_ordered_set__(self, *args, **kwargs): + return self._ekeventstore.isNSOrderedSet__(*args, **kwargs) + + def is_n_s_set__(self, *args, **kwargs): + return self._ekeventstore.isNSSet__(*args, **kwargs) + + def is_n_s_string__(self, *args, **kwargs): + return self._ekeventstore.isNSString__(*args, **kwargs) + + def is_n_s_time_zone__(self, *args, **kwargs): + return self._ekeventstore.isNSTimeZone__(*args, **kwargs) + + def is_n_s_value__(self, *args, **kwargs): + return self._ekeventstore.isNSValue__(*args, **kwargs) + + def is_not_equal_to_(self, *args, **kwargs): + return self._ekeventstore.isNotEqualTo_(*args, **kwargs) + + def is_null(self, *args, **kwargs): + return self._ekeventstore.isNull(*args, **kwargs) + + def is_object_inserted_(self, *args, **kwargs): + return self._ekeventstore.isObjectInserted_(*args, **kwargs) + + def is_proxy(self, *args, **kwargs): + return self._ekeventstore.isProxy(*args, **kwargs) + + def is_source_managed_(self, *args, **kwargs): + return self._ekeventstore.isSourceManaged_(*args, **kwargs) + + def is_to_many_key_(self, *args, **kwargs): + return self._ekeventstore.isToManyKey_(*args, **kwargs) + + def key_value_binding_for_key_type_mask_(self, *args, **kwargs): + return self._ekeventstore.keyValueBindingForKey_typeMask_(*args, **kwargs) + + def last_commit_temp_to_permanent_object_id_map(self, *args, **kwargs): + return self._ekeventstore.lastCommitTempToPermanentObjectIDMap(*args, **kwargs) + + def last_confirmed_splash_screen_version(self, *args, **kwargs): + return self._ekeventstore.lastConfirmedSplashScreenVersion(*args, **kwargs) + + def last_database_notification_timestamp(self, *args, **kwargs): + return self._ekeventstore.lastDatabaseNotificationTimestamp(*args, **kwargs) + + def last_database_timestamp_for_o_o_p_to_wait_on(self, *args, **kwargs): + return self._ekeventstore.lastDatabaseTimestampForOOPToWaitOn(*args, **kwargs) + + def load_draft_of_event_with_occurrence_id_(self, *args, **kwargs): + return self._ekeventstore.loadDraftOfEventWithOccurrenceID_(*args, **kwargs) + + def local_birthday_calendar_create_if_needed_with_error_(self, *args, **kwargs): + return self._ekeventstore.localBirthdayCalendarCreateIfNeededWithError_(*args, **kwargs) + + def local_birthday_calendar_source(self, *args, **kwargs): + return self._ekeventstore.localBirthdayCalendarSource(*args, **kwargs) + + def local_source(self, *args, **kwargs): + return self._ekeventstore.localSource(*args, **kwargs) + + def local_source_enable_if_needed(self, *args, **kwargs): + return self._ekeventstore.localSourceEnableIfNeeded(*args, **kwargs) + + def mark_changed_object_ids_consumed_up_to_token_(self, *args, **kwargs): + return self._ekeventstore.markChangedObjectIDsConsumedUpToToken_(*args, **kwargs) + + def mark_individual_changes_consumed_error_(self, *args, **kwargs): + return self._ekeventstore.markIndividualChangesConsumed_error_(*args, **kwargs) + + def mark_resource_change_alerted_and_save_error_(self, *args, **kwargs): + return self._ekeventstore.markResourceChangeAlertedAndSave_error_(*args, **kwargs) + + def method_description_for_selector_(self, *args, **kwargs): + return self._ekeventstore.methodDescriptionForSelector_(*args, **kwargs) + + def method_for_selector_(self, *args, **kwargs): + return self._ekeventstore.methodForSelector_(*args, **kwargs) + + def method_signature_for_selector_(self, *args, **kwargs): + return self._ekeventstore.methodSignatureForSelector_(*args, **kwargs) + + def mimic_save_and_commit_event_old_to_new_object_id_map_inserted_object_ids_updated_object_ids_deleted_object_ids_(self, *args, **kwargs): + return self._ekeventstore.mimicSaveAndCommitEvent_oldToNewObjectIDMap_insertedObjectIDs_updatedObjectIDs_deletedObjectIDs_(*args, **kwargs) + + def mr_formatted_debug_description(self, *args, **kwargs): + return self._ekeventstore.mr_formattedDebugDescription(*args, **kwargs) + + def mutable_array_value_for_key_path_(self, *args, **kwargs): + return self._ekeventstore.mutableArrayValueForKeyPath_(*args, **kwargs) + + def mutable_array_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.mutableArrayValueForKey_(*args, **kwargs) + + def mutable_copy(self, *args, **kwargs): + return self._ekeventstore.mutableCopy(*args, **kwargs) + + def mutable_ordered_set_value_for_key_path_(self, *args, **kwargs): + return self._ekeventstore.mutableOrderedSetValueForKeyPath_(*args, **kwargs) + + def mutable_ordered_set_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.mutableOrderedSetValueForKey_(*args, **kwargs) + + def mutable_set_value_for_key_path_(self, *args, **kwargs): + return self._ekeventstore.mutableSetValueForKeyPath_(*args, **kwargs) + + def mutable_set_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.mutableSetValueForKey_(*args, **kwargs) + + def natural_language_suggested_event_calendar(self, *args, **kwargs): + return self._ekeventstore.naturalLanguageSuggestedEventCalendar(*args, **kwargs) + + def needs_geocoding_for_event_(self, *args, **kwargs): + return self._ekeventstore.needsGeocodingForEvent_(*args, **kwargs) + + def new_scripting_object_of_class_for_value_for_key_with_contents_value_properties_(self, *args, **kwargs): + return self._ekeventstore.newScriptingObjectOfClass_forValueForKey_withContentsValue_properties_(*args, **kwargs) + + def new_tagged_n_s_string_with_a_s_c_i_i_bytes__length__(self, *args, **kwargs): + return self._ekeventstore.newTaggedNSStringWithASCIIBytes__length__(*args, **kwargs) + + def next_event_with_calendar_identifiers_exclusion_options_(self, *args, **kwargs): + return self._ekeventstore.nextEventWithCalendarIdentifiers_exclusionOptions_(*args, **kwargs) + + def next_event_with_calendars_exclusion_options_(self, *args, **kwargs): + return self._ekeventstore.nextEventWithCalendars_exclusionOptions_(*args, **kwargs) + + def next_events_with_calendars_limit_exclusion_options_(self, *args, **kwargs): + return self._ekeventstore.nextEventsWithCalendars_limit_exclusionOptions_(*args, **kwargs) + + def notification_collection_cache_queue(self, *args, **kwargs): + return self._ekeventstore.notificationCollectionCacheQueue(*args, **kwargs) + + def notification_collection_for_source_(self, *args, **kwargs): + return self._ekeventstore.notificationCollectionForSource_(*args, **kwargs) + + def object_specifier(self, *args, **kwargs): + return self._ekeventstore.objectSpecifier(*args, **kwargs) + + def object_with_id_exists_(self, *args, **kwargs): + return self._ekeventstore.objectWithIDExists_(*args, **kwargs) + + def object_with_object_id_(self, *args, **kwargs): + return self._ekeventstore.objectWithObjectID_(*args, **kwargs) + + def objects_have_changes_to_commit_(self, *args, **kwargs): + return self._ekeventstore.objectsHaveChangesToCommit_(*args, **kwargs) + + def objects_matching_predicate_(self, *args, **kwargs): + return self._ekeventstore.objectsMatchingPredicate_(*args, **kwargs) + + def objects_pending_commit(self, *args, **kwargs): + return self._ekeventstore.objectsPendingCommit(*args, **kwargs) + + def objects_pending_save(self, *args, **kwargs): + return self._ekeventstore.objectsPendingSave(*args, **kwargs) + + def observation_info(self, *args, **kwargs): + return self._ekeventstore.observationInfo(*args, **kwargs) + + def observe_value_for_key_path_of_object_change_context_(self, *args, **kwargs): + return self._ekeventstore.observeValueForKeyPath_ofObject_change_context_(*args, **kwargs) + + def occurrence_cache_get_occurrence_counts_for_calendars_(self, *args, **kwargs): + return self._ekeventstore.occurrenceCacheGetOccurrenceCountsForCalendars_(*args, **kwargs) + + def occurrence_cache_get_occurrences_for_calendars_on_day_(self, *args, **kwargs): + return self._ekeventstore.occurrenceCacheGetOccurrencesForCalendars_onDay_(*args, **kwargs) + + def occurrences_exist_in_range_for_event_start_date_end_date_must_start_in_interval_timezone_(self, *args, **kwargs): + return self._ekeventstore.occurrencesExistInRangeForEvent_startDate_endDate_mustStartInInterval_timezone_(*args, **kwargs) + + def option_descriptions_for_binding_(self, *args, **kwargs): + return self._ekeventstore.optionDescriptionsForBinding_(*args, **kwargs) + + def owns_destination_objects_for_relationship_key_(self, *args, **kwargs): + return self._ekeventstore.ownsDestinationObjectsForRelationshipKey_(*args, **kwargs) + + def parent_source_for_delegate_source_(self, *args, **kwargs): + return self._ekeventstore.parentSourceForDelegateSource_(*args, **kwargs) + + def pep_after_delay_(self, *args, **kwargs): + return self._ekeventstore.pep_afterDelay_(*args, **kwargs) + + def pep_get_invocation_(self, *args, **kwargs): + return self._ekeventstore.pep_getInvocation_(*args, **kwargs) + + def pep_on_main_thread(self, *args, **kwargs): + return self._ekeventstore.pep_onMainThread(*args, **kwargs) + + def pep_on_main_thread_if_necessary(self, *args, **kwargs): + return self._ekeventstore.pep_onMainThreadIfNecessary(*args, **kwargs) + + def pep_on_operation_queue_(self, *args, **kwargs): + return self._ekeventstore.pep_onOperationQueue_(*args, **kwargs) + + def pep_on_operation_queue_priority_(self, *args, **kwargs): + return self._ekeventstore.pep_onOperationQueue_priority_(*args, **kwargs) + + def pep_on_thread_(self, *args, **kwargs): + return self._ekeventstore.pep_onThread_(*args, **kwargs) + + def pep_on_thread_immediate_for_matching_thread_(self, *args, **kwargs): + return self._ekeventstore.pep_onThread_immediateForMatchingThread_(*args, **kwargs) + + def perform_block_on_main_thread_synchronously_(self, *args, **kwargs): + return self._ekeventstore.performBlockOnMainThreadSynchronously_(*args, **kwargs) + + def perform_holding_reminder_source_map_lock_(self, *args, **kwargs): + return self._ekeventstore.performHoldingReminderSourceMapLock_(*args, **kwargs) + + def perform_selector_in_background_with_object_(self, *args, **kwargs): + return self._ekeventstore.performSelectorInBackground_withObject_(*args, **kwargs) + + def perform_selector_on_main_thread_with_object_wait_until_done_(self, *args, **kwargs): + return self._ekeventstore.performSelectorOnMainThread_withObject_waitUntilDone_(*args, **kwargs) + + def perform_selector_on_main_thread_with_object_wait_until_done_modes_(self, *args, **kwargs): + return self._ekeventstore.performSelectorOnMainThread_withObject_waitUntilDone_modes_(*args, **kwargs) + + def perform_selector_(self, *args, **kwargs): + return self._ekeventstore.performSelector_(*args, **kwargs) + + def perform_selector_object_after_delay_(self, *args, **kwargs): + return self._ekeventstore.performSelector_object_afterDelay_(*args, **kwargs) + + def perform_selector_on_thread_with_object_wait_until_done_(self, *args, **kwargs): + return self._ekeventstore.performSelector_onThread_withObject_waitUntilDone_(*args, **kwargs) + + def perform_selector_on_thread_with_object_wait_until_done_modes_(self, *args, **kwargs): + return self._ekeventstore.performSelector_onThread_withObject_waitUntilDone_modes_(*args, **kwargs) + + def perform_selector_with_object_(self, *args, **kwargs): + return self._ekeventstore.performSelector_withObject_(*args, **kwargs) + + def perform_selector_with_object_after_delay_(self, *args, **kwargs): + return self._ekeventstore.performSelector_withObject_afterDelay_(*args, **kwargs) + + def perform_selector_with_object_after_delay_ignore_menu_tracking_(self, *args, **kwargs): + return self._ekeventstore.performSelector_withObject_afterDelay_ignoreMenuTracking_(*args, **kwargs) + + def perform_selector_with_object_after_delay_in_modes_(self, *args, **kwargs): + return self._ekeventstore.performSelector_withObject_afterDelay_inModes_(*args, **kwargs) + + def perform_selector_with_object_with_object_(self, *args, **kwargs): + return self._ekeventstore.performSelector_withObject_withObject_(*args, **kwargs) + + def persistent_object_with_entity_name_(self, *args, **kwargs): + return self._ekeventstore.persistentObjectWithEntityName_(*args, **kwargs) + + def post_synthetic_route_hypothesis_for_event_with_external_u_r_l_(self, *args, **kwargs): + return self._ekeventstore.postSyntheticRouteHypothesis_forEventWithExternalURL_(*args, **kwargs) + + def predicate_for_assistant_event_search_with_time_zone_start_date_end_date_title_location_notes_participants_calendars_limit_(self, *args, **kwargs): + return self._ekeventstore.predicateForAssistantEventSearchWithTimeZone_startDate_endDate_title_location_notes_participants_calendars_limit_(*args, **kwargs) + + def predicate_for_calendar_items_of_type_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForCalendarItemsOfType_inCalendar_(*args, **kwargs) + + def predicate_for_calendar_items_of_type_with_external_id_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForCalendarItemsOfType_withExternalID_inCalendar_(*args, **kwargs) + + def predicate_for_calendar_items_of_type_with_external_id_in_source_(self, *args, **kwargs): + return self._ekeventstore.predicateForCalendarItemsOfType_withExternalID_inSource_(*args, **kwargs) + + def predicate_for_calendar_items_of_type_with_unique_identifier_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForCalendarItemsOfType_withUniqueIdentifier_inCalendar_(*args, **kwargs) + + def predicate_for_calendar_items_of_type_with_unique_identifier_in_source_(self, *args, **kwargs): + return self._ekeventstore.predicateForCalendarItemsOfType_withUniqueIdentifier_inSource_(*args, **kwargs) + + def predicate_for_calendar_store_for_reminders_in_calendars_(self, *args, **kwargs): + return self._ekeventstore.predicateForCalendarStoreForRemindersInCalendars_(*args, **kwargs) + + def predicate_for_completed_reminders_with_completion_date_starting_ending_calendars_(self, *args, **kwargs): + return self._ekeventstore.predicateForCompletedRemindersWithCompletionDateStarting_ending_calendars_(*args, **kwargs) + + def predicate_for_event_created_from_suggestion_with_opaque_key_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventCreatedFromSuggestionWithOpaqueKey_(*args, **kwargs) + + def predicate_for_events_created_from_suggestion(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsCreatedFromSuggestion(*args, **kwargs) + + def predicate_for_events_created_from_suggestion_with_extraction_group_identifier_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsCreatedFromSuggestionWithExtractionGroupIdentifier_(*args, **kwargs) + + def predicate_for_events_in_subscribed_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsInSubscribedCalendar_(*args, **kwargs) + + def predicate_for_events_with_attendees_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsWithAttendeesInCalendar_(*args, **kwargs) + + def predicate_for_events_with_conference_u_r_l_limit_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsWithConferenceURL_limit_(*args, **kwargs) + + def predicate_for_events_with_start_date_end_date_calendars_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsWithStartDate_endDate_calendars_(*args, **kwargs) + + def predicate_for_events_with_start_date_end_date_calendars_exclusion_options_filterd_out_titles_randomize_limit_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsWithStartDate_endDate_calendars_exclusionOptions_filterdOutTitles_randomize_limit_(*args, **kwargs) + + def predicate_for_events_with_start_date_end_date_calendars_load_default_properties_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsWithStartDate_endDate_calendars_loadDefaultProperties_(*args, **kwargs) + + def predicate_for_events_with_start_date_end_date_calendars_matching_contacts_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsWithStartDate_endDate_calendars_matchingContacts_(*args, **kwargs) + + def predicate_for_events_with_start_date_end_date_calendars_prefetch_hint_exclusion_options_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsWithStartDate_endDate_calendars_prefetchHint_exclusionOptions_(*args, **kwargs) + + def predicate_for_events_with_start_date_end_date_unique_id_calendars_(self, *args, **kwargs): + return self._ekeventstore.predicateForEventsWithStartDate_endDate_uniqueID_calendars_(*args, **kwargs) + + def predicate_for_incomplete_reminders_with_due_date_starting_ending_calendars_(self, *args, **kwargs): + return self._ekeventstore.predicateForIncompleteRemindersWithDueDateStarting_ending_calendars_(*args, **kwargs) + + def predicate_for_master_events_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForMasterEventsInCalendar_(*args, **kwargs) + + def predicate_for_master_events_in_calendars_(self, *args, **kwargs): + return self._ekeventstore.predicateForMasterEventsInCalendars_(*args, **kwargs) + + def predicate_for_master_events_with_external_tracking_status_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForMasterEventsWithExternalTrackingStatusInCalendar_(*args, **kwargs) + + def predicate_for_master_events_with_invitations_and_occurrences_after_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForMasterEventsWithInvitationsAndOccurrencesAfter_inCalendar_(*args, **kwargs) + + def predicate_for_master_events_with_occurrences_with_start_date_end_date_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForMasterEventsWithOccurrencesWithStartDate_endDate_inCalendar_(*args, **kwargs) + + def predicate_for_master_events_with_start_date_title_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForMasterEventsWithStartDate_title_inCalendar_(*args, **kwargs) + + def predicate_for_natural_language_suggested_events_with_search_string_(self, *args, **kwargs): + return self._ekeventstore.predicateForNaturalLanguageSuggestedEventsWithSearchString_(*args, **kwargs) + + def predicate_for_natural_language_suggested_events_with_search_string_start_date_(self, *args, **kwargs): + return self._ekeventstore.predicateForNaturalLanguageSuggestedEventsWithSearchString_startDate_(*args, **kwargs) + + def predicate_for_nonrecurring_events_with_start_date_end_date_calendars_(self, *args, **kwargs): + return self._ekeventstore.predicateForNonrecurringEventsWithStartDate_endDate_calendars_(*args, **kwargs) + + def predicate_for_notifiable_events(self, *args, **kwargs): + return self._ekeventstore.predicateForNotifiableEvents(*args, **kwargs) + + def predicate_for_notification_center_visible_events(self, *args, **kwargs): + return self._ekeventstore.predicateForNotificationCenterVisibleEvents(*args, **kwargs) + + def predicate_for_potential_travel_events_in_calendars_start_date_end_date_(self, *args, **kwargs): + return self._ekeventstore.predicateForPotentialTravelEventsInCalendars_startDate_endDate_(*args, **kwargs) + + def predicate_for_random_master_events_with_start_date_end_date_need_to_have_attendee_need_to_have_location_all_day_filtered_out_titles_limit_calendars_(self, *args, **kwargs): + return self._ekeventstore.predicateForRandomMasterEventsWithStartDate_endDate_needToHaveAttendee_needToHaveLocation_allDay_filteredOutTitles_limit_calendars_(*args, **kwargs) + + def predicate_for_reminders_in_calendars_(self, *args, **kwargs): + return self._ekeventstore.predicateForRemindersInCalendars_(*args, **kwargs) + + def predicate_for_reminders_in_calendars_preload_properties_(self, *args, **kwargs): + return self._ekeventstore.predicateForRemindersInCalendars_preloadProperties_(*args, **kwargs) + + def predicate_for_reminders_with_title_list_title_limit_to_completed_or_incomplete_completed_due_after_due_before_search_term_sort_order_max_results_(self, *args, **kwargs): + return self._ekeventstore.predicateForRemindersWithTitle_listTitle_limitToCompletedOrIncomplete_completed_dueAfter_dueBefore_searchTerm_sortOrder_maxResults_(*args, **kwargs) + + def predicate_for_schedule_agent_client_events_in_calendar_(self, *args, **kwargs): + return self._ekeventstore.predicateForScheduleAgentClientEventsInCalendar_(*args, **kwargs) + + def predicate_for_unacknowledged_events(self, *args, **kwargs): + return self._ekeventstore.predicateForUnacknowledgedEvents(*args, **kwargs) + + def predicate_for_unalerted_events(self, *args, **kwargs): + return self._ekeventstore.predicateForUnalertedEvents(*args, **kwargs) + + def predicate_for_up_next_events_in_calendars_start_date_end_date_start_date_restriction_threshold_(self, *args, **kwargs): + return self._ekeventstore.predicateForUpNextEventsInCalendars_startDate_endDate_startDateRestrictionThreshold_(*args, **kwargs) + + def predicate_for_upcoming_events_with_limit_(self, *args, **kwargs): + return self._ekeventstore.predicateForUpcomingEventsWithLimit_(*args, **kwargs) + + def prepare_for_interface_builder(self, *args, **kwargs): + return self._ekeventstore.prepareForInterfaceBuilder(*args, **kwargs) + + def public_object_with_fetched_object_id_(self, *args, **kwargs): + return self._ekeventstore.publicObjectWithFetchedObjectID_(*args, **kwargs) + + def public_object_with_object_id_(self, *args, **kwargs): + return self._ekeventstore.publicObjectWithObjectID_(*args, **kwargs) + + def public_object_with_persistent_object_(self, *args, **kwargs): + return self._ekeventstore.publicObjectWithPersistentObject_(*args, **kwargs) + + def purge_changelog(self, *args, **kwargs): + return self._ekeventstore.purgeChangelog(*args, **kwargs) + + def read_write_calendar_count_for_entity_type_(self, *args, **kwargs): + return self._ekeventstore.readWriteCalendarCountForEntityType_(*args, **kwargs) + + def read_write_calendars_for_entity_type_(self, *args, **kwargs): + return self._ekeventstore.readWriteCalendarsForEntityType_(*args, **kwargs) + + def rebuild_occurrence_cache(self, *args, **kwargs): + return self._ekeventstore.rebuildOccurrenceCache(*args, **kwargs) + + def receive_observed_error_(self, *args, **kwargs): + return self._ekeventstore.receiveObservedError_(*args, **kwargs) + + def receive_observed_value_(self, *args, **kwargs): + return self._ekeventstore.receiveObservedValue_(*args, **kwargs) + + def record_object_rebase_with_old_object_id_new_object_id_(self, *args, **kwargs): + return self._ekeventstore.recordObjectRebaseWithOldObjectID_newObjectID_(*args, **kwargs) + + def record_sequence_token_for_legacy_clients_(self, *args, **kwargs): + return self._ekeventstore.recordSequenceTokenForLegacyClients_(*args, **kwargs) + + def redacted_mimic_save_event_old_to_new_object_id_map_serialized_dictionary_object_id_to_change_set_dictionary_map_object_id_to_persistent_dictionary_map_(self, *args, **kwargs): + return self._ekeventstore.redactedMimicSaveEvent_oldToNewObjectIDMap_serializedDictionary_objectIDToChangeSetDictionaryMap_objectIDToPersistentDictionaryMap_(*args, **kwargs) + + def refresh_everything_if_necessary_(self, *args, **kwargs): + return self._ekeventstore.refreshEverythingIfNecessary_(*args, **kwargs) + + def refresh_folder_lists_if_necessary_(self, *args, **kwargs): + return self._ekeventstore.refreshFolderListsIfNecessary_(*args, **kwargs) + + def refresh_source_user_requested_(self, *args, **kwargs): + return self._ekeventstore.refreshSource_userRequested_(*args, **kwargs) + + def refresh_sources_if_necessary(self, *args, **kwargs): + return self._ekeventstore.refreshSourcesIfNecessary(*args, **kwargs) + + def refresh_sources_if_necessary_(self, *args, **kwargs): + return self._ekeventstore.refreshSourcesIfNecessary_(*args, **kwargs) + + def register_fetched_object_with_id_(self, *args, **kwargs): + return self._ekeventstore.registerFetchedObjectWithID_(*args, **kwargs) + + def register_fetched_object_with_id_with_default_loaded_property_keys_values_(self, *args, **kwargs): + return self._ekeventstore.registerFetchedObjectWithID_withDefaultLoadedPropertyKeys_values_(*args, **kwargs) + + def register_for_detailed_change_tracking_in_source_error_(self, *args, **kwargs): + return self._ekeventstore.registerForDetailedChangeTrackingInSource_error_(*args, **kwargs) + + def register_for_detailed_change_tracking_(self, *args, **kwargs): + return self._ekeventstore.registerForDetailedChangeTracking_(*args, **kwargs) + + def registered_objects(self, *args, **kwargs): + return self._ekeventstore.registeredObjects(*args, **kwargs) + + def registered_queue(self, *args, **kwargs): + return self._ekeventstore.registeredQueue(*args, **kwargs) + + def release(self, *args, **kwargs): + return self._ekeventstore.release(*args, **kwargs) + + def reminder_source_for_event_source_(self, *args, **kwargs): + return self._ekeventstore.reminderSourceForEventSource_(*args, **kwargs) + + def reminder_source_id_to_event_source_id_mapping(self, *args, **kwargs): + return self._ekeventstore.reminderSourceIDToEventSourceIDMapping(*args, **kwargs) + + def reminder_source_map(self, *args, **kwargs): + return self._ekeventstore.reminderSourceMap(*args, **kwargs) + + def reminder_source_map_lock(self, *args, **kwargs): + return self._ekeventstore.reminderSourceMapLock(*args, **kwargs) + + def reminder_sources(self, *args, **kwargs): + return self._ekeventstore.reminderSources(*args, **kwargs) + + def reminder_store(self, *args, **kwargs): + return self._ekeventstore.reminderStore(*args, **kwargs) + + def reminder_store_changed(self, *args, **kwargs): + return self._ekeventstore.reminderStoreChanged(*args, **kwargs) + + def reminder_with_external_u_r_i_(self, *args, **kwargs): + return self._ekeventstore.reminderWithExternalURI_(*args, **kwargs) + + def reminder_with_identifier_(self, *args, **kwargs): + return self._ekeventstore.reminderWithIdentifier_(*args, **kwargs) + + def reminder_with_unique_id_(self, *args, **kwargs): + return self._ekeventstore.reminderWithUniqueId_(*args, **kwargs) + + def reminders_matching_predicate_(self, *args, **kwargs): + return self._ekeventstore.remindersMatchingPredicate_(*args, **kwargs) + + def reminders_with_external_identifier_in_calendars_(self, *args, **kwargs): + return self._ekeventstore.remindersWithExternalIdentifier_inCalendars_(*args, **kwargs) + + def remove_calendar_commit_error_(self, *args, **kwargs): + return self._ekeventstore.removeCalendar_commit_error_(*args, **kwargs) + + def remove_calendar_error_(self, *args, **kwargs): + return self._ekeventstore.removeCalendar_error_(*args, **kwargs) + + def remove_event_span_commit_error_(self, *args, **kwargs): + return self._ekeventstore.removeEvent_span_commit_error_(*args, **kwargs) + + def remove_event_span_error_(self, *args, **kwargs): + return self._ekeventstore.removeEvent_span_error_(*args, **kwargs) + + def remove_exchange_delegate_completion_(self, *args, **kwargs): + return self._ekeventstore.removeExchangeDelegate_completion_(*args, **kwargs) + + def remove_invite_reply_notification_error_(self, *args, **kwargs): + return self._ekeventstore.removeInviteReplyNotification_error_(*args, **kwargs) + + def remove_invite_reply_notifications_error_(self, *args, **kwargs): + return self._ekeventstore.removeInviteReplyNotifications_error_(*args, **kwargs) + + def remove_object_from_both_sides_of_relationship_with_key_(self, *args, **kwargs): + return self._ekeventstore.removeObject_fromBothSidesOfRelationshipWithKey_(*args, **kwargs) + + def remove_object_from_property_with_key_(self, *args, **kwargs): + return self._ekeventstore.removeObject_fromPropertyWithKey_(*args, **kwargs) + + def remove_observation_(self, *args, **kwargs): + return self._ekeventstore.removeObservation_(*args, **kwargs) + + def remove_observation_for_observable_key_path_(self, *args, **kwargs): + return self._ekeventstore.removeObservation_forObservableKeyPath_(*args, **kwargs) + + def remove_observer_for_key_path_(self, *args, **kwargs): + return self._ekeventstore.removeObserver_forKeyPath_(*args, **kwargs) + + def remove_observer_for_key_path_context_(self, *args, **kwargs): + return self._ekeventstore.removeObserver_forKeyPath_context_(*args, **kwargs) + + def remove_reminder_commit_error_(self, *args, **kwargs): + return self._ekeventstore.removeReminder_commit_error_(*args, **kwargs) + + def remove_reminder_error_(self, *args, **kwargs): + return self._ekeventstore.removeReminder_error_(*args, **kwargs) + + def remove_resource_change_error_(self, *args, **kwargs): + return self._ekeventstore.removeResourceChange_error_(*args, **kwargs) + + def remove_resource_changes_for_calendar_item_error_(self, *args, **kwargs): + return self._ekeventstore.removeResourceChangesForCalendarItem_error_(*args, **kwargs) + + def remove_resource_changes_error_(self, *args, **kwargs): + return self._ekeventstore.removeResourceChanges_error_(*args, **kwargs) + + def remove_source_commit_error_(self, *args, **kwargs): + return self._ekeventstore.removeSource_commit_error_(*args, **kwargs) + + def remove_suggested_event_calendar(self, *args, **kwargs): + return self._ekeventstore.removeSuggestedEventCalendar(*args, **kwargs) + + def remove_value_at_index_from_property_with_key_(self, *args, **kwargs): + return self._ekeventstore.removeValueAtIndex_fromPropertyWithKey_(*args, **kwargs) + + def replace_value_at_index_in_property_with_key_with_value_(self, *args, **kwargs): + return self._ekeventstore.replaceValueAtIndex_inPropertyWithKey_withValue_(*args, **kwargs) + + def replacement_object_for_archiver_(self, *args, **kwargs): + return self._ekeventstore.replacementObjectForArchiver_(*args, **kwargs) + + def replacement_object_for_coder_(self, *args, **kwargs): + return self._ekeventstore.replacementObjectForCoder_(*args, **kwargs) + + def replacement_object_for_keyed_archiver_(self, *args, **kwargs): + return self._ekeventstore.replacementObjectForKeyedArchiver_(*args, **kwargs) + + def replacement_object_for_port_coder_(self, *args, **kwargs): + return self._ekeventstore.replacementObjectForPortCoder_(*args, **kwargs) + + def request_access_to_entity_type_completion_(self, *args, **kwargs): + return self._ekeventstore.requestAccessToEntityType_completion_(*args, **kwargs) + + def request_access_to_entity_type_desired_full_access_testing_synchronous_reason_completion_(self, *args, **kwargs): + return self._ekeventstore.requestAccessToEntityType_desiredFullAccess_testing_synchronous_reason_completion_(*args, **kwargs) + + def request_full_access_to_events_with_completion_(self, *args, **kwargs): + return self._ekeventstore.requestFullAccessToEventsWithCompletion_(*args, **kwargs) + + def request_full_access_to_reminders_with_completion_(self, *args, **kwargs): + return self._ekeventstore.requestFullAccessToRemindersWithCompletion_(*args, **kwargs) + + def request_write_only_access_to_events_with_completion_(self, *args, **kwargs): + return self._ekeventstore.requestWriteOnlyAccessToEventsWithCompletion_(*args, **kwargs) + + def reset(self, *args, **kwargs): + return self._ekeventstore.reset(*args, **kwargs) + + def reset_cache(self, *args, **kwargs): + return self._ekeventstore.resetCache(*args, **kwargs) + + def resource_changes_for_entity_types_(self, *args, **kwargs): + return self._ekeventstore.resourceChangesForEntityTypes_(*args, **kwargs) + + def respond_to_shared_calendar_invitation_with_status_(self, *args, **kwargs): + return self._ekeventstore.respondToSharedCalendarInvitation_withStatus_(*args, **kwargs) + + def responds_to_selector_(self, *args, **kwargs): + return self._ekeventstore.respondsToSelector_(*args, **kwargs) + + def restore_database_from_backup_with_format_error_(self, *args, **kwargs): + return self._ekeventstore.restoreDatabaseFromBackup_withFormat_error_(*args, **kwargs) + + def restore_generation_changed(self, *args, **kwargs): + return self._ekeventstore.restoreGenerationChanged(*args, **kwargs) + + def retain(self, *args, **kwargs): + return self._ekeventstore.retain(*args, **kwargs) + + def retain_count(self, *args, **kwargs): + return self._ekeventstore.retainCount(*args, **kwargs) + + def retain_weak_reference(self, *args, **kwargs): + return self._ekeventstore.retainWeakReference(*args, **kwargs) + + def return_event_results(self, *args, **kwargs): + return self._ekeventstore.returnEventResults(*args, **kwargs) + + def return_reminder_results(self, *args, **kwargs): + return self._ekeventstore.returnReminderResults(*args, **kwargs) + + def rollback(self, *args, **kwargs): + return self._ekeventstore.rollback(*args, **kwargs) + + def rollback_objects_with_identifiers_(self, *args, **kwargs): + return self._ekeventstore.rollbackObjectsWithIdentifiers_(*args, **kwargs) + + def save_attachment_commit_error_(self, *args, **kwargs): + return self._ekeventstore.saveAttachment_commit_error_(*args, **kwargs) + + def save_calendar_commit_error_(self, *args, **kwargs): + return self._ekeventstore.saveCalendar_commit_error_(*args, **kwargs) + + def save_calendar_error_(self, *args, **kwargs): + return self._ekeventstore.saveCalendar_error_(*args, **kwargs) + + def save_draft_of_event_(self, *args, **kwargs): + return self._ekeventstore.saveDraftOfEvent_(*args, **kwargs) + + def save_event_span_commit_error_(self, *args, **kwargs): + return self._ekeventstore.saveEvent_span_commit_error_(*args, **kwargs) + + def save_event_span_error_(self, *args, **kwargs): + return self._ekeventstore.saveEvent_span_error_(*args, **kwargs) + + def save_notification_collection_commit_error_(self, *args, **kwargs): + return self._ekeventstore.saveNotificationCollection_commit_error_(*args, **kwargs) + + def save_notification_commit_error_(self, *args, **kwargs): + return self._ekeventstore.saveNotification_commit_error_(*args, **kwargs) + + def save_reminder_commit_error_(self, *args, **kwargs): + return self._ekeventstore.saveReminder_commit_error_(*args, **kwargs) + + def save_reminder_error_(self, *args, **kwargs): + return self._ekeventstore.saveReminder_error_(*args, **kwargs) + + def save_source_commit_error_(self, *args, **kwargs): + return self._ekeventstore.saveSource_commit_error_(*args, **kwargs) + + def save_(self, *args, **kwargs): + return self._ekeventstore.save_(*args, **kwargs) + + def scripting_properties(self, *args, **kwargs): + return self._ekeventstore.scriptingProperties(*args, **kwargs) + + def scripting_value_for_specifier_(self, *args, **kwargs): + return self._ekeventstore.scriptingValueForSpecifier_(*args, **kwargs) + + def self(self, *args, **kwargs): + return self._ekeventstore.self(*args, **kwargs) + + def sequence_number(self, *args, **kwargs): + return self._ekeventstore.sequenceNumber(*args, **kwargs) + + def sequence_token(self, *args, **kwargs): + return self._ekeventstore.sequenceToken(*args, **kwargs) + + def set_accessibility_braille_map_render_region_(self, *args, **kwargs): + return self._ekeventstore.setAccessibilityBrailleMapRenderRegion_(*args, **kwargs) + + def set_accessibility_braille_map_renderer_(self, *args, **kwargs): + return self._ekeventstore.setAccessibilityBrailleMapRenderer_(*args, **kwargs) + + def set_birthday_calendar_enabled_(self, *args, **kwargs): + return self._ekeventstore.setBirthdayCalendarEnabled_(*args, **kwargs) + + def set_birthday_calendar_version_(self, *args, **kwargs): + return self._ekeventstore.setBirthdayCalendarVersion_(*args, **kwargs) + + def set_cached_default_alarm_offsets_to_n_s_not_found(self, *args, **kwargs): + return self._ekeventstore.setCachedDefaultAlarmOffsetsToNSNotFound(*args, **kwargs) + + def set_cached_e_k_source_constraint_object_for_key_(self, *args, **kwargs): + return self._ekeventstore.setCachedEKSourceConstraintObject_forKey_(*args, **kwargs) + + def set_data_protection_observer_(self, *args, **kwargs): + return self._ekeventstore.setDataProtectionObserver_(*args, **kwargs) + + def set_database_(self, *args, **kwargs): + return self._ekeventstore.setDatabase_(*args, **kwargs) + + def set_default_calendar_for_new_events_(self, *args, **kwargs): + return self._ekeventstore.setDefaultCalendarForNewEvents_(*args, **kwargs) + + def set_default_calendar_for_new_events_in_delegate_source_(self, *args, **kwargs): + return self._ekeventstore.setDefaultCalendar_forNewEventsInDelegateSource_(*args, **kwargs) + + def set_deleted_objects_(self, *args, **kwargs): + return self._ekeventstore.setDeletedObjects_(*args, **kwargs) + + def set_event_source_id_to_reminder_source_id_mapping_(self, *args, **kwargs): + return self._ekeventstore.setEventSourceIDToReminderSourceIDMapping_(*args, **kwargs) + + def set_inserted_objects_(self, *args, **kwargs): + return self._ekeventstore.setInsertedObjects_(*args, **kwargs) + + def set_invitation_status_for_event_error_(self, *args, **kwargs): + return self._ekeventstore.setInvitationStatus_forEvent_error_(*args, **kwargs) + + def set_invitation_status_for_events_error_(self, *args, **kwargs): + return self._ekeventstore.setInvitationStatus_forEvents_error_(*args, **kwargs) + + def set_last_database_notification_timestamp_(self, *args, **kwargs): + return self._ekeventstore.setLastDatabaseNotificationTimestamp_(*args, **kwargs) + + def set_needs_geocoding_for_event_(self, *args, **kwargs): + return self._ekeventstore.setNeedsGeocoding_forEvent_(*args, **kwargs) + + def set_nil_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.setNilValueForKey_(*args, **kwargs) + + def set_objects_pending_save_(self, *args, **kwargs): + return self._ekeventstore.setObjectsPendingSave_(*args, **kwargs) + + def set_observation_info_(self, *args, **kwargs): + return self._ekeventstore.setObservationInfo_(*args, **kwargs) + + def set_observation_for_observing_key_path_(self, *args, **kwargs): + return self._ekeventstore.setObservation_forObservingKeyPath_(*args, **kwargs) + + def set_privacy_client_identity_(self, *args, **kwargs): + return self._ekeventstore.setPrivacyClientIdentity_(*args, **kwargs) + + def set_registered_objects_(self, *args, **kwargs): + return self._ekeventstore.setRegisteredObjects_(*args, **kwargs) + + def set_reminder_source_id_to_event_source_id_mapping_(self, *args, **kwargs): + return self._ekeventstore.setReminderSourceIDToEventSourceIDMapping_(*args, **kwargs) + + def set_remote_client_identity_(self, *args, **kwargs): + return self._ekeventstore.setRemoteClientIdentity_(*args, **kwargs) + + def set_restore_generation_changed_and_get_previous_value_(self, *args, **kwargs): + return self._ekeventstore.setRestoreGenerationChangedAndGetPreviousValue_(*args, **kwargs) + + def set_restore_generation_changed_(self, *args, **kwargs): + return self._ekeventstore.setRestoreGenerationChanged_(*args, **kwargs) + + def set_scripting_properties_(self, *args, **kwargs): + return self._ekeventstore.setScriptingProperties_(*args, **kwargs) + + def set_show_declined_events_(self, *args, **kwargs): + return self._ekeventstore.setShowDeclinedEvents_(*args, **kwargs) + + def set_skip_modification_validation_(self, *args, **kwargs): + return self._ekeventstore.setSkipModificationValidation_(*args, **kwargs) + + def set_time_zone_(self, *args, **kwargs): + return self._ekeventstore.setTimeZone_(*args, **kwargs) + + def set_updated_objects_(self, *args, **kwargs): + return self._ekeventstore.setUpdatedObjects_(*args, **kwargs) + + def set_user_interface_item_identifier_(self, *args, **kwargs): + return self._ekeventstore.setUserInterfaceItemIdentifier_(*args, **kwargs) + + def set_value_for_key_path_(self, *args, **kwargs): + return self._ekeventstore.setValue_forKeyPath_(*args, **kwargs) + + def set_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.setValue_forKey_(*args, **kwargs) + + def set_value_for_undefined_key_(self, *args, **kwargs): + return self._ekeventstore.setValue_forUndefinedKey_(*args, **kwargs) + + def set_values_for_keys_with_dictionary_(self, *args, **kwargs): + return self._ekeventstore.setValuesForKeysWithDictionary_(*args, **kwargs) + + def set_cached_constraints_(self, *args, **kwargs): + return self._ekeventstore.set_cachedConstraints_(*args, **kwargs) + + def set_cached_default_constraints_(self, *args, **kwargs): + return self._ekeventstore.set_cachedDefaultConstraints_(*args, **kwargs) + + def set_cached_notification_collections_(self, *args, **kwargs): + return self._ekeventstore.set_cachedNotificationCollections_(*args, **kwargs) + + def shared_calendar_invitations_for_entity_types_(self, *args, **kwargs): + return self._ekeventstore.sharedCalendarInvitationsForEntityTypes_(*args, **kwargs) + + def should_permit_organizer_email_from_junk_checks_(self, *args, **kwargs): + return self._ekeventstore.shouldPermitOrganizerEmailFromJunkChecks_(*args, **kwargs) + + def should_permit_organizer_phone_number_from_junk_checks_(self, *args, **kwargs): + return self._ekeventstore.shouldPermitOrganizerPhoneNumberFromJunkChecks_(*args, **kwargs) + + def should_record_object_id_map(self, *args, **kwargs): + return self._ekeventstore.shouldRecordObjectIDMap(*args, **kwargs) + + def should_save_calendar_as_event_calendar_(self, *args, **kwargs): + return self._ekeventstore.shouldSaveCalendarAsEventCalendar_(*args, **kwargs) + + def should_save_calendar_as_reminder_calendar_(self, *args, **kwargs): + return self._ekeventstore.shouldSaveCalendarAsReminderCalendar_(*args, **kwargs) + + def show_date_in_calendar_in_view_(self, *args, **kwargs): + return self._ekeventstore.showDateInCalendar_inView_(*args, **kwargs) + + def show_declined_events(self, *args, **kwargs): + return self._ekeventstore.showDeclinedEvents(*args, **kwargs) + + def show_declined_events_changed_(self, *args, **kwargs): + return self._ekeventstore.showDeclinedEventsChanged_(*args, **kwargs) + + def show_event_in_calendar_with_open_options_in_view_(self, *args, **kwargs): + return self._ekeventstore.showEventInCalendar_withOpenOptions_inView_(*args, **kwargs) + + def siri_suggestions_all_day_alarm_offset(self, *args, **kwargs): + return self._ekeventstore.siriSuggestionsAllDayAlarmOffset(*args, **kwargs) + + def siri_suggestions_timed_alarm_offset(self, *args, **kwargs): + return self._ekeventstore.siriSuggestionsTimedAlarmOffset(*args, **kwargs) + + def skip_modification_validation(self, *args, **kwargs): + return self._ekeventstore.skipModificationValidation(*args, **kwargs) + + def source_identifier_for_event_(self, *args, **kwargs): + return self._ekeventstore.sourceIdentifierForEvent_(*args, **kwargs) + + def source_with_external_id_(self, *args, **kwargs): + return self._ekeventstore.sourceWithExternalID_(*args, **kwargs) + + def source_with_identifier_(self, *args, **kwargs): + return self._ekeventstore.sourceWithIdentifier_(*args, **kwargs) + + def sources(self, *args, **kwargs): + return self._ekeventstore.sources(*args, **kwargs) + + def sources_enabled_for_entity_type_(self, *args, **kwargs): + return self._ekeventstore.sourcesEnabledForEntityType_(*args, **kwargs) + + def start_recording_object_id_change_map(self, *args, **kwargs): + return self._ekeventstore.startRecordingObjectIDChangeMap(*args, **kwargs) + + def stop_recording_object_id_change_map(self, *args, **kwargs): + return self._ekeventstore.stopRecordingObjectIDChangeMap(*args, **kwargs) + + def stored_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.storedValueForKey_(*args, **kwargs) + + def string_value_safe(self, *args, **kwargs): + return self._ekeventstore.stringValueSafe(*args, **kwargs) + + def string_value_safe_(self, *args, **kwargs): + return self._ekeventstore.stringValueSafe_(*args, **kwargs) + + def suggested_event_calendar(self, *args, **kwargs): + return self._ekeventstore.suggestedEventCalendar(*args, **kwargs) + + def superclass(self, *args, **kwargs): + return self._ekeventstore.superclass(*args, **kwargs) + + def supports_b_s_x_p_c_secure_coding(self, *args, **kwargs): + return self._ekeventstore.supportsBSXPCSecureCoding(*args, **kwargs) + + def supports_r_b_s_x_p_c_secure_coding(self, *args, **kwargs): + return self._ekeventstore.supportsRBSXPCSecureCoding(*args, **kwargs) + + def sync_error_count(self, *args, **kwargs): + return self._ekeventstore.syncErrorCount(*args, **kwargs) + + def take_stored_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.takeStoredValue_forKey_(*args, **kwargs) + + def take_stored_values_from_dictionary_(self, *args, **kwargs): + return self._ekeventstore.takeStoredValuesFromDictionary_(*args, **kwargs) + + def take_value_for_key_path_(self, *args, **kwargs): + return self._ekeventstore.takeValue_forKeyPath_(*args, **kwargs) + + def take_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.takeValue_forKey_(*args, **kwargs) + + def take_values_from_dictionary_(self, *args, **kwargs): + return self._ekeventstore.takeValuesFromDictionary_(*args, **kwargs) + + def time_to_leave_location_authorization_status(self, *args, **kwargs): + return self._ekeventstore.timeToLeaveLocationAuthorizationStatus(*args, **kwargs) + + def time_zone(self, *args, **kwargs): + return self._ekeventstore.timeZone(*args, **kwargs) + + def to_many_relationship_keys(self, *args, **kwargs): + return self._ekeventstore.toManyRelationshipKeys(*args, **kwargs) + + def to_one_relationship_keys(self, *args, **kwargs): + return self._ekeventstore.toOneRelationshipKeys(*args, **kwargs) + + def to_p_b_codable(self, *args, **kwargs): + return self._ekeventstore.toPBCodable(*args, **kwargs) + + def travel_eligible_events_in_calendars_start_date_end_date_(self, *args, **kwargs): + return self._ekeventstore.travelEligibleEventsInCalendars_startDate_endDate_(*args, **kwargs) + + def un_safe_bool_value(self, *args, **kwargs): + return self._ekeventstore.un_safeBoolValue(*args, **kwargs) + + def unable_to_set_nil_for_key_(self, *args, **kwargs): + return self._ekeventstore.unableToSetNilForKey_(*args, **kwargs) + + def unbind_(self, *args, **kwargs): + return self._ekeventstore.unbind_(*args, **kwargs) + + def unique_identifiers_for_all_objects_with_changes_related_to_objects_(self, *args, **kwargs): + return self._ekeventstore.uniqueIdentifiersForAllObjectsWithChangesRelatedToObjects_(*args, **kwargs) + + def unique_identifiers_for_events_with_object_ids_(self, *args, **kwargs): + return self._ekeventstore.uniqueIdentifiersForEventsWithObjectIDs_(*args, **kwargs) + + def unregister_for_detailed_change_tracking_(self, *args, **kwargs): + return self._ekeventstore.unregisterForDetailedChangeTracking_(*args, **kwargs) + + def unsaved_changes_queue(self, *args, **kwargs): + return self._ekeventstore.unsavedChangesQueue(*args, **kwargs) + + def update_granted_delegate_action_source_completion_(self, *args, **kwargs): + return self._ekeventstore.updateGrantedDelegate_action_source_completion_(*args, **kwargs) + + def updated_object_ids(self, *args, **kwargs): + return self._ekeventstore.updatedObjectIDs(*args, **kwargs) + + def updated_objects(self, *args, **kwargs): + return self._ekeventstore.updatedObjects(*args, **kwargs) + + def user_interface_item_identifier(self, *args, **kwargs): + return self._ekeventstore.userInterfaceItemIdentifier(*args, **kwargs) + + def utf8_value_safe(self, *args, **kwargs): + return self._ekeventstore.utf8ValueSafe(*args, **kwargs) + + def utf8_value_safe_(self, *args, **kwargs): + return self._ekeventstore.utf8ValueSafe_(*args, **kwargs) + + def validate_take_value_for_key_path_(self, *args, **kwargs): + return self._ekeventstore.validateTakeValue_forKeyPath_(*args, **kwargs) + + def validate_value_for_key_path_error_(self, *args, **kwargs): + return self._ekeventstore.validateValue_forKeyPath_error_(*args, **kwargs) + + def validate_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.validateValue_forKey_(*args, **kwargs) + + def validate_value_for_key_error_(self, *args, **kwargs): + return self._ekeventstore.validateValue_forKey_error_(*args, **kwargs) + + def validated_non_deleted_persistent_object_with_object_id_(self, *args, **kwargs): + return self._ekeventstore.validatedNonDeletedPersistentObjectWithObjectID_(*args, **kwargs) + + def validated_non_deleted_public_object_with_object_id_(self, *args, **kwargs): + return self._ekeventstore.validatedNonDeletedPublicObjectWithObjectID_(*args, **kwargs) + + def value_at_index_in_property_with_key_(self, *args, **kwargs): + return self._ekeventstore.valueAtIndex_inPropertyWithKey_(*args, **kwargs) + + def value_class_for_binding_(self, *args, **kwargs): + return self._ekeventstore.valueClassForBinding_(*args, **kwargs) + + def value_for_key_path_(self, *args, **kwargs): + return self._ekeventstore.valueForKeyPath_(*args, **kwargs) + + def value_for_key_(self, *args, **kwargs): + return self._ekeventstore.valueForKey_(*args, **kwargs) + + def value_for_undefined_key_(self, *args, **kwargs): + return self._ekeventstore.valueForUndefinedKey_(*args, **kwargs) + + def value_with_name_in_property_with_key_(self, *args, **kwargs): + return self._ekeventstore.valueWithName_inPropertyWithKey_(*args, **kwargs) + + def value_with_unique_id_in_property_with_key_(self, *args, **kwargs): + return self._ekeventstore.valueWithUniqueID_inPropertyWithKey_(*args, **kwargs) + + def values_for_keys_(self, *args, **kwargs): + return self._ekeventstore.valuesForKeys_(*args, **kwargs) + + def wait_until_database_updated_to_timestamp_callback_(self, *args, **kwargs): + return self._ekeventstore.waitUntilDatabaseUpdatedToTimestamp_callback_(*args, **kwargs) + + def will_change_value_for_key_(self, *args, **kwargs): + return self._ekeventstore.willChangeValueForKey_(*args, **kwargs) + + def will_change_value_for_key_with_set_mutation_using_objects_(self, *args, **kwargs): + return self._ekeventstore.willChangeValueForKey_withSetMutation_usingObjects_(*args, **kwargs) + + def will_change_values_at_indexes_for_key_(self, *args, **kwargs): + return self._ekeventstore.willChange_valuesAtIndexes_forKey_(*args, **kwargs) + + def zone(self, *args, **kwargs): + return self._ekeventstore.zone(*args, **kwargs) + + +def main(): + """Main function""" + from dspygen.utils.dspy_tools import init_ol + init_ol() + store = EKEventStoreWrapper() + print(store.zone()) + + +if __name__ == '__main__': + main() diff --git a/src/dspygen/experiments/event_kit/ekevent_wrapper.py b/src/dspygen/experiments/event_kit/ekevent_wrapper.py new file mode 100644 index 0000000..b8cf868 --- /dev/null +++ b/src/dspygen/experiments/event_kit/ekevent_wrapper.py @@ -0,0 +1,3094 @@ + +class EKEventWrapper: + def __init__(self): + import EventKit + + self._ekevent = EventKit.EKEvent.alloc().init() + + def c_a_d_object_i_d(self, *args, **kwargs): + return self._ekevent.CADObjectID(*args, **kwargs) + + def c_a_m_l_type(self, *args, **kwargs): + return self._ekevent.CAMLType(*args, **kwargs) + + def c_a_m_l_type_for_key_(self, *args, **kwargs): + return self._ekevent.CAMLTypeForKey_(*args, **kwargs) + + def c_a_m_l_type_supported_for_key_(self, *args, **kwargs): + return self._ekevent.CAMLTypeSupportedForKey_(*args, **kwargs) + + def c_a_add_value_multiplied_by_(self, *args, **kwargs): + return self._ekevent.CA_addValue_multipliedBy_(*args, **kwargs) + + def c_a_archiving_value_for_key_(self, *args, **kwargs): + return self._ekevent.CA_archivingValueForKey_(*args, **kwargs) + + def c_a_copy_numeric_value_(self, *args, **kwargs): + return self._ekevent.CA_copyNumericValue_(*args, **kwargs) + + def c_a_copy_render_value(self, *args, **kwargs): + return self._ekevent.CA_copyRenderValue(*args, **kwargs) + + def c_a_copy_render_value_with_colorspace_(self, *args, **kwargs): + return self._ekevent.CA_copyRenderValueWithColorspace_(*args, **kwargs) + + def c_a_distance_to_value_(self, *args, **kwargs): + return self._ekevent.CA_distanceToValue_(*args, **kwargs) + + def c_a_interpolate_value_by_fraction_(self, *args, **kwargs): + return self._ekevent.CA_interpolateValue_byFraction_(*args, **kwargs) + + def c_a_interpolate_values___interpolator_(self, *args, **kwargs): + return self._ekevent.CA_interpolateValues___interpolator_(*args, **kwargs) + + def c_a_numeric_value_count(self, *args, **kwargs): + return self._ekevent.CA_numericValueCount(*args, **kwargs) + + def c_a_prepare_render_value(self, *args, **kwargs): + return self._ekevent.CA_prepareRenderValue(*args, **kwargs) + + def c_a_round_to_integer_from_value_(self, *args, **kwargs): + return self._ekevent.CA_roundToIntegerFromValue_(*args, **kwargs) + + def c_a_validate_value_for_key_(self, *args, **kwargs): + return self._ekevent.CA_validateValue_forKey_(*args, **kwargs) + + def c_k_assign_to_container_with_i_d_(self, *args, **kwargs): + return self._ekevent.CKAssignToContainerWithID_(*args, **kwargs) + + def c_k_description(self, *args, **kwargs): + return self._ekevent.CKDescription(*args, **kwargs) + + def c_k_description_class_name(self, *args, **kwargs): + return self._ekevent.CKDescriptionClassName(*args, **kwargs) + + def c_k_description_properties_with_public_private_should_expand_(self, *args, **kwargs): + return self._ekevent.CKDescriptionPropertiesWithPublic_private_shouldExpand_(*args, **kwargs) + + def c_k_description_redact_avoid_short_description_(self, *args, **kwargs): + return self._ekevent.CKDescriptionRedact_avoidShortDescription_(*args, **kwargs) + + def c_k_description_should_print_pointer(self, *args, **kwargs): + return self._ekevent.CKDescriptionShouldPrintPointer(*args, **kwargs) + + def c_k_expanded_description(self, *args, **kwargs): + return self._ekevent.CKExpandedDescription(*args, **kwargs) + + def c_k_object_description_redact_(self, *args, **kwargs): + return self._ekevent.CKObjectDescriptionRedact_(*args, **kwargs) + + def c_k_object_description_redact_avoid_short_description_(self, *args, **kwargs): + return self._ekevent.CKObjectDescriptionRedact_avoidShortDescription_(*args, **kwargs) + + def c_k_properties_description(self, *args, **kwargs): + return self._ekevent.CKPropertiesDescription(*args, **kwargs) + + def c_k_redacted_description(self, *args, **kwargs): + return self._ekevent.CKRedactedDescription(*args, **kwargs) + + def c_k_unredacted_description(self, *args, **kwargs): + return self._ekevent.CKUnredactedDescription(*args, **kwargs) + + def cal_class_name(self, *args, **kwargs): + return self._ekevent.CalClassName(*args, **kwargs) + + def n_s_lifeguard_autorelease(self, *args, **kwargs): + return self._ekevent.NSLifeguard_autorelease(*args, **kwargs) + + def n_s_representation(self, *args, **kwargs): + return self._ekevent.NSRepresentation(*args, **kwargs) + + def n_s_representation(self, *args, **kwargs): + return self._ekevent.NSRepresentation(*args, **kwargs) + + def n_s_observation_for_key_path_options_block_(self, *args, **kwargs): + return self._ekevent.NS_observationForKeyPath_options_block_(*args, **kwargs) + + def n_s_observation_for_key_paths_options_block_(self, *args, **kwargs): + return self._ekevent.NS_observationForKeyPaths_options_block_(*args, **kwargs) + + def r_b_s_is_x_p_c_object(self, *args, **kwargs): + return self._ekevent.RBSIsXPCObject(*args, **kwargs) + + def s_c_n_u_i_name(self, *args, **kwargs): + return self._ekevent.SCNUI_name(*args, **kwargs) + + def s_c_n_setup_display_link_with_queue_screen_policy_(self, *args, **kwargs): + return self._ekevent.SCN_setupDisplayLinkWithQueue_screen_policy_(*args, **kwargs) + + def u_r_l(self, *args, **kwargs): + return self._ekevent.URL(*args, **kwargs) + + def u_r_l(self, *args, **kwargs): + return self._ekevent.URL(*args, **kwargs) + + def u_r_l_string(self, *args, **kwargs): + return self._ekevent.URLString(*args, **kwargs) + + def u_u_i_d(self, *args, **kwargs): + return self._ekevent.UUID(*args, **kwargs) + + def v_n_compute_device_performance_score(self, *args, **kwargs): + return self._ekevent.VNComputeDevicePerformanceScore(*args, **kwargs) + + def v_n_compute_device_type(self, *args, **kwargs): + return self._ekevent.VNComputeDeviceType(*args, **kwargs) + + def ab_case_insensitive_is_equal_(self, *args, **kwargs): + return self._ekevent.abCaseInsensitiveIsEqual_(*args, **kwargs) + + def ab_dictionary_with_values_for_key_paths_(self, *args, **kwargs): + return self._ekevent.abDictionaryWithValuesForKeyPaths_(*args, **kwargs) + + def ab_remove_observer_ignoring_exceptions_for_key_path_(self, *args, **kwargs): + return self._ekevent.abRemoveObserverIgnoringExceptions_forKeyPath_(*args, **kwargs) + + def accept_proposed_time_notification_from_attendee_(self, *args, **kwargs): + return self._ekevent.acceptProposedTimeNotificationFromAttendee_(*args, **kwargs) + + def accessibility_add_temporary_child_(self, *args, **kwargs): + return self._ekevent.accessibilityAddTemporaryChild_(*args, **kwargs) + + def accessibility_allows_overridden_attributes_when_ignored(self, *args, **kwargs): + return self._ekevent.accessibilityAllowsOverriddenAttributesWhenIgnored(*args, **kwargs) + + def accessibility_array_attribute_count_(self, *args, **kwargs): + return self._ekevent.accessibilityArrayAttributeCount_(*args, **kwargs) + + def accessibility_array_attribute_values_index_max_count_(self, *args, **kwargs): + return self._ekevent.accessibilityArrayAttributeValues_index_maxCount_(*args, **kwargs) + + def accessibility_attribute_value_for_parameter_(self, *args, **kwargs): + return self._ekevent.accessibilityAttributeValue_forParameter_(*args, **kwargs) + + def accessibility_attributed_value_for_string_attribute_attribute_for_parameter_(self, *args, **kwargs): + return self._ekevent.accessibilityAttributedValueForStringAttributeAttributeForParameter_(*args, **kwargs) + + def accessibility_braille_map_render_region(self, *args, **kwargs): + return self._ekevent.accessibilityBrailleMapRenderRegion(*args, **kwargs) + + def accessibility_braille_map_renderer(self, *args, **kwargs): + return self._ekevent.accessibilityBrailleMapRenderer(*args, **kwargs) + + def accessibility_decode_overridden_attributes_(self, *args, **kwargs): + return self._ekevent.accessibilityDecodeOverriddenAttributes_(*args, **kwargs) + + def accessibility_encode_overridden_attributes_(self, *args, **kwargs): + return self._ekevent.accessibilityEncodeOverriddenAttributes_(*args, **kwargs) + + def accessibility_index_for_child_u_i_element_attribute_for_parameter_(self, *args, **kwargs): + return self._ekevent.accessibilityIndexForChildUIElementAttributeForParameter_(*args, **kwargs) + + def accessibility_index_of_child_(self, *args, **kwargs): + return self._ekevent.accessibilityIndexOfChild_(*args, **kwargs) + + def accessibility_overridden_attributes(self, *args, **kwargs): + return self._ekevent.accessibilityOverriddenAttributes(*args, **kwargs) + + def accessibility_parameterized_attribute_names(self, *args, **kwargs): + return self._ekevent.accessibilityParameterizedAttributeNames(*args, **kwargs) + + def accessibility_perform_show_menu_of_child_(self, *args, **kwargs): + return self._ekevent.accessibilityPerformShowMenuOfChild_(*args, **kwargs) + + def accessibility_presenter_process_identifier(self, *args, **kwargs): + return self._ekevent.accessibilityPresenterProcessIdentifier(*args, **kwargs) + + def accessibility_remove_temporary_child_(self, *args, **kwargs): + return self._ekevent.accessibilityRemoveTemporaryChild_(*args, **kwargs) + + def accessibility_replace_range_with_text_(self, *args, **kwargs): + return self._ekevent.accessibilityReplaceRange_withText_(*args, **kwargs) + + def accessibility_set_override_value_for_attribute_(self, *args, **kwargs): + return self._ekevent.accessibilitySetOverrideValue_forAttribute_(*args, **kwargs) + + def accessibility_set_presenter_process_identifier_(self, *args, **kwargs): + return self._ekevent.accessibilitySetPresenterProcessIdentifier_(*args, **kwargs) + + def accessibility_should_send_notification_(self, *args, **kwargs): + return self._ekevent.accessibilityShouldSendNotification_(*args, **kwargs) + + def accessibility_should_use_unique_id(self, *args, **kwargs): + return self._ekevent.accessibilityShouldUseUniqueId(*args, **kwargs) + + def accessibility_supports_custom_element_data(self, *args, **kwargs): + return self._ekevent.accessibilitySupportsCustomElementData(*args, **kwargs) + + def accessibility_supports_notifications(self, *args, **kwargs): + return self._ekevent.accessibilitySupportsNotifications(*args, **kwargs) + + def accessibility_supports_overridden_attributes(self, *args, **kwargs): + return self._ekevent.accessibilitySupportsOverriddenAttributes(*args, **kwargs) + + def accessibility_temporary_children(self, *args, **kwargs): + return self._ekevent.accessibilityTemporaryChildren(*args, **kwargs) + + def accessibility_visible_area(self, *args, **kwargs): + return self._ekevent.accessibilityVisibleArea(*args, **kwargs) + + def action(self, *args, **kwargs): + return self._ekevent.action(*args, **kwargs) + + def action_string(self, *args, **kwargs): + return self._ekevent.actionString(*args, **kwargs) + + def actions(self, *args, **kwargs): + return self._ekevent.actions(*args, **kwargs) + + def actions_state(self, *args, **kwargs): + return self._ekevent.actionsState(*args, **kwargs) + + def add_alarm_(self, *args, **kwargs): + return self._ekevent.addAlarm_(*args, **kwargs) + + def add_attachment_(self, *args, **kwargs): + return self._ekevent.addAttachment_(*args, **kwargs) + + def add_attendee_(self, *args, **kwargs): + return self._ekevent.addAttendee_(*args, **kwargs) + + def add_cached_melted_object_for_multi_value_key_(self, *args, **kwargs): + return self._ekevent.addCachedMeltedObject_forMultiValueKey_(*args, **kwargs) + + def add_chained_observers_(self, *args, **kwargs): + return self._ekevent.addChainedObservers_(*args, **kwargs) + + def add_changes_from_object_(self, *args, **kwargs): + return self._ekevent.addChangesFromObject_(*args, **kwargs) + + def add_changes_from_object_copying_backing_objects_(self, *args, **kwargs): + return self._ekevent.addChangesFromObject_copyingBackingObjects_(*args, **kwargs) + + def add_changes_(self, *args, **kwargs): + return self._ekevent.addChanges_(*args, **kwargs) + + def add_co_commit_object_(self, *args, **kwargs): + return self._ekevent.addCoCommitObject_(*args, **kwargs) + + def add_conference_rooms_(self, *args, **kwargs): + return self._ekevent.addConferenceRooms_(*args, **kwargs) + + def add_event_action_(self, *args, **kwargs): + return self._ekevent.addEventAction_(*args, **kwargs) + + def add_multi_changed_object_value_for_key_(self, *args, **kwargs): + return self._ekevent.addMultiChangedObjectValue_forKey_(*args, **kwargs) + + def add_multi_changed_object_values_for_key_(self, *args, **kwargs): + return self._ekevent.addMultiChangedObjectValues_forKey_(*args, **kwargs) + + def add_object_to_both_sides_of_relationship_with_key_(self, *args, **kwargs): + return self._ekevent.addObject_toBothSidesOfRelationshipWithKey_(*args, **kwargs) + + def add_object_to_property_with_key_(self, *args, **kwargs): + return self._ekevent.addObject_toPropertyWithKey_(*args, **kwargs) + + def add_observation_transformer_(self, *args, **kwargs): + return self._ekevent.addObservationTransformer_(*args, **kwargs) + + def add_observer_block_(self, *args, **kwargs): + return self._ekevent.addObserverBlock_(*args, **kwargs) + + def add_observer_(self, *args, **kwargs): + return self._ekevent.addObserver_(*args, **kwargs) + + def add_observer_for_key_path_options_context_(self, *args, **kwargs): + return self._ekevent.addObserver_forKeyPath_options_context_(*args, **kwargs) + + def add_observer_for_observable_key_path_(self, *args, **kwargs): + return self._ekevent.addObserver_forObservableKeyPath_(*args, **kwargs) + + def add_organizer_and_self_attendee_for_new_invitation(self, *args, **kwargs): + return self._ekevent.addOrganizerAndSelfAttendeeForNewInvitation(*args, **kwargs) + + def add_recurrence_rule_(self, *args, **kwargs): + return self._ekevent.addRecurrenceRule_(*args, **kwargs) + + def additional_frozen_properties(self, *args, **kwargs): + return self._ekevent.additionalFrozenProperties(*args, **kwargs) + + def additional_melted_objects(self, *args, **kwargs): + return self._ekevent.additionalMeltedObjects(*args, **kwargs) + + def adjust_date_from_u_t_c_(self, *args, **kwargs): + return self._ekevent.adjustDateFromUTC_(*args, **kwargs) + + def adjusted_persisted_date_for_date_persisted_date_is_in_u_t_c_with_adjustment_mode_pin_mode_client_calendar_date_(self, *args, **kwargs): + return self._ekevent.adjustedPersistedDateForDate_persistedDateIsInUTC_withAdjustmentMode_pinMode_clientCalendarDate_(*args, **kwargs) + + def adjusted_persisted_date_for_date_with_adjustment_mode_pin_mode_client_calendar_date_(self, *args, **kwargs): + return self._ekevent.adjustedPersistedDateForDate_withAdjustmentMode_pinMode_clientCalendarDate_(*args, **kwargs) + + def alarms(self, *args, **kwargs): + return self._ekevent.alarms(*args, **kwargs) + + def all_alarms(self, *args, **kwargs): + return self._ekevent.allAlarms(*args, **kwargs) + + def all_alarms_set(self, *args, **kwargs): + return self._ekevent.allAlarmsSet(*args, **kwargs) + + def all_property_keys(self, *args, **kwargs): + return self._ekevent.allPropertyKeys(*args, **kwargs) + + def allows_alarm_modifications(self, *args, **kwargs): + return self._ekevent.allowsAlarmModifications(*args, **kwargs) + + def allows_alarm_modifications(self, *args, **kwargs): + return self._ekevent.allowsAlarmModifications(*args, **kwargs) + + def allows_all_day_modifications(self, *args, **kwargs): + return self._ekevent.allowsAllDayModifications(*args, **kwargs) + + def allows_attendees_modifications(self, *args, **kwargs): + return self._ekevent.allowsAttendeesModifications(*args, **kwargs) + + def allows_attendees_modifications(self, *args, **kwargs): + return self._ekevent.allowsAttendeesModifications(*args, **kwargs) + + def allows_availability_modifications(self, *args, **kwargs): + return self._ekevent.allowsAvailabilityModifications(*args, **kwargs) + + def allows_calendar_modifications(self, *args, **kwargs): + return self._ekevent.allowsCalendarModifications(*args, **kwargs) + + def allows_calendar_modifications(self, *args, **kwargs): + return self._ekevent.allowsCalendarModifications(*args, **kwargs) + + def allows_participation_status_modifications(self, *args, **kwargs): + return self._ekevent.allowsParticipationStatusModifications(*args, **kwargs) + + def allows_privacy_level_modifications(self, *args, **kwargs): + return self._ekevent.allowsPrivacyLevelModifications(*args, **kwargs) + + def allows_proposed_time_modifications(self, *args, **kwargs): + return self._ekevent.allowsProposedTimeModifications(*args, **kwargs) + + def allows_recurrence_modifications(self, *args, **kwargs): + return self._ekevent.allowsRecurrenceModifications(*args, **kwargs) + + def allows_recurrence_modifications(self, *args, **kwargs): + return self._ekevent.allowsRecurrenceModifications(*args, **kwargs) + + def allows_response_comment_modifications(self, *args, **kwargs): + return self._ekevent.allowsResponseCommentModifications(*args, **kwargs) + + def allows_spans_other_than_this_event(self, *args, **kwargs): + return self._ekevent.allowsSpansOtherThanThisEvent(*args, **kwargs) + + def allows_spans_other_than_this_event(self, *args, **kwargs): + return self._ekevent.allowsSpansOtherThanThisEvent(*args, **kwargs) + + def allows_travel_time_modifications(self, *args, **kwargs): + return self._ekevent.allowsTravelTimeModifications(*args, **kwargs) + + def allows_weak_reference(self, *args, **kwargs): + return self._ekevent.allowsWeakReference(*args, **kwargs) + + def app_link(self, *args, **kwargs): + return self._ekevent.appLink(*args, **kwargs) + + def apply_changes_(self, *args, **kwargs): + return self._ekevent.applyChanges_(*args, **kwargs) + + def attachments(self, *args, **kwargs): + return self._ekevent.attachments(*args, **kwargs) + + def attachments_set(self, *args, **kwargs): + return self._ekevent.attachmentsSet(*args, **kwargs) + + def attendee_comment(self, *args, **kwargs): + return self._ekevent.attendeeComment(*args, **kwargs) + + def attendee_declined_start_date(self, *args, **kwargs): + return self._ekevent.attendeeDeclinedStartDate(*args, **kwargs) + + def attendee_for_me(self, *args, **kwargs): + return self._ekevent.attendeeForMe(*args, **kwargs) + + def attendee_matching_email_address_(self, *args, **kwargs): + return self._ekevent.attendeeMatchingEmailAddress_(*args, **kwargs) + + def attendee_proposed_start_date(self, *args, **kwargs): + return self._ekevent.attendeeProposedStartDate(*args, **kwargs) + + def attendee_reply_changed(self, *args, **kwargs): + return self._ekevent.attendeeReplyChanged(*args, **kwargs) + + def attendee_status(self, *args, **kwargs): + return self._ekevent.attendeeStatus(*args, **kwargs) + + def attendees(self, *args, **kwargs): + return self._ekevent.attendees(*args, **kwargs) + + def attendees_not_including_organizer(self, *args, **kwargs): + return self._ekevent.attendeesNotIncludingOrganizer(*args, **kwargs) + + def attendees_raw(self, *args, **kwargs): + return self._ekevent.attendeesRaw(*args, **kwargs) + + def attribute_keys(self, *args, **kwargs): + return self._ekevent.attributeKeys(*args, **kwargs) + + def augment_melted_object_cache_(self, *args, **kwargs): + return self._ekevent.augmentMeltedObjectCache_(*args, **kwargs) + + def auto_content_accessing_proxy(self, *args, **kwargs): + return self._ekevent.autoContentAccessingProxy(*args, **kwargs) + + def automatic_location_geocoding_allowed(self, *args, **kwargs): + return self._ekevent.automaticLocationGeocodingAllowed(*args, **kwargs) + + def autorelease(self, *args, **kwargs): + return self._ekevent.autorelease(*args, **kwargs) + + def availability(self, *args, **kwargs): + return self._ekevent.availability(*args, **kwargs) + + def awake_after_using_coder_(self, *args, **kwargs): + return self._ekevent.awakeAfterUsingCoder_(*args, **kwargs) + + def awake_from_nib(self, *args, **kwargs): + return self._ekevent.awakeFromNib(*args, **kwargs) + + def backing_object(self, *args, **kwargs): + return self._ekevent.backingObject(*args, **kwargs) + + def backing_object_of_child_object_with_relationship_key_(self, *args, **kwargs): + return self._ekevent.backingObjectOfChildObject_withRelationshipKey_(*args, **kwargs) + + def bind_to_object_with_key_path_options_(self, *args, **kwargs): + return self._ekevent.bind_toObject_withKeyPath_options_(*args, **kwargs) + + def birthday_contact_identifier(self, *args, **kwargs): + return self._ekevent.birthdayContactIdentifier(*args, **kwargs) + + def birthday_contact_name(self, *args, **kwargs): + return self._ekevent.birthdayContactName(*args, **kwargs) + + def birthday_i_d(self, *args, **kwargs): + return self._ekevent.birthdayID(*args, **kwargs) + + def birthday_person_i_d(self, *args, **kwargs): + return self._ekevent.birthdayPersonID(*args, **kwargs) + + def birthday_person_unique_i_d(self, *args, **kwargs): + return self._ekevent.birthdayPersonUniqueID(*args, **kwargs) + + def bool_value_safe(self, *args, **kwargs): + return self._ekevent.boolValueSafe(*args, **kwargs) + + def bool_value_safe_(self, *args, **kwargs): + return self._ekevent.boolValueSafe_(*args, **kwargs) + + def bs_is_plistable_type(self, *args, **kwargs): + return self._ekevent.bs_isPlistableType(*args, **kwargs) + + def bs_secure_encoded(self, *args, **kwargs): + return self._ekevent.bs_secureEncoded(*args, **kwargs) + + def cached_junk_status(self, *args, **kwargs): + return self._ekevent.cachedJunkStatus(*args, **kwargs) + + def cached_melted_child_identifier_to_parent_map(self, *args, **kwargs): + return self._ekevent.cachedMeltedChildIdentifierToParentMap(*args, **kwargs) + + def cached_melted_object_for_single_value_key_(self, *args, **kwargs): + return self._ekevent.cachedMeltedObjectForSingleValueKey_(*args, **kwargs) + + def cached_melted_objects(self, *args, **kwargs): + return self._ekevent.cachedMeltedObjects(*args, **kwargs) + + def cached_melted_objects(self, *args, **kwargs): + return self._ekevent.cachedMeltedObjects(*args, **kwargs) + + def cached_melted_objects_for_multi_value_key_(self, *args, **kwargs): + return self._ekevent.cachedMeltedObjectsForMultiValueKey_(*args, **kwargs) + + def cached_value_for_key_(self, *args, **kwargs): + return self._ekevent.cachedValueForKey_(*args, **kwargs) + + def cached_value_for_key_expecting_cached_value_for_master_key_related_keys_populate_block_(self, *args, **kwargs): + return self._ekevent.cachedValueForKey_expectingCachedValue_forMasterKey_relatedKeys_populateBlock_(*args, **kwargs) + + def cached_value_for_key_populate_block_(self, *args, **kwargs): + return self._ekevent.cachedValueForKey_populateBlock_(*args, **kwargs) + + def calendar(self, *args, **kwargs): + return self._ekevent.calendar(*args, **kwargs) + + def calendar_item_external_identifier(self, *args, **kwargs): + return self._ekevent.calendarItemExternalIdentifier(*args, **kwargs) + + def calendar_item_identifier(self, *args, **kwargs): + return self._ekevent.calendarItemIdentifier(*args, **kwargs) + + def calendar_scale(self, *args, **kwargs): + return self._ekevent.calendarScale(*args, **kwargs) + + def can_be_converted_to_full_object(self, *args, **kwargs): + return self._ekevent.canBeConvertedToFullObject(*args, **kwargs) + + def can_be_responded_to(self, *args, **kwargs): + return self._ekevent.canBeRespondedTo(*args, **kwargs) + + def can_detach_single_occurrence(self, *args, **kwargs): + return self._ekevent.canDetachSingleOccurrence(*args, **kwargs) + + def can_forward(self, *args, **kwargs): + return self._ekevent.canForward(*args, **kwargs) + + def can_move_or_copy_to_calendar_from_calendar_error_(self, *args, **kwargs): + return self._ekevent.canMoveOrCopyToCalendar_fromCalendar_error_(*args, **kwargs) + + def can_move_or_copy_to_calendar_from_calendar_error_(self, *args, **kwargs): + return self._ekevent.canMoveOrCopyToCalendar_fromCalendar_error_(*args, **kwargs) + + def can_move_to_calendar_error_(self, *args, **kwargs): + return self._ekevent.canMoveToCalendar_error_(*args, **kwargs) + + def can_move_to_calendar_from_calendar_allowed_requirements_error_(self, *args, **kwargs): + return self._ekevent.canMoveToCalendar_fromCalendar_allowedRequirements_error_(*args, **kwargs) + + def can_move_to_calendar_from_calendar_error_(self, *args, **kwargs): + return self._ekevent.canMoveToCalendar_fromCalendar_error_(*args, **kwargs) + + def can_move_to_calendar_from_calendar_error_(self, *args, **kwargs): + return self._ekevent.canMoveToCalendar_fromCalendar_error_(*args, **kwargs) + + def change_set(self, *args, **kwargs): + return self._ekevent.changeSet(*args, **kwargs) + + def changed_keys(self, *args, **kwargs): + return self._ekevent.changedKeys(*args, **kwargs) + + def changing_all_day_property_is_allowed(self, *args, **kwargs): + return self._ekevent.changingAllDayPropertyIsAllowed(*args, **kwargs) + + def ck_bind_in_statement_at_index_(self, *args, **kwargs): + return self._ekevent.ck_bindInStatement_atIndex_(*args, **kwargs) + + def cksqlcs_append_s_q_l_constant_value_to_string_(self, *args, **kwargs): + return self._ekevent.cksqlcs_appendSQLConstantValueToString_(*args, **kwargs) + + def cksqlcs_archived_object_binding_value_(self, *args, **kwargs): + return self._ekevent.cksqlcs_archivedObjectBindingValue_(*args, **kwargs) + + def cksqlcs_bind_archived_object_index_db_(self, *args, **kwargs): + return self._ekevent.cksqlcs_bindArchivedObject_index_db_(*args, **kwargs) + + def cksqlcs_bind_blob_index_db_(self, *args, **kwargs): + return self._ekevent.cksqlcs_bindBlob_index_db_(*args, **kwargs) + + def cksqlcs_bind_double_index_db_(self, *args, **kwargs): + return self._ekevent.cksqlcs_bindDouble_index_db_(*args, **kwargs) + + def cksqlcs_bind_int64_index_db_(self, *args, **kwargs): + return self._ekevent.cksqlcs_bindInt64_index_db_(*args, **kwargs) + + def cksqlcs_bind_text_index_db_(self, *args, **kwargs): + return self._ekevent.cksqlcs_bindText_index_db_(*args, **kwargs) + + def cksqlcs_blob_binding_value_destructor_error_(self, *args, **kwargs): + return self._ekevent.cksqlcs_blobBindingValue_destructor_error_(*args, **kwargs) + + def cksqlcs_double_binding_value_(self, *args, **kwargs): + return self._ekevent.cksqlcs_doubleBindingValue_(*args, **kwargs) + + def cksqlcs_int64_binding_value_(self, *args, **kwargs): + return self._ekevent.cksqlcs_int64BindingValue_(*args, **kwargs) + + def cksqlcs_text_binding_value_destructor_error_(self, *args, **kwargs): + return self._ekevent.cksqlcs_textBindingValue_destructor_error_(*args, **kwargs) + + def class_code(self, *args, **kwargs): + return self._ekevent.classCode(*args, **kwargs) + + def class_description(self, *args, **kwargs): + return self._ekevent.classDescription(*args, **kwargs) + + def class_description_for_destination_key_(self, *args, **kwargs): + return self._ekevent.classDescriptionForDestinationKey_(*args, **kwargs) + + def class_for_archiver(self, *args, **kwargs): + return self._ekevent.classForArchiver(*args, **kwargs) + + def class_for_coder(self, *args, **kwargs): + return self._ekevent.classForCoder(*args, **kwargs) + + def class_for_keyed_archiver(self, *args, **kwargs): + return self._ekevent.classForKeyedArchiver(*args, **kwargs) + + def class_for_port_coder(self, *args, **kwargs): + return self._ekevent.classForPortCoder(*args, **kwargs) + + def class_name(self, *args, **kwargs): + return self._ekevent.className(*args, **kwargs) + + def class__(self, *args, **kwargs): + return self._ekevent.class__(*args, **kwargs) + + def clear_cached_time_values(self, *args, **kwargs): + return self._ekevent.clearCachedTimeValues(*args, **kwargs) + + def clear_cached_value_for_key_(self, *args, **kwargs): + return self._ekevent.clearCachedValueForKey_(*args, **kwargs) + + def clear_cached_values_for_keys_(self, *args, **kwargs): + return self._ekevent.clearCachedValuesForKeys_(*args, **kwargs) + + def clear_detected_conference_u_r_l(self, *args, **kwargs): + return self._ekevent.clearDetectedConferenceURL(*args, **kwargs) + + def clear_invitation_status(self, *args, **kwargs): + return self._ekevent.clearInvitationStatus(*args, **kwargs) + + def clear_modified_flags(self, *args, **kwargs): + return self._ekevent.clearModifiedFlags(*args, **kwargs) + + def clear_parsed_conference(self, *args, **kwargs): + return self._ekevent.clearParsedConference(*args, **kwargs) + + def clear_properties(self, *args, **kwargs): + return self._ekevent.clearProperties(*args, **kwargs) + + def clear_virtual_conference_u_r_ls_queued_for_invalidation(self, *args, **kwargs): + return self._ekevent.clearVirtualConferenceURLsQueuedForInvalidation(*args, **kwargs) + + def client_location(self, *args, **kwargs): + return self._ekevent.clientLocation(*args, **kwargs) + + def coerce_value_for_scripting_properties_(self, *args, **kwargs): + return self._ekevent.coerceValueForScriptingProperties_(*args, **kwargs) + + def coerce_value_for_key_(self, *args, **kwargs): + return self._ekevent.coerceValue_forKey_(*args, **kwargs) + + def committed_constraints(self, *args, **kwargs): + return self._ekevent.committedConstraints(*args, **kwargs) + + def committed_constraints(self, *args, **kwargs): + return self._ekevent.committedConstraints(*args, **kwargs) + + def committed_copy(self, *args, **kwargs): + return self._ekevent.committedCopy(*args, **kwargs) + + def committed_copy(self, *args, **kwargs): + return self._ekevent.committedCopy(*args, **kwargs) + + def committed_value_for_key_(self, *args, **kwargs): + return self._ekevent.committedValueForKey_(*args, **kwargs) + + def committed_value_for_key_(self, *args, **kwargs): + return self._ekevent.committedValueForKey_(*args, **kwargs) + + def compare_original_start_date_with_event_(self, *args, **kwargs): + return self._ekevent.compareOriginalStartDateWithEvent_(*args, **kwargs) + + def compare_start_date_including_travel_with_event_(self, *args, **kwargs): + return self._ekevent.compareStartDateIncludingTravelWithEvent_(*args, **kwargs) + + def compare_start_date_with_event_(self, *args, **kwargs): + return self._ekevent.compareStartDateWithEvent_(*args, **kwargs) + + def completed(self, *args, **kwargs): + return self._ekevent.completed(*args, **kwargs) + + def conference_u_r_l(self, *args, **kwargs): + return self._ekevent.conferenceURL(*args, **kwargs) + + def conference_u_r_l_detected(self, *args, **kwargs): + return self._ekevent.conferenceURLDetected(*args, **kwargs) + + def conference_u_r_l_detected_string(self, *args, **kwargs): + return self._ekevent.conferenceURLDetectedString(*args, **kwargs) + + def conference_u_r_l_for_display(self, *args, **kwargs): + return self._ekevent.conferenceURLForDisplay(*args, **kwargs) + + def conference_u_r_l_for_display_cached(self, *args, **kwargs): + return self._ekevent.conferenceURLForDisplayCached(*args, **kwargs) + + def conference_u_r_l_string(self, *args, **kwargs): + return self._ekevent.conferenceURLString(*args, **kwargs) + + def confirm_predicted_location_(self, *args, **kwargs): + return self._ekevent.confirmPredictedLocation_(*args, **kwargs) + + def conforms_to_protocol_(self, *args, **kwargs): + return self._ekevent.conformsToProtocol_(*args, **kwargs) + + def conforms_to_recurrence_rules_(self, *args, **kwargs): + return self._ekevent.conformsToRecurrenceRules_(*args, **kwargs) + + def constraints(self, *args, **kwargs): + return self._ekevent.constraints(*args, **kwargs) + + def constraints(self, *args, **kwargs): + return self._ekevent.constraints(*args, **kwargs) + + def copy(self, *args, **kwargs): + return self._ekevent.copy(*args, **kwargs) + + def copy_melted_object_cache(self, *args, **kwargs): + return self._ekevent.copyMeltedObjectCache(*args, **kwargs) + + def copy_scripting_value_for_key_with_properties_(self, *args, **kwargs): + return self._ekevent.copyScriptingValue_forKey_withProperties_(*args, **kwargs) + + def copy_to_calendar_with_options_(self, *args, **kwargs): + return self._ekevent.copyToCalendar_withOptions_(*args, **kwargs) + + def copy_with_zone_(self, *args, **kwargs): + return self._ekevent.copyWithZone_(*args, **kwargs) + + def could_be_junk(self, *args, **kwargs): + return self._ekevent.couldBeJunk(*args, **kwargs) + + def count_of_attendee_proposed_times(self, *args, **kwargs): + return self._ekevent.countOfAttendeeProposedTimes(*args, **kwargs) + + def create_key_value_binding_for_key_type_mask_(self, *args, **kwargs): + return self._ekevent.createKeyValueBindingForKey_typeMask_(*args, **kwargs) + + def creation_date(self, *args, **kwargs): + return self._ekevent.creationDate(*args, **kwargs) + + def current_user_generalized_participant_role(self, *args, **kwargs): + return self._ekevent.currentUserGeneralizedParticipantRole(*args, **kwargs) + + def current_user_may_act_as_organizer(self, *args, **kwargs): + return self._ekevent.currentUserMayActAsOrganizer(*args, **kwargs) + + def custom_object_for_key_(self, *args, **kwargs): + return self._ekevent.customObjectForKey_(*args, **kwargs) + + def date_changed(self, *args, **kwargs): + return self._ekevent.dateChanged(*args, **kwargs) + + def days_spanned_in_calendar_(self, *args, **kwargs): + return self._ekevent.daysSpannedInCalendar_(*args, **kwargs) + + def dealloc(self, *args, **kwargs): + return self._ekevent.dealloc(*args, **kwargs) + + def debug_description(self, *args, **kwargs): + return self._ekevent.debugDescription(*args, **kwargs) + + def decline_proposed_time_notification_from_attendee_(self, *args, **kwargs): + return self._ekevent.declineProposedTimeNotificationFromAttendee_(*args, **kwargs) + + def default_alarm(self, *args, **kwargs): + return self._ekevent.defaultAlarm(*args, **kwargs) + + def default_alarm(self, *args, **kwargs): + return self._ekevent.defaultAlarm(*args, **kwargs) + + def default_alarm_was_deleted(self, *args, **kwargs): + return self._ekevent.defaultAlarmWasDeleted(*args, **kwargs) + + def default_alarms(self, *args, **kwargs): + return self._ekevent.defaultAlarms(*args, **kwargs) + + def default_alarms(self, *args, **kwargs): + return self._ekevent.defaultAlarms(*args, **kwargs) + + def delete_persistent_object(self, *args, **kwargs): + return self._ekevent.deletePersistentObject(*args, **kwargs) + + def description(self, *args, **kwargs): + return self._ekevent.description(*args, **kwargs) + + def description(self, *args, **kwargs): + return self._ekevent.description(*args, **kwargs) + + def description(self, *args, **kwargs): + return self._ekevent.description(*args, **kwargs) + + def description(self, *args, **kwargs): + return self._ekevent.description(*args, **kwargs) + + def description_at_indent_(self, *args, **kwargs): + return self._ekevent.descriptionAtIndent_(*args, **kwargs) + + def detached_items(self, *args, **kwargs): + return self._ekevent.detachedItems(*args, **kwargs) + + def dictionary_with_values_for_keys_(self, *args, **kwargs): + return self._ekevent.dictionaryWithValuesForKeys_(*args, **kwargs) + + def did_change_value_for_key_(self, *args, **kwargs): + return self._ekevent.didChangeValueForKey_(*args, **kwargs) + + def did_change_value_for_key_with_set_mutation_using_objects_(self, *args, **kwargs): + return self._ekevent.didChangeValueForKey_withSetMutation_usingObjects_(*args, **kwargs) + + def did_change_values_at_indexes_for_key_(self, *args, **kwargs): + return self._ekevent.didChange_valuesAtIndexes_forKey_(*args, **kwargs) + + def diff_from_committed(self, *args, **kwargs): + return self._ekevent.diffFromCommitted(*args, **kwargs) + + def diff_with_object_(self, *args, **kwargs): + return self._ekevent.diffWithObject_(*args, **kwargs) + + def disallow_propose_new_time(self, *args, **kwargs): + return self._ekevent.disallowProposeNewTime(*args, **kwargs) + + def dismiss_accepted_propose_new_time_notification(self, *args, **kwargs): + return self._ekevent.dismissAcceptedProposeNewTimeNotification(*args, **kwargs) + + def dismiss_attendee_replied_notification(self, *args, **kwargs): + return self._ekevent.dismissAttendeeRepliedNotification(*args, **kwargs) + + def display_notes(self, *args, **kwargs): + return self._ekevent.displayNotes(*args, **kwargs) + + def display_notes(self, *args, **kwargs): + return self._ekevent.displayNotes(*args, **kwargs) + + def does_contain_(self, *args, **kwargs): + return self._ekevent.doesContain_(*args, **kwargs) + + def does_not_recognize_selector_(self, *args, **kwargs): + return self._ekevent.doesNotRecognizeSelector_(*args, **kwargs) + + def does_not_recognize_selector_(self, *args, **kwargs): + return self._ekevent.doesNotRecognizeSelector_(*args, **kwargs) + + def double_value_safe(self, *args, **kwargs): + return self._ekevent.doubleValueSafe(*args, **kwargs) + + def double_value_safe_(self, *args, **kwargs): + return self._ekevent.doubleValueSafe_(*args, **kwargs) + + def duplicate(self, *args, **kwargs): + return self._ekevent.duplicate(*args, **kwargs) + + def duplicate_to_event_store_(self, *args, **kwargs): + return self._ekevent.duplicateToEventStore_(*args, **kwargs) + + def duplicate_with_options_(self, *args, **kwargs): + return self._ekevent.duplicateWithOptions_(*args, **kwargs) + + def duration(self, *args, **kwargs): + return self._ekevent.duration(*args, **kwargs) + + def duration_including_travel(self, *args, **kwargs): + return self._ekevent.durationIncludingTravel(*args, **kwargs) + + def duration_overlaps_recurrence_interval(self, *args, **kwargs): + return self._ekevent.durationOverlapsRecurrenceInterval(*args, **kwargs) + + def earliest_occurrence_ending_after_(self, *args, **kwargs): + return self._ekevent.earliestOccurrenceEndingAfter_(*args, **kwargs) + + def earliest_occurrence_ending_after_exclude_significant_detachments_exclude_canceled_detachments_exclude_declined_detachments_(self, *args, **kwargs): + return self._ekevent.earliestOccurrenceEndingAfter_excludeSignificantDetachments_excludeCanceledDetachments_excludeDeclinedDetachments_(*args, **kwargs) + + def effective_time_zone(self, *args, **kwargs): + return self._ekevent.effectiveTimeZone(*args, **kwargs) + + def ek_exception_dates(self, *args, **kwargs): + return self._ekevent.ekExceptionDates(*args, **kwargs) + + def eligible_for_travel_advisories(self, *args, **kwargs): + return self._ekevent.eligibleForTravelAdvisories(*args, **kwargs) + + def empty_melted_cache(self, *args, **kwargs): + return self._ekevent.emptyMeltedCache(*args, **kwargs) + + def empty_melted_cache_for_key_(self, *args, **kwargs): + return self._ekevent.emptyMeltedCacheForKey_(*args, **kwargs) + + def empty_melted_cache_for_keys_(self, *args, **kwargs): + return self._ekevent.emptyMeltedCacheForKeys_(*args, **kwargs) + + def encode_with_c_a_m_l_writer_(self, *args, **kwargs): + return self._ekevent.encodeWithCAMLWriter_(*args, **kwargs) + + def end_calendar_date(self, *args, **kwargs): + return self._ekevent.endCalendarDate(*args, **kwargs) + + def end_date(self, *args, **kwargs): + return self._ekevent.endDate(*args, **kwargs) + + def end_date_raw(self, *args, **kwargs): + return self._ekevent.endDateRaw(*args, **kwargs) + + def end_date_unadjusted_for_legacy_clients(self, *args, **kwargs): + return self._ekevent.endDateUnadjustedForLegacyClients(*args, **kwargs) + + def end_location(self, *args, **kwargs): + return self._ekevent.endLocation(*args, **kwargs) + + def end_time_zone(self, *args, **kwargs): + return self._ekevent.endTimeZone(*args, **kwargs) + + def end_time_zone_name(self, *args, **kwargs): + return self._ekevent.endTimeZoneName(*args, **kwargs) + + def entity_name(self, *args, **kwargs): + return self._ekevent.entityName(*args, **kwargs) + + def entity_type(self, *args, **kwargs): + return self._ekevent.entityType(*args, **kwargs) + + def entity_type(self, *args, **kwargs): + return self._ekevent.entityType(*args, **kwargs) + + def event_identifier(self, *args, **kwargs): + return self._ekevent.eventIdentifier(*args, **kwargs) + + def event_occurrence_i_d(self, *args, **kwargs): + return self._ekevent.eventOccurrenceID(*args, **kwargs) + + def event_store(self, *args, **kwargs): + return self._ekevent.eventStore(*args, **kwargs) + + def exception_dates(self, *args, **kwargs): + return self._ekevent.exceptionDates(*args, **kwargs) + + def exception_dates_adjusted_for_floating_events(self, *args, **kwargs): + return self._ekevent.exceptionDatesAdjustedForFloatingEvents(*args, **kwargs) + + def existing_melted_object(self, *args, **kwargs): + return self._ekevent.existingMeltedObject(*args, **kwargs) + + def exists_in_store(self, *args, **kwargs): + return self._ekevent.existsInStore(*args, **kwargs) + + def export_to_i_c_s(self, *args, **kwargs): + return self._ekevent.exportToICS(*args, **kwargs) + + def export_to_i_c_s_with_options_(self, *args, **kwargs): + return self._ekevent.exportToICSWithOptions_(*args, **kwargs) + + def exposed_bindings(self, *args, **kwargs): + return self._ekevent.exposedBindings(*args, **kwargs) + + def external_data(self, *args, **kwargs): + return self._ekevent.externalData(*args, **kwargs) + + def external_i_d(self, *args, **kwargs): + return self._ekevent.externalID(*args, **kwargs) + + def external_modification_tag(self, *args, **kwargs): + return self._ekevent.externalModificationTag(*args, **kwargs) + + def external_schedule_i_d(self, *args, **kwargs): + return self._ekevent.externalScheduleID(*args, **kwargs) + + def external_tracking_status(self, *args, **kwargs): + return self._ekevent.externalTrackingStatus(*args, **kwargs) + + def external_u_r_i(self, *args, **kwargs): + return self._ekevent.externalURI(*args, **kwargs) + + def external_u_r_i(self, *args, **kwargs): + return self._ekevent.externalURI(*args, **kwargs) + + def external_u_r_l(self, *args, **kwargs): + return self._ekevent.externalURL(*args, **kwargs) + + def filter_attendees_pending_deletion_(self, *args, **kwargs): + return self._ekevent.filterAttendeesPendingDeletion_(*args, **kwargs) + + def finalize(self, *args, **kwargs): + return self._ekevent.finalize(*args, **kwargs) + + def find_original_alarm_starting_with_(self, *args, **kwargs): + return self._ekevent.findOriginalAlarmStartingWith_(*args, **kwargs) + + def finish_observing(self, *args, **kwargs): + return self._ekevent.finishObserving(*args, **kwargs) + + def fired_t_t_l(self, *args, **kwargs): + return self._ekevent.firedTTL(*args, **kwargs) + + def flag_(self, *args, **kwargs): + return self._ekevent.flag_(*args, **kwargs) + + def flags(self, *args, **kwargs): + return self._ekevent.flags(*args, **kwargs) + + def flush_key_bindings(self, *args, **kwargs): + return self._ekevent.flushKeyBindings(*args, **kwargs) + + def force_location_prediction_update(self, *args, **kwargs): + return self._ekevent.forceLocationPredictionUpdate(*args, **kwargs) + + def force_set_time_zone_(self, *args, **kwargs): + return self._ekevent.forceSetTimeZone_(*args, **kwargs) + + def forward_invocation_(self, *args, **kwargs): + return self._ekevent.forwardInvocation_(*args, **kwargs) + + def forwarding_target_for_selector_(self, *args, **kwargs): + return self._ekevent.forwardingTargetForSelector_(*args, **kwargs) + + def fp__ivar_description_for_class_(self, *args, **kwargs): + return self._ekevent.fp__ivarDescriptionForClass_(*args, **kwargs) + + def fp__method_description_for_class_(self, *args, **kwargs): + return self._ekevent.fp__methodDescriptionForClass_(*args, **kwargs) + + def fp_ivar_description(self, *args, **kwargs): + return self._ekevent.fp_ivarDescription(*args, **kwargs) + + def fp_method_description(self, *args, **kwargs): + return self._ekevent.fp_methodDescription(*args, **kwargs) + + def fp_short_method_description(self, *args, **kwargs): + return self._ekevent.fp_shortMethodDescription(*args, **kwargs) + + def frozen_class(self, *args, **kwargs): + return self._ekevent.frozenClass(*args, **kwargs) + + def frozen_object(self, *args, **kwargs): + return self._ekevent.frozenObject(*args, **kwargs) + + def frozen_object_in_store_(self, *args, **kwargs): + return self._ekevent.frozenObjectInStore_(*args, **kwargs) + + def frozen_or_melted_cached_multi_relation_objects_for_key_(self, *args, **kwargs): + return self._ekevent.frozenOrMeltedCachedMultiRelationObjectsForKey_(*args, **kwargs) + + def frozen_or_melted_cached_single_relation_object_for_key_(self, *args, **kwargs): + return self._ekevent.frozenOrMeltedCachedSingleRelationObjectForKey_(*args, **kwargs) + + def future_occurrences_cannot_be_affected_by_changing_start_date_to_date_(self, *args, **kwargs): + return self._ekevent.futureOccurrencesCannotBeAffectedByChangingStartDateToDate_(*args, **kwargs) + + def handle_query_with_unbound_key_(self, *args, **kwargs): + return self._ekevent.handleQueryWithUnboundKey_(*args, **kwargs) + + def handle_take_value_for_unbound_key_(self, *args, **kwargs): + return self._ekevent.handleTakeValue_forUnboundKey_(*args, **kwargs) + + def has_alarms(self, *args, **kwargs): + return self._ekevent.hasAlarms(*args, **kwargs) + + def has_attachment(self, *args, **kwargs): + return self._ekevent.hasAttachment(*args, **kwargs) + + def has_attachment_changes(self, *args, **kwargs): + return self._ekevent.hasAttachmentChanges(*args, **kwargs) + + def has_attendee_proposed_times(self, *args, **kwargs): + return self._ekevent.hasAttendeeProposedTimes(*args, **kwargs) + + def has_attendees(self, *args, **kwargs): + return self._ekevent.hasAttendees(*args, **kwargs) + + def has_calendar_change_that_requires_delete_and_add(self, *args, **kwargs): + return self._ekevent.hasCalendarChangeThatRequiresDeleteAndAdd(*args, **kwargs) + + def has_changes(self, *args, **kwargs): + return self._ekevent.hasChanges(*args, **kwargs) + + def has_changes_requiring_span_all(self, *args, **kwargs): + return self._ekevent.hasChangesRequiringSpanAll(*args, **kwargs) + + def has_complex_recurrence(self, *args, **kwargs): + return self._ekevent.hasComplexRecurrence(*args, **kwargs) + + def has_ever_been_committed(self, *args, **kwargs): + return self._ekevent.hasEverBeenCommitted(*args, **kwargs) + + def has_never_been_committed(self, *args, **kwargs): + return self._ekevent.hasNeverBeenCommitted(*args, **kwargs) + + def has_notes(self, *args, **kwargs): + return self._ekevent.hasNotes(*args, **kwargs) + + def has_predicted_location(self, *args, **kwargs): + return self._ekevent.hasPredictedLocation(*args, **kwargs) + + def has_recurrence_rule_addition_or_removal(self, *args, **kwargs): + return self._ekevent.hasRecurrenceRuleAdditionOrRemoval(*args, **kwargs) + + def has_recurrence_rules(self, *args, **kwargs): + return self._ekevent.hasRecurrenceRules(*args, **kwargs) + + def has_unsaved_changes(self, *args, **kwargs): + return self._ekevent.hasUnsavedChanges(*args, **kwargs) + + def has_unsaved_changes_ignore_keys_(self, *args, **kwargs): + return self._ekevent.hasUnsavedChangesIgnoreKeys_(*args, **kwargs) + + def has_unsaved_changes_in_keys_(self, *args, **kwargs): + return self._ekevent.hasUnsavedChangesInKeys_(*args, **kwargs) + + def has_valid_event_action(self, *args, **kwargs): + return self._ekevent.hasValidEventAction(*args, **kwargs) + + def hash(self, *args, **kwargs): + return self._ekevent.hash(*args, **kwargs) + + def hash(self, *args, **kwargs): + return self._ekevent.hash(*args, **kwargs) + + def hash(self, *args, **kwargs): + return self._ekevent.hash(*args, **kwargs) + + def if_set_value_if_non_nil_for_key_(self, *args, **kwargs): + return self._ekevent.if_setValueIfNonNil_forKey_(*args, **kwargs) + + def if_set_value_if_y_e_s_for_key_(self, *args, **kwargs): + return self._ekevent.if_setValueIfYES_forKey_(*args, **kwargs) + + def image(self, *args, **kwargs): + return self._ekevent.image(*args, **kwargs) + + def implements_selector_(self, *args, **kwargs): + return self._ekevent.implementsSelector_(*args, **kwargs) + + def index_for_alarm_(self, *args, **kwargs): + return self._ekevent.indexForAlarm_(*args, **kwargs) + + def info_for_binding_(self, *args, **kwargs): + return self._ekevent.infoForBinding_(*args, **kwargs) + + def init(self, *args, **kwargs): + return self._ekevent.init(*args, **kwargs) + + def init(self, *args, **kwargs): + return self._ekevent.init(*args, **kwargs) + + def init(self, *args, **kwargs): + return self._ekevent.init(*args, **kwargs) + + def init_with_event_store_(self, *args, **kwargs): + return self._ekevent.initWithEventStore_(*args, **kwargs) + + def init_with_persistent_object_(self, *args, **kwargs): + return self._ekevent.initWithPersistentObject_(*args, **kwargs) + + def init_with_persistent_object_(self, *args, **kwargs): + return self._ekevent.initWithPersistentObject_(*args, **kwargs) + + def init_with_persistent_object_object_for_copy_(self, *args, **kwargs): + return self._ekevent.initWithPersistentObject_objectForCopy_(*args, **kwargs) + + def init_with_persistent_object_object_for_copy_(self, *args, **kwargs): + return self._ekevent.initWithPersistentObject_objectForCopy_(*args, **kwargs) + + def init_with_persistent_object_occurrence_date_(self, *args, **kwargs): + return self._ekevent.initWithPersistentObject_occurrenceDate_(*args, **kwargs) + + def initial_end_date(self, *args, **kwargs): + return self._ekevent.initialEndDate(*args, **kwargs) + + def initial_start_date(self, *args, **kwargs): + return self._ekevent.initialStartDate(*args, **kwargs) + + def insert_persistent_object_if_needed(self, *args, **kwargs): + return self._ekevent.insertPersistentObjectIfNeeded(*args, **kwargs) + + def insert_value_at_index_in_property_with_key_(self, *args, **kwargs): + return self._ekevent.insertValue_atIndex_inPropertyWithKey_(*args, **kwargs) + + def insert_value_in_property_with_key_(self, *args, **kwargs): + return self._ekevent.insertValue_inPropertyWithKey_(*args, **kwargs) + + def int64_value_safe(self, *args, **kwargs): + return self._ekevent.int64ValueSafe(*args, **kwargs) + + def int64_value_safe_(self, *args, **kwargs): + return self._ekevent.int64ValueSafe_(*args, **kwargs) + + def invalidate_removed_virtual_conferences(self, *args, **kwargs): + return self._ekevent.invalidateRemovedVirtualConferences(*args, **kwargs) + + def invalidate_virtual_conference_u_r_l_if_needed_on_commit_(self, *args, **kwargs): + return self._ekevent.invalidateVirtualConferenceURLIfNeededOnCommit_(*args, **kwargs) + + def inverse_for_relationship_key_(self, *args, **kwargs): + return self._ekevent.inverseForRelationshipKey_(*args, **kwargs) + + def inverse_object_with_object_diff_(self, *args, **kwargs): + return self._ekevent.inverseObjectWithObject_diff_(*args, **kwargs) + + def invitation_changed_properties(self, *args, **kwargs): + return self._ekevent.invitationChangedProperties(*args, **kwargs) + + def invitation_status(self, *args, **kwargs): + return self._ekevent.invitationStatus(*args, **kwargs) + + def is_alarm_acknowledged_property_dirty(self, *args, **kwargs): + return self._ekevent.isAlarmAcknowledgedPropertyDirty(*args, **kwargs) + + def is_alerted(self, *args, **kwargs): + return self._ekevent.isAlerted(*args, **kwargs) + + def is_all_day(self, *args, **kwargs): + return self._ekevent.isAllDay(*args, **kwargs) + + def is_all_day(self, *args, **kwargs): + return self._ekevent.isAllDay(*args, **kwargs) + + def is_all_day_dirty(self, *args, **kwargs): + return self._ekevent.isAllDayDirty(*args, **kwargs) + + def is_attendee_same_as_organizer_(self, *args, **kwargs): + return self._ekevent.isAttendeeSameAsOrganizer_(*args, **kwargs) + + def is_birthday(self, *args, **kwargs): + return self._ekevent.isBirthday(*args, **kwargs) + + def is_case_insensitive_like_(self, *args, **kwargs): + return self._ekevent.isCaseInsensitiveLike_(*args, **kwargs) + + def is_completely_equal_(self, *args, **kwargs): + return self._ekevent.isCompletelyEqual_(*args, **kwargs) + + def is_current_user_invited_attendee(self, *args, **kwargs): + return self._ekevent.isCurrentUserInvitedAttendee(*args, **kwargs) + + def is_deletable(self, *args, **kwargs): + return self._ekevent.isDeletable(*args, **kwargs) + + def is_deleted(self, *args, **kwargs): + return self._ekevent.isDeleted(*args, **kwargs) + + def is_detached(self, *args, **kwargs): + return self._ekevent.isDetached(*args, **kwargs) + + def is_different_and_has_forwarded_attendees_with_diff_(self, *args, **kwargs): + return self._ekevent.isDifferentAndHasForwardedAttendeesWithDiff_(*args, **kwargs) + + def is_different_and_has_new_proposed_time_with_diff_(self, *args, **kwargs): + return self._ekevent.isDifferentAndHasNewProposedTimeWithDiff_(*args, **kwargs) + + def is_different_and_has_unscheduled_attendees_with_diff_(self, *args, **kwargs): + return self._ekevent.isDifferentAndHasUnscheduledAttendeesWithDiff_(*args, **kwargs) + + def is_different_and_modified_attendees_with_diff_(self, *args, **kwargs): + return self._ekevent.isDifferentAndModifiedAttendeesWithDiff_(*args, **kwargs) + + def is_different_and_requires_r_s_v_p_with_diff_(self, *args, **kwargs): + return self._ekevent.isDifferentAndRequiresRSVPWithDiff_(*args, **kwargs) + + def is_different_and_requires_reschedule_with_diff_(self, *args, **kwargs): + return self._ekevent.isDifferentAndRequiresRescheduleWithDiff_(*args, **kwargs) + + def is_different_excepting_per_user_properties_with_diff_(self, *args, **kwargs): + return self._ekevent.isDifferentExceptingPerUserPropertiesWithDiff_(*args, **kwargs) + + def is_different_from_committed(self, *args, **kwargs): + return self._ekevent.isDifferentFromCommitted(*args, **kwargs) + + def is_different_from_committed_event_and_has_unscheduled_attendees(self, *args, **kwargs): + return self._ekevent.isDifferentFromCommittedEventAndHasUnscheduledAttendees(*args, **kwargs) + + def is_different_from_committed_event_and_requires_r_s_v_p(self, *args, **kwargs): + return self._ekevent.isDifferentFromCommittedEventAndRequiresRSVP(*args, **kwargs) + + def is_different_from_committed_event_and_requires_reschedule(self, *args, **kwargs): + return self._ekevent.isDifferentFromCommittedEventAndRequiresReschedule(*args, **kwargs) + + def is_different_with_diff_(self, *args, **kwargs): + return self._ekevent.isDifferentWithDiff_(*args, **kwargs) + + def is_editable(self, *args, **kwargs): + return self._ekevent.isEditable(*args, **kwargs) + + def is_editable(self, *args, **kwargs): + return self._ekevent.isEditable(*args, **kwargs) + + def is_end_date_dirty(self, *args, **kwargs): + return self._ekevent.isEndDateDirty(*args, **kwargs) + + def is_equal_to_(self, *args, **kwargs): + return self._ekevent.isEqualTo_(*args, **kwargs) + + def is_equal_(self, *args, **kwargs): + return self._ekevent.isEqual_(*args, **kwargs) + + def is_equal_(self, *args, **kwargs): + return self._ekevent.isEqual_(*args, **kwargs) + + def is_equal_(self, *args, **kwargs): + return self._ekevent.isEqual_(*args, **kwargs) + + def is_equal_comparing_keys_(self, *args, **kwargs): + return self._ekevent.isEqual_comparingKeys_(*args, **kwargs) + + def is_equal_comparing_keys_compare_immutable_keys_ignoring_properties_(self, *args, **kwargs): + return self._ekevent.isEqual_comparingKeys_compareImmutableKeys_ignoringProperties_(*args, **kwargs) + + def is_equal_ignoring_properties_(self, *args, **kwargs): + return self._ekevent.isEqual_ignoringProperties_(*args, **kwargs) + + def is_externally_organized_invitation(self, *args, **kwargs): + return self._ekevent.isExternallyOrganizedInvitation(*args, **kwargs) + + def is_fault(self, *args, **kwargs): + return self._ekevent.isFault(*args, **kwargs) + + def is_first_occurrence(self, *args, **kwargs): + return self._ekevent.isFirstOccurrence(*args, **kwargs) + + def is_floating(self, *args, **kwargs): + return self._ekevent.isFloating(*args, **kwargs) + + def is_floating(self, *args, **kwargs): + return self._ekevent.isFloating(*args, **kwargs) + + def is_frozen(self, *args, **kwargs): + return self._ekevent.isFrozen(*args, **kwargs) + + def is_greater_than_or_equal_to_(self, *args, **kwargs): + return self._ekevent.isGreaterThanOrEqualTo_(*args, **kwargs) + + def is_greater_than_(self, *args, **kwargs): + return self._ekevent.isGreaterThan_(*args, **kwargs) + + def is_kind_of_class_(self, *args, **kwargs): + return self._ekevent.isKindOfClass_(*args, **kwargs) + + def is_less_than_or_equal_to_(self, *args, **kwargs): + return self._ekevent.isLessThanOrEqualTo_(*args, **kwargs) + + def is_less_than_(self, *args, **kwargs): + return self._ekevent.isLessThan_(*args, **kwargs) + + def is_like_(self, *args, **kwargs): + return self._ekevent.isLike_(*args, **kwargs) + + def is_main_occurrence(self, *args, **kwargs): + return self._ekevent.isMainOccurrence(*args, **kwargs) + + def is_master_or_detached_occurrence(self, *args, **kwargs): + return self._ekevent.isMasterOrDetachedOccurrence(*args, **kwargs) + + def is_member_of_class_(self, *args, **kwargs): + return self._ekevent.isMemberOfClass_(*args, **kwargs) + + def is_multi_day_timed_event_in_calendar_(self, *args, **kwargs): + return self._ekevent.isMultiDayTimedEventInCalendar_(*args, **kwargs) + + def is_n_s_array__(self, *args, **kwargs): + return self._ekevent.isNSArray__(*args, **kwargs) + + def is_n_s_c_f_constant_string__(self, *args, **kwargs): + return self._ekevent.isNSCFConstantString__(*args, **kwargs) + + def is_n_s_data__(self, *args, **kwargs): + return self._ekevent.isNSData__(*args, **kwargs) + + def is_n_s_date__(self, *args, **kwargs): + return self._ekevent.isNSDate__(*args, **kwargs) + + def is_n_s_dictionary__(self, *args, **kwargs): + return self._ekevent.isNSDictionary__(*args, **kwargs) + + def is_n_s_number__(self, *args, **kwargs): + return self._ekevent.isNSNumber__(*args, **kwargs) + + def is_n_s_object__(self, *args, **kwargs): + return self._ekevent.isNSObject__(*args, **kwargs) + + def is_n_s_ordered_set__(self, *args, **kwargs): + return self._ekevent.isNSOrderedSet__(*args, **kwargs) + + def is_n_s_set__(self, *args, **kwargs): + return self._ekevent.isNSSet__(*args, **kwargs) + + def is_n_s_string__(self, *args, **kwargs): + return self._ekevent.isNSString__(*args, **kwargs) + + def is_n_s_time_zone__(self, *args, **kwargs): + return self._ekevent.isNSTimeZone__(*args, **kwargs) + + def is_n_s_value__(self, *args, **kwargs): + return self._ekevent.isNSValue__(*args, **kwargs) + + def is_new(self, *args, **kwargs): + return self._ekevent.isNew(*args, **kwargs) + + def is_new_item_that_failed_to_put(self, *args, **kwargs): + return self._ekevent.isNewItemThatFailedToPut(*args, **kwargs) + + def is_not_equal_to_(self, *args, **kwargs): + return self._ekevent.isNotEqualTo_(*args, **kwargs) + + def is_null(self, *args, **kwargs): + return self._ekevent.isNull(*args, **kwargs) + + def is_null(self, *args, **kwargs): + return self._ekevent.isNull(*args, **kwargs) + + def is_null(self, *args, **kwargs): + return self._ekevent.isNull(*args, **kwargs) + + def is_only_alarm_acknowledged_property_dirty(self, *args, **kwargs): + return self._ekevent.isOnlyAlarmAcknowledgedPropertyDirty(*args, **kwargs) + + def is_only_occurrence(self, *args, **kwargs): + return self._ekevent.isOnlyOccurrence(*args, **kwargs) + + def is_organized_by_shared_calendar_owner(self, *args, **kwargs): + return self._ekevent.isOrganizedBySharedCalendarOwner(*args, **kwargs) + + def is_out_of_order_with_event_in_series(self, *args, **kwargs): + return self._ekevent.isOutOfOrderWithEventInSeries(*args, **kwargs) + + def is_part_of_existing_recurring_series(self, *args, **kwargs): + return self._ekevent.isPartOfExistingRecurringSeries(*args, **kwargs) + + def is_partial_object(self, *args, **kwargs): + return self._ekevent.isPartialObject(*args, **kwargs) + + def is_phantom(self, *args, **kwargs): + return self._ekevent.isPhantom(*args, **kwargs) + + def is_privacy_set(self, *args, **kwargs): + return self._ekevent.isPrivacySet(*args, **kwargs) + + def is_private_event_shared_to_me(self, *args, **kwargs): + return self._ekevent.isPrivateEventSharedToMe(*args, **kwargs) + + def is_property_unavailable_(self, *args, **kwargs): + return self._ekevent.isPropertyUnavailable_(*args, **kwargs) + + def is_proposed_time_event(self, *args, **kwargs): + return self._ekevent.isProposedTimeEvent(*args, **kwargs) + + def is_proxy(self, *args, **kwargs): + return self._ekevent.isProxy(*args, **kwargs) + + def is_saved(self, *args, **kwargs): + return self._ekevent.isSaved(*args, **kwargs) + + def is_self_organized(self, *args, **kwargs): + return self._ekevent.isSelfOrganized(*args, **kwargs) + + def is_self_organized_invitation(self, *args, **kwargs): + return self._ekevent.isSelfOrganizedInvitation(*args, **kwargs) + + def is_significantly_detached(self, *args, **kwargs): + return self._ekevent.isSignificantlyDetached(*args, **kwargs) + + def is_significantly_detached_ignoring_participation(self, *args, **kwargs): + return self._ekevent.isSignificantlyDetachedIgnoringParticipation(*args, **kwargs) + + def is_start_date_dirty(self, *args, **kwargs): + return self._ekevent.isStartDateDirty(*args, **kwargs) + + def is_status_dirty(self, *args, **kwargs): + return self._ekevent.isStatusDirty(*args, **kwargs) + + def is_tentative(self, *args, **kwargs): + return self._ekevent.isTentative(*args, **kwargs) + + def is_to_many_key_(self, *args, **kwargs): + return self._ekevent.isToManyKey_(*args, **kwargs) + + def is_undeleted(self, *args, **kwargs): + return self._ekevent.isUndeleted(*args, **kwargs) + + def is_undetached(self, *args, **kwargs): + return self._ekevent.isUndetached(*args, **kwargs) + + def is_valid_attendee_for_calendar_(self, *args, **kwargs): + return self._ekevent.isValidAttendee_forCalendar_(*args, **kwargs) + + def junk_status(self, *args, **kwargs): + return self._ekevent.junkStatus(*args, **kwargs) + + def key_value_binding_for_key_type_mask_(self, *args, **kwargs): + return self._ekevent.keyValueBindingForKey_typeMask_(*args, **kwargs) + + def last_modified_date(self, *args, **kwargs): + return self._ekevent.lastModifiedDate(*args, **kwargs) + + def launch_u_r_l(self, *args, **kwargs): + return self._ekevent.launchURL(*args, **kwargs) + + def local_custom_object_for_key_(self, *args, **kwargs): + return self._ekevent.localCustomObjectForKey_(*args, **kwargs) + + def local_structured_data(self, *args, **kwargs): + return self._ekevent.localStructuredData(*args, **kwargs) + + def local_u_i_d(self, *args, **kwargs): + return self._ekevent.localUID(*args, **kwargs) + + def location(self, *args, **kwargs): + return self._ekevent.location(*args, **kwargs) + + def location_changed(self, *args, **kwargs): + return self._ekevent.locationChanged(*args, **kwargs) + + def location_is_a_conference_room(self, *args, **kwargs): + return self._ekevent.locationIsAConferenceRoom(*args, **kwargs) + + def location_prediction_state(self, *args, **kwargs): + return self._ekevent.locationPredictionState(*args, **kwargs) + + def location_without_prediction(self, *args, **kwargs): + return self._ekevent.locationWithoutPrediction(*args, **kwargs) + + def locations(self, *args, **kwargs): + return self._ekevent.locations(*args, **kwargs) + + def locations_without_prediction(self, *args, **kwargs): + return self._ekevent.locationsWithoutPrediction(*args, **kwargs) + + def lunar_calendar_string(self, *args, **kwargs): + return self._ekevent.lunarCalendarString(*args, **kwargs) + + def make_recurrence_end_count_based(self, *args, **kwargs): + return self._ekevent.makeRecurrenceEndCountBased(*args, **kwargs) + + def make_recurrence_end_date_based(self, *args, **kwargs): + return self._ekevent.makeRecurrenceEndDateBased(*args, **kwargs) + + def mark_as_committed(self, *args, **kwargs): + return self._ekevent.markAsCommitted(*args, **kwargs) + + def mark_as_committed(self, *args, **kwargs): + return self._ekevent.markAsCommitted(*args, **kwargs) + + def mark_as_deleted(self, *args, **kwargs): + return self._ekevent.markAsDeleted(*args, **kwargs) + + def mark_as_new(self, *args, **kwargs): + return self._ekevent.markAsNew(*args, **kwargs) + + def mark_as_not_new(self, *args, **kwargs): + return self._ekevent.markAsNotNew(*args, **kwargs) + + def mark_as_saved(self, *args, **kwargs): + return self._ekevent.markAsSaved(*args, **kwargs) + + def mark_as_saved(self, *args, **kwargs): + return self._ekevent.markAsSaved(*args, **kwargs) + + def mark_as_undeleted(self, *args, **kwargs): + return self._ekevent.markAsUndeleted(*args, **kwargs) + + def mark_as_undeleted(self, *args, **kwargs): + return self._ekevent.markAsUndeleted(*args, **kwargs) + + def mark_as_undetached_with_start_date_end_date_(self, *args, **kwargs): + return self._ekevent.markAsUndetachedWithStartDate_endDate_(*args, **kwargs) + + def mark_event_as_attendee_forward(self, *args, **kwargs): + return self._ekevent.markEventAsAttendeeForward(*args, **kwargs) + + def master_event(self, *args, **kwargs): + return self._ekevent.masterEvent(*args, **kwargs) + + def melted_and_cached_multi_relation_count_for_key_(self, *args, **kwargs): + return self._ekevent.meltedAndCachedMultiRelationCountForKey_(*args, **kwargs) + + def melted_and_cached_multi_relation_objects_for_key_(self, *args, **kwargs): + return self._ekevent.meltedAndCachedMultiRelationObjectsForKey_(*args, **kwargs) + + def melted_and_cached_single_relation_object_for_key_(self, *args, **kwargs): + return self._ekevent.meltedAndCachedSingleRelationObjectForKey_(*args, **kwargs) + + def melted_object_in_store_(self, *args, **kwargs): + return self._ekevent.meltedObjectInStore_(*args, **kwargs) + + def method_description_for_selector_(self, *args, **kwargs): + return self._ekevent.methodDescriptionForSelector_(*args, **kwargs) + + def method_for_selector_(self, *args, **kwargs): + return self._ekevent.methodForSelector_(*args, **kwargs) + + def method_signature_for_selector_(self, *args, **kwargs): + return self._ekevent.methodSignatureForSelector_(*args, **kwargs) + + def method_signature_for_selector_(self, *args, **kwargs): + return self._ekevent.methodSignatureForSelector_(*args, **kwargs) + + def modified_properties(self, *args, **kwargs): + return self._ekevent.modifiedProperties(*args, **kwargs) + + def move_to_calendar_(self, *args, **kwargs): + return self._ekevent.moveToCalendar_(*args, **kwargs) + + def mr_formatted_debug_description(self, *args, **kwargs): + return self._ekevent.mr_formattedDebugDescription(*args, **kwargs) + + def multi_changed_object_values_for_key_(self, *args, **kwargs): + return self._ekevent.multiChangedObjectValuesForKey_(*args, **kwargs) + + def mutable_array_value_for_key_path_(self, *args, **kwargs): + return self._ekevent.mutableArrayValueForKeyPath_(*args, **kwargs) + + def mutable_array_value_for_key_(self, *args, **kwargs): + return self._ekevent.mutableArrayValueForKey_(*args, **kwargs) + + def mutable_copy(self, *args, **kwargs): + return self._ekevent.mutableCopy(*args, **kwargs) + + def mutable_copy_with_zone_(self, *args, **kwargs): + return self._ekevent.mutableCopyWithZone_(*args, **kwargs) + + def mutable_ordered_set_value_for_key_path_(self, *args, **kwargs): + return self._ekevent.mutableOrderedSetValueForKeyPath_(*args, **kwargs) + + def mutable_ordered_set_value_for_key_(self, *args, **kwargs): + return self._ekevent.mutableOrderedSetValueForKey_(*args, **kwargs) + + def mutable_set_value_for_key_path_(self, *args, **kwargs): + return self._ekevent.mutableSetValueForKeyPath_(*args, **kwargs) + + def mutable_set_value_for_key_(self, *args, **kwargs): + return self._ekevent.mutableSetValueForKey_(*args, **kwargs) + + def needs_geocoding(self, *args, **kwargs): + return self._ekevent.needsGeocoding(*args, **kwargs) + + def needs_response(self, *args, **kwargs): + return self._ekevent.needsResponse(*args, **kwargs) + + def new_scripting_object_of_class_for_value_for_key_with_contents_value_properties_(self, *args, **kwargs): + return self._ekevent.newScriptingObjectOfClass_forValueForKey_withContentsValue_properties_(*args, **kwargs) + + def new_tagged_n_s_string_with_a_s_c_i_i_bytes__length__(self, *args, **kwargs): + return self._ekevent.newTaggedNSStringWithASCIIBytes__length__(*args, **kwargs) + + def next_occurrence_or_detachment_after_(self, *args, **kwargs): + return self._ekevent.nextOccurrenceOrDetachmentAfter_(*args, **kwargs) + + def notes(self, *args, **kwargs): + return self._ekevent.notes(*args, **kwargs) + + def object_i_d(self, *args, **kwargs): + return self._ekevent.objectID(*args, **kwargs) + + def object_specifier(self, *args, **kwargs): + return self._ekevent.objectSpecifier(*args, **kwargs) + + def observation_info(self, *args, **kwargs): + return self._ekevent.observationInfo(*args, **kwargs) + + def observe_value_for_key_path_of_object_change_context_(self, *args, **kwargs): + return self._ekevent.observeValueForKeyPath_ofObject_change_context_(*args, **kwargs) + + def occurrence_date(self, *args, **kwargs): + return self._ekevent.occurrenceDate(*args, **kwargs) + + def occurrence_end_date(self, *args, **kwargs): + return self._ekevent.occurrenceEndDate(*args, **kwargs) + + def occurrence_is_all_day(self, *args, **kwargs): + return self._ekevent.occurrenceIsAllDay(*args, **kwargs) + + def occurrence_start_date(self, *args, **kwargs): + return self._ekevent.occurrenceStartDate(*args, **kwargs) + + def option_descriptions_for_binding_(self, *args, **kwargs): + return self._ekevent.optionDescriptionsForBinding_(*args, **kwargs) + + def organized_by_me(self, *args, **kwargs): + return self._ekevent.organizedByMe(*args, **kwargs) + + def organizer(self, *args, **kwargs): + return self._ekevent.organizer(*args, **kwargs) + + def original_item(self, *args, **kwargs): + return self._ekevent.originalItem(*args, **kwargs) + + def original_occurrence_end_date(self, *args, **kwargs): + return self._ekevent.originalOccurrenceEndDate(*args, **kwargs) + + def original_occurrence_is_all_day(self, *args, **kwargs): + return self._ekevent.originalOccurrenceIsAllDay(*args, **kwargs) + + def original_occurrence_start_date(self, *args, **kwargs): + return self._ekevent.originalOccurrenceStartDate(*args, **kwargs) + + def original_start_date(self, *args, **kwargs): + return self._ekevent.originalStartDate(*args, **kwargs) + + def overlaps_with_or_is_same_day_as_event_in_series(self, *args, **kwargs): + return self._ekevent.overlapsWithOrIsSameDayAsEventInSeries(*args, **kwargs) + + def override_end_date_(self, *args, **kwargs): + return self._ekevent.overrideEndDate_(*args, **kwargs) + + def override_start_date_(self, *args, **kwargs): + return self._ekevent.overrideStartDate_(*args, **kwargs) + + def owns_destination_objects_for_relationship_key_(self, *args, **kwargs): + return self._ekevent.ownsDestinationObjectsForRelationshipKey_(*args, **kwargs) + + def parsed_conference_and_notes_(self, *args, **kwargs): + return self._ekevent.parsedConference_andNotes_(*args, **kwargs) + + def participant_matching_contact_(self, *args, **kwargs): + return self._ekevent.participantMatchingContact_(*args, **kwargs) + + def participation_status(self, *args, **kwargs): + return self._ekevent.participationStatus(*args, **kwargs) + + def participation_status_modified_date(self, *args, **kwargs): + return self._ekevent.participationStatusModifiedDate(*args, **kwargs) + + def pending_participation_status(self, *args, **kwargs): + return self._ekevent.pendingParticipationStatus(*args, **kwargs) + + def pep_after_delay_(self, *args, **kwargs): + return self._ekevent.pep_afterDelay_(*args, **kwargs) + + def pep_get_invocation_(self, *args, **kwargs): + return self._ekevent.pep_getInvocation_(*args, **kwargs) + + def pep_on_main_thread(self, *args, **kwargs): + return self._ekevent.pep_onMainThread(*args, **kwargs) + + def pep_on_main_thread_if_necessary(self, *args, **kwargs): + return self._ekevent.pep_onMainThreadIfNecessary(*args, **kwargs) + + def pep_on_operation_queue_(self, *args, **kwargs): + return self._ekevent.pep_onOperationQueue_(*args, **kwargs) + + def pep_on_operation_queue_priority_(self, *args, **kwargs): + return self._ekevent.pep_onOperationQueue_priority_(*args, **kwargs) + + def pep_on_thread_(self, *args, **kwargs): + return self._ekevent.pep_onThread_(*args, **kwargs) + + def pep_on_thread_immediate_for_matching_thread_(self, *args, **kwargs): + return self._ekevent.pep_onThread_immediateForMatchingThread_(*args, **kwargs) + + def perform_block_on_main_thread_synchronously_(self, *args, **kwargs): + return self._ekevent.performBlockOnMainThreadSynchronously_(*args, **kwargs) + + def perform_selector_in_background_with_object_(self, *args, **kwargs): + return self._ekevent.performSelectorInBackground_withObject_(*args, **kwargs) + + def perform_selector_on_main_thread_with_object_wait_until_done_(self, *args, **kwargs): + return self._ekevent.performSelectorOnMainThread_withObject_waitUntilDone_(*args, **kwargs) + + def perform_selector_on_main_thread_with_object_wait_until_done_modes_(self, *args, **kwargs): + return self._ekevent.performSelectorOnMainThread_withObject_waitUntilDone_modes_(*args, **kwargs) + + def perform_selector_(self, *args, **kwargs): + return self._ekevent.performSelector_(*args, **kwargs) + + def perform_selector_object_after_delay_(self, *args, **kwargs): + return self._ekevent.performSelector_object_afterDelay_(*args, **kwargs) + + def perform_selector_on_thread_with_object_wait_until_done_(self, *args, **kwargs): + return self._ekevent.performSelector_onThread_withObject_waitUntilDone_(*args, **kwargs) + + def perform_selector_on_thread_with_object_wait_until_done_modes_(self, *args, **kwargs): + return self._ekevent.performSelector_onThread_withObject_waitUntilDone_modes_(*args, **kwargs) + + def perform_selector_with_object_(self, *args, **kwargs): + return self._ekevent.performSelector_withObject_(*args, **kwargs) + + def perform_selector_with_object_after_delay_(self, *args, **kwargs): + return self._ekevent.performSelector_withObject_afterDelay_(*args, **kwargs) + + def perform_selector_with_object_after_delay_ignore_menu_tracking_(self, *args, **kwargs): + return self._ekevent.performSelector_withObject_afterDelay_ignoreMenuTracking_(*args, **kwargs) + + def perform_selector_with_object_after_delay_in_modes_(self, *args, **kwargs): + return self._ekevent.performSelector_withObject_afterDelay_inModes_(*args, **kwargs) + + def perform_selector_with_object_with_object_(self, *args, **kwargs): + return self._ekevent.performSelector_withObject_withObject_(*args, **kwargs) + + def persistent_object(self, *args, **kwargs): + return self._ekevent.persistentObject(*args, **kwargs) + + def phantom_master(self, *args, **kwargs): + return self._ekevent.phantomMaster(*args, **kwargs) + + def post_modified_notification(self, *args, **kwargs): + return self._ekevent.postModifiedNotification(*args, **kwargs) + + def post_modified_notification_with_user_info_(self, *args, **kwargs): + return self._ekevent.postModifiedNotificationWithUserInfo_(*args, **kwargs) + + def potential_conflict_occurrence_dates_in_time_period_(self, *args, **kwargs): + return self._ekevent.potentialConflictOccurrenceDatesInTimePeriod_(*args, **kwargs) + + def potentially_eligible_for_travel_advisories(self, *args, **kwargs): + return self._ekevent.potentiallyEligibleForTravelAdvisories(*args, **kwargs) + + def pre_frozen_relationship_objects(self, *args, **kwargs): + return self._ekevent.preFrozenRelationshipObjects(*args, **kwargs) + + def preferred_location(self, *args, **kwargs): + return self._ekevent.preferredLocation(*args, **kwargs) + + def preferred_location_without_prediction(self, *args, **kwargs): + return self._ekevent.preferredLocationWithoutPrediction(*args, **kwargs) + + def prepare_for_interface_builder(self, *args, **kwargs): + return self._ekevent.prepareForInterfaceBuilder(*args, **kwargs) + + def prepare_reminder_kit_object_for_save_with_updated_backing_object_provider_(self, *args, **kwargs): + return self._ekevent.prepareReminderKitObjectForSaveWithUpdatedBackingObjectProvider_(*args, **kwargs) + + def prevent_conference_u_r_l_detection(self, *args, **kwargs): + return self._ekevent.preventConferenceURLDetection(*args, **kwargs) + + def previously_saved_copy(self, *args, **kwargs): + return self._ekevent.previouslySavedCopy(*args, **kwargs) + + def previously_saved_copy(self, *args, **kwargs): + return self._ekevent.previouslySavedCopy(*args, **kwargs) + + def priority(self, *args, **kwargs): + return self._ekevent.priority(*args, **kwargs) + + def privacy_description(self, *args, **kwargs): + return self._ekevent.privacyDescription(*args, **kwargs) + + def privacy_description(self, *args, **kwargs): + return self._ekevent.privacyDescription(*args, **kwargs) + + def privacy_level(self, *args, **kwargs): + return self._ekevent.privacyLevel(*args, **kwargs) + + def privacy_level_string(self, *args, **kwargs): + return self._ekevent.privacyLevelString(*args, **kwargs) + + def proposed_end_date(self, *args, **kwargs): + return self._ekevent.proposedEndDate(*args, **kwargs) + + def proposed_start_date(self, *args, **kwargs): + return self._ekevent.proposedStartDate(*args, **kwargs) + + def rebase(self, *args, **kwargs): + return self._ekevent.rebase(*args, **kwargs) + + def rebase_skipping_relation_properties_(self, *args, **kwargs): + return self._ekevent.rebaseSkippingRelationProperties_(*args, **kwargs) + + def rebase_skipping_relation_properties_(self, *args, **kwargs): + return self._ekevent.rebaseSkippingRelationProperties_(*args, **kwargs) + + def rebase_skipping_relation_properties_to_event_store_(self, *args, **kwargs): + return self._ekevent.rebaseSkippingRelationProperties_toEventStore_(*args, **kwargs) + + def rebase_to_event_store_(self, *args, **kwargs): + return self._ekevent.rebaseToEventStore_(*args, **kwargs) + + def rebase_to_event_store_(self, *args, **kwargs): + return self._ekevent.rebaseToEventStore_(*args, **kwargs) + + def rebased_from(self, *args, **kwargs): + return self._ekevent.rebasedFrom(*args, **kwargs) + + def receive_observed_error_(self, *args, **kwargs): + return self._ekevent.receiveObservedError_(*args, **kwargs) + + def receive_observed_value_(self, *args, **kwargs): + return self._ekevent.receiveObservedValue_(*args, **kwargs) + + def recurrence_changed(self, *args, **kwargs): + return self._ekevent.recurrenceChanged(*args, **kwargs) + + def recurrence_date(self, *args, **kwargs): + return self._ekevent.recurrenceDate(*args, **kwargs) + + def recurrence_identifier(self, *args, **kwargs): + return self._ekevent.recurrenceIdentifier(*args, **kwargs) + + def recurrence_rule(self, *args, **kwargs): + return self._ekevent.recurrenceRule(*args, **kwargs) + + def recurrence_rule_string(self, *args, **kwargs): + return self._ekevent.recurrenceRuleString(*args, **kwargs) + + def recurrence_rules(self, *args, **kwargs): + return self._ekevent.recurrenceRules(*args, **kwargs) + + def recurrence_rules_set(self, *args, **kwargs): + return self._ekevent.recurrenceRulesSet(*args, **kwargs) + + def recurrence_set(self, *args, **kwargs): + return self._ekevent.recurrenceSet(*args, **kwargs) + + def refetch(self, *args, **kwargs): + return self._ekevent.refetch(*args, **kwargs) + + def refresh(self, *args, **kwargs): + return self._ekevent.refresh(*args, **kwargs) + + def refresh(self, *args, **kwargs): + return self._ekevent.refresh(*args, **kwargs) + + def refresh_and_notify_(self, *args, **kwargs): + return self._ekevent.refreshAndNotify_(*args, **kwargs) + + def refresh_and_notify_(self, *args, **kwargs): + return self._ekevent.refreshAndNotify_(*args, **kwargs) + + def reject_predicted_location(self, *args, **kwargs): + return self._ekevent.rejectPredictedLocation(*args, **kwargs) + + def release(self, *args, **kwargs): + return self._ekevent.release(*args, **kwargs) + + def remove_acknowledged_snoozed_alarms(self, *args, **kwargs): + return self._ekevent.removeAcknowledgedSnoozedAlarms(*args, **kwargs) + + def remove_alarm_(self, *args, **kwargs): + return self._ekevent.removeAlarm_(*args, **kwargs) + + def remove_all_snoozed_alarms(self, *args, **kwargs): + return self._ekevent.removeAllSnoozedAlarms(*args, **kwargs) + + def remove_attachment_(self, *args, **kwargs): + return self._ekevent.removeAttachment_(*args, **kwargs) + + def remove_attendee_(self, *args, **kwargs): + return self._ekevent.removeAttendee_(*args, **kwargs) + + def remove_cached_melted_object_for_multi_value_key_(self, *args, **kwargs): + return self._ekevent.removeCachedMeltedObject_forMultiValueKey_(*args, **kwargs) + + def remove_conference_rooms_(self, *args, **kwargs): + return self._ekevent.removeConferenceRooms_(*args, **kwargs) + + def remove_event_action_(self, *args, **kwargs): + return self._ekevent.removeEventAction_(*args, **kwargs) + + def remove_last_extraneous_organizer_and_self_attendee(self, *args, **kwargs): + return self._ekevent.removeLastExtraneousOrganizerAndSelfAttendee(*args, **kwargs) + + def remove_multi_changed_object_value_for_key_(self, *args, **kwargs): + return self._ekevent.removeMultiChangedObjectValue_forKey_(*args, **kwargs) + + def remove_multi_changed_object_values_for_key_(self, *args, **kwargs): + return self._ekevent.removeMultiChangedObjectValues_forKey_(*args, **kwargs) + + def remove_object_from_both_sides_of_relationship_with_key_(self, *args, **kwargs): + return self._ekevent.removeObject_fromBothSidesOfRelationshipWithKey_(*args, **kwargs) + + def remove_object_from_property_with_key_(self, *args, **kwargs): + return self._ekevent.removeObject_fromPropertyWithKey_(*args, **kwargs) + + def remove_observation_(self, *args, **kwargs): + return self._ekevent.removeObservation_(*args, **kwargs) + + def remove_observation_for_observable_key_path_(self, *args, **kwargs): + return self._ekevent.removeObservation_forObservableKeyPath_(*args, **kwargs) + + def remove_observer_for_key_path_(self, *args, **kwargs): + return self._ekevent.removeObserver_forKeyPath_(*args, **kwargs) + + def remove_observer_for_key_path_context_(self, *args, **kwargs): + return self._ekevent.removeObserver_forKeyPath_context_(*args, **kwargs) + + def remove_recurrence_rule_(self, *args, **kwargs): + return self._ekevent.removeRecurrenceRule_(*args, **kwargs) + + def remove_server_refresh_related_properties(self, *args, **kwargs): + return self._ekevent.removeServerRefreshRelatedProperties(*args, **kwargs) + + def remove_value_at_index_from_property_with_key_(self, *args, **kwargs): + return self._ekevent.removeValueAtIndex_fromPropertyWithKey_(*args, **kwargs) + + def remove_with_span_error_(self, *args, **kwargs): + return self._ekevent.removeWithSpan_error_(*args, **kwargs) + + def replace_multi_changed_object_values_with_object_values_for_key_(self, *args, **kwargs): + return self._ekevent.replaceMultiChangedObjectValuesWithObjectValues_forKey_(*args, **kwargs) + + def replace_value_at_index_in_property_with_key_with_value_(self, *args, **kwargs): + return self._ekevent.replaceValueAtIndex_inPropertyWithKey_withValue_(*args, **kwargs) + + def replacement_object_for_archiver_(self, *args, **kwargs): + return self._ekevent.replacementObjectForArchiver_(*args, **kwargs) + + def replacement_object_for_coder_(self, *args, **kwargs): + return self._ekevent.replacementObjectForCoder_(*args, **kwargs) + + def replacement_object_for_keyed_archiver_(self, *args, **kwargs): + return self._ekevent.replacementObjectForKeyedArchiver_(*args, **kwargs) + + def replacement_object_for_port_coder_(self, *args, **kwargs): + return self._ekevent.replacementObjectForPortCoder_(*args, **kwargs) + + def requirements_to_move_from_calendar_to_calendar_(self, *args, **kwargs): + return self._ekevent.requirementsToMoveFromCalendar_toCalendar_(*args, **kwargs) + + def requirements_to_move_to_calendar_(self, *args, **kwargs): + return self._ekevent.requirementsToMoveToCalendar_(*args, **kwargs) + + def requires_copy_to_move_from_calendar_to_calendar_(self, *args, **kwargs): + return self._ekevent.requiresCopyToMoveFromCalendar_toCalendar_(*args, **kwargs) + + def requires_detach(self, *args, **kwargs): + return self._ekevent.requiresDetach(*args, **kwargs) + + def requires_detach(self, *args, **kwargs): + return self._ekevent.requiresDetach(*args, **kwargs) + + def requires_detach_due_to_snoozed_alarm(self, *args, **kwargs): + return self._ekevent.requiresDetachDueToSnoozedAlarm(*args, **kwargs) + + def reset(self, *args, **kwargs): + return self._ekevent.reset(*args, **kwargs) + + def reset(self, *args, **kwargs): + return self._ekevent.reset(*args, **kwargs) + + def responds_to_selector_(self, *args, **kwargs): + return self._ekevent.respondsToSelector_(*args, **kwargs) + + def response_comment(self, *args, **kwargs): + return self._ekevent.responseComment(*args, **kwargs) + + def response_must_apply_to_all(self, *args, **kwargs): + return self._ekevent.responseMustApplyToAll(*args, **kwargs) + + def retain(self, *args, **kwargs): + return self._ekevent.retain(*args, **kwargs) + + def retain_count(self, *args, **kwargs): + return self._ekevent.retainCount(*args, **kwargs) + + def retain_weak_reference(self, *args, **kwargs): + return self._ekevent.retainWeakReference(*args, **kwargs) + + def revert(self, *args, **kwargs): + return self._ekevent.revert(*args, **kwargs) + + def revert(self, *args, **kwargs): + return self._ekevent.revert(*args, **kwargs) + + def rollback(self, *args, **kwargs): + return self._ekevent.rollback(*args, **kwargs) + + def rollback(self, *args, **kwargs): + return self._ekevent.rollback(*args, **kwargs) + + def room_attendees(self, *args, **kwargs): + return self._ekevent.roomAttendees(*args, **kwargs) + + def row_i_d(self, *args, **kwargs): + return self._ekevent.rowID(*args, **kwargs) + + def save_with_span_error_(self, *args, **kwargs): + return self._ekevent.saveWithSpan_error_(*args, **kwargs) + + def scan_for_conflicts(self, *args, **kwargs): + return self._ekevent.scanForConflicts(*args, **kwargs) + + def scripting_properties(self, *args, **kwargs): + return self._ekevent.scriptingProperties(*args, **kwargs) + + def scripting_value_for_specifier_(self, *args, **kwargs): + return self._ekevent.scriptingValueForSpecifier_(*args, **kwargs) + + def self(self, *args, **kwargs): + return self._ekevent.self(*args, **kwargs) + + def self_attendee(self, *args, **kwargs): + return self._ekevent.selfAttendee(*args, **kwargs) + + def self_participant_status(self, *args, **kwargs): + return self._ekevent.selfParticipantStatus(*args, **kwargs) + + def self_participant_status(self, *args, **kwargs): + return self._ekevent.selfParticipantStatus(*args, **kwargs) + + def self_participant_status_raw(self, *args, **kwargs): + return self._ekevent.selfParticipantStatusRaw(*args, **kwargs) + + def semantic_identifier(self, *args, **kwargs): + return self._ekevent.semanticIdentifier(*args, **kwargs) + + def senders_email(self, *args, **kwargs): + return self._ekevent.sendersEmail(*args, **kwargs) + + def senders_phone_number(self, *args, **kwargs): + return self._ekevent.sendersPhoneNumber(*args, **kwargs) + + def sequence_number(self, *args, **kwargs): + return self._ekevent.sequenceNumber(*args, **kwargs) + + def series_has_out_of_order_events(self, *args, **kwargs): + return self._ekevent.seriesHasOutOfOrderEvents(*args, **kwargs) + + def series_has_overlapping_or_on_same_day_or_out_of_order_events(self, *args, **kwargs): + return self._ekevent.seriesHasOverlappingOrOnSameDayOrOutOfOrderEvents(*args, **kwargs) + + def server_supported_propose_new_time(self, *args, **kwargs): + return self._ekevent.serverSupportedProposeNewTime(*args, **kwargs) + + def set_accessibility_braille_map_render_region_(self, *args, **kwargs): + return self._ekevent.setAccessibilityBrailleMapRenderRegion_(*args, **kwargs) + + def set_accessibility_braille_map_renderer_(self, *args, **kwargs): + return self._ekevent.setAccessibilityBrailleMapRenderer_(*args, **kwargs) + + def set_action_string_(self, *args, **kwargs): + return self._ekevent.setActionString_(*args, **kwargs) + + def set_action_(self, *args, **kwargs): + return self._ekevent.setAction_(*args, **kwargs) + + def set_actions_(self, *args, **kwargs): + return self._ekevent.setActions_(*args, **kwargs) + + def set_additional_frozen_properties_(self, *args, **kwargs): + return self._ekevent.setAdditionalFrozenProperties_(*args, **kwargs) + + def set_additional_melted_objects_(self, *args, **kwargs): + return self._ekevent.setAdditionalMeltedObjects_(*args, **kwargs) + + def set_alarms_(self, *args, **kwargs): + return self._ekevent.setAlarms_(*args, **kwargs) + + def set_all_alarms_set_(self, *args, **kwargs): + return self._ekevent.setAllAlarmsSet_(*args, **kwargs) + + def set_all_alarms_(self, *args, **kwargs): + return self._ekevent.setAllAlarms_(*args, **kwargs) + + def set_all_day_(self, *args, **kwargs): + return self._ekevent.setAllDay_(*args, **kwargs) + + def set_all_day_(self, *args, **kwargs): + return self._ekevent.setAllDay_(*args, **kwargs) + + def set_app_link_(self, *args, **kwargs): + return self._ekevent.setAppLink_(*args, **kwargs) + + def set_attachments_set_(self, *args, **kwargs): + return self._ekevent.setAttachmentsSet_(*args, **kwargs) + + def set_attachments_(self, *args, **kwargs): + return self._ekevent.setAttachments_(*args, **kwargs) + + def set_attendee_comment_(self, *args, **kwargs): + return self._ekevent.setAttendeeComment_(*args, **kwargs) + + def set_attendee_declined_start_date_(self, *args, **kwargs): + return self._ekevent.setAttendeeDeclinedStartDate_(*args, **kwargs) + + def set_attendee_proposed_start_date_(self, *args, **kwargs): + return self._ekevent.setAttendeeProposedStartDate_(*args, **kwargs) + + def set_attendee_status_(self, *args, **kwargs): + return self._ekevent.setAttendeeStatus_(*args, **kwargs) + + def set_attendees_raw_(self, *args, **kwargs): + return self._ekevent.setAttendeesRaw_(*args, **kwargs) + + def set_attendees_(self, *args, **kwargs): + return self._ekevent.setAttendees_(*args, **kwargs) + + def set_availability_(self, *args, **kwargs): + return self._ekevent.setAvailability_(*args, **kwargs) + + def set_backing_object_(self, *args, **kwargs): + return self._ekevent.setBackingObject_(*args, **kwargs) + + def set_birthday_contact_identifier_(self, *args, **kwargs): + return self._ekevent.setBirthdayContactIdentifier_(*args, **kwargs) + + def set_birthday_contact_(self, *args, **kwargs): + return self._ekevent.setBirthdayContact_(*args, **kwargs) + + def set_cached_junk_status_(self, *args, **kwargs): + return self._ekevent.setCachedJunkStatus_(*args, **kwargs) + + def set_cached_melted_object_for_single_value_key_(self, *args, **kwargs): + return self._ekevent.setCachedMeltedObject_forSingleValueKey_(*args, **kwargs) + + def set_cached_melted_objects_(self, *args, **kwargs): + return self._ekevent.setCachedMeltedObjects_(*args, **kwargs) + + def set_cached_melted_objects_(self, *args, **kwargs): + return self._ekevent.setCachedMeltedObjects_(*args, **kwargs) + + def set_cached_melted_objects_for_multi_value_key_(self, *args, **kwargs): + return self._ekevent.setCachedMeltedObjects_forMultiValueKey_(*args, **kwargs) + + def set_cached_value_for_key_(self, *args, **kwargs): + return self._ekevent.setCachedValue_forKey_(*args, **kwargs) + + def set_calendar_item_identifier_(self, *args, **kwargs): + return self._ekevent.setCalendarItemIdentifier_(*args, **kwargs) + + def set_calendar_scale_(self, *args, **kwargs): + return self._ekevent.setCalendarScale_(*args, **kwargs) + + def set_calendar_(self, *args, **kwargs): + return self._ekevent.setCalendar_(*args, **kwargs) + + def set_calendar_(self, *args, **kwargs): + return self._ekevent.setCalendar_(*args, **kwargs) + + def set_change_set_(self, *args, **kwargs): + return self._ekevent.setChangeSet_(*args, **kwargs) + + def set_clear_modified_flags_(self, *args, **kwargs): + return self._ekevent.setClearModifiedFlags_(*args, **kwargs) + + def set_client_location_(self, *args, **kwargs): + return self._ekevent.setClientLocation_(*args, **kwargs) + + def set_completed_(self, *args, **kwargs): + return self._ekevent.setCompleted_(*args, **kwargs) + + def set_conference_u_r_l_string_(self, *args, **kwargs): + return self._ekevent.setConferenceURLString_(*args, **kwargs) + + def set_conference_u_r_l_(self, *args, **kwargs): + return self._ekevent.setConferenceURL_(*args, **kwargs) + + def set_creation_date_(self, *args, **kwargs): + return self._ekevent.setCreationDate_(*args, **kwargs) + + def set_custom_object_for_key_(self, *args, **kwargs): + return self._ekevent.setCustomObject_forKey_(*args, **kwargs) + + def set_date_changed_(self, *args, **kwargs): + return self._ekevent.setDateChanged_(*args, **kwargs) + + def set_default_alarm_was_deleted_(self, *args, **kwargs): + return self._ekevent.setDefaultAlarmWasDeleted_(*args, **kwargs) + + def set_detached_items_(self, *args, **kwargs): + return self._ekevent.setDetachedItems_(*args, **kwargs) + + def set_display_notes_(self, *args, **kwargs): + return self._ekevent.setDisplayNotes_(*args, **kwargs) + + def set_display_notes_(self, *args, **kwargs): + return self._ekevent.setDisplayNotes_(*args, **kwargs) + + def set_ek_exception_dates_(self, *args, **kwargs): + return self._ekevent.setEkExceptionDates_(*args, **kwargs) + + def set_end_date_raw_(self, *args, **kwargs): + return self._ekevent.setEndDateRaw_(*args, **kwargs) + + def set_end_date_unadjusted_for_legacy_clients_(self, *args, **kwargs): + return self._ekevent.setEndDateUnadjustedForLegacyClients_(*args, **kwargs) + + def set_end_date_(self, *args, **kwargs): + return self._ekevent.setEndDate_(*args, **kwargs) + + def set_end_location_(self, *args, **kwargs): + return self._ekevent.setEndLocation_(*args, **kwargs) + + def set_end_time_zone_name_(self, *args, **kwargs): + return self._ekevent.setEndTimeZoneName_(*args, **kwargs) + + def set_end_time_zone_(self, *args, **kwargs): + return self._ekevent.setEndTimeZone_(*args, **kwargs) + + def set_event_store_(self, *args, **kwargs): + return self._ekevent.setEventStore_(*args, **kwargs) + + def set_exception_dates_(self, *args, **kwargs): + return self._ekevent.setExceptionDates_(*args, **kwargs) + + def set_external_data_(self, *args, **kwargs): + return self._ekevent.setExternalData_(*args, **kwargs) + + def set_external_i_d_(self, *args, **kwargs): + return self._ekevent.setExternalID_(*args, **kwargs) + + def set_external_modification_tag_(self, *args, **kwargs): + return self._ekevent.setExternalModificationTag_(*args, **kwargs) + + def set_external_schedule_i_d_(self, *args, **kwargs): + return self._ekevent.setExternalScheduleID_(*args, **kwargs) + + def set_external_tracking_status_(self, *args, **kwargs): + return self._ekevent.setExternalTrackingStatus_(*args, **kwargs) + + def set_fired_t_t_l_(self, *args, **kwargs): + return self._ekevent.setFiredTTL_(*args, **kwargs) + + def set_flag_value_(self, *args, **kwargs): + return self._ekevent.setFlag_value_(*args, **kwargs) + + def set_flags_(self, *args, **kwargs): + return self._ekevent.setFlags_(*args, **kwargs) + + def set_image_(self, *args, **kwargs): + return self._ekevent.setImage_(*args, **kwargs) + + def set_invitation_changed_properties_(self, *args, **kwargs): + return self._ekevent.setInvitationChangedProperties_(*args, **kwargs) + + def set_invitation_status_(self, *args, **kwargs): + return self._ekevent.setInvitationStatus_(*args, **kwargs) + + def set_is_alerted_(self, *args, **kwargs): + return self._ekevent.setIsAlerted_(*args, **kwargs) + + def set_is_junk_should_save_(self, *args, **kwargs): + return self._ekevent.setIsJunk_shouldSave_(*args, **kwargs) + + def set_is_phantom_(self, *args, **kwargs): + return self._ekevent.setIsPhantom_(*args, **kwargs) + + def set_junk_status_(self, *args, **kwargs): + return self._ekevent.setJunkStatus_(*args, **kwargs) + + def set_last_modified_date_(self, *args, **kwargs): + return self._ekevent.setLastModifiedDate_(*args, **kwargs) + + def set_local_custom_object_for_key_(self, *args, **kwargs): + return self._ekevent.setLocalCustomObject_forKey_(*args, **kwargs) + + def set_local_structured_data_(self, *args, **kwargs): + return self._ekevent.setLocalStructuredData_(*args, **kwargs) + + def set_location_changed_(self, *args, **kwargs): + return self._ekevent.setLocationChanged_(*args, **kwargs) + + def set_location_prediction_allowed_(self, *args, **kwargs): + return self._ekevent.setLocationPredictionAllowed_(*args, **kwargs) + + def set_location_prediction_state_(self, *args, **kwargs): + return self._ekevent.setLocationPredictionState_(*args, **kwargs) + + def set_location_(self, *args, **kwargs): + return self._ekevent.setLocation_(*args, **kwargs) + + def set_locations_(self, *args, **kwargs): + return self._ekevent.setLocations_(*args, **kwargs) + + def set_lunar_calendar_string_(self, *args, **kwargs): + return self._ekevent.setLunarCalendarString_(*args, **kwargs) + + def set_modified_properties_(self, *args, **kwargs): + return self._ekevent.setModifiedProperties_(*args, **kwargs) + + def set_needs_geocoding_(self, *args, **kwargs): + return self._ekevent.setNeedsGeocoding_(*args, **kwargs) + + def set_nil_value_for_key_(self, *args, **kwargs): + return self._ekevent.setNilValueForKey_(*args, **kwargs) + + def set_notes_common_(self, *args, **kwargs): + return self._ekevent.setNotesCommon_(*args, **kwargs) + + def set_notes_(self, *args, **kwargs): + return self._ekevent.setNotes_(*args, **kwargs) + + def set_notes_(self, *args, **kwargs): + return self._ekevent.setNotes_(*args, **kwargs) + + def set_observation_info_(self, *args, **kwargs): + return self._ekevent.setObservationInfo_(*args, **kwargs) + + def set_observation_for_observing_key_path_(self, *args, **kwargs): + return self._ekevent.setObservation_forObservingKeyPath_(*args, **kwargs) + + def set_occurrence_end_date_(self, *args, **kwargs): + return self._ekevent.setOccurrenceEndDate_(*args, **kwargs) + + def set_occurrence_is_all_day_(self, *args, **kwargs): + return self._ekevent.setOccurrenceIsAllDay_(*args, **kwargs) + + def set_occurrence_start_date_(self, *args, **kwargs): + return self._ekevent.setOccurrenceStartDate_(*args, **kwargs) + + def set_organizer_(self, *args, **kwargs): + return self._ekevent.setOrganizer_(*args, **kwargs) + + def set_original_item_(self, *args, **kwargs): + return self._ekevent.setOriginalItem_(*args, **kwargs) + + def set_original_occurrence_end_date_(self, *args, **kwargs): + return self._ekevent.setOriginalOccurrenceEndDate_(*args, **kwargs) + + def set_original_occurrence_is_all_day_(self, *args, **kwargs): + return self._ekevent.setOriginalOccurrenceIsAllDay_(*args, **kwargs) + + def set_original_occurrence_start_date_(self, *args, **kwargs): + return self._ekevent.setOriginalOccurrenceStartDate_(*args, **kwargs) + + def set_original_start_date_(self, *args, **kwargs): + return self._ekevent.setOriginalStartDate_(*args, **kwargs) + + def set_participation_status_modified_date_(self, *args, **kwargs): + return self._ekevent.setParticipationStatusModifiedDate_(*args, **kwargs) + + def set_participation_status_(self, *args, **kwargs): + return self._ekevent.setParticipationStatus_(*args, **kwargs) + + def set_persistent_object_(self, *args, **kwargs): + return self._ekevent.setPersistentObject_(*args, **kwargs) + + def set_phantom_master_(self, *args, **kwargs): + return self._ekevent.setPhantomMaster_(*args, **kwargs) + + def set_predicted_location_frozen_(self, *args, **kwargs): + return self._ekevent.setPredictedLocationFrozen_(*args, **kwargs) + + def set_prevent_conference_u_r_l_detection_(self, *args, **kwargs): + return self._ekevent.setPreventConferenceURLDetection_(*args, **kwargs) + + def set_priority_(self, *args, **kwargs): + return self._ekevent.setPriority_(*args, **kwargs) + + def set_privacy_level_without_verifying_privacy_modifications_allowed_(self, *args, **kwargs): + return self._ekevent.setPrivacyLevelWithoutVerifyingPrivacyModificationsAllowed_(*args, **kwargs) + + def set_privacy_level_(self, *args, **kwargs): + return self._ekevent.setPrivacyLevel_(*args, **kwargs) + + def set_proposed_start_date_(self, *args, **kwargs): + return self._ekevent.setProposedStartDate_(*args, **kwargs) + + def set_recurrence_changed_(self, *args, **kwargs): + return self._ekevent.setRecurrenceChanged_(*args, **kwargs) + + def set_recurrence_rule_string_(self, *args, **kwargs): + return self._ekevent.setRecurrenceRuleString_(*args, **kwargs) + + def set_recurrence_rule_(self, *args, **kwargs): + return self._ekevent.setRecurrenceRule_(*args, **kwargs) + + def set_recurrence_rules_set_(self, *args, **kwargs): + return self._ekevent.setRecurrenceRulesSet_(*args, **kwargs) + + def set_recurrence_rules_(self, *args, **kwargs): + return self._ekevent.setRecurrenceRules_(*args, **kwargs) + + def set_recurrence_set_(self, *args, **kwargs): + return self._ekevent.setRecurrenceSet_(*args, **kwargs) + + def set_requires_detach_due_to_snoozed_alarm_(self, *args, **kwargs): + return self._ekevent.setRequiresDetachDueToSnoozedAlarm_(*args, **kwargs) + + def set_response_comment_(self, *args, **kwargs): + return self._ekevent.setResponseComment_(*args, **kwargs) + + def set_scripting_properties_(self, *args, **kwargs): + return self._ekevent.setScriptingProperties_(*args, **kwargs) + + def set_self_attendee_(self, *args, **kwargs): + return self._ekevent.setSelfAttendee_(*args, **kwargs) + + def set_sequence_number_(self, *args, **kwargs): + return self._ekevent.setSequenceNumber_(*args, **kwargs) + + def set_shared_item_created_by_address_string_(self, *args, **kwargs): + return self._ekevent.setSharedItemCreatedByAddressString_(*args, **kwargs) + + def set_shared_item_created_by_address_(self, *args, **kwargs): + return self._ekevent.setSharedItemCreatedByAddress_(*args, **kwargs) + + def set_shared_item_created_by_display_name_(self, *args, **kwargs): + return self._ekevent.setSharedItemCreatedByDisplayName_(*args, **kwargs) + + def set_shared_item_created_by_first_name_(self, *args, **kwargs): + return self._ekevent.setSharedItemCreatedByFirstName_(*args, **kwargs) + + def set_shared_item_created_by_last_name_(self, *args, **kwargs): + return self._ekevent.setSharedItemCreatedByLastName_(*args, **kwargs) + + def set_shared_item_created_date_(self, *args, **kwargs): + return self._ekevent.setSharedItemCreatedDate_(*args, **kwargs) + + def set_shared_item_created_time_zone_name_(self, *args, **kwargs): + return self._ekevent.setSharedItemCreatedTimeZoneName_(*args, **kwargs) + + def set_shared_item_created_time_zone_(self, *args, **kwargs): + return self._ekevent.setSharedItemCreatedTimeZone_(*args, **kwargs) + + def set_shared_item_modified_by_address_string_(self, *args, **kwargs): + return self._ekevent.setSharedItemModifiedByAddressString_(*args, **kwargs) + + def set_shared_item_modified_by_address_(self, *args, **kwargs): + return self._ekevent.setSharedItemModifiedByAddress_(*args, **kwargs) + + def set_shared_item_modified_by_display_name_(self, *args, **kwargs): + return self._ekevent.setSharedItemModifiedByDisplayName_(*args, **kwargs) + + def set_shared_item_modified_by_first_name_(self, *args, **kwargs): + return self._ekevent.setSharedItemModifiedByFirstName_(*args, **kwargs) + + def set_shared_item_modified_by_last_name_(self, *args, **kwargs): + return self._ekevent.setSharedItemModifiedByLastName_(*args, **kwargs) + + def set_shared_item_modified_date_(self, *args, **kwargs): + return self._ekevent.setSharedItemModifiedDate_(*args, **kwargs) + + def set_shared_item_modified_time_zone_name_(self, *args, **kwargs): + return self._ekevent.setSharedItemModifiedTimeZoneName_(*args, **kwargs) + + def set_shared_item_modified_time_zone_(self, *args, **kwargs): + return self._ekevent.setSharedItemModifiedTimeZone_(*args, **kwargs) + + def set_single_changed_value_for_key_(self, *args, **kwargs): + return self._ekevent.setSingleChangedValue_forKey_(*args, **kwargs) + + def set_single_recurrence_rule_(self, *args, **kwargs): + return self._ekevent.setSingleRecurrenceRule_(*args, **kwargs) + + def set_special_day_string_(self, *args, **kwargs): + return self._ekevent.setSpecialDayString_(*args, **kwargs) + + def set_special_day_type_(self, *args, **kwargs): + return self._ekevent.setSpecialDayType_(*args, **kwargs) + + def set_start_date_raw_(self, *args, **kwargs): + return self._ekevent.setStartDateRaw_(*args, **kwargs) + + def set_start_date_raw_(self, *args, **kwargs): + return self._ekevent.setStartDateRaw_(*args, **kwargs) + + def set_start_date_(self, *args, **kwargs): + return self._ekevent.setStartDate_(*args, **kwargs) + + def set_start_time_zone_name_(self, *args, **kwargs): + return self._ekevent.setStartTimeZoneName_(*args, **kwargs) + + def set_start_time_zone_(self, *args, **kwargs): + return self._ekevent.setStartTimeZone_(*args, **kwargs) + + def set_status_(self, *args, **kwargs): + return self._ekevent.setStatus_(*args, **kwargs) + + def set_structured_data_(self, *args, **kwargs): + return self._ekevent.setStructuredData_(*args, **kwargs) + + def set_structured_location_without_prediction_(self, *args, **kwargs): + return self._ekevent.setStructuredLocationWithoutPrediction_(*args, **kwargs) + + def set_structured_location_(self, *args, **kwargs): + return self._ekevent.setStructuredLocation_(*args, **kwargs) + + def set_structured_location_(self, *args, **kwargs): + return self._ekevent.setStructuredLocation_(*args, **kwargs) + + def set_structured_location_preserve_conference_rooms_(self, *args, **kwargs): + return self._ekevent.setStructuredLocation_preserveConferenceRooms_(*args, **kwargs) + + def set_suggestion_info_(self, *args, **kwargs): + return self._ekevent.setSuggestionInfo_(*args, **kwargs) + + def set_suppress_notification_for_changes_(self, *args, **kwargs): + return self._ekevent.setSuppressNotificationForChanges_(*args, **kwargs) + + def set_sync_error_(self, *args, **kwargs): + return self._ekevent.setSyncError_(*args, **kwargs) + + def set_time_changed_(self, *args, **kwargs): + return self._ekevent.setTimeChanged_(*args, **kwargs) + + def set_time_zone_(self, *args, **kwargs): + return self._ekevent.setTimeZone_(*args, **kwargs) + + def set_time_zone_(self, *args, **kwargs): + return self._ekevent.setTimeZone_(*args, **kwargs) + + def set_title_changed_(self, *args, **kwargs): + return self._ekevent.setTitleChanged_(*args, **kwargs) + + def set_title_(self, *args, **kwargs): + return self._ekevent.setTitle_(*args, **kwargs) + + def set_title_(self, *args, **kwargs): + return self._ekevent.setTitle_(*args, **kwargs) + + def set_travel_advisory_behavior_(self, *args, **kwargs): + return self._ekevent.setTravelAdvisoryBehavior_(*args, **kwargs) + + def set_travel_start_location_(self, *args, **kwargs): + return self._ekevent.setTravelStartLocation_(*args, **kwargs) + + def set_travel_time_(self, *args, **kwargs): + return self._ekevent.setTravelTime_(*args, **kwargs) + + def set_u_r_l_common_(self, *args, **kwargs): + return self._ekevent.setURLCommon_(*args, **kwargs) + + def set_u_r_l_string_(self, *args, **kwargs): + return self._ekevent.setURLString_(*args, **kwargs) + + def set_u_r_l_(self, *args, **kwargs): + return self._ekevent.setURL_(*args, **kwargs) + + def set_u_r_l_(self, *args, **kwargs): + return self._ekevent.setURL_(*args, **kwargs) + + def set_unique_i_d_(self, *args, **kwargs): + return self._ekevent.setUniqueID_(*args, **kwargs) + + def set_unique_id_(self, *args, **kwargs): + return self._ekevent.setUniqueId_(*args, **kwargs) + + def set_unlocalized_title_(self, *args, **kwargs): + return self._ekevent.setUnlocalizedTitle_(*args, **kwargs) + + def set_user_interface_item_identifier_(self, *args, **kwargs): + return self._ekevent.setUserInterfaceItemIdentifier_(*args, **kwargs) + + def set_value_for_key_path_(self, *args, **kwargs): + return self._ekevent.setValue_forKeyPath_(*args, **kwargs) + + def set_value_for_key_(self, *args, **kwargs): + return self._ekevent.setValue_forKey_(*args, **kwargs) + + def set_value_for_undefined_key_(self, *args, **kwargs): + return self._ekevent.setValue_forUndefinedKey_(*args, **kwargs) + + def set_values_for_keys_with_dictionary_(self, *args, **kwargs): + return self._ekevent.setValuesForKeysWithDictionary_(*args, **kwargs) + + def set_video_conference_changed_(self, *args, **kwargs): + return self._ekevent.setVideoConferenceChanged_(*args, **kwargs) + + def set_virtual_conference_text_representation_(self, *args, **kwargs): + return self._ekevent.setVirtualConferenceTextRepresentation_(*args, **kwargs) + + def set_virtual_conference_(self, *args, **kwargs): + return self._ekevent.setVirtualConference_(*args, **kwargs) + + def set_cached_melted_objects_(self, *args, **kwargs): + return self._ekevent.set_cachedMeltedObjects_(*args, **kwargs) + + def set_cached_values_(self, *args, **kwargs): + return self._ekevent.set_cachedValues_(*args, **kwargs) + + def set_validation_context_(self, *args, **kwargs): + return self._ekevent.set_validationContext_(*args, **kwargs) + + def shallow_copy_without_changes(self, *args, **kwargs): + return self._ekevent.shallowCopyWithoutChanges(*args, **kwargs) + + def shared_item_created_by_address(self, *args, **kwargs): + return self._ekevent.sharedItemCreatedByAddress(*args, **kwargs) + + def shared_item_created_by_address_string(self, *args, **kwargs): + return self._ekevent.sharedItemCreatedByAddressString(*args, **kwargs) + + def shared_item_created_by_display_name(self, *args, **kwargs): + return self._ekevent.sharedItemCreatedByDisplayName(*args, **kwargs) + + def shared_item_created_by_first_name(self, *args, **kwargs): + return self._ekevent.sharedItemCreatedByFirstName(*args, **kwargs) + + def shared_item_created_by_last_name(self, *args, **kwargs): + return self._ekevent.sharedItemCreatedByLastName(*args, **kwargs) + + def shared_item_created_date(self, *args, **kwargs): + return self._ekevent.sharedItemCreatedDate(*args, **kwargs) + + def shared_item_created_time_zone(self, *args, **kwargs): + return self._ekevent.sharedItemCreatedTimeZone(*args, **kwargs) + + def shared_item_created_time_zone_name(self, *args, **kwargs): + return self._ekevent.sharedItemCreatedTimeZoneName(*args, **kwargs) + + def shared_item_modified_by_address(self, *args, **kwargs): + return self._ekevent.sharedItemModifiedByAddress(*args, **kwargs) + + def shared_item_modified_by_address_string(self, *args, **kwargs): + return self._ekevent.sharedItemModifiedByAddressString(*args, **kwargs) + + def shared_item_modified_by_display_name(self, *args, **kwargs): + return self._ekevent.sharedItemModifiedByDisplayName(*args, **kwargs) + + def shared_item_modified_by_first_name(self, *args, **kwargs): + return self._ekevent.sharedItemModifiedByFirstName(*args, **kwargs) + + def shared_item_modified_by_last_name(self, *args, **kwargs): + return self._ekevent.sharedItemModifiedByLastName(*args, **kwargs) + + def shared_item_modified_date(self, *args, **kwargs): + return self._ekevent.sharedItemModifiedDate(*args, **kwargs) + + def shared_item_modified_time_zone(self, *args, **kwargs): + return self._ekevent.sharedItemModifiedTimeZone(*args, **kwargs) + + def shared_item_modified_time_zone_name(self, *args, **kwargs): + return self._ekevent.sharedItemModifiedTimeZoneName(*args, **kwargs) + + def shared_u_i_d(self, *args, **kwargs): + return self._ekevent.sharedUID(*args, **kwargs) + + def should_have_default_alarms(self, *args, **kwargs): + return self._ekevent.shouldHaveDefaultAlarms(*args, **kwargs) + + def should_have_default_alarms(self, *args, **kwargs): + return self._ekevent.shouldHaveDefaultAlarms(*args, **kwargs) + + def should_load_relationship_for_validation_(self, *args, **kwargs): + return self._ekevent.shouldLoadRelationshipForValidation_(*args, **kwargs) + + def should_load_relationship_for_validation_(self, *args, **kwargs): + return self._ekevent.shouldLoadRelationshipForValidation_(*args, **kwargs) + + def show_event_u_r_l_string(self, *args, **kwargs): + return self._ekevent.showEventURLString(*args, **kwargs) + + def single_changed_value_for_key_(self, *args, **kwargs): + return self._ekevent.singleChangedValueForKey_(*args, **kwargs) + + def single_recurrence_rule(self, *args, **kwargs): + return self._ekevent.singleRecurrenceRule(*args, **kwargs) + + def snapshot_copy(self, *args, **kwargs): + return self._ekevent.snapshotCopy(*args, **kwargs) + + def snapshot_copy_with_property_keys_to_copy_(self, *args, **kwargs): + return self._ekevent.snapshotCopyWithPropertyKeysToCopy_(*args, **kwargs) + + def snapshot_copy_with_property_keys_to_copy_property_keys_to_skip_(self, *args, **kwargs): + return self._ekevent.snapshotCopyWithPropertyKeysToCopy_propertyKeysToSkip_(*args, **kwargs) + + def snapshot_copy_with_property_keys_to_copy_property_keys_to_skip_(self, *args, **kwargs): + return self._ekevent.snapshotCopyWithPropertyKeysToCopy_propertyKeysToSkip_(*args, **kwargs) + + def snooze_alarm_until_target_date_(self, *args, **kwargs): + return self._ekevent.snoozeAlarm_untilTargetDate_(*args, **kwargs) + + def snooze_alarm_until_target_date_pins_trigger_to_start_date_(self, *args, **kwargs): + return self._ekevent.snoozeAlarm_untilTargetDate_pinsTriggerToStartDate_(*args, **kwargs) + + def snooze_alarm_with_location_proximity_(self, *args, **kwargs): + return self._ekevent.snoozeAlarm_withLocation_proximity_(*args, **kwargs) + + def snooze_alarm_with_time_interval_from_now_(self, *args, **kwargs): + return self._ekevent.snoozeAlarm_withTimeIntervalFromNow_(*args, **kwargs) + + def snooze_alarm_with_time_interval_from_now_(self, *args, **kwargs): + return self._ekevent.snoozeAlarm_withTimeIntervalFromNow_(*args, **kwargs) + + def snooze_alarm_with_time_interval_from_now_pins_trigger_to_start_date_(self, *args, **kwargs): + return self._ekevent.snoozeAlarm_withTimeIntervalFromNow_pinsTriggerToStartDate_(*args, **kwargs) + + def snooze_alarm_with_time_interval_from_now_pins_trigger_to_start_date_(self, *args, **kwargs): + return self._ekevent.snoozeAlarm_withTimeIntervalFromNow_pinsTriggerToStartDate_(*args, **kwargs) + + def sorted_alarms(self, *args, **kwargs): + return self._ekevent.sortedAlarms(*args, **kwargs) + + def special_day_string(self, *args, **kwargs): + return self._ekevent.specialDayString(*args, **kwargs) + + def special_day_type(self, *args, **kwargs): + return self._ekevent.specialDayType(*args, **kwargs) + + def specific_identifier(self, *args, **kwargs): + return self._ekevent.specificIdentifier(*args, **kwargs) + + def specific_identifier(self, *args, **kwargs): + return self._ekevent.specificIdentifier(*args, **kwargs) + + def start_calendar_date(self, *args, **kwargs): + return self._ekevent.startCalendarDate(*args, **kwargs) + + def start_calendar_date_including_travel_time(self, *args, **kwargs): + return self._ekevent.startCalendarDateIncludingTravelTime(*args, **kwargs) + + def start_date(self, *args, **kwargs): + return self._ekevent.startDate(*args, **kwargs) + + def start_date_for_recurrence(self, *args, **kwargs): + return self._ekevent.startDateForRecurrence(*args, **kwargs) + + def start_date_for_recurrence(self, *args, **kwargs): + return self._ekevent.startDateForRecurrence(*args, **kwargs) + + def start_date_including_travel(self, *args, **kwargs): + return self._ekevent.startDateIncludingTravel(*args, **kwargs) + + def start_date_raw(self, *args, **kwargs): + return self._ekevent.startDateRaw(*args, **kwargs) + + def start_date_raw(self, *args, **kwargs): + return self._ekevent.startDateRaw(*args, **kwargs) + + def start_of_day_for_end_date_in_calendar_(self, *args, **kwargs): + return self._ekevent.startOfDayForEndDateInCalendar_(*args, **kwargs) + + def start_of_day_for_start_date_in_calendar_(self, *args, **kwargs): + return self._ekevent.startOfDayForStartDateInCalendar_(*args, **kwargs) + + def start_time_zone(self, *args, **kwargs): + return self._ekevent.startTimeZone(*args, **kwargs) + + def start_time_zone_name(self, *args, **kwargs): + return self._ekevent.startTimeZoneName(*args, **kwargs) + + def status(self, *args, **kwargs): + return self._ekevent.status(*args, **kwargs) + + def stored_value_for_key_(self, *args, **kwargs): + return self._ekevent.storedValueForKey_(*args, **kwargs) + + def string_value_safe(self, *args, **kwargs): + return self._ekevent.stringValueSafe(*args, **kwargs) + + def string_value_safe_(self, *args, **kwargs): + return self._ekevent.stringValueSafe_(*args, **kwargs) + + def structured_data(self, *args, **kwargs): + return self._ekevent.structuredData(*args, **kwargs) + + def structured_location(self, *args, **kwargs): + return self._ekevent.structuredLocation(*args, **kwargs) + + def structured_location(self, *args, **kwargs): + return self._ekevent.structuredLocation(*args, **kwargs) + + def structured_location_without_prediction(self, *args, **kwargs): + return self._ekevent.structuredLocationWithoutPrediction(*args, **kwargs) + + def suggested_start_date_for_current_recurrence_rule(self, *args, **kwargs): + return self._ekevent.suggestedStartDateForCurrentRecurrenceRule(*args, **kwargs) + + def suggested_start_date_for_current_recurrence_rule_with_simulated_now_date_(self, *args, **kwargs): + return self._ekevent.suggestedStartDateForCurrentRecurrenceRuleWithSimulatedNowDate_(*args, **kwargs) + + def suggestion_info(self, *args, **kwargs): + return self._ekevent.suggestionInfo(*args, **kwargs) + + def superclass(self, *args, **kwargs): + return self._ekevent.superclass(*args, **kwargs) + + def supports_adding_attachments(self, *args, **kwargs): + return self._ekevent.supportsAddingAttachments(*args, **kwargs) + + def supports_b_s_x_p_c_secure_coding(self, *args, **kwargs): + return self._ekevent.supportsBSXPCSecureCoding(*args, **kwargs) + + def supports_junk_reporting(self, *args, **kwargs): + return self._ekevent.supportsJunkReporting(*args, **kwargs) + + def supports_participation_status_modifications_without_notification(self, *args, **kwargs): + return self._ekevent.supportsParticipationStatusModificationsWithoutNotification(*args, **kwargs) + + def supports_r_b_s_x_p_c_secure_coding(self, *args, **kwargs): + return self._ekevent.supportsRBSXPCSecureCoding(*args, **kwargs) + + def suppress_notification_for_changes(self, *args, **kwargs): + return self._ekevent.suppressNotificationForChanges(*args, **kwargs) + + def sync_error(self, *args, **kwargs): + return self._ekevent.syncError(*args, **kwargs) + + def take_stored_value_for_key_(self, *args, **kwargs): + return self._ekevent.takeStoredValue_forKey_(*args, **kwargs) + + def take_stored_values_from_dictionary_(self, *args, **kwargs): + return self._ekevent.takeStoredValuesFromDictionary_(*args, **kwargs) + + def take_value_for_key_path_(self, *args, **kwargs): + return self._ekevent.takeValue_forKeyPath_(*args, **kwargs) + + def take_value_for_key_(self, *args, **kwargs): + return self._ekevent.takeValue_forKey_(*args, **kwargs) + + def take_values_from_dictionary_(self, *args, **kwargs): + return self._ekevent.takeValuesFromDictionary_(*args, **kwargs) + + def time_changed(self, *args, **kwargs): + return self._ekevent.timeChanged(*args, **kwargs) + + def time_zone(self, *args, **kwargs): + return self._ekevent.timeZone(*args, **kwargs) + + def title(self, *args, **kwargs): + return self._ekevent.title(*args, **kwargs) + + def title(self, *args, **kwargs): + return self._ekevent.title(*args, **kwargs) + + def title_changed(self, *args, **kwargs): + return self._ekevent.titleChanged(*args, **kwargs) + + def to_many_relationship_keys(self, *args, **kwargs): + return self._ekevent.toManyRelationshipKeys(*args, **kwargs) + + def to_one_relationship_keys(self, *args, **kwargs): + return self._ekevent.toOneRelationshipKeys(*args, **kwargs) + + def to_p_b_codable(self, *args, **kwargs): + return self._ekevent.toPBCodable(*args, **kwargs) + + def travel_advisory_behavior(self, *args, **kwargs): + return self._ekevent.travelAdvisoryBehavior(*args, **kwargs) + + def travel_advisory_behavior_is_effectively_enabled(self, *args, **kwargs): + return self._ekevent.travelAdvisoryBehaviorIsEffectivelyEnabled(*args, **kwargs) + + def travel_routing_mode(self, *args, **kwargs): + return self._ekevent.travelRoutingMode(*args, **kwargs) + + def travel_start_location(self, *args, **kwargs): + return self._ekevent.travelStartLocation(*args, **kwargs) + + def travel_time(self, *args, **kwargs): + return self._ekevent.travelTime(*args, **kwargs) + + def un_safe_bool_value(self, *args, **kwargs): + return self._ekevent.un_safeBoolValue(*args, **kwargs) + + def unable_to_set_nil_for_key_(self, *args, **kwargs): + return self._ekevent.unableToSetNilForKey_(*args, **kwargs) + + def unbind_(self, *args, **kwargs): + return self._ekevent.unbind_(*args, **kwargs) + + def unique_i_d(self, *args, **kwargs): + return self._ekevent.uniqueID(*args, **kwargs) + + def unique_id(self, *args, **kwargs): + return self._ekevent.uniqueId(*args, **kwargs) + + def unique_id(self, *args, **kwargs): + return self._ekevent.uniqueId(*args, **kwargs) + + def unique_identifier(self, *args, **kwargs): + return self._ekevent.uniqueIdentifier(*args, **kwargs) + + def unlocalized_title(self, *args, **kwargs): + return self._ekevent.unlocalizedTitle(*args, **kwargs) + + def update_after_applying_changes_(self, *args, **kwargs): + return self._ekevent.updateAfterApplyingChanges_(*args, **kwargs) + + def update_default_alarms(self, *args, **kwargs): + return self._ekevent.updateDefaultAlarms(*args, **kwargs) + + def update_event_to_event_(self, *args, **kwargs): + return self._ekevent.updateEventToEvent_(*args, **kwargs) + + def update_event_to_event_commit_(self, *args, **kwargs): + return self._ekevent.updateEventToEvent_commit_(*args, **kwargs) + + def update_melted_and_cached_multi_relation_objects_for_key_(self, *args, **kwargs): + return self._ekevent.updateMeltedAndCachedMultiRelationObjects_forKey_(*args, **kwargs) + + def update_melted_and_cached_single_relation_object_for_key_frozen_class_(self, *args, **kwargs): + return self._ekevent.updateMeltedAndCachedSingleRelationObject_forKey_frozenClass_(*args, **kwargs) + + def update_melted_cache_for_change_set_(self, *args, **kwargs): + return self._ekevent.updateMeltedCacheForChangeSet_(*args, **kwargs) + + def update_multi_value_cache_for_change_set_preserving_existing_adds_(self, *args, **kwargs): + return self._ekevent.updateMultiValueCacheForChangeSet_preservingExistingAdds_(*args, **kwargs) + + def update_persistent_object(self, *args, **kwargs): + return self._ekevent.updatePersistentObject(*args, **kwargs) + + def update_persistent_object_skipping_properties_(self, *args, **kwargs): + return self._ekevent.updatePersistentObjectSkippingProperties_(*args, **kwargs) + + def update_persistent_value_for_key_if_needed_(self, *args, **kwargs): + return self._ekevent.updatePersistentValueForKeyIfNeeded_(*args, **kwargs) + + def update_with_app_link_used_selected_text_(self, *args, **kwargs): + return self._ekevent.updateWithAppLink_usedSelectedText_(*args, **kwargs) + + def update_with_geocoded_map_item_and_save_with_commit_event_store_error_(self, *args, **kwargs): + return self._ekevent.updateWithGeocodedMapItemAndSaveWithCommit_eventStore_error_(*args, **kwargs) + + def update_with_v_c_s_entity_in_calendar_(self, *args, **kwargs): + return self._ekevent.updateWithVCSEntity_inCalendar_(*args, **kwargs) + + def update_with_v_c_s_entity_in_calendar_(self, *args, **kwargs): + return self._ekevent.updateWithVCSEntity_inCalendar_(*args, **kwargs) + + def user_interface_item_identifier(self, *args, **kwargs): + return self._ekevent.userInterfaceItemIdentifier(*args, **kwargs) + + def utf8_value_safe(self, *args, **kwargs): + return self._ekevent.utf8ValueSafe(*args, **kwargs) + + def utf8_value_safe_(self, *args, **kwargs): + return self._ekevent.utf8ValueSafe_(*args, **kwargs) + + def validate_occurrence_date_still_matches_recurrence_rules(self, *args, **kwargs): + return self._ekevent.validateOccurrenceDateStillMatchesRecurrenceRules(*args, **kwargs) + + def validate_recurrence_rule_error_(self, *args, **kwargs): + return self._ekevent.validateRecurrenceRule_error_(*args, **kwargs) + + def validate_take_value_for_key_path_(self, *args, **kwargs): + return self._ekevent.validateTakeValue_forKeyPath_(*args, **kwargs) + + def validate_value_for_key_path_error_(self, *args, **kwargs): + return self._ekevent.validateValue_forKeyPath_error_(*args, **kwargs) + + def validate_value_for_key_(self, *args, **kwargs): + return self._ekevent.validateValue_forKey_(*args, **kwargs) + + def validate_value_for_key_error_(self, *args, **kwargs): + return self._ekevent.validateValue_forKey_error_(*args, **kwargs) + + def validate_with_owner_error_(self, *args, **kwargs): + return self._ekevent.validateWithOwner_error_(*args, **kwargs) + + def validate_with_span_error_(self, *args, **kwargs): + return self._ekevent.validateWithSpan_error_(*args, **kwargs) + + def validate_(self, *args, **kwargs): + return self._ekevent.validate_(*args, **kwargs) + + def validate_(self, *args, **kwargs): + return self._ekevent.validate_(*args, **kwargs) + + def validate_(self, *args, **kwargs): + return self._ekevent.validate_(*args, **kwargs) + + def value_at_index_in_property_with_key_(self, *args, **kwargs): + return self._ekevent.valueAtIndex_inPropertyWithKey_(*args, **kwargs) + + def value_class_for_binding_(self, *args, **kwargs): + return self._ekevent.valueClassForBinding_(*args, **kwargs) + + def value_for_key_path_(self, *args, **kwargs): + return self._ekevent.valueForKeyPath_(*args, **kwargs) + + def value_for_key_(self, *args, **kwargs): + return self._ekevent.valueForKey_(*args, **kwargs) + + def value_for_undefined_key_(self, *args, **kwargs): + return self._ekevent.valueForUndefinedKey_(*args, **kwargs) + + def value_with_name_in_property_with_key_(self, *args, **kwargs): + return self._ekevent.valueWithName_inPropertyWithKey_(*args, **kwargs) + + def value_with_unique_i_d_in_property_with_key_(self, *args, **kwargs): + return self._ekevent.valueWithUniqueID_inPropertyWithKey_(*args, **kwargs) + + def values_for_keys_(self, *args, **kwargs): + return self._ekevent.valuesForKeys_(*args, **kwargs) + + def video_conference_changed(self, *args, **kwargs): + return self._ekevent.videoConferenceChanged(*args, **kwargs) + + def virtual_conference(self, *args, **kwargs): + return self._ekevent.virtualConference(*args, **kwargs) + + def virtual_conference_text_representation(self, *args, **kwargs): + return self._ekevent.virtualConferenceTextRepresentation(*args, **kwargs) + + def will_change_value_for_key_(self, *args, **kwargs): + return self._ekevent.willChangeValueForKey_(*args, **kwargs) + + def will_change_value_for_key_with_set_mutation_using_objects_(self, *args, **kwargs): + return self._ekevent.willChangeValueForKey_withSetMutation_usingObjects_(*args, **kwargs) + + def will_change_values_at_indexes_for_key_(self, *args, **kwargs): + return self._ekevent.willChange_valuesAtIndexes_forKey_(*args, **kwargs) + + def will_save(self, *args, **kwargs): + return self._ekevent.willSave(*args, **kwargs) + + def zone(self, *args, **kwargs): + return self._ekevent.zone(*args, **kwargs) + \ No newline at end of file diff --git a/src/dspygen/experiments/event_kit/event_kit_service.py b/src/dspygen/experiments/event_kit/event_kit_service.py new file mode 100644 index 0000000..2879038 --- /dev/null +++ b/src/dspygen/experiments/event_kit/event_kit_service.py @@ -0,0 +1,140 @@ +import EventKit +from datetime import datetime +from typing import Optional, List +from uuid import UUID, uuid4 +from pydantic import BaseModel, Field + +store = EventKit.EKEventStore.new() + + +class Reminder(BaseModel): + id: UUID = Field(default_factory=uuid4) + title: str + due_date: Optional[datetime] = None + completed: bool = False + notes: Optional[str] = None + calendar_id: UUID + + +class Calendar(BaseModel): + id: UUID = Field(default_factory=uuid4) + title: str + reminders: List[Reminder] = Field(default_factory=list) + + +class EventKitService: + def __init__(self): + self.store = store + self.request_access() + + # Uncomment the following line when you want to print the EKEventStore info + # print_ekeventstore_info() + + def request_access(self): + def handler(granted, error): + if not granted: + raise PermissionError("Access to reminders was not granted") + + # Update this line to use the correct method + self.store.requestAccessToEntityType(EventKit.EKEntityTypeReminder, completionHandler=handler) + + def get_calendars(self) -> List[Calendar]: + calendars = self.store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) + return [Calendar(id=UUID(calendar.calendarIdentifier()), title=calendar.title()) for calendar in calendars] + + def get_reminders(self, calendar_id: UUID) -> List[Reminder]: + calendar = next(c for c in self.store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) if UUID(c.calendarIdentifier()) == calendar_id) + predicate = self.store.predicateForRemindersInCalendars_([calendar]) + reminders = self.store.remindersMatchingPredicate_(predicate) + + return [ + Reminder( + id=UUID(reminder.calendarItemIdentifier()), + title=reminder.title(), + due_date=reminder.dueDateComponents().date() if reminder.dueDateComponents() else None, + completed=reminder.isCompleted(), + notes=reminder.notes(), + calendar_id=calendar_id, + ) for reminder in reminders + ] + + def add_reminder(self, calendar_id: UUID, reminder_data: Reminder) -> Reminder: + calendar = next(c for c in self.store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) if UUID(c.calendarIdentifier()) == calendar_id) + reminder = EventKit.EKReminder.reminderWithEventStore_(self.store) + reminder.title = reminder_data.title + reminder.calendar = calendar + + if reminder_data.due_date: + reminder_due_date = EventKit.EKAlarm.alarmWithAbsoluteDate_(reminder_data.due_date) + reminder.addAlarm_(reminder_due_date) + + reminder.notes = reminder_data.notes + reminder.setCompleted_(reminder_data.completed) + self.store.saveReminder_commit_error_(reminder, True, None) + + return Reminder( + id=UUID(reminder.calendarItemIdentifier()), + title=reminder.title(), + due_date=reminder.dueDateComponents().date() if reminder.dueDateComponents() else None, + completed=reminder.isCompleted(), + notes=reminder.notes(), + calendar_id=calendar_id, + ) + + def update_reminder(self, calendar_id: UUID, reminder_id: UUID, reminder_data: Reminder) -> Reminder: + reminders = self.get_reminders(calendar_id) + reminder = next(r for r in reminders if r.id == reminder_id) + + reminder.title = reminder_data.title + reminder.due_date = reminder_data.due_date + reminder.completed = reminder_data.completed + reminder.notes = reminder_data.notes + + self.add_reminder(calendar_id, reminder) + + return reminder + + def delete_reminder(self, calendar_id: UUID, reminder_id: UUID): + reminders = self.get_reminders(calendar_id) + reminder = next(r for r in reminders if r.id == reminder_id) + + reminder_to_delete = self.store.calendarItemWithIdentifier_(str(reminder.id)) + self.store.removeReminder_commit_error_(reminder_to_delete, True, None) + +def print_ekeventstore_info(): + print("EKEventStore Methods and Properties:") + print("====================================") + + # Get all attributes of EKEventStore + attributes = dir(EventKit.EKEventStore) + + # Separate methods and properties + methods = [] + properties = [] + + for attr in attributes: + # Skip private attributes (those starting with underscore) + if attr.startswith('_'): + continue + + # Get the attribute + attr_value = getattr(EventKit.EKEventStore, attr) + + # Check if it's a method or a property + if callable(attr_value): + methods.append(attr) + else: + properties.append(attr) + + # Print methods + print("\nMethods:") + for method in sorted(methods): + print(f"- {method}") + + # Print properties + print("\nProperties:") + for prop in sorted(properties): + print(f"- {prop}") + +# You can call this function to print the info +print_ekeventstore_info() \ No newline at end of file diff --git a/src/dspygen/experiments/event_kit/main.py b/src/dspygen/experiments/event_kit/main.py new file mode 100644 index 0000000..c62c845 --- /dev/null +++ b/src/dspygen/experiments/event_kit/main.py @@ -0,0 +1,37 @@ + +from datetime import datetime + +from dspygen.experiments.event_kit.repositories import ReminderRepository, CalendarRepository +from dspygen.experiments.event_kit.services import CalendarService, ReminderService + +calendar_repo = CalendarRepository() +reminder_repo = ReminderRepository(calendar_repo) + +calendar_service = CalendarService(calendar_repo) +reminder_service = ReminderService(reminder_repo) + +# Create a calendar +work_calendar = calendar_service.create_calendar(title="Work") + +# Create a reminder in the calendar +reminder = reminder_service.create_reminder(calendar_id=work_calendar.id, title="Finish report", due_date=datetime(2024, 8, 30)) + +# List calendars +calendars = calendar_service.list_calendars() +for cal in calendars: + print(f"Calendar: {cal.title}, ID: {cal.id}") + +# Get a specific calendar +retrieved_calendar = calendar_service.get_calendar(work_calendar.id) +print(f"Retrieved Calendar: {retrieved_calendar.title}") + +# Update a reminder +updated_reminder = reminder_service.update_reminder(work_calendar.id, reminder.id, completed=True) +print(f"Updated Reminder: {updated_reminder.title}, Completed: {updated_reminder.completed}") + +# Delete a reminder +reminder_service.delete_reminder(work_calendar.id, reminder.id) + +# Delete a calendar +calendar_service.delete_calendar(work_calendar.id) + diff --git a/src/dspygen/experiments/event_kit/models.py b/src/dspygen/experiments/event_kit/models.py new file mode 100644 index 0000000..cc9094d --- /dev/null +++ b/src/dspygen/experiments/event_kit/models.py @@ -0,0 +1,25 @@ + +from pydantic import BaseModel, Field +from typing import Optional, List +from datetime import datetime +from uuid import uuid4, UUID + +class Reminder(BaseModel): + id: UUID = Field(default_factory=uuid4) + title: str + due_date: Optional[datetime] = None + completed: bool = False + notes: Optional[str] = None + calendar_id: UUID + +class Calendar(BaseModel): + id: UUID = Field(default_factory=uuid4) + title: str + reminders: List[Reminder] = Field(default_factory=list) + + def add_reminder(self, reminder: Reminder): + self.reminders.append(reminder) + + def remove_reminder(self, reminder_id: UUID): + self.reminders = [r for r in self.reminders if r.id != reminder_id] + diff --git a/src/dspygen/experiments/event_kit/repositories.py b/src/dspygen/experiments/event_kit/repositories.py new file mode 100644 index 0000000..c1ed1b3 --- /dev/null +++ b/src/dspygen/experiments/event_kit/repositories.py @@ -0,0 +1,55 @@ + +from typing import List, Optional +from uuid import UUID + +from dspygen.experiments.event_kit.models import Calendar, Reminder + + +class CalendarRepository: + def __init__(self): + self._calendars = [] + + def add(self, calendar: Calendar): + self._calendars.append(calendar) + + def get(self, calendar_id: UUID) -> Optional[Calendar]: + return next((c for c in self._calendars if c.id == calendar_id), None) + + def list(self) -> List[Calendar]: + return self._calendars + + def update(self, updated_calendar: Calendar): + for i, calendar in enumerate(self._calendars): + if calendar.id == updated_calendar.id: + self._calendars[i] = updated_calendar + return + + def delete(self, calendar_id: UUID): + self._calendars = [c for c in self._calendars if c.id != calendar_id] + +class ReminderRepository: + def __init__(self, calendar_repo: CalendarRepository): + self.calendar_repo = calendar_repo + + def add(self, reminder: Reminder): + calendar = self.calendar_repo.get(reminder.calendar_id) + if calendar: + calendar.add_reminder(reminder) + + def get(self, calendar_id: UUID, reminder_id: UUID) -> Optional[Reminder]: + calendar = self.calendar_repo.get(calendar_id) + if calendar: + return next((r for r in calendar.reminders if r.id == reminder_id), None) + return None + + def update(self, calendar_id: UUID, updated_reminder: Reminder): + calendar = self.calendar_repo.get(calendar_id) + if calendar: + calendar.remove_reminder(updated_reminder.id) + calendar.add_reminder(updated_reminder) + + def delete(self, calendar_id: UUID, reminder_id: UUID): + calendar = self.calendar_repo.get(calendar_id) + if calendar: + calendar.remove_reminder(reminder_id) + diff --git a/src/dspygen/experiments/event_kit/services.py b/src/dspygen/experiments/event_kit/services.py new file mode 100644 index 0000000..4372127 --- /dev/null +++ b/src/dspygen/experiments/event_kit/services.py @@ -0,0 +1,65 @@ + +from typing import Optional, List +from uuid import UUID +from datetime import datetime + +from dspygen.experiments.event_kit.models import Calendar, Reminder +from dspygen.experiments.event_kit.repositories import CalendarRepository, ReminderRepository + + +class CalendarService: + def __init__(self, calendar_repo: CalendarRepository): + self.calendar_repo = calendar_repo + + def create_calendar(self, title: str) -> Calendar: + calendar = Calendar(title=title) + self.calendar_repo.add(calendar) + return calendar + + def get_calendar(self, calendar_id: UUID) -> Optional[Calendar]: + return self.calendar_repo.get(calendar_id) + + def list_calendars(self) -> List[Calendar]: + return self.calendar_repo.list() + + def update_calendar(self, calendar_id: UUID, title: str) -> Optional[Calendar]: + calendar = self.calendar_repo.get(calendar_id) + if calendar: + calendar.title = title + self.calendar_repo.update(calendar) + return calendar + return None + + def delete_calendar(self, calendar_id: UUID): + self.calendar_repo.delete(calendar_id) + +class ReminderService: + def __init__(self, reminder_repo: ReminderRepository): + self.reminder_repo = reminder_repo + + def create_reminder(self, calendar_id: UUID, title: str, due_date: Optional[datetime] = None, notes: Optional[str] = None) -> Reminder: + reminder = Reminder(title=title, due_date=due_date, notes=notes, calendar_id=calendar_id) + self.reminder_repo.add(reminder) + return reminder + + def get_reminder(self, calendar_id: UUID, reminder_id: UUID) -> Optional[Reminder]: + return self.reminder_repo.get(calendar_id, reminder_id) + + def update_reminder(self, calendar_id: UUID, reminder_id: UUID, title: Optional[str] = None, due_date: Optional[datetime] = None, notes: Optional[str] = None, completed: Optional[bool] = None) -> Optional[Reminder]: + reminder = self.reminder_repo.get(calendar_id, reminder_id) + if reminder: + if title: + reminder.title = title + if due_date: + reminder.due_date = due_date + if notes: + reminder.notes = notes + if completed is not None: + reminder.completed = completed + self.reminder_repo.update(calendar_id, reminder) + return reminder + return None + + def delete_reminder(self, calendar_id: UUID, reminder_id: UUID): + self.reminder_repo.delete(calendar_id, reminder_id) + diff --git a/src/dspygen/experiments/event_kit/srv.fish b/src/dspygen/experiments/event_kit/srv.fish new file mode 100644 index 0000000..62a138b --- /dev/null +++ b/src/dspygen/experiments/event_kit/srv.fish @@ -0,0 +1,199 @@ +#!/usr/bin/env fish + +# Directory where the files will be created +set directory /Users/sac/dev/dspygen/src/dspygen/experiments/events_kit_v2 + +# Ensure the directory exists +mkdir -p $directory + +# Create and write the EKObject class +echo 'import objc +from Foundation import NSObject + +class EKObject(NSObject): + def __init__(self): + EventKit = objc.importFramework("EventKit") + self._ekobject = EventKit.EKObject.alloc().init() + + def has_changes(self): + return self._ekobject.hasChanges() + + def is_new(self): + return self._ekobject.isNew() + + def refresh(self): + self._ekobject.refresh() + + def reset(self): + self._ekobject.reset() + + def rollback(self): + self._ekobject.rollback() +' > $directory/ekobject.py + +# Create and write the EKEvent class +echo 'import objc +from Foundation import NSObject +from ekobject import EKObject + +class EKEvent(EKObject): + def __init__(self, event_store): + super().__init__() + EventKit = objc.importFramework("EventKit") + self._ekevent = EventKit.EKEvent.eventWithEventStore_(event_store) + + @property + def title(self): + return self._ekevent.title() + + @title.setter + def title(self, value): + self._ekevent.setTitle_(value) + + @property + def start_date(self): + return self._ekevent.startDate() + + @start_date.setter + def start_date(self, value): + self._ekevent.setStartDate_(value) + + @property + def end_date(self): + return self._ekevent.endDate() + + @end_date.setter + def end_date(self, value): + self._ekevent.setEndDate_(value) + + @property + def calendar(self): + return self._ekevent.calendar() + + @calendar.setter + def calendar(self, value): + self._ekevent.setCalendar_(value) + + @property + def alarms(self): + return self._ekevent.alarms() + + @alarms.setter + def alarms(self, value): + self._ekevent.setAlarms_(value) + + @property + def recurrence_rules(self): + return self._ekevent.recurrenceRules() + + @recurrence_rules.setter + def recurrence_rules(self, value): + self._ekevent.setRecurrenceRules_(value) + + def save_event(self, event_store, span, commit): + success = event_store.saveEvent_span_commit_error_(self._ekevent, span, commit, objc.nil) + if not success: + raise Exception("Failed to save event") + + def remove_event(self, event_store, span, commit): + success = event_store.removeEvent_span_commit_error_(self._ekevent, span, commit, objc.nil) + if not success: + raise Exception("Failed to remove event") +' > $directory/ekevent.py + +# Create and write the EKReminder class +echo 'import objc +from Foundation import NSObject +from ekobject import EKObject + +class EKReminder(EKObject): + def __init__(self, event_store): + super().__init__() + EventKit = objc.importFramework("EventKit") + self._ekreminder = EventKit.EKReminder.reminderWithEventStore_(event_store) + + @property + def title(self): + return self._ekreminder.title() + + @title.setter + def title(self, value): + self._ekreminder.setTitle_(value) + + @property + def calendar(self): + return self._ekreminder.calendar() + + @calendar.setter + def calendar(self, value): + self._ekreminder.setCalendar_(value) + + @property + def start_date_components(self): + return self._ekreminder.startDateComponents() + + @start_date_components.setter + def start_date_components(self, value): + self._ekreminder.setStartDateComponents_(value) + + @property + def due_date_components(self): + return self._ekreminder.dueDateComponents() + + @due_date_components.setter + def due_date_components(self, value): + self._ekreminder.setDueDateComponents_(value) + + @property + def completed(self): + return self._ekreminder.completed() + + @completed.setter + def completed(self, value): + self._ekreminder.setCompleted_(value) + + def save_reminder(self, event_store, commit): + success = event_store.saveReminder_commit_error_(self._ekreminder, commit, objc.nil) + if not success: + raise Exception("Failed to save reminder") + + def remove_reminder(self, event_store, commit): + success = event_store.removeReminder_commit_error_(self._ekreminder, commit, objc.nil) + if not success: + raise Exception("Failed to remove reminder") +' > $directory/ekreminder.py + +# Create and write the EKEventStore class +echo 'import objc +from Foundation import NSObject + +class EKEventStore(NSObject): + def __init__(self): + EventKit = objc.importFramework("EventKit") + self._ekeventstore = EventKit.EKEventStore.alloc().init() + + def request_access(self, entity_type, callback): + self._ekeventstore.requestAccessToEntityType_completion_(entity_type, callback) + + def save_event(self, event, span, commit): + success = self._ekeventstore.saveEvent_span_commit_error_(event._ekevent, span, commit, objc.nil) + if not success: + raise Exception("Failed to save event") + + def remove_event(self, event, span, commit): + success = self._ekeventstore.removeEvent_span_commit_error_(event._ekevent, span, commit, objc.nil) + if not success: + raise Exception("Failed to remove event") + + def save_reminder(self, reminder, commit): + success = self._ekeventstore.saveReminder_commit_error_(reminder._ekreminder, commit, objc.nil) + if not success: + raise Exception("Failed to save reminder") + + def remove_reminder(self, reminder, commit): + success = self._ekeventstore.removeReminder_commit_error_(reminder._ekreminder, commit, objc.nil) + if not success: + raise Exception("Failed to remove reminder") +' > $directory/ekeventstore.py + +echo "Files created successfully in $directory" diff --git a/src/dspygen/experiments/event_kit/workbench.py b/src/dspygen/experiments/event_kit/workbench.py new file mode 100644 index 0000000..0dcacde --- /dev/null +++ b/src/dspygen/experiments/event_kit/workbench.py @@ -0,0 +1,86 @@ +import objc +import jinja2 + +# Load EventKit dynamically +objc.loadBundle("EventKit", bundle_path="/System/Library/Frameworks/EventKit.framework", module_globals=globals()) +EKEvent = objc.lookUpClass('EKEvent') + + +def extract_eKEvent_info(): + attributes = dir(EKEvent) + + methods = [] + properties = [] + + for attr in attributes: + if attr.startswith('_'): + continue + + attr_value = getattr(EKEvent, attr) + + if callable(attr_value): + methods.append(attr) + else: + properties.append(attr) + + return methods, properties + + +wrapper_template = """ +class {{ class_name }}Wrapper: + def __init__(self): + self._{{ class_name.lower() }} = {{ class_name }}.alloc().init() + + {% for prop in properties %} + @property + def {{ prop|snake_case }}(self): + return self._{{ class_name.lower() }}.{{ prop }} + + @{{ prop|snake_case }}.setter + def {{ prop|snake_case }}(self, value): + self._{{ class_name.lower() }}.{{ prop }} = value + {% endfor %} + + {% for method in methods %} + def {{ method|snake_case }}(self, *args, **kwargs): + return self._{{ class_name.lower() }}.{{ method }}(*args, **kwargs) + {% endfor %} +""" + +import jinja2 +import re + +def snake_case_filter(s): + return re.sub(r'(? str: + process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output, error = process.communicate() + + if error: + raise RuntimeError(f"AppleScript Error: {error.decode('utf-8')}") + + return output.decode('utf-8').strip() + + +def get_all_lists() -> List[str]: + script = ''' + tell application "Reminders" + set allLists to lists + end tell + + -- Output the lists + allLists + ''' + raw_output = run_applescript(script) + list_ids = raw_output.split(", ") + ids = [list_id.split(" ")[2] for list_id in list_ids] + + return ids + + +def get_all_list_names() -> str: + script = ''' + tell application "Reminders" + set allLists to every list + set listInfo to {} + repeat with aList in allLists + set end of listInfo to {id:id of aList, name:name of aList} + end repeat + end tell + return listInfo + ''' + raw_output = run_applescript(script) + return raw_output + +def get_reminders_for_list_by_id(list_id: str) -> List[str]: + script = f'''set listID to "{list_id}" + + tell application "Reminders" + set targetList to first list whose id is listID + set remindersInList to reminders of targetList + end tell + + -- Output the reminders + remindersInList + ''' + raw_output = run_applescript(script) + reminder_ids = raw_output.split(', ') + ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids] + + return ids + + +def get_reminders_for_list_by_name(list_name: str) -> List[str]: + script = f'''set listID to "{list_name}" + + tell application "Reminders" + set targetList to first list whose name is listID + set remindersInList to reminders of targetList + end tell + + -- Output the reminders + remindersInList + ''' + raw_output = run_applescript(script) + reminder_ids = raw_output.split(', ') + ids = [reminder_id.split(' ')[2] for reminder_id in reminder_ids] + + return ids + + +class Reminder(BaseModel): + id: str = Field(..., min_length=1, max_length=255) + name: str = Field(..., min_length=1, max_length=255) + body: str = Field(None, min_length=1, max_length=1000) + due_date: str = Field(None, min_length=1, max_length=255) + completed: bool = Field(False) + + +def get_reminder_by_id(reminder_id: str) -> Reminder: + script = f''' +-- Extract the reminder ID from the URL +set reminderID to "{reminder_id}" + +-- Use Reminders app to get the reminder data +tell application "Reminders" + set theReminder to (first reminder whose id is reminderID) + set reminderName to name of theReminder + set reminderBody to body of theReminder + set reminderDueDate to due date of theReminder + set reminderCompleted to completed of theReminder +end tell + +-- Convert the reminder data to a comma-separated list +set csvOutput to reminderID & ", " & ¬ + reminderName & ", " & ¬ + reminderBody & ", " & ¬ + reminderDueDate & ", " & ¬ + (reminderCompleted as string) + +-- Output the comma-separated list +return csvOutput +''' + raw_output = run_applescript(script) + reminder_data = raw_output.split(", ") + instance = Reminder(id=reminder_data[0], name=reminder_data[1], body=reminder_data[2], due_date=reminder_data[3], completed=reminder_data[4]) + return instance + + +def create_reminders_tsv(): + script = f'''-- Get the current date and time for versioning +set currentDate to current date +set formattedDate to (year of currentDate) & "-" & text -2 through -1 of ("0" & (month of currentDate as integer)) & "-" & text -2 through -1 of ("0" & day of currentDate) & "_" & text -2 through -1 of ("0" & hours of currentDate) & "-" & text -2 through -1 of ("0" & minutes of currentDate) & "-" & text -2 through -1 of ("0" & seconds of currentDate) + +-- Specify the file path for the TSV with versioning +set desktopPath to (path to desktop as text) +set filePath to desktopPath & "Reminders_" & formattedDate & ".tsv" + +-- Open the TSV file for writing +set fileID to open for access (POSIX path of filePath) with write permission +set eof of fileID to 0 -- Clear existing file content + +-- Write the TSV header +write "ID" & tab & "List" & tab & "Title" & tab & "Due Date" & tab & "Completed" & tab & "Completion Date" & tab & "Priority" & tab & "Notes" & linefeed to fileID + +-- Get all reminders lists +tell application "Reminders" + set reminderLists to lists + repeat with aList in reminderLists + set listName to name of aList + set remindersList to reminders of aList + + repeat with aReminder in remindersList + -- Extract reminder details + set reminderID to "x-apple-reminder://" & id of aReminder + set reminderTitle to name of aReminder + set reminderDueDate to due date of aReminder + set reminderCompleted to completed of aReminder + set reminderCompletionDate to completion date of aReminder + set reminderPriority to priority of aReminder + set reminderNotes to body of aReminder + + -- Handle potential missing values + if reminderDueDate is missing value then + set reminderDueDate to "" + else + set reminderDueDate to reminderDueDate as string + end if + + if reminderCompletionDate is missing value then + set reminderCompletionDate to "" + else + set reminderCompletionDate to reminderCompletionDate as string + end if + + if reminderNotes is missing value then + set reminderNotes to "" + end if + + -- Write reminder details to TSV + write (reminderID & tab & listName & tab & reminderTitle & tab & reminderDueDate & tab & reminderCompleted & tab & reminderCompletionDate & tab & reminderPriority & tab & reminderNotes) & linefeed to fileID + end repeat + end repeat +end tell + +-- Close the file +close access fileID + +-- Notify user of completion +display notification "Reminders exported to TSV successfully!" with title "Export Complete" +''' + + +def tsv_to_csv(tsv_filepath): + """Converts a TSV file to a CSV file.""" + csv_filepath = tsv_filepath.with_suffix('.csv') + + with open(tsv_filepath, 'r') as tsvfile, open(csv_filepath, 'w', newline='') as csvfile: + tsv_reader = csv.reader(tsvfile, delimiter='\t') + csv_writer = csv.writer(csvfile) + + for row in tsv_reader: + csv_writer.writerow(row) + + print(f"CSV file saved as {csv_filepath}") + + +def get_latest_file(directory, extension): + """Gets the latest file with the given extension from the specified directory.""" + files = list(Path(directory).glob(f"*{extension}")) + if not files: + raise FileNotFoundError(f"No files with extension {extension} found in {directory}") + latest_file = max(files, key=os.path.getctime) + return latest_file + + +import EventKit +import objc + +store = EventKit.EKEventStore.new() + + +# Request access to Reminders +def request_access(): + granted, error = objc.var(True), objc.var(None) + + def handler(granted_local, error_local): + granted.assign(granted_local) + error.assign(error_local) + + store.requestAccessToEntityType_completion(EventKit.EKEntityTypeReminder, handler) + if not granted.value: + raise PermissionError("Access to reminders was not granted") + +# Fetch and list all reminder lists +def list_reminder_lists(): + calendars = store.calendarsForEntityType_(EventKit.EKEntityTypeReminder) + + for calendar in calendars: + print(f"List Name: {calendar}") + + +def fetch_reminders(): + predicate = store.predicateForRemindersInCalendars_(None) + reminders = store.remindersMatchingPredicate_(predicate) + + for reminder in reminders: + print(reminder) + print(f"Title: {reminder.title()}") + try: + print(f"Due Date: {reminder.dueDateComponents().date()}") + except Exception as e: + print(f"Error: {e}") + + list_reminder_lists() + + +def main(): + """Main function""" + # from dspygen.utils.dspy_tools import init_ol + # init_ol() + # list_id = get_all_lists()[0] + # reminder_id = get_reminders_for_list_by_id(list_id)[0] + # print(get_reminder_by_id(reminder_id)) + # # print(get_all_list_names()) + # print(get_reminders_for_list_by_name("Today")) + fetch_reminders() + + +if __name__ == '__main__': + main() diff --git a/tests/experiments/cal_apps/conftest.py b/tests/experiments/cal_apps/conftest.py new file mode 100644 index 0000000..094954f --- /dev/null +++ b/tests/experiments/cal_apps/conftest.py @@ -0,0 +1,11 @@ +import pytest +from unittest.mock import patch +from dspygen.experiments.cal_apps.eventkit_mocks import MockEventKit, MockEKReminder + +@pytest.fixture(autouse=True) +def mock_eventkit(): + mock_ek = MockEventKit() + MockEventKit.patch() + with patch.dict('sys.modules', {'EventKit': mock_ek}): + with patch('EventKit.EKReminder', MockEKReminder): + yield mock_ek \ No newline at end of file diff --git a/tests/experiments/cal_apps/reminder_app.feature b/tests/experiments/cal_apps/reminder_app.feature new file mode 100644 index 0000000..bd73685 --- /dev/null +++ b/tests/experiments/cal_apps/reminder_app.feature @@ -0,0 +1,40 @@ +Feature: Reminder App Functionality + As a user of the Reminder App + I want to manage my reminders and lists + So that I can organize my tasks effectively + + Scenario: Create a new reminder list + Given the Reminder App is initialized + When I add a new reminder list called "Work Tasks" + Then the "Work Tasks" list should be in the app's lists + + Scenario: Add a reminder to a list + Given the Reminder App is initialized + And a reminder list called "Personal Tasks" exists + When I select the "Personal Tasks" list + And I add a reminder "Buy groceries" with due date "2023-05-01 18:00" + Then the "Personal Tasks" list should contain the reminder "Buy groceries" + + Scenario: Mark a reminder as completed + Given the Reminder App is initialized + And a reminder list called "Home Chores" exists + And the list "Home Chores" has a reminder "Clean the kitchen" + When I select the "Home Chores" list + And I mark the reminder "Clean the kitchen" as completed + Then the reminder "Clean the kitchen" should be marked as completed + + Scenario: Remove a reminder list + Given the Reminder App is initialized + And a reminder list called "Temporary Tasks" exists + When I remove the "Temporary Tasks" list + Then the "Temporary Tasks" list should not be in the app's lists + + Scenario: Clear completed reminders + Given the Reminder App is initialized + And a reminder list called "Daily Tasks" exists + And the list "Daily Tasks" has a completed reminder "Make bed" + And the list "Daily Tasks" has an incomplete reminder "Do laundry" + When I select the "Daily Tasks" list + And I clear completed reminders + Then the "Daily Tasks" list should not contain the reminder "Make bed" + And the "Daily Tasks" list should contain the reminder "Do laundry" \ No newline at end of file diff --git a/tests/experiments/cal_apps/test_reminder.py b/tests/experiments/cal_apps/test_reminder.py new file mode 100644 index 0000000..37cafb4 --- /dev/null +++ b/tests/experiments/cal_apps/test_reminder.py @@ -0,0 +1,172 @@ +import pytest +from datetime import datetime, timedelta +from dspygen.experiments.cal_apps.reminder import ( + Reminder, create_reminder, read_reminder, update_reminder, delete_reminder, ReminderError +) +from dspygen.experiments.cal_apps.eventkit_mocks import MockEKEventStore, MockEKCalendar, MockEventKit + +@pytest.fixture +def event_store(): + return MockEKEventStore() + +@pytest.fixture +def calendar(): + return MockEKCalendar("Test Calendar") + +def test_create_reminder(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar, datetime.now() + timedelta(days=1)) + assert reminder.title == "Test Reminder" + assert reminder.calendar.title() == "Test Calendar" + assert reminder.due_date is not None + +def test_read_reminder(event_store, calendar): + created_reminder = create_reminder(event_store, "Test Reminder", calendar) + read_reminder_obj = read_reminder(event_store, created_reminder.calendar_item_identifier) + assert read_reminder_obj.title == "Test Reminder" + assert read_reminder_obj.calendar.title() == "Test Calendar" + +def test_update_reminder(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + new_due_date = datetime.now() + timedelta(days=2) + update_reminder(reminder, title="Updated Reminder", due_date=new_due_date, completed=True, priority=2) + assert reminder.title == "Updated Reminder" + assert reminder.due_date == new_due_date + assert reminder.completed is True + assert reminder.priority == 2 + +def test_delete_reminder(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + identifier = reminder.calendar_item_identifier + delete_reminder(reminder) + with pytest.raises(ReminderError): + read_reminder(event_store, identifier) + +def test_reminder_properties(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + reminder.location = "Home" + reminder.notes = "Test notes" + reminder.url = "https://example.com" + + assert reminder.location == "Home" + assert reminder.notes == "Test notes" + assert reminder.url == "https://example.com" + assert reminder.creation_date is not None + assert reminder.last_modified_date is not None + assert reminder.time_zone is not None + +def test_reminder_alarms(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + alarm = MockEventKit.EKAlarm.alarmWithRelativeOffset_(-3600) + reminder.add_alarm(alarm) + assert len(reminder.alarms) == 1 + reminder.remove_alarm(alarm) + assert len(reminder.alarms) == 0 + +def test_reminder_recurrence(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + rule = MockEventKit.EKRecurrenceRule( + MockEventKit.EKRecurrenceFrequencyDaily, + interval=1, + end=None + ) + reminder.set_recurrence_rule(rule) + assert reminder.has_recurrence_rule is True + assert reminder.recurrence_rule is not None + reminder.set_recurrence_rule(None) + assert reminder.has_recurrence_rule is False + assert reminder.recurrence_rule is None + +def test_create_reminder_without_due_date(event_store, calendar): + reminder = create_reminder(event_store, "No Due Date", calendar) + assert reminder.due_date is None + +def test_update_reminder_partial(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + original_due_date = reminder.due_date + update_reminder(reminder, title="Updated Title") + assert reminder.title == "Updated Title" + assert reminder.due_date == original_due_date + +def test_reminder_completed_date(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + assert reminder.completed is False + reminder.completed = True + assert reminder.completed is True + # In a real implementation, we'd check for the actual completion date + +def test_reminder_priority_range(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + reminder.priority = 0 + assert reminder.priority == 0 + reminder.priority = 9 + assert reminder.priority == 9 + # In a real implementation, we might want to test out-of-range values + +def test_create_multiple_reminders(event_store, calendar): + reminders = [create_reminder(event_store, f"Reminder {i}", calendar) for i in range(5)] + assert len(reminders) == 5 + for i, reminder in enumerate(reminders): + assert reminder.title == f"Reminder {i}" + +def test_read_non_existent_reminder(event_store): + with pytest.raises(ReminderError): + read_reminder(event_store, "non-existent-id") + +def test_update_non_existent_reminder(event_store, calendar): + non_existent_reminder = Reminder(event_store) + non_existent_reminder.ek_item.calendarItemIdentifier = lambda: "non-existent-id" + with pytest.raises(ReminderError): + update_reminder(non_existent_reminder, title="Should Fail") + +def test_delete_non_existent_reminder(event_store, calendar): + non_existent_reminder = Reminder(event_store) + non_existent_reminder.ek_item.calendarItemIdentifier = lambda: "non-existent-id" + with pytest.raises(ReminderError): + delete_reminder(non_existent_reminder) + +def test_reminder_attendees(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + assert reminder.has_attendees is False + assert len(reminder.attendees) == 0 + # In a real implementation, we'd test adding and removing attendees + +def test_reminder_time_zone_change(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + original_tz = reminder.time_zone + reminder.time_zone = "America/New_York" + assert reminder.time_zone != original_tz + assert reminder.time_zone == "America/New_York" + +def test_reminder_url_clearing(event_store, calendar): + reminder = create_reminder(event_store, "Test Reminder", calendar) + reminder.url = "https://example.com" + assert reminder.url == "https://example.com" + reminder.url = None + assert reminder.url is None + +def test_reminder_notes_long_text(event_store, calendar): + long_text = "A" * 1000 # 1000 character string + reminder = create_reminder(event_store, "Test Reminder", calendar) + reminder.notes = long_text + assert reminder.notes == long_text + +def test_reminder_creation_with_all_properties(event_store, calendar): + due_date = datetime.now() + timedelta(days=1) + reminder = create_reminder(event_store, "Full Test", calendar, due_date) + reminder.location = "Office" + reminder.notes = "Important meeting" + reminder.url = "https://meeting.com" + reminder.priority = 1 + alarm = MockEventKit.EKAlarm.alarmWithRelativeOffset_(-1800) # 30 minutes before + reminder.add_alarm(alarm) + + assert reminder.title == "Full Test" + assert reminder.calendar.title() == "Test Calendar" + assert reminder.due_date == due_date + assert reminder.location == "Office" + assert reminder.notes == "Important meeting" + assert reminder.url == "https://meeting.com" + assert reminder.priority == 1 + assert len(reminder.alarms) == 1 + +# Add more edge cases and integration tests as needed diff --git a/tests/experiments/cal_apps/test_reminder_app_bdd.py b/tests/experiments/cal_apps/test_reminder_app_bdd.py new file mode 100644 index 0000000..76e1bac --- /dev/null +++ b/tests/experiments/cal_apps/test_reminder_app_bdd.py @@ -0,0 +1,175 @@ +import pytest +from pytest_bdd import scenario, given, when, then +from dspygen.experiments.cal_apps.reminder_app import ReminderApp +from dspygen.experiments.cal_apps.reminder_list import ReminderList +from dspygen.experiments.cal_apps.reminder import Reminder + + +@pytest.fixture +def reminder_app(): + app = ReminderApp() + app.event_store = MockEventStore() + # Mock the EventKit.EKCalendar class + EventKit.EKCalendar = MockCalendar + return app + + +class MockEventStore: + def __init__(self): + self.calendars = [] + + def calendarsForEntityType_(self, entity_type): + return self.calendars + + def removeCalendar_commit_error_(self, calendar, commit, error): + self.calendars.remove(calendar) + + def saveCalendar_commit_error_(self, calendar, commit, error): + self.calendars.append(calendar) + + def saveReminder_commit_error_(self, reminder, commit, error): + pass + + def removeReminder_commit_error_(self, reminder, commit, error): + pass + + def defaultCalendarForNewReminders(self): + return MockCalendar(source=MockSource()) + + +class MockCalendar: + def __init__(self, title=None, source=None): + self.title = title + self.source = source + + @classmethod + def calendarWithTitle_forEntityType_eventStore_(cls, title, entity_type, event_store): + return cls(title=title) + + +class MockSource: + pass + + +@scenario('reminder_app.feature', 'Create a new reminder list') +def test_create_new_reminder_list(): + pass + + +@scenario('reminder_app.feature', 'Add a reminder to a list') +def test_add_reminder_to_list(): + pass + + +@scenario('reminder_app.feature', 'Mark a reminder as completed') +def test_mark_reminder_as_completed(): + pass + + +@scenario('reminder_app.feature', 'Remove a reminder list') +def test_remove_reminder_list(): + pass + + +@scenario('reminder_app.feature', 'Clear completed reminders') +def test_clear_completed_reminders(): + pass + + +@given('the Reminder App is initialized') +def reminder_app_initialized(reminder_app): + assert isinstance(reminder_app, ReminderApp) + + +@when('I add a new reminder list called "{list_name}"') +def add_new_reminder_list(reminder_app, list_name): + new_list = ReminderList(list_name, reminder_app.event_store) + reminder_app.add_list(new_list) + + +@then('the "{list_name}" list should be in the app\'s lists') +def check_list_in_app_lists(reminder_app, list_name): + assert any(lst.name == list_name for lst in reminder_app.lists) + + +@given('a reminder list called "{list_name}" exists') +def reminder_list_exists(reminder_app, list_name): + new_list = ReminderList(list_name, reminder_app.event_store) + reminder_app.add_list(new_list) + + +@when('I select the "{list_name}" list') +def select_reminder_list(reminder_app, list_name): + reminder_app.select_list(list_name) + + +@when('I add a reminder "{title}" with due date "{due_date}"') +def add_reminder_to_list(reminder_app, title, due_date): + reminder = Reminder(title, due_date) + reminder_app.add_reminder_to_selected(reminder) + + +@then('the "{list_name}" list should contain the reminder "{title}"') +def check_reminder_in_list(reminder_app, list_name, title): + reminders = reminder_app.get_reminders() + assert any(r.title == title for r in reminders) + + +@given('the list "{list_name}" has a reminder "{title}"') +def list_has_reminder(reminder_app, list_name, title): + reminder_app.select_list(list_name) + reminder = Reminder(title) + reminder_app.add_reminder_to_selected(reminder) + + +@when('I mark the reminder "{title}" as completed') +def mark_reminder_completed(reminder_app, title): + reminders = reminder_app.get_reminders() + for reminder in reminders: + if reminder.title == title: + reminder.mark_as_completed() + break + + +@then('the reminder "{title}" should be marked as completed') +def check_reminder_completed(reminder_app, title): + reminders = reminder_app.get_reminders(completed=True) + assert any(r.title == title for r in reminders) + + +@when('I remove the "{list_name}" list') +def remove_reminder_list(reminder_app, list_name): + for lst in reminder_app.lists: + if lst.name == list_name: + reminder_app.remove_list(lst) + break + + +@then('the "{list_name}" list should not be in the app\'s lists') +def check_list_not_in_app_lists(reminder_app, list_name): + assert all(lst.name != list_name for lst in reminder_app.lists) + + +@given('the list "{list_name}" has a completed reminder "{title}"') +def list_has_completed_reminder(reminder_app, list_name, title): + reminder_app.select_list(list_name) + reminder = Reminder(title, completed=True) + reminder_app.add_reminder_to_selected(reminder) + + +@given('the list "{list_name}" has an incomplete reminder "{title}"') +def list_has_incomplete_reminder(reminder_app, list_name, title): + reminder_app.select_list(list_name) + reminder = Reminder(title) + reminder_app.add_reminder_to_selected(reminder) + + +@when('I clear completed reminders') +def clear_completed_reminders(reminder_app): + reminder_app.clear_completed_reminders() + + +@then('the "{list_name}" list should not contain the reminder "{title}"') +def check_reminder_not_in_list(reminder_app, list_name, title): + reminders = reminder_app.get_reminders() + assert all(r.title != title for r in reminders) diff --git a/tests/experiments/cal_apps/test_reminder_cal_item.py b/tests/experiments/cal_apps/test_reminder_cal_item.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/experiments/test_reminders_models.py b/tests/experiments/test_reminders_models.py new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/tests/experiments/test_reminders_models.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/experiments/test_wa_reminders.py b/tests/experiments/test_wa_reminders.py index ec60470..1e59c22 100644 --- a/tests/experiments/test_wa_reminders.py +++ b/tests/experiments/test_wa_reminders.py @@ -81,7 +81,6 @@ def test_import_from_clipboard(clean_test_list): def test_import_reminders_file_not_found(): result = runner.invoke(app, ['import-reminders', 'non_existent_file.csv']) assert result.exit_code != 0 - assert "Error: CSV file 'non_existent_file.csv' not found." in result.output def test_import_reminders_invalid_csv(temp_csv_file, clean_test_list): with open(temp_csv_file, 'w') as f: diff --git a/tests/test_event_kit_service.py b/tests/test_event_kit_service.py new file mode 100644 index 0000000..7496fca --- /dev/null +++ b/tests/test_event_kit_service.py @@ -0,0 +1,140 @@ +import pytest +from unittest.mock import Mock, patch +from uuid import UUID +from datetime import datetime, timedelta +from src.dspygen.experiments.event_kit.event_kit_service import EventKitService, Calendar, Reminder + +@pytest.fixture +def mock_event_kit(): + with patch('src.dspygen.experiments.event_kit.event_kit_service.EventKit') as mock_ek: + yield mock_ek + +@pytest.fixture +def event_kit_service(mock_event_kit): + return EventKitService() + +@pytest.fixture +def sample_calendar(): + return Calendar(id=UUID('12345678-1234-5678-1234-567812345678'), title='Test Calendar') + +@pytest.fixture +def sample_reminder(): + return Reminder( + id=UUID('87654321-4321-8765-4321-876543210987'), + title='Test Reminder', + due_date=datetime.now() + timedelta(days=1), + completed=False, + notes='Test notes', + calendar_id=UUID('12345678-1234-5678-1234-567812345678') + ) + +def test_request_access(event_kit_service, mock_event_kit): + # Test successful access request + mock_event_kit.EKEntityTypeReminder = 'reminder' + event_kit_service.store.requestAccessToEntityType.side_effect = lambda entity_type, completionHandler: completionHandler(True, None) + event_kit_service.request_access() + + # Test access denied + event_kit_service.store.requestAccessToEntityType.side_effect = lambda entity_type, completionHandler: completionHandler(False, None) + with pytest.raises(PermissionError): + event_kit_service.request_access() + +def test_get_calendars(event_kit_service, mock_event_kit, sample_calendar): + mock_calendar = Mock() + mock_calendar.calendarIdentifier.return_value = str(sample_calendar.id) + mock_calendar.title.return_value = sample_calendar.title + event_kit_service.store.calendarsForEntityType_.return_value = [mock_calendar] + + calendars = event_kit_service.get_calendars() + assert len(calendars) == 1 + assert calendars[0].id == sample_calendar.id + assert calendars[0].title == sample_calendar.title + +def test_get_reminders(event_kit_service, mock_event_kit, sample_calendar, sample_reminder): + mock_calendar = Mock() + mock_calendar.calendarIdentifier.return_value = str(sample_calendar.id) + event_kit_service.store.calendarsForEntityType_.return_value = [mock_calendar] + + mock_reminder = Mock() + mock_reminder.calendarItemIdentifier.return_value = str(sample_reminder.id) + mock_reminder.title.return_value = sample_reminder.title + mock_reminder.dueDateComponents.return_value.date.return_value = sample_reminder.due_date + mock_reminder.isCompleted.return_value = sample_reminder.completed + mock_reminder.notes.return_value = sample_reminder.notes + + event_kit_service.store.remindersMatchingPredicate_.return_value = [mock_reminder] + + reminders = event_kit_service.get_reminders(sample_calendar.id) + assert len(reminders) == 1 + assert reminders[0].id == sample_reminder.id + assert reminders[0].title == sample_reminder.title + assert reminders[0].due_date == sample_reminder.due_date + assert reminders[0].completed == sample_reminder.completed + assert reminders[0].notes == sample_reminder.notes + assert reminders[0].calendar_id == sample_calendar.id + +def test_add_reminder(event_kit_service, mock_event_kit, sample_calendar, sample_reminder): + mock_calendar = Mock() + mock_calendar.calendarIdentifier.return_value = str(sample_calendar.id) + event_kit_service.store.calendarsForEntityType_.return_value = [mock_calendar] + + mock_new_reminder = Mock() + mock_new_reminder.calendarItemIdentifier.return_value = str(sample_reminder.id) + mock_new_reminder.title.return_value = sample_reminder.title + mock_new_reminder.dueDateComponents.return_value.date.return_value = sample_reminder.due_date + mock_new_reminder.isCompleted.return_value = sample_reminder.completed + mock_new_reminder.notes.return_value = sample_reminder.notes + + mock_event_kit.EKReminder.reminderWithEventStore_.return_value = mock_new_reminder + + added_reminder = event_kit_service.add_reminder(sample_calendar.id, sample_reminder) + assert added_reminder.id == sample_reminder.id + assert added_reminder.title == sample_reminder.title + assert added_reminder.due_date == sample_reminder.due_date + assert added_reminder.completed == sample_reminder.completed + assert added_reminder.notes == sample_reminder.notes + assert added_reminder.calendar_id == sample_calendar.id + + event_kit_service.store.saveReminder_commit_error_.assert_called_once() + +def test_update_reminder(event_kit_service, mock_event_kit, sample_calendar, sample_reminder): + event_kit_service.get_reminders = Mock(return_value=[sample_reminder]) + event_kit_service.add_reminder = Mock(return_value=sample_reminder) + + updated_reminder_data = sample_reminder.copy() + updated_reminder_data.title = "Updated Title" + updated_reminder_data.completed = True + + updated_reminder = event_kit_service.update_reminder(sample_calendar.id, sample_reminder.id, updated_reminder_data) + + assert updated_reminder.id == sample_reminder.id + assert updated_reminder.title == "Updated Title" + assert updated_reminder.completed == True + event_kit_service.add_reminder.assert_called_once() + +def test_delete_reminder(event_kit_service, mock_event_kit, sample_calendar, sample_reminder): + event_kit_service.get_reminders = Mock(return_value=[sample_reminder]) + mock_reminder_to_delete = Mock() + event_kit_service.store.calendarItemWithIdentifier_.return_value = mock_reminder_to_delete + + event_kit_service.delete_reminder(sample_calendar.id, sample_reminder.id) + + event_kit_service.store.removeReminder_commit_error_.assert_called_once_with(mock_reminder_to_delete, True, None) + +def test_reminder_not_found(event_kit_service, sample_calendar): + event_kit_service.get_reminders = Mock(return_value=[]) + + with pytest.raises(StopIteration): + event_kit_service.update_reminder(sample_calendar.id, UUID('00000000-0000-0000-0000-000000000000'), Reminder(title="Non-existent Reminder", calendar_id=sample_calendar.id)) + + with pytest.raises(StopIteration): + event_kit_service.delete_reminder(sample_calendar.id, UUID('00000000-0000-0000-0000-000000000000')) + +def test_calendar_not_found(event_kit_service, mock_event_kit): + event_kit_service.store.calendarsForEntityType_.return_value = [] + + with pytest.raises(StopIteration): + event_kit_service.get_reminders(UUID('00000000-0000-0000-0000-000000000000')) + + with pytest.raises(StopIteration): + event_kit_service.add_reminder(UUID('00000000-0000-0000-0000-000000000000'), Reminder(title="Test Reminder", calendar_id=UUID('00000000-0000-0000-0000-000000000000'))) \ No newline at end of file diff --git a/tests/test_event_kit_service_integration.py b/tests/test_event_kit_service_integration.py new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/tests/test_event_kit_service_integration.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/test_reminder_app.py b/tests/test_reminder_app.py new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/tests/test_reminder_app.py @@ -0,0 +1 @@ + \ No newline at end of file