1
2 """
3 Some base objects for the aXAPI.
4
5 Author : Richard Zhang (c)
6 e-mail : rzhang@a10networks.com
7 Date : 03/05/2012
8
9 """
10
11 from cStringIO import StringIO
12 import json
13
61
64
67 AxError.__init__(self,"%i : %s"%(code,message))
68 self.code = code
69 self.message = message
70
72 """
73 Transform recursively JSON dictionaries into objects
74 """
76 self.__name__ = name
77 for k,v in obj_dict.iteritems() :
78 if isinstance(v,dict) :
79 v = AxDictObject(k,v)
80 if isinstance(v,list) :
81 v = [ AxDictObject(k,vi) for vi in v ]
82 self.__dict__[k] = v
83
85 """
86 Base Object for aXAPI Objects
87 """
88 __display__ = []
89 __obj_name__ = ""
90 __obj_readonly__ = False
91 __xml_convrt__ = []
92
95
97 self.__dict__.update(params)
98
100 if name not in self.__dict__ :
101
102
103 return "UNKONWN"
104 try :
105 return self.__dict__[name]
106 except KeyError :
107 raise AttributeError("'%s' object has no attribute '%s'"%(self.__class__.__name__,name))
108
114
115 - def get(self,key,*args,**kwargs):
116 return self.__dict__.get(key,*args,**kwargs)
117
119 return self.__dict__[key]
120
126
128 vals = []
129 for k in self.__class__.__display__ :
130 val_found = False
131 try :
132 value = self.__dict__[k]
133 val_found = True
134 except KeyError :
135
136 try :
137 value = self.__dict__[k]
138 val_found = True
139 except KeyError : pass
140 if not val_found : continue
141 if isinstance(value,unicode):
142 value = value.encode("utf8")
143 if isinstance(value,str):
144 value = "'%s'"%value
145 else : value = str(value)
146 if len(value) > 20: value = value[:20]+"..."
147 vals.append("%s = %s"%(k,value))
148 return "%s(%s)"%(self.__class__.__name__,", ".join(vals))
149
151
153 if len(self.__obj_name__) > 0 :
154 data = dict()
155 data[self.__obj_name__] = self.__dict__
156 else :
157 data = self.__dict__
158 return json.dumps(data)
159
161 count = 1
162 resp_key = key_name_str+"="
163 resp = ""
164 is_first = True
165 for e in aList:
166 if isinstance(e, dict):
167
168 if not is_first:
169 resp_key += chr(2)
170 resp += "&"
171 resp_key += val_name+str(count)
172 resp += self._generateDictInUrl(val_name+str(count), e)
173 else:
174
175 raise AxAPIError(code=99, message="invalid dictionary object")
176 count += 1
177 is_first = False
178 return resp_key+"&"+resp
179
181 resp = key_name_str+"="
182 is_first = True
183 for k, v in aDict.iteritems():
184 if type(v) == int:
185 if not is_first:
186 resp += chr(2)
187 resp += k+chr(3)+str(v)
188 is_first = False
189 elif len(v) > 0:
190 if not is_first:
191 resp += chr(2)
192 resp += k+chr(3)+v
193 is_first = False
194 return resp
195
197 if is_first:
198 file_str.write(string)
199 else:
200 file_str.write("&"+string)
201
204
206 file_str = StringIO()
207 is_first = True
208 for k, v in self.__dict__.iteritems():
209 if self.__xml_convrt__.has_key(k):
210
211 if len(v) > 0:
212 self._appendString(file_str, is_first, self._generateListInUrl(k, self.__xml_convrt__[k], v))
213 is_first = False
214 elif isinstance(v, dict):
215
216 if len(v) > 0:
217 self._appendString(file_str, is_first, self._generateDictInUrl(k, v))
218 is_first = False
219 elif type(v) == int:
220
221 self._appendString(file_str, is_first, k+"="+str(v))
222 is_first = False
223 elif len(v) > 0:
224
225 self._appendString(file_str, is_first, k+"="+v)
226 is_first = False
227 print file_str.getvalue()
228 return file_str.getvalue()
229
231 """
232 Debug purpose to print out the AX object internal data.
233 """
234 print (self.__dict__)
235
237 """
238 Returns object information as a dictionary.
239 Should be overridden.
240 """
241 return {}
242