Пример #1
0
    def collection_delete(self):
        association_in = schema_association.objectify(self.request.validated)

        association = self._load(association_in)
        if association is None:
            # also accept {parent_document_id: y, child_document_id: x} when
            # for an association {parent_document_id: x, child_document_id: x}
            association_in = Association(
                parent_document_id=association_in.child_document_id,
                child_document_id=association_in.parent_document_id)
            association = self._load(association_in)
            if association is None:
                raise HTTPBadRequest('association does not exist')

        if is_main_waypoint_association(association):
            raise HTTPBadRequest(
                'as the main waypoint of the route, this waypoint can not '
                'be disassociated')

        log = association.get_log(
            self.request.authenticated_userid, is_creation=False)

        DBSession.delete(association)
        DBSession.add(log)

        return {}
Пример #2
0
    def collection_delete(self):
        association_in = schema_association.objectify(self.request.validated)

        association = self._load(association_in)
        if association is None:
            # also accept {parent_document_id: y, child_document_id: x} when
            # for an association {parent_document_id: x, child_document_id: x}
            association_in = Association(
                parent_document_id=association_in.child_document_id,
                child_document_id=association_in.parent_document_id)
            association = self._load(association_in)
            if association is None:
                raise HTTPBadRequest('association does not exist')

        if is_main_waypoint_association(association):
            raise HTTPBadRequest(
                'as the main waypoint of the route, this waypoint can not '
                'be disassociated')

        log = association.get_log(self.request.authenticated_userid,
                                  is_creation=False)

        DBSession.delete(association)
        DBSession.add(log)

        return {}
Пример #3
0
    def collection_delete(self):
        association_in = schema_association.objectify(self.request.validated)

        association = self._load(association_in)
        if association is None:
            # also accept {parent_document_id: y, child_document_id: x} when
            # for an association {parent_document_id: x, child_document_id: x}
            association_in = Association(
                parent_document_id=association_in.child_document_id,
                child_document_id=association_in.parent_document_id)
            association = self._load(association_in)
            if association is None:
                raise HTTPBadRequest('association does not exist')

        _check_required_associations(association)
        check_permission_for_association_removal(self.request, association)

        log = association.get_log(self.request.authenticated_userid,
                                  is_creation=False)

        DBSession.delete(association)
        DBSession.add(log)

        update_cache_version_associations(
            [], [{
                'parent_id': association.parent_document_id,
                'parent_type': association.parent_document_type,
                'child_id': association.child_document_id,
                'child_type': association.child_document_type
            }])

        notify_es_syncer_if_needed(association, self.request)
        update_feed_association_update(association.parent_document_id,
                                       association.parent_document_type,
                                       association.child_document_id,
                                       association.child_document_type,
                                       self.request.authenticated_userid)

        return {}
Пример #4
0
    def collection_delete(self):
        association_in = schema_association.objectify(self.request.validated)

        association = self._load(association_in)
        if association is None:
            # also accept {parent_document_id: y, child_document_id: x} when
            # for an association {parent_document_id: x, child_document_id: x}
            association_in = Association(
                parent_document_id=association_in.child_document_id,
                child_document_id=association_in.parent_document_id)
            association = self._load(association_in)
            if association is None:
                raise HTTPBadRequest('association does not exist')

        _check_required_associations(association)
        check_permission_for_association_removal(self.request, association)

        log = association.get_log(
            self.request.authenticated_userid, is_creation=False)

        DBSession.delete(association)
        DBSession.add(log)

        update_cache_version_associations(
            [],
            [{'parent_id': association.parent_document_id,
              'parent_type': association.parent_document_type,
              'child_id': association.child_document_id,
              'child_type': association.child_document_type}])

        notify_es_syncer_if_needed(association, self.request)
        update_feed_association_update(
            association.parent_document_id, association.parent_document_type,
            association.child_document_id, association.child_document_type,
            self.request.authenticated_userid)

        return {}
Пример #5
0
def _remove_image_from_feed(document_id):
    # If removed doc is an image, it might be needed to remove
    # any reference to this image in feed items
    items = DBSession.query(DocumentChange). \
        filter(or_(
            DocumentChange.image1_id == document_id,
            DocumentChange.image2_id == document_id,
            DocumentChange.image3_id == document_id
        )).all()
    for item in items:
        if item.change_type == 'added_photos' and \
                item.image1_id == document_id and \
                not item.image2_id:
            # Remove feed item if no other image was added
            DBSession.delete(item)
        else:
            # Shift image references in the feed item
            if item.image1_id == document_id:
                item.image1_id = item.image2_id
                item.image2_id = item.image3_id
            elif item.image2_id == document_id:
                item.image2_id = item.image3_id
            item.image3_id = None
            item.more_images = False