home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / msn / SOAP / pysoap_util.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  5.0 KB  |  147 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import uuid
  5. import simplejson as json
  6. import logging
  7. import util
  8. log = logging.getLogger('msn.storage')
  9. import msn.SOAP.services as SOAPServices
  10.  
  11. def extract_zsi_properties(zsiobj):
  12.     return dict((lambda .0: for k, v in .0:
  13. (k[1:], v))(vars(zsiobj).items()))
  14.  
  15.  
  16. class Serializer(json.JSONEncoder):
  17.     
  18.     def default(self, o):
  19.         if isinstance(o, Serializable):
  20.             d = vars(o).copy()
  21.             for k in d.keys():
  22.                 if k in getattr(o, 'nonserialize_attributes', []) or k in ('nonserialize_attributes', 'serialize_attributes'):
  23.                     d.pop(k)
  24.                     continue
  25.             
  26.             sentinel = object()
  27.             for k in getattr(o, 'serialize_attributes', []):
  28.                 if k not in d:
  29.                     v = getattr(o, k, sentinel)
  30.                     if v is not sentinel:
  31.                         d[k] = v
  32.                     
  33.                 v is not sentinel
  34.             
  35.             return d
  36.         if isinstance(o, set):
  37.             o = list(o)
  38.         
  39.         
  40.         try:
  41.             return json.JSONEncoder.default(self, o)
  42.         except Exception:
  43.             log.error('error json encoding %r', o)
  44.  
  45.         return { }
  46.  
  47.  
  48.  
  49. class Serializable(object):
  50.     
  51.     def __init__(self, **k):
  52.         if not hasattr(self, 'nonserialize_attributes'):
  53.             self.nonserialize_attributes = []
  54.         
  55.         if not hasattr(self, 'serialize_attributes'):
  56.             self.serialize_attributes = []
  57.         
  58.         util.autoassign(self, k)
  59.         selfvars = vars(self)
  60.         typevars = vars(type(self))
  61.         for k in typevars:
  62.             if k in selfvars and selfvars.get(k, None) == typevars.get(k, None):
  63.                 setattr(self, k, None)
  64.                 continue
  65.         
  66.  
  67.     
  68.     def serialize(self):
  69.         return json.dumps(self, cls = Serializer)
  70.  
  71.     
  72.     def deserialize(cls, s):
  73.         if isinstance(s, basestring):
  74.             loaded = json.loads(s)
  75.         else:
  76.             loaded = s
  77.         self = cls()
  78.         for k, v in loaded.items():
  79.             valtype = vars(cls).get(k, None)
  80.             if valtype is not None:
  81.                 v = deserialize_item(valtype, v)
  82.             
  83.             setattr(self, k, v)
  84.         
  85.         return self
  86.  
  87.     deserialize = classmethod(deserialize)
  88.     
  89.     def __repr__(self):
  90.         return '<%s %s>' % (type(self).__name__, ' '.join((lambda .0: for k, v in .0:
  91. '%s=%r' % (k, v))(vars(self).items())))
  92.  
  93.     
  94.     def from_zsi(cls, obj, **kwds):
  95.         if obj is None:
  96.             if kwds:
  97.                 return cls(**kwds)
  98.             return None
  99.         attrs = extract_zsi_properties(obj)
  100.         attrs.update(kwds)
  101.         return cls(**attrs)
  102.  
  103.     from_zsi = classmethod(from_zsi)
  104.  
  105.  
  106. def deserialize_item(valtype, v):
  107.     if v is None:
  108.         return None
  109.     if type(v) in (bool, int, basestring):
  110.         return v
  111.     if type(valtype) is type and issubclass(valtype, Serializable):
  112.         return valtype.deserialize(v)
  113.     if type(valtype) is list:
  114.         if len(valtype) == 1:
  115.             return [ deserialize_item(valtype[0], x) for x in v ]
  116.     elif type(valtype) is dict:
  117.         if len(valtype) == 1:
  118.             return (issubclass(valtype, Serializable), dict)((lambda .0: for k in .0:
  119. (k, deserialize_item(valtype[''], v[k])))(v))
  120.     
  121.     return v
  122.  
  123.  
  124. class DateAttr(object):
  125.     
  126.     def __init__(self, attrname):
  127.         self.attrname = attrname
  128.  
  129.     
  130.     def __get__(self, obj, objtype = None):
  131.         return getattr(obj, '_' + self.attrname, 0)
  132.  
  133.     
  134.     def __set__(self, obj, val):
  135.         if self.attrname not in obj.serialize_attributes:
  136.             obj.serialize_attributes.append(self.attrname)
  137.         
  138.         if '_' + self.attrname not in obj.nonserialize_attributes:
  139.             obj.nonserialize_attributes.append('_' + self.attrname)
  140.         
  141.         if isinstance(val, basestring):
  142.             val = SOAPServices.strptime_highres(val)
  143.         
  144.         setattr(obj, '_' + self.attrname, val)
  145.  
  146.  
  147.