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]
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)
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)
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)
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)