def list(self): """Return user_id -> reminder mapping of all reminders for adapted obj. """ reminders_by_user = self._annotation_storage() reminders = {user_id: Reminder.deserialize(reminder_data) for user_id, reminder_data in reminders_by_user.items()} return reminders
def reply(self): data = json_body(self.request) option_type = data.get('option_type') params = data.get('params') if option_type and option_type not in REMINDER_TYPE_REGISTRY: raise BadRequest(error_msgs.get('non_existing_option_type')) # Disable CSRF protection alsoProvides(self.request, IDisableCSRFProtection) if option_type or params: existing_reminder = self.context.get_reminder() if not existing_reminder: raise NotFound # Pick existing settings if not given (PATCH semantics) option_type = option_type or existing_reminder.option_type params = params if 'params' in data else existing_reminder.params reminder_data = {'option_type': option_type, 'params': params} try: reminder = Reminder.deserialize(reminder_data) except (ValidationError, ValueError) as exc: raise BadRequest(repr(exc)) self.context.set_reminder(reminder) self.context.sync() self.request.response.setStatus(204) return _no_content_marker
def reply(self): data = json_body(self.request) option_type = data.get('option_type') params = data.get('params') if not option_type: raise BadRequest(error_msgs.get('missing_option_type')) if option_type not in REMINDER_TYPE_REGISTRY: raise BadRequest(error_msgs.get('non_existing_option_type')) reminder_data = {'option_type': option_type, 'params': params} try: reminder = Reminder.deserialize(reminder_data) except (ValidationError, ValueError) as exc: raise BadRequest(repr(exc)) # Disable CSRF protection alsoProvides(self.request, IDisableCSRFProtection) if self.context.get_reminder(): self.request.response.setStatus(409) return _no_content_marker self.context.set_reminder(reminder) self.context.sync() self.request.response.setStatus(204) return _no_content_marker
def handleReminder(self, reminder_option, reminder_option_date): params = {} if reminder_option == ReminderOnDate.option_type: params = {'date': reminder_option_date} if reminder_option: reminder = Reminder.create(reminder_option, params) self.context.set_reminder(reminder) else: self.context.clear_reminder()
def get(self, user_id=None): """Return reminder for adapted object, or None if no reminder exists. user_id -- User to get the reminder for If no user_id is given, defaults to the currently logged in user. """ user_id = user_id or api.user.get_current().getId() reminder_data = self._get_user_annotation(user_id) if reminder_data: return Reminder.deserialize(reminder_data)
def test_reminders_can_be_created_via_factory_method(self): self.assertEqual( ReminderSameDay(), Reminder.create('same_day')) self.assertEqual( ReminderOneDayBefore(), Reminder.create('one_day_before')) self.assertEqual( ReminderOneWeekBefore(), Reminder.create('one_week_before')) self.assertEqual( ReminderBeginningOfWeek(), Reminder.create('beginning_of_week')) self.assertEqual( ReminderOnDate({'date': date(2018, 12, 30)}), Reminder.create('on_date', {'date': date(2018, 12, 30)}))
def test_serialization_deserialization_rountrip(self): self.assertEqual( ReminderSameDay(), Reminder.deserialize(ReminderSameDay().serialize())) self.assertEqual( ReminderOneDayBefore(), Reminder.deserialize(ReminderOneDayBefore().serialize())) self.assertEqual( ReminderOneWeekBefore(), Reminder.deserialize(ReminderOneWeekBefore().serialize())) self.assertEqual( ReminderBeginningOfWeek(), Reminder.deserialize(ReminderBeginningOfWeek().serialize())) self.assertEqual( ReminderOnDate({'date': date(2018, 12, 30)}), Reminder.deserialize( ReminderOnDate({'date': date(2018, 12, 30)}).serialize()))
def test_reminders_can_be_deserialized_from_data(self): self.assertEqual( ReminderSameDay(), Reminder.deserialize({'option_type': 'same_day'})) self.assertEqual( ReminderOneDayBefore(), Reminder.deserialize({'option_type': 'one_day_before'})) self.assertEqual( ReminderOneWeekBefore(), Reminder.deserialize({'option_type': 'one_week_before'})) self.assertEqual( ReminderBeginningOfWeek(), Reminder.deserialize({'option_type': 'beginning_of_week'})) self.assertEqual( ReminderOnDate({'date': date(2018, 12, 30)}), Reminder.deserialize({'option_type': 'on_date', 'params': {'date': date(2018, 12, 30)}}))
def test_remove_reminder_through_task_accepted_form(self, browser): self.login(self.regular_user, browser) self.task.set_reminder(Reminder.create(ReminderSameDay.option_type)) self.assertIsInstance(self.task.get_reminder(), ReminderSameDay) self.set_workflow_state('task-state-open', self.task) browser.open(self.task) browser.css('#workflow-transition-task-transition-open-in-progress' ).first.click() browser.fill({'Reminder': None}) browser.css('#form-buttons-save').first.click() self.assertIsNone(self.task.get_reminder())
def insert(self, data): for user_id, reminder_data in data.items(): reminder = Reminder.deserialize(reminder_data) self.context.set_reminder(reminder, user_id=user_id)