MCPcopy Create free account
hub / github.com/ronreiter/interactive-tutorials / Builder

Class Builder

suds/builder.py:29–119  ·  view source on GitHub ↗

Builder used to construct an object for types defined in the schema

Source from the content-addressed store, hash-verified

27
28
29class Builder:
30 """ Builder used to construct an object for types defined in the schema """
31
32 def __init__(self, resolver):
33 """
34 @param resolver: A schema object name resolver.
35 @type resolver: L{resolver.Resolver}
36 """
37 self.resolver = resolver
38
39 def build(self, name):
40 "build an object for the specified typename as defined in the schema"
41 if isinstance(name, basestring):
42 type = self.resolver.find(name)
43 if type is None:
44 raise TypeNotFound(name)
45 else:
46 type = name
47 cls = type.name
48 if type.mixed():
49 data = Factory.property(cls)
50 else:
51 data = Factory.object(cls)
52 resolved = type.resolve()
53 md = data.__metadata__
54 md.sxtype = resolved
55 md.ordering = self.ordering(resolved)
56 history = []
57 self.add_attributes(data, resolved)
58 for child, ancestry in type.children():
59 if self.skip_child(child, ancestry):
60 continue
61 self.process(data, child, history[:])
62 return data
63
64 def process(self, data, type, history):
65 """ process the specified type then process its children """
66 if type in history:
67 return
68 if type.enum():
69 return
70 history.append(type)
71 resolved = type.resolve()
72 value = None
73 if type.unbounded():
74 value = []
75 else:
76 if len(resolved) > 0:
77 if resolved.mixed():
78 value = Factory.property(resolved.name)
79 md = value.__metadata__
80 md.sxtype = resolved
81 else:
82 value = Factory.object(resolved.name)
83 md = value.__metadata__
84 md.sxtype = resolved
85 md.ordering = self.ordering(resolved)
86 setattr(data, type.name, value)

Callers 1

__init__Method · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected