code: def parse(self, obj=None):
          
          if obj == None:
              return
  
          if not isinstance(obj, dict):
              raise ValueError('invalid obj passed: ' + str(type(obj)))
  
          def _apply(x, kk, ct, v):
              if key not in self._obj:
                  self._obj[kk] = {} if ct == None else []
              with x(self._obj, kk) as ctx:
                  ctx.parse(obj=v)
  
          def _apply_dict(x, kk, ct, v, k):
              if k not in self._obj[kk]:
                  self._obj[kk][k] = {} if ct == ContainerType.dict_ else []
              with x(self._obj[kk], k) as ctx:
                  ctx.parse(obj=v)
  
          def _apply_dict_before_list(kk, ct, v, k):
              self._obj[kk][k] = []
  
          if hasattr(self, '__swagger_child__'):
              # to nested objects
              for key, (ct, ctx_kls) in six.iteritems(self.__swagger_child__):
                  items = obj.get(key, None)
  
                  # create an empty child, even it's None in input.
                  # this makes other logic easier.
                  if ct == ContainerType.list_:
                      self._obj[key] = []
                  elif ct:
                      self._obj[key] = {}
  
                  if items == None:
                      continue
  
                  container_apply(ct, items,
                      functools.partial(_apply, ctx_kls, key),
                      functools.partial(_apply_dict, ctx_kls, key),
                      functools.partial(_apply_dict_before_list, key)
                  )
  
          # update _obj with obj
          if self._obj != None:
              for key in (set(obj.keys()) - set(self._obj.keys())):
                  self._obj[key] = obj[key]
          else:
              self._obj = obj
docs: major part do parsing.
  
          :param dict obj: json object to be parsed.
          :raises ValueError: if obj is not a dict type.