Resources

restless.resources

class restless.resources.Resource(*args, **kwargs)

Defines a RESTful resource.

Users are expected to subclass this object & implement a handful of methods:

  • list
  • detail
  • create (requires authentication)
  • update (requires authentication)
  • delete (requires authentication)

Additionally, the user may choose to implement:

  • create_detail (requires authentication)
  • update_list (requires authentication)
  • delete_list (requires authentication)

Users may also wish to define a fields attribute on the class. By providing a dictionary of output names mapped to a dotted lookup path, you can control the serialized output.

Users may also choose to override the status_map and/or http_methods on the class. These respectively control the HTTP status codes returned by the views and the way views are looked up (based on HTTP method & endpoint).

classmethod as_detail(*init_args, **init_kwargs)

Used for hooking up the actual detail-style endpoints, this returns a wrapper function that creates a new instance of the resource class & calls the correct view method for it.

Parameters:
  • init_args – (Optional) Positional params to be persisted along for instantiating the class itself.
  • init_kwargs – (Optional) Keyword params to be persisted along for instantiating the class itself.
Returns:

View function

classmethod as_list(*init_args, **init_kwargs)

Used for hooking up the actual list-style endpoints, this returns a wrapper function that creates a new instance of the resource class & calls the correct view method for it.

Parameters:
  • init_args – (Optional) Positional params to be persisted along for instantiating the class itself.
  • init_kwargs – (Optional) Keyword params to be persisted along for instantiating the class itself.
Returns:

View function

classmethod as_view(view_type, *init_args, **init_kwargs)

Used for hooking up the all endpoints (including custom ones), this returns a wrapper function that creates a new instance of the resource class & calls the correct view method for it.

Parameters:
  • view_type (string) – Should be one of list, detail or custom.
  • init_args – (Optional) Positional params to be persisted along for instantiating the class itself.
  • init_kwargs – (Optional) Keyword params to be persisted along for instantiating the class itself.
Returns:

View function

bubble_exceptions()

Controls whether or not exceptions will be re-raised when encountered.

The default implementation returns False, which means errors should return a serialized response.

If you’d like exceptions to be re-raised, override this method & return True.

Returns:Whether exceptions should be re-raised or not
Return type:boolean
build_error(err)

When an exception is encountered, this generates a JSON error message for display to the user.

Parameters:err (Exception) – The exception seen. The message is exposed to the user, so beware of sensitive data leaking.
Returns:A response object
build_response(data, status=200)

Given some data, generates an HTTP response.

If you’re integrating with a new web framework, you MUST override this method within your subclass.

Parameters:
  • data (string) – The body of the response to send
  • status (integer) – (Optional) The status code to respond with. Default is 200
Returns:

A response object

create(*args, **kwargs)

Allows for creating data via a POST on a list-style endpoint.

MUST BE OVERRIDDEN BY THE USER - By default, this returns MethodNotImplemented.

Returns:May return the created item or None
create_detail(*args, **kwargs)

Creates a subcollection of data for a POST on a detail-style endpoint.

Uncommonly implemented due to the rarity of having nested collections.

MUST BE OVERRIDDEN BY THE USER - By default, this returns MethodNotImplemented.

Returns:A collection of data
Return type:list or iterable
delete(*args, **kwargs)

Deletes data for a DELETE on a detail-style endpoint.

MUST BE OVERRIDDEN BY THE USER - By default, this returns MethodNotImplemented.

Returns:None
delete_list(*args, **kwargs)

Deletes ALL data in the collection for a DELETE on a list-style endpoint.

Uncommonly implemented due to potential of trashing large datasets. Implement with care.

MUST BE OVERRIDDEN BY THE USER - By default, this returns MethodNotImplemented.

Returns:None
deserialize(method, endpoint, body)

A convenience method for deserializing the body of a request.

If called on a list-style endpoint, this calls deserialize_list. Otherwise, it will call deserialize_detail.

Parameters:
  • method (string) – The HTTP method of the current request
  • endpoint (string) – The endpoint style (list or detail)
  • body (string) – The body of the current request
Returns:

The deserialized data

Return type:

list or dict

deserialize_detail(body)

Given a string of text, deserializes a (presumed) object out of the body.

Parameters:body (string) – The body of the current request
Returns:The deserialized body or an empty dict
deserialize_list(body)

Given a string of text, deserializes a (presumed) list out of the body.

Parameters:body (string) – The body of the current request
Returns:The deserialized body or an empty list
detail(*args, **kwargs)

Returns the data for a GET on a detail-style endpoint.

MUST BE OVERRIDDEN BY THE USER - By default, this returns MethodNotImplemented.

Returns:An item
Return type:object or dict
handle(endpoint, *args, **kwargs)

A convenient dispatching method, this centralized some of the common flow of the views.

This wraps/calls the methods the user defines (list/detail/create etc.), allowing the user to ignore the authentication/deserialization/serialization/response & just focus on their data/interactions.

Parameters:
  • endpoint (string) – The style of URI call (typically either list or detail).
  • args – (Optional) Any positional URI parameter data is passed along here. Somewhat framework/URL-specific.
  • kwargs – (Optional) Any keyword/named URI parameter data is passed along here. Somewhat framework/URL-specific.
Returns:

A response object

handle_error(err)

When an exception is encountered, this generates a serialized error message to return the user.

Parameters:err (Exception) – The exception seen. The message is exposed to the user, so beware of sensitive data leaking.
Returns:A response object
http_methods = {'list': {'PUT': 'update_list', 'POST': 'create', 'DELETE': 'delete_list', 'GET': 'list'}, 'detail': {'PUT': 'update', 'POST': 'create_detail', 'DELETE': 'delete', 'GET': 'detail'}}
is_authenticated()

