예제 #1
0
    def get(self,
            marker=None,
            limit=None,
            target_type=None,
            target_id=None,
            user_id=None,
            sort_field='id',
            sort_dir='asc'):
        """Retrieve a list of subscriptions for the authorized user.

        Example::

          curl https://my.example.org/api/v1/subscriptions \\
          -H 'Authorization: Bearer MY_ACCESS_TOKEN'

        :param marker: The resource id where the page should begin.
        :param limit: The number of subscriptions to retrieve.
        :param target_type: The type of resource to search by.
        :param target_id: The unique ID of the resource to search by.
        :param user_id: The unique ID of the user to search by.
        :param sort_field: The name of the field to sort on.
        :param sort_dir: Sort direction for results (asc, desc).
        """

        # Boundary check on limit.
        if limit is not None:
            limit = max(0, limit)

        # Sanity check on user_id
        current_user = user_api.user_get(request.current_user_id)
        if user_id != request.current_user_id \
                and not current_user.is_superuser:
            user_id = request.current_user_id

        # Resolve the marker record.
        marker_sub = subscription_api.subscription_get(marker)

        subscriptions = subscription_api.subscription_get_all(
            marker=marker_sub,
            limit=limit,
            target_type=target_type,
            target_id=target_id,
            user_id=user_id,
            sort_field=sort_field,
            sort_dir=sort_dir)
        subscription_count = subscription_api.subscription_get_count(
            target_type=target_type, target_id=target_id, user_id=user_id)

        # Apply the query response headers.
        if limit:
            response.headers['X-Limit'] = str(limit)
        response.headers['X-Total'] = str(subscription_count)
        if marker_sub:
            response.headers['X-Marker'] = str(marker_sub.id)

        return [Subscription.from_db_model(s) for s in subscriptions]
예제 #2
0
    def get(self, marker=None, limit=None, target_type=None, target_id=None,
            user_id=None, sort_field='id', sort_dir='asc'):
        """Retrieve a list of subscriptions for the authorized user.

        Example::

          curl https://my.example.org/api/v1/subscriptions \\
          -H 'Authorization: Bearer MY_ACCESS_TOKEN'

        :param marker: The resource id where the page should begin.
        :param limit: The number of subscriptions to retrieve.
        :param target_type: The type of resource to search by.
        :param target_id: The unique ID of the resource to search by.
        :param user_id: The unique ID of the user to search by.
        :param sort_field: The name of the field to sort on.
        :param sort_dir: Sort direction for results (asc, desc).
        """

        # Boundary check on limit.
        if limit is not None:
            limit = max(0, limit)

        # Sanity check on user_id
        current_user = user_api.user_get(request.current_user_id)
        if user_id != request.current_user_id \
                and not current_user.is_superuser:
            user_id = request.current_user_id

        # Resolve the marker record.
        marker_sub = subscription_api.subscription_get(marker)

        subscriptions = subscription_api.subscription_get_all(
            marker=marker_sub,
            limit=limit,
            target_type=target_type,
            target_id=target_id,
            user_id=user_id,
            sort_field=sort_field,
            sort_dir=sort_dir)
        subscription_count = subscription_api.subscription_get_count(
            target_type=target_type,
            target_id=target_id,
            user_id=user_id)

        # Apply the query response headers.
        if limit:
            response.headers['X-Limit'] = str(limit)
        response.headers['X-Total'] = str(subscription_count)
        if marker_sub:
            response.headers['X-Marker'] = str(marker_sub.id)

        return [Subscription.from_db_model(s) for s in subscriptions]
예제 #3
0
    def post(self, subscription):
        """Create a new subscription.
           Note: target_id is the same value as the story_id of a story.

        Example::

           curl https://my.example.org/api/v1/subscriptions \\
           -H 'Authorization: Bearer MY_ACCESS_TOKEN' \\
           -H 'Content-Type: application/json;charset=UTF-8' \\
           --data-binary '{"target_type":"story","target_id":8}'

        :param subscription: A subscription within the request body.
        """

        # Data sanity check - are all fields set?
        if not subscription.target_type or not subscription.target_id:
            abort(
                400,
                _('You are missing either the target_type or the'
                  ' target_id'))

        # Sanity check on user_id
        current_user = user_api.user_get(request.current_user_id)
        if not subscription.user_id:
            subscription.user_id = request.current_user_id
        elif subscription.user_id != request.current_user_id \
                and not current_user.is_superuser:
            abort(403, _("You can only subscribe to resources on your own."))

        # Data sanity check: The resource must exist.
        resource = subscription_api.subscription_get_resource(
            target_type=subscription.target_type,
            target_id=subscription.target_id,
            current_user=request.current_user_id)
        if not resource:
            abort(400, _('You cannot subscribe to a nonexistent resource.'))

        # Data sanity check: The subscription cannot be duplicated for this
        # user.
        existing = subscription_api.subscription_get_all(
            target_type=[
                subscription.target_type,
            ],
            target_id=subscription.target_id,
            user_id=subscription.user_id)

        if existing:
            abort(409, _('You are already subscribed to this resource.'))

        result = subscription_api.subscription_create(subscription.as_dict())
        return Subscription.from_db_model(result)
