3232
3333import sys
3434
35+
3536class pybindJSONIOError (Exception ):
3637 pass
3738
3839
3940class pybindJSONUpdateError (Exception ):
4041 pass
4142
43+
4244class pybindJSONDecodeError (Exception ):
4345 pass
4446
@@ -86,7 +88,7 @@ def default(self, obj, mode="default"):
8688
8789 if isinstance (obj , dict ):
8890 ndict = {}
89- for k ,v in obj .iteritems ():
91+ for k , v in obj .iteritems ():
9092 ndict [k ] = self .default (v , mode = mode )
9193 return ndict
9294
@@ -190,9 +192,9 @@ def default(self, obj, mode="default"):
190192
191193 return [self .default (i ) for i in obj ]
192194
193-
194195 raise AttributeError ("Unmapped type: %s" % original_yang_type )
195196
197+
196198class pybindJSONDecoder (object ):
197199 @staticmethod
198200 def load_json (d , parent , yang_base , obj = None , path_helper = None ,
@@ -231,21 +233,23 @@ def load_json(d, parent, yang_base, obj=None, path_helper=None,
231233 for elem in chobj ._pyangbind_elements :
232234 unsetchildelem = getattr (chobj , "_unset_%s" % elem )
233235 unsetchildelem ()
234- pybindJSONDecoder .load_json (d [key ], chobj , yang_base , obj = chobj , path_helper = path_helper )
236+ pybindJSONDecoder .load_json (d [key ], chobj , yang_base , obj = chobj ,
237+ path_helper = path_helper )
235238 set_via_stdmethod = False
236239 elif pybind_attr in ["YANGListType" , "list" ]:
237240 # we need to add each key to the list and then skip a level in the
238241 # JSON hierarchy
239242 list_obj = getattr (obj , safe_name (key ), None )
240243 if list_obj is None :
241- raise pybindJSONDecodeError ("Could not load list object with name %s" % key )
244+ raise pybindJSONDecodeError ("Could not load list object " +
245+ "with name %s" % key )
242246 ordered_list = getattr (list_obj , "_ordered" , None )
243247 if ordered_list :
244248 # Put keys in order:
245249 okeys = []
246250 kdict = {}
247- for k ,v in d [key ].iteritems ():
248- if not "__yang_order" in v :
251+ for k , v in d [key ].iteritems ():
252+ if "__yang_order" not in v :
249253 # Element is not specified in terms of order, so
250254 # push to a list that keeps this order
251255 okeys .append (k )
@@ -264,7 +268,8 @@ def load_json(d, parent, yang_base, obj=None, path_helper=None,
264268 if child_key not in chobj :
265269 chobj .add (child_key )
266270 parent = chobj [child_key ]
267- pybindJSONDecoder .load_json (d [key ][child_key ], parent , yang_base , obj = parent , path_helper = path_helper )
271+ pybindJSONDecoder .load_json (d [key ][child_key ], parent , yang_base ,
272+ obj = parent , path_helper = path_helper )
268273 set_via_stdmethod = False
269274 if overwrite :
270275 for child_key in chobj :
@@ -305,8 +310,8 @@ def load_json(d, parent, yang_base, obj=None, path_helper=None,
305310 def check_metadata_add (key , data , obj ):
306311 keys = [unicode (k ) for k in data ]
307312 if ("@" + key ) in keys :
308- for k ,v in data ["@" + key ].iteritems ():
309- obj ._add_metadata (k ,v )
313+ for k , v in data ["@" + key ].iteritems ():
314+ obj ._add_metadata (k , v )
310315
311316 @staticmethod
312317 def load_ietf_json (d , parent , yang_base , obj = None , path_helper = None ,
@@ -340,8 +345,8 @@ def load_ietf_json(d, parent, yang_base, obj=None, path_helper=None,
340345
341346 if key == "@" :
342347 # Handle whole container metadata object
343- for k ,v in d [key ].iteritems ():
344- obj ._add_metadata (k ,v )
348+ for k , v in d [key ].iteritems ():
349+ obj ._add_metadata (k , v )
345350 continue
346351 elif "@" in key :
347352 # Don't handle metadata elements, each element
@@ -356,7 +361,9 @@ def load_ietf_json(d, parent, yang_base, obj=None, path_helper=None,
356361 if attr_get is None :
357362 raise AttributeError ("Invalid attribute specified (%s)" % ykey )
358363 pybindJSONDecoder .check_metadata_add (key , d , attr_get ())
359- pybindJSONDecoder .load_ietf_json (d [key ], None , None , obj = attr_get (), path_helper = path_helper , extmethods = extmethods , overwrite = overwrite )
364+ pybindJSONDecoder .load_ietf_json (d [key ], None , None , obj = attr_get (),
365+ path_helper = path_helper , extmethods = extmethods ,
366+ overwrite = overwrite )
360367 elif isinstance (d [key ], list ):
361368 for elem in d [key ]:
362369 # if this is a list, then this is a YANG list
@@ -372,13 +379,15 @@ def load_ietf_json(d, parent, yang_base, obj=None, path_helper=None,
372379 nobj = this_attr [k ]
373380 elif " " in this_attr ._keyval :
374381 kwargs = {}
375- for pkv ,ykv in zip (this_attr ._keyval .split (" " ), this_attr ._yang_keys .split (" " )):
382+ for pkv , ykv in zip (this_attr ._keyval .split (" " ),
383+ this_attr ._yang_keys .split (" " )):
376384 kwargs [pkv ] = elem [ykv ]
377385 nobj = this_attr .add (** kwargs )
378- #pybindJSONDecoder.load_ietf_json(elem, None, None, obj=nobj, path_helper=path_helper, extmethods=extmethods, overwrite=overwrite)
379386 else :
380387 nobj = this_attr .add (elem [this_attr ._yang_keys ])
381- pybindJSONDecoder .load_ietf_json (elem , None , None , obj = nobj , path_helper = path_helper , extmethods = extmethods , overwrite = overwrite )
388+ pybindJSONDecoder .load_ietf_json (elem , None , None , obj = nobj ,
389+ path_helper = path_helper , extmethods = extmethods ,
390+ overwrite = overwrite )
382391 pybindJSONDecoder .check_metadata_add (key , d , nobj )
383392 else :
384393 std_method_set = True
@@ -396,11 +405,13 @@ def load_ietf_json(d, parent, yang_base, obj=None, path_helper=None,
396405 else :
397406 set_method = getattr (obj , "_set_%s" % safe_name (ykey ), None )
398407 if set_method is None :
399- raise AttributeError ("Invalid attribute specified in JSON - %s" % (ykey ))
408+ raise AttributeError ("Invalid attribute specified in JSON - %s"
409+ % (ykey ))
400410 set_method (d [key ])
401411 pybindJSONDecoder .check_metadata_add (key , d , get_method ())
402412 return obj
403413
414+
404415class pybindIETFJSONEncoder (pybindJSONEncoder ):
405416 @staticmethod
406417 def generate_element (obj , parent_namespace = None , flt = False ):
@@ -415,18 +426,21 @@ def generate_element(obj, parent_namespace=None, flt=False):
415426 for element_name in obj ._pyangbind_elements :
416427 element = getattr (obj , element_name , None )
417428 yang_name = getattr (element , "yang_name" , None )
418- yname = yang_name () if not yang_name is None else element_name
429+ yname = yang_name () if yang_name is not None else element_name
419430
420431 if not element ._namespace == parent_namespace :
421432 # if the namespace is different, then precede with the module
422433 # name as per spec.
423434 yname = "%s:%s" % (element ._defining_module , yname )
424435
425436 generated_by = getattr (element , "_pybind_generated_by" , None )
426- if generated_by == "container" :
427- d [yname ] = pybindIETFJSONEncoder .generate_element (element , parent_namespace = element ._namespace , flt = flt )
437+ if generated_by == "container" :
438+ d [yname ] = pybindIETFJSONEncoder .generate_element (element ,
439+ parent_namespace = element ._namespace , flt = flt )
428440 elif generated_by == "YANGListType" :
429- d [yname ] = [pybindIETFJSONEncoder .generate_element (i , parent_namespace = element ._namespace , flt = flt ) for i in element ._members .itervalues ()]
441+ d [yname ] = [pybindIETFJSONEncoder .generate_element (i ,
442+ parent_namespace = element ._namespace , flt = flt )
443+ for i in element ._members .itervalues ()]
430444 else :
431445 if flt and element ._changed ():
432446 d [yname ] = element
@@ -435,7 +449,8 @@ def generate_element(obj, parent_namespace=None, flt=False):
435449 return d
436450
437451 def encode (self , obj ):
438- return json .JSONEncoder .encode (self , self ._preprocess_element (obj , mode = "ietf" ))
452+ return json .JSONEncoder .encode (self ,
453+ self ._preprocess_element (obj , mode = "ietf" ))
439454
440455 def default (self , obj , mode = "ietf" ):
441456 return pybindJSONEncoder ().default (obj , mode = "ietf" )
0 commit comments