A simple hook method for controlling whether a request is authenticated to continue.

By default, we only allow the safe GET methods. All others are denied.

Returns:Whether the request is authenticated or not.
Return type:boolean
is_debug()

Controls whether or not the resource is in a debug environment.

If so, tracebacks will be added to the serialized response.

The default implementation simply returns False, so if you’re integrating with a new web framework, you’ll need to override this method within your subclass.

Returns:If the resource is in a debug environment
Return type:boolean
list(*args, **kwargs)

Returns the data for a GET on a list-style endpoint.

MUST BE OVERRIDDEN BY THE USER - By default, this returns MethodNotImplemented.

Returns:A collection of data
Return type:list or iterable
prepare(data)

Given an item (object or dict), this will potentially go through & reshape the output based on self.prepare_with object.

Parameters:data (object or dict) – An item to prepare for serialization
Returns:A potentially reshaped dict
Return type:dict
preparer = <restless.preparers.Preparer object>
request_body()

Returns the body of the current request.

Useful for deserializing the content the user sent (typically JSON).

If you’re integrating with a new web framework, you might need to override this method within your subclass.

Returns:The body of the request
Return type:string
request_method()

Returns the HTTP method for the current request.

If you’re integrating with a new web framework, you might need to override this method within your subclass.

Returns:The HTTP method in uppercase
Return type:string
serialize(method, endpoint, data)

A convenience method for serializing data for a response.

If called on a list-style endpoint, this calls serialize_list. Otherwise, it will call serialize_detail.

Parameters:
  • method (string) – The HTTP method of the current request
  • endpoint (string) – The endpoint style (list or detail)
  • data (string) – The body for the response
Returns:

A serialized version of the data

Return type:

string

serialize_detail(data)

Given a single item (object or dict), serializes it.

Parameters:data (object or dict) – The item to serialize
Returns:The serialized body
Return type:string
serialize_list(data)

Given a collection of data (objects or dicts), serializes them.

Parameters:data (list or iterable) – The collection of items to serialize
Returns:The serialized body
Return type:string
serializer = <restless.serializers.JSONSerializer object>
status_map = {'delete_list': 204, 'update_list': 202, 'create': 201, 'delete': 204, 'list': 200, 'detail': 200, 'create_detail': 201, 'update': 202}
update(*args, **kwargs)

Updates existing data for a PUT on a detail-style endpoint.

MUST BE OVERRIDDEN BY THE USER - By default, this returns MethodNotImplemented.

Returns:May return the updated item or None
update_list(*args, **kwargs)

Updates the entire collection for a PUT on a list-style endpoint.

Uncommonly implemented due to the complexity & (varying) busines-logic involved.

MUST BE OVERRIDDEN BY THE USER - By default, this returns MethodNotImplemented.

Returns:A collection of data
Return type:list or iterable
wrap_list_response(data)

Takes a list of data & wraps it in a dictionary (within the objects key).

For security in JSON responses, it’s better to wrap the list results in an object (due to the way the Array constructor can be attacked in Javascript). See http://haacked.com/archive/2009/06/25/json-hijacking.aspx/ & similar for details.

Overridable to allow for modifying the key names, adding data (or just insecurely return a plain old list if that’s your thing).

Parameters:data (list) – A list of data about to be serialized
Returns:A wrapping dict
Return type:dict
restless.resources.skip_prepare(func)

A convenience decorator for indicating the raw data should not be prepared.

restless.dj

class restless.dj.DjangoResource(*args, **kwargs)

A Django-specific Resource subclass.

Doesn’t require any special configuration, but helps when working in a Django environment.

classmethod as_detail(*args, **kwargs)
classmethod as_list(*args, **kwargs)
build_error(err)
build_response(data, status=200)
classmethod build_url_name(name, name_prefix=None)

Given a name & an optional name_prefix, this generates a name for a URL.

Parameters:
  • name (string) – The name for the URL (ex. ‘detail’)
  • name_prefix (string) – (Optional) A prefix for the URL’s name (for resolving). The default is None, which will autocreate a prefix based on the class name. Ex: BlogPostResource -> api_blog_post_list
Returns:

The final name

Return type:

string

is_debug()
classmethod urls(name_prefix=None)

A convenience method for hooking up the URLs.

This automatically adds a list & a detail endpoint to your URLconf.

Parameters:name_prefix (string) – (Optional) A prefix for the URL’s name (for resolving). The default is None, which will autocreate a prefix based on the class name. Ex: BlogPostResource -> api_blogpost_list
Returns:A list of url objects for include(...)

restless.fl

restless.pyr

restless.it

restless.tnd

class restless.tnd.TornadoResource(*args, **kwargs)

A Tornado-specific Resource subclass.

_request_handler_base_

alias of RequestHandler

as_detail(*init_args, **init_kwargs)

Used for hooking up the actual detail-style endpoints, this returns a wrapper function that creates a new instance of the resource class & calls the correct view method for it.

Parameters:
  • init_args – (Optional) Positional params to be persisted along for instantiating the class itself.
  • init_kwargs – (Optional) Keyword params to be persisted along for instantiating the class itself.
Returns:

View function

as_list(*init_args, **init_kwargs)

Used for hooking up the actual list-style endpoints, this returns a wrapper function that creates a new instance of the resource class & calls the correct view method for it.

Parameters:
  • init_args – (Optional) Positional params to be persisted along for instantiating the class itself.
  • init_kwargs – (Optional) Keyword params to be persisted along for instantiating the class itself.
Returns:

View function

r_handler

access to tornado.web.RequestHandler