~tribaal/txaws/xss-hardening

« back to all changes in this revision

Viewing changes to txaws/server/call.py

  • Committer: Duncan McGreggor
  • Date: 2009-11-22 02:20:42 UTC
  • mto: (44.3.2 484858-s3-scripts)
  • mto: This revision was merged to the branch mainline in revision 52.
  • Revision ID: duncan@canonical.com-20091122022042-4zi231hxni1z53xd
* Updated the LICENSE file with copyright information.
* Updated the README with license information.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
from uuid import uuid4
2
 
 
3
 
from txaws.version import ec2_api as ec2_api_version
4
 
from txaws.server.exception import APIError
5
 
 
6
 
 
7
 
class Call(object):
8
 
    """Hold information about a single API call initiated by an HTTP request.
9
 
 
10
 
    @param raw_params: The raw parameters for the action to be executed, the
11
 
        format is a dictionary mapping parameter names to parameter values,
12
 
        like C{{'ParamName': param_value}}.
13
 
    @param principal: The principal issuing this API L{Call}.
14
 
    @param action: The action to be performed.
15
 
 
16
 
    @ivar id: A unique identifier for the API call.
17
 
    @ivar principal: The principal performing the call.
18
 
    @ivar args: An L{Arguments} object holding parameters extracted from the
19
 
       raw parameters according to a L{Schema}, it will be available after
20
 
       calling the C{parse} method.
21
 
    @ivar rest: Extra parameters not included in the given arguments schema,
22
 
       it will be available after calling the L{parse} method.
23
 
    @ivar version: The version of the API call. Defaults to 2009-11-30.
24
 
    """
25
 
 
26
 
    def __init__(self, raw_params=None, principal=None, action=None,
27
 
                 version=None, id=None):
28
 
        if id is None:
29
 
            id = str(uuid4())
30
 
        self.id = id
31
 
        self._raw_params = {}
32
 
        if raw_params is not None:
33
 
            self._raw_params.update(raw_params)
34
 
        self.action = action
35
 
        if version is None:
36
 
            version = ec2_api_version
37
 
        self.version = version
38
 
        self.principal = principal
39
 
 
40
 
    def parse(self, schema, strict=True):
41
 
        """Update C{args} and C{rest}, parsing the raw request arguments.
42
 
 
43
 
        @param schema: The L{Schema} the parameters must be extracted with.
44
 
        @param strict: If C{True} an error is raised if parameters not included
45
 
            in the schema are found, otherwise the extra parameters will be
46
 
            saved in the C{rest} attribute.
47
 
        """
48
 
        self.args, self.rest = schema.extract(self._raw_params)
49
 
        if strict and self.rest:
50
 
            raise APIError(400, "UnknownParameter",
51
 
                           "The parameter %s is not "
52
 
                           "recognized" % self.rest.keys()[0])
53
 
 
54
 
    def get_raw_params(self):
55
 
        """Return a C{dict} holding the raw API call paramaters.
56
 
 
57
 
        The format of the dictionary is C{{'ParamName': param_value}}.
58
 
        """
59
 
        return self._raw_params.copy()