Esempio n. 1
0
 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
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
    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()
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)}))
Esempio n. 7
0
    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()))
Esempio n. 8
0
    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())
Esempio n. 10
0
 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)