Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: boto/jsonresponse.py

Issue 8386013: Merging in latest boto. (Closed) Base URL: svn://svn.chromium.org/boto
Patch Set: Redoing vendor drop by deleting and then merging. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « boto/iam/summarymap.py ('k') | boto/manage/cmdshell.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2010 Mitch Garnaat http://garnaat.org/ 1 # Copyright (c) 2010 Mitch Garnaat http://garnaat.org/
2 # Copyright (c) 2010, Eucalyptus Systems, Inc. 2 # Copyright (c) 2010, Eucalyptus Systems, Inc.
3 # 3 #
4 # Permission is hereby granted, free of charge, to any person obtaining a 4 # Permission is hereby granted, free of charge, to any person obtaining a
5 # copy of this software and associated documentation files (the 5 # copy of this software and associated documentation files (the
6 # "Software"), to deal in the Software without restriction, including 6 # "Software"), to deal in the Software without restriction, including
7 # without limitation the rights to use, copy, modify, merge, publish, dis- 7 # without limitation the rights to use, copy, modify, merge, publish, dis-
8 # tribute, sublicense, and/or sell copies of the Software, and to permit 8 # tribute, sublicense, and/or sell copies of the Software, and to permit
9 # persons to whom the Software is furnished to do so, subject to the fol- 9 # persons to whom the Software is furnished to do so, subject to the fol-
10 # lowing conditions: 10 # lowing conditions:
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 def characters(self, content): 48 def characters(self, content):
49 self.current_text += content 49 self.current_text += content
50 50
51 def parse(self, s): 51 def parse(self, s):
52 xml.sax.parseString(s, self) 52 xml.sax.parseString(s, self)
53 53
54 class Element(dict): 54 class Element(dict):
55 55
56 def __init__(self, connection=None, element_name=None, 56 def __init__(self, connection=None, element_name=None,
57 stack=None, parent=None, list_marker=('Set',), 57 stack=None, parent=None, list_marker=('Set',),
58 item_marker=('member', 'item')): 58 item_marker=('member', 'item'),
59 pythonize_name=False):
59 dict.__init__(self) 60 dict.__init__(self)
60 self.connection = connection 61 self.connection = connection
61 self.element_name = element_name 62 self.element_name = element_name
62 self.list_marker = utils.mklist(list_marker) 63 self.list_marker = utils.mklist(list_marker)
63 self.item_marker = utils.mklist(item_marker) 64 self.item_marker = utils.mklist(item_marker)
64 if stack is None: 65 if stack is None:
65 self.stack = [] 66 self.stack = []
66 else: 67 else:
67 self.stack = stack 68 self.stack = stack
69 self.pythonize_name = pythonize_name
68 self.parent = parent 70 self.parent = parent
69 71
70 def __getattr__(self, key): 72 def __getattr__(self, key):
71 if key in self: 73 if key in self:
72 return self[key] 74 return self[key]
73 for k in self: 75 for k in self:
74 e = self[k] 76 e = self[k]
75 if isinstance(e, Element): 77 if isinstance(e, Element):
76 try: 78 try:
77 return getattr(e, key) 79 return getattr(e, key)
78 except AttributeError: 80 except AttributeError:
79 pass 81 pass
80 raise AttributeError 82 raise AttributeError
81 83
84 def get_name(self, name):
85 if self.pythonize_name:
86 name = utils.pythonize_name(name)
87 return name
88
82 def startElement(self, name, attrs, connection): 89 def startElement(self, name, attrs, connection):
83 self.stack.append(name) 90 self.stack.append(name)
84 for lm in self.list_marker: 91 for lm in self.list_marker:
85 if name.endswith(lm): 92 if name.endswith(lm):
86 l = ListElement(self.connection, name, self.list_marker, 93 l = ListElement(self.connection, name, self.list_marker,
87 self.item_marker) 94 self.item_marker, self.pythonize_name)
88 self[name] = l 95 self[self.get_name(name)] = l
89 return l 96 return l
90 if len(self.stack) > 0: 97 if len(self.stack) > 0:
91 element_name = self.stack[-1] 98 element_name = self.stack[-1]
92 e = Element(self.connection, element_name, self.stack, self, 99 e = Element(self.connection, element_name, self.stack, self,
93 self.list_marker, self.item_marker) 100 self.list_marker, self.item_marker,
94 self[element_name] = e 101 self.pythonize_name)
102 self[self.get_name(element_name)] = e
95 return (element_name, e) 103 return (element_name, e)
96 else: 104 else:
97 return None 105 return None
98 106
99 def endElement(self, name, value, connection): 107 def endElement(self, name, value, connection):
100 if len(self.stack) > 0: 108 if len(self.stack) > 0:
101 self.stack.pop() 109 self.stack.pop()
102 value = value.strip() 110 value = value.strip()
103 if value: 111 if value:
104 if isinstance(self.parent, Element): 112 if isinstance(self.parent, Element):
105 self.parent[name] = value 113 self.parent[self.get_name(name)] = value
106 elif isinstance(self.parent, ListElement): 114 elif isinstance(self.parent, ListElement):
107 self.parent.append(value) 115 self.parent.append(value)
108 116
109 class ListElement(list): 117 class ListElement(list):
110 118
111 def __init__(self, connection=None, element_name=None, 119 def __init__(self, connection=None, element_name=None,
112 list_marker=['Set'], item_marker=('member', 'item')): 120 list_marker=['Set'], item_marker=('member', 'item'),
121 pythonize_name=False):
113 list.__init__(self) 122 list.__init__(self)
114 self.connection = connection 123 self.connection = connection
115 self.element_name = element_name 124 self.element_name = element_name
116 self.list_marker = list_marker 125 self.list_marker = list_marker
117 self.item_marker = item_marker 126 self.item_marker = item_marker
127 self.pythonize_name = pythonize_name
128
129 def get_name(self, name):
130 if self.pythonize_name:
131 name = utils.pythonize_name(name)
132 return name
118 133
119 def startElement(self, name, attrs, connection): 134 def startElement(self, name, attrs, connection):
120 for lm in self.list_marker: 135 for lm in self.list_marker:
121 if name.endswith(lm): 136 if name.endswith(lm):
122 l = ListElement(self.connection, name, self.item_marker) 137 l = ListElement(self.connection, name, self.item_marker,
123 setattr(self, name, l) 138 pythonize_name=self.pythonize_name)
139 setattr(self, self.get_name(name), l)
124 return l 140 return l
125 if name in self.item_marker: 141 if name in self.item_marker:
126 e = Element(self.connection, name, parent=self) 142 e = Element(self.connection, name, parent=self,
143 pythonize_name=self.pythonize_name)
127 self.append(e) 144 self.append(e)
128 return e 145 return e
129 else: 146 else:
130 return None 147 return None
131 148
132 def endElement(self, name, value, connection): 149 def endElement(self, name, value, connection):
133 if name == self.element_name: 150 if name == self.element_name:
134 if len(self) > 0: 151 if len(self) > 0:
135 empty = [] 152 empty = []
136 for e in self: 153 for e in self:
137 if isinstance(e, Element): 154 if isinstance(e, Element):
138 if len(e) == 0: 155 if len(e) == 0:
139 empty.append(e) 156 empty.append(e)
140 for e in empty: 157 for e in empty:
141 self.remove(e) 158 self.remove(e)
142 else: 159 else:
143 setattr(self, name, value) 160 setattr(self, self.get_name(name), value)
OLDNEW
« no previous file with comments | « boto/iam/summarymap.py ('k') | boto/manage/cmdshell.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698