aspen.http
¶
-
class
aspen.http.mapping.
Mapping
¶ Base class for HTTP mappings.
Mappings in HTTP differ from Python dictionaries in that they may have one or more values. This dictionary subclass maintains a list of values for each key. However, access semantics are asymmetric: subscript assignment clobbers to list, while subscript access returns the last item. Think about it.
Warning
This isn’t thread-safe.
-
keyerror
(key)¶ Called when a key is missing. Default implementation simply reraises.
-
pop
(name, default=<object object>)¶ Given a name, return a value.
This removes the last value from the list for name and returns it. If there was only one value in the list then the key is removed from the mapping. If name is not present and default is given, that is returned instead. Otherwise, self.keyerror is called.
-
popall
()¶ D.pop(k[,d]) -> v, remove specified key and return the corresponding value. If key is not found, d is returned if given, otherwise KeyError is raised
-
all
(name)¶ Given a name, return a list of values, possibly empty.
-
get
(name, default=None)¶ Override to only return the last value.
-
add
(name, value)¶ Given a name and value, clobber any existing values with the new one.
-
ones
(*names)¶ Given one or more names of keys, return a list of their values.
-
-
class
aspen.http.request.
PathPart
¶ Represents a segment of a URL path.
-
aspen.http.request.
extract_rfc2396_params
(path)¶ This function implements parsing URL path parameters, per section 3.3 of RFC2396.
- path should be raw so we don’t split or operate on a decoded character
- output is decoded
Example:
>>> path = '/frisbee;color=red;size=small/logo;sponsor=w3c;color=black/image.jpg' >>> extract_rfc2396_params(path) == [ ... PathPart('frisbee', params={'color': ['red'], 'size': ['small']}), ... PathPart('logo', params={'sponsor': ['w3c'], 'color': ['black']}), ... PathPart('image.jpg', params={}) ... ] True
-
aspen.http.request.
split_path_no_params
(path)¶ This splits a path into parts on “/” only (no split on “;” or “,”).
-
class
aspen.http.request.
Path
(raw, split_path=<function extract_rfc2396_params>)¶ Represent the path of a resource.
-
class
aspen.http.request.
Querystring
(raw, errors='replace')¶ Represent an HTTP querystring.
-
aspen.http.resource.
open_resource
(request_processor, resource_path)¶ Open a resource in read-only binary mode, after checking for symlinks.
Raises: AttemptedBreakout – if the resource_path
points to a file that isn’t inside any of the knownresource_directories
This function doesn’t fully protect against attackers who have the ability to create and delete symlinks inside the resource directories whenever they want, but it makes the attack more difficult and detectable.
-
class
aspen.http.resource.
Static
(request_processor, fspath)¶ Model a static HTTP resource.
-
class
aspen.http.resource.
Dynamic
¶ Model a dynamic HTTP resource.
-
render
(context, dispatch_result, accept_header)¶ Render the resource.
Before rendering we need to determine what type of content we’re going to send back, by trying to find a match between the media types the client wants and the ones provided by the resource.
The two sources for what the client wants are the extension in the request URL (
dispatch_result.extension
), and theAccept
header (accept_header
). If the former fails to match we raiseNotFound
(404), if the latter fails we raiseNegotiationFailure
(406).Note that we don’t always respect the
Accept
header (the spec says we can ignore it: <https://tools.ietf.org/html/rfc7231#section-5.3.2>).Parameters: - context (dict) – the variables you want to pass to the resource
- dispatch_result (DispatchResult) – the object returned by the dispatcher
- accept_header (str) – the requested media types
Returns: an
Output
object.
-