示例#1
0
    def update(self, id, updates, original):
        user = get_user(required=True)

        updates['revert_state'] = original[ITEM_STATE]
        updates[ITEM_STATE] = WORKFLOW_STATE.SPIKED
        set_item_expiry(updates)

        # Mark item as unlocked directly in order to avoid more queries and notifications
        # coming from lockservice.
        updates.update({
            LOCK_USER: None,
            LOCK_SESSION: None,
            'lock_time': None,
            'lock_action': None
        })

        remove_autosave_on_spike(original)
        item = self.backend.update(self.datasource, id, updates, original)
        push_notification('planning:spiked',
                          item=str(id),
                          user=str(user.get(config.ID_FIELD)),
                          etag=item['_etag'],
                          revert_state=item['revert_state'])

        coverages = original.get('coverages') or []
        for coverage in coverages:
            assigned_to = coverage.get('assigned_to')
            if assigned_to:
                user = get_user()
                assignment_service = get_resource_service('assignments')
                assignment = assignment_service.find_one(
                    req=None, _id=assigned_to.get('assignment_id'))
                slugline = assignment.get('planning').get('slugline', '')
                coverage_type = assignment.get('planning').get(
                    'g2_content_type', '')
                PlanningNotifications().notify_assignment(
                    coverage_status=coverage.get('workflow_status'),
                    target_user=assignment.get('assigned_to').get('user'),
                    target_desk=assignment.get('assigned_to').get('desk')
                    if not assignment.get('assigned_to').get('user') else None,
                    message='{{actioning_user}} has spiked a {{coverage_type}} '
                    'coverage for \"{{slugline}}\"',
                    slugline=slugline,
                    coverage_type=get_coverage_type_name(coverage_type),
                    actioning_user=user.get('display_name',
                                            user.get('username', 'Unknown')),
                    omit_user=True)

        return item
    def update(self, id, updates, original):
        if original.get('pubstatus') or original.get('state') not in\
                [WORKFLOW_STATE.DRAFT, WORKFLOW_STATE.POSTPONED, WORKFLOW_STATE.CANCELLED]:
            raise SuperdeskApiError.badRequestError(
                message=
                "Spike failed. Planning item in invalid state for spiking.")

        user = get_user(required=True)

        updates['revert_state'] = original[ITEM_STATE]
        updates[ITEM_STATE] = WORKFLOW_STATE.SPIKED
        set_item_expiry(updates)

        coverages = deepcopy(original.get('coverages') or [])
        for coverage in coverages:
            if coverage.get('workflow_status') == WORKFLOW_STATE.ACTIVE:
                coverage['workflow_status'] = WORKFLOW_STATE.DRAFT
                coverage['assigned_to'] = {}

        updates['coverages'] = coverages

        # Mark item as unlocked directly in order to avoid more queries and notifications
        # coming from lockservice.
        updates.update({
            LOCK_USER: None,
            LOCK_SESSION: None,
            'lock_time': None,
            'lock_action': None
        })

        remove_autosave_on_spike(original)
        item = self.backend.update(self.datasource, id, updates, original)
        push_notification('planning:spiked',
                          item=str(id),
                          user=str(user.get(config.ID_FIELD)),
                          etag=item['_etag'],
                          revert_state=item['revert_state'])

        for coverage in coverages:
            workflow_status = coverage.get('workflow_status')
            if workflow_status == WORKFLOW_STATE.DRAFT:
                self.notify_draft_coverage_on_spike(coverage)

        return item
示例#3
0
    def update(self, id, updates, original):
        spiked_items = updates.pop('_spiked_items', [])
        remove_autosave_on_spike(original)
        item = super().update(id, updates, original)

        if self.is_original_event(original):
            user = get_user(required=True).get(config.ID_FIELD, '')
            spiked_items.append({
                'id': id,
                'etag': item['_etag'],
                'revert_state': item['revert_state']
            })

            push_notification('events:spiked',
                              item=str(original[config.ID_FIELD]),
                              user=str(user),
                              spiked_items=spiked_items)

        return item