2 # Shared type definitions
4 # Mark Huang <mlhuang@cs.princeton.edu>
5 # Copyright (C) 2006 The Trustees of Princeton University
9 from PLC.Faults import *
13 Typed value wrapper. Use in accepts and returns to document method
14 parameters. Set the optional and default attributes for
15 sub-parameters (i.e., dict fields).
18 def __init__(self, typeval, doc = "",
19 min = None, max = None,
27 # Basic type of the parameter. Must be a builtin type
28 # that can be marshalled by XML-RPC.
31 # Documentation string for the parameter
34 # Basic value checking. For numeric types, the minimum and
35 # maximum possible values, inclusive. For string types, the
36 # minimum and maximum possible UTF-8 encoded byte lengths.
40 # Whether the sub-parameter is optional or not. If None,
41 # unknown whether it is optional.
42 self.optional = optional
44 # Whether the DB field is read-only.
48 self.default = default
50 # Whether the DB field can be NULL.
53 self.primary_key = primary_key
55 # Whether the DB field is indexed
56 self.indexed = indexed
58 # Whether the DB field lives in another table
65 return repr(self.type)
69 A list (technically, a tuple) of types. Use in accepts and returns
70 to document method parameters that may return mixed types.
73 def __new__(cls, *types):
74 return tuple.__new__(cls, types)
78 Returns the Python type of the specified argument, which may be a
79 Python type, a typed value, or a Parameter.
82 if isinstance(arg, Parameter):
85 if isinstance(arg, type):
92 Returns the XML-RPC type of the specified argument, which may be a
93 Python type, a typed value, or a Parameter.
96 arg_type = python_type(arg)
98 if arg_type == NoneType:
100 elif arg_type == IntType or arg_type == LongType:
102 elif arg_type == bool:
104 elif arg_type == FloatType:
106 elif arg_type in StringTypes:
108 elif arg_type == ListType or arg_type == TupleType:
110 elif arg_type == DictType:
112 elif arg_type == Mixed:
113 # Not really an XML-RPC type but return "mixed" for
114 # documentation purposes.
117 raise PLCAPIError, "XML-RPC cannot marshal %s objects" % arg_type