예제 #4
0
    def post(self, subscription):
        """Create a new subscription.
           Note: target_id is the same value as the story_id of a story.

        Example::

           curl https://my.example.org/api/v1/subscriptions \\
           -H 'Authorization: Bearer MY_ACCESS_TOKEN' \\
           -H 'Content-Type: application/json;charset=UTF-8' \\
           --data-binary '{"target_type":"story","target_id":8}'

        :param subscription: A subscription within the request body.
        """

        # Data sanity check - are all fields set?
        if not subscription.target_type or not subscription.target_id:
            abort(400, _('You are missing either the target_type or the'
                         ' target_id'))

        # Sanity check on user_id
        current_user = user_api.user_get(request.current_user_id)
        if not subscription.user_id:
            subscription.user_id = request.current_user_id
        elif subscription.user_id != request.current_user_id \
                and not current_user.is_superuser:
            abort(403, _("You can only subscribe to resources on your own."))

        # Data sanity check: The resource must exist.
        resource = subscription_api.subscription_get_resource(
            target_type=subscription.target_type,
            target_id=subscription.target_id,
            current_user=request.current_user_id)
        if not resource:
            abort(400, _('You cannot subscribe to a nonexistent resource.'))

        # Data sanity check: The subscription cannot be duplicated for this
        # user.
        existing = subscription_api.subscription_get_all(
            target_type=[subscription.target_type, ],
            target_id=subscription.target_id,
            user_id=subscription.user_id)

        if existing:
            abort(409, _('You are already subscribed to this resource.'))

        result = subscription_api.subscription_create(subscription.as_dict())
        return Subscription.from_db_model(result)
예제 #5
0
    def post(self, subscription):
        """Create a new subscription.

        :param subscription: A subscription within the request body.
        """

        # Data sanity check - are all fields set?
        if not subscription.target_type or not subscription.target_id:
            abort(
                400,
                _('You are missing either the target_type or the'
                  ' target_id'))

        # Sanity check on user_id
        current_user = user_api.user_get(request.current_user_id)
        if not subscription.user_id:
            subscription.user_id = request.current_user_id
        elif subscription.user_id != request.current_user_id \
                and not current_user.is_superuser:
            abort(403, _("You can only subscribe to resources on your own."))

        # Data sanity check: The resource must exist.
        resource = subscription_api.subscription_get_resource(
            target_type=subscription.target_type,
            target_id=subscription.target_id,
            current_user=request.current_user_id)
        if not resource:
            abort(400, _('You cannot subscribe to a nonexistent resource.'))

        # Data sanity check: The subscription cannot be duplicated for this
        # user.
        existing = subscription_api.subscription_get_all(
            target_type=[
                subscription.target_type,
            ],
            target_id=subscription.target_id,
            user_id=subscription.user_id)

        if existing:
            abort(409, _('You are already subscribed to this resource.'))

        result = subscription_api.subscription_create(subscription.as_dict())
        return Subscription.from_db_model(result)
예제 #6
0
    def post(self, subscription):
        """Create a new subscription.

        :param subscription: A subscription within the request body.
        """

        # Data sanity check - are all fields set?
        if not subscription.target_type or not subscription.target_id:
            abort(400, _('You are missing either the target_type or the'
                         ' target_id'))

        # Sanity check on user_id
        current_user = user_api.user_get(request.current_user_id)
        if not subscription.user_id:
            subscription.user_id = request.current_user_id
        elif subscription.user_id != request.current_user_id \
                and not current_user.is_superuser:
            abort(403, _("You can only subscribe to resources on your own."))

        # Data sanity check: The resource must exist.
        resource = subscription_api.subscription_get_resource(
            target_type=subscription.target_type,
            target_id=subscription.target_id,
            current_user=request.current_user_id)
        if not resource:
            abort(400, _('You cannot subscribe to a nonexistent resource.'))

        # Data sanity check: The subscription cannot be duplicated for this
        # user.
        existing = subscription_api.subscription_get_all(
            target_type=[subscription.target_type, ],
            target_id=subscription.target_id,
            user_id=subscription.user_id)

        if existing:
            abort(409, _('You are already subscribed to this resource.'))

        result = subscription_api.subscription_create(subscription.as_dict())
        return Subscription.from_db_model(result)