~tribaal/txaws/xss-hardening

« back to all changes in this revision

Viewing changes to txaws/server/method.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
 
def method(method_class):
2
 
    """Decorator to use to mark an API method.
3
 
 
4
 
    When invoking L{Registry.scan} the classes marked with this decorator
5
 
    will be added to the registry.
6
 
 
7
 
    @param method_class: The L{Method} class to register.
8
 
    """
9
 
 
10
 
    def callback(scanner, name, method_class):
11
 
        if method_class.actions is not None:
12
 
            actions = method_class.actions
13
 
        else:
14
 
            actions = [name]
15
 
 
16
 
        if method_class.versions is not None:
17
 
            versions = method_class.versions
18
 
        else:
19
 
            versions = [None]
20
 
 
21
 
        for action in actions:
22
 
            for version in versions:
23
 
                scanner.registry.add(method_class,
24
 
                                     action=action,
25
 
                                     version=version)
26
 
 
27
 
    from venusian import attach
28
 
    attach(method_class, callback, category="method")
29
 
    return method_class
30
 
 
31
 
 
32
 
class Method(object):
33
 
    """Handle a single HTTP request to an API resource.
34
 
 
35
 
    @cvar actions: List of actions that the Method can handle, if C{None}
36
 
        the class name will be used as only supported action.
37
 
    @cvar versions: List of versions that the Method can handle, if C{None}
38
 
        all versions will be supported.
39
 
    """
40
 
    actions = None
41
 
    versions = None
42
 
 
43
 
    def invoke(self, call):
44
 
        """Invoke this method for executing the given C{call}."""
45
 
        raise NotImplemented("Sub-classes have to implement the invoke method")
46
 
 
47
 
    def is_available(self):
48
 
        """Return a boolean indicating wether this method is available.
49
 
 
50
 
        Override this to dynamically decide at run-time whether specific
51
 
        methods are available or not.
52
 
        """
53
 
        return True