1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
from base import Component
class PyCArgument(Component):
"""
PyCArgument(<name>, ctype, *components, provides=..,
input_intent = 'required' | 'optional' | 'extra' | 'hide',
output_intent = 'hide' | 'return',
input_title = None,
output_title = None,
input_description = None,
output_description = None,
depends = []
)
"""
template = '%(name)s'
component_container_map = dict(CDecl = 'Decl')
def initialize(self, name, ctype=None, *components, **options):
self.name = name
self._provides = options.pop('provides',
'%s_%s' % (self.__class__.__name__, name))
self.input_intent = options.pop('input_intent','required') # 'optional', 'extra', 'hide'
self.output_intent = options.pop('output_intent','hide') # 'return'
self.input_title = options.pop('input_title', None)
self.output_title = options.pop('output_title', None)
self.input_description = options.pop('input_description', None)
self.output_description = options.pop('output_description', None)
self.depends = options.pop('depends', [])
if options: self.warning('%s unused options: %s\n' % (self.__class__.__name__, options))
map(self.add, components)
self.cvar = name
self.pycvar = None
self.retpycvar = None
if ctype is None:
ctype = object
if isinstance(ctype, Component.CTypeBase):
pass
elif isinstance(ctype, type) or Component.CTypePython.typeinfo_map.has_key(ctype):
ctype = Component.CTypePython(ctype)
else:
ctype = Component.CType(ctype)
self.ctype = ctype
retfmt = ctype.get_pyret_fmt(self)
if isinstance(ctype, Component.CTypePython):
if retfmt and retfmt in 'SON':
if self.output_intent == 'return':
if self.input_intent=='hide':
self.retpycvar = name
else:
self.pycvar = name
self.retpycvar = name + '_return'
elif self.input_intent!='hide':
self.pycvar = name
else:
self.pycvar = name
self.retpycvar = name
else:
self.pycvar = name + '_pyc'
self.retpycvar = name + '_pyc_r'
ctype.set_titles(self)
ctype.set_Decl(self)
return self
def update_containers(self):
evaluate = self.evaluate
ctype = self.ctype
# update PyCFunction containers
input_doc_title = '%s - %s' % (self.name, self.input_title)
output_doc_title = '%s - %s' % (self.name, self.output_title)
if self.input_description is not None:
input_doc_descr = ' %s' % (self.input_description)
else:
input_doc_descr = None
if self.output_description is not None:
output_doc_descr = ' %s' % (self.output_description)
else:
output_doc_descr = None
if self.input_intent=='required':
self.container_ReqArgs += self.name
self.container_ReqKWList += '"' + self.name + '"'
self.container_ReqArgFmt += ctype.get_pyarg_fmt(self)
self.container_ReqArgObj += ctype.get_pyarg_obj(self)
self.container_ReqArgsDoc += input_doc_title
self.container_ReqArgsDoc += input_doc_descr
elif self.input_intent=='optional':
self.container_OptArgs += self.name
self.container_OptKWList += '"' + self.name + '"'
self.container_OptArgFmt += ctype.get_pyarg_fmt(self)
self.container_OptArgObj += ctype.get_pyarg_obj(self)
self.container_OptArgsDoc += input_doc_title
self.container_OptArgsDoc += input_doc_descr
elif self.input_intent=='extra':
self.container_ExtArgs += self.name
self.container_ExtKWList += '"' + self.name + '"'
self.container_ExtArgFmt += ctype.get_pyarg_fmt(self)
self.container_ExtArgObj += ctype.get_pyarg_obj(self)
self.container_ExtArgsDoc += input_doc_title
self.container_ExtArgsDoc += input_doc_descr
elif self.input_intent=='hide':
pass
else:
raise NotImplementedError('input_intent=%r' % (self.input_intent))
if self.output_intent=='return':
self.container_RetArgs += self.name
self.container_RetFmt += ctype.get_pyret_fmt(self)
self.container_RetObj += ctype.get_pyret_obj(self)
self.container_RetDoc += output_doc_title
self.container_RetDoc += output_doc_descr
elif self.output_intent=='hide':
pass
else:
raise NotImplementedError('output_intent=%r' % (self.output_intent))
return
|