Ignore:
Timestamp:
22/02/10 12:12:42 (11 years ago)
Author:
pjkersha
Message:
  • Enabling pickling by adding getstate and setstate methods
  • fixes for correct inheritance from SAMLObject
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/ndg_security_saml/saml/common/__init__.py

    r6547 r6602  
    5252                             elementLocalName,  
    5353                             namespacePrefix) 
    54      
     54             
    5555    @property 
    5656    def qname(self): 
     
    7878        raise NotImplementedError() 
    7979 
     80    def __getstate__(self): 
     81        '''Enable pickling''' 
     82        _dict = {} 
     83        for attrName in SAMLObject.__slots__: 
     84            # Ugly hack to allow for derived classes setting private member 
     85            # variables 
     86            if attrName.startswith('__'): 
     87                attrName = "_SAMLObject" + attrName 
     88                 
     89            try: 
     90                _dict[attrName] = getattr(self, attrName) 
     91            except: 
     92                pass 
     93             
     94        return _dict 
     95   
     96    def __setstate__(self, attrDict): 
     97        '''Enable pickling''' 
     98        for attrName, val in attrDict.items(): 
     99            setattr(self, attrName, val) 
     100             
    80101 
    81 class SAMLVersion(SAMLObject): 
     102class SAMLVersion(object): 
    82103    """Version helper class""" 
    83104     
     
    86107    VERSION_20 = (2, 0) 
    87108    KNOWN_VERSIONS = (VERSION_10, VERSION_11, VERSION_20) 
     109     
     110    __slots__ = ('__version', ) 
    88111     
    89112    def __init__(self, version): 
     
    95118            raise TypeError("Expecting string, tuple or list type for SAML " 
    96119                            "version initialiser; got %r" % version) 
     120             
     121    def __getstate__(self): 
     122        '''Enable pickling''' 
     123        _dict = {} 
     124        for attrName in SAMLVersion.__slots__: 
     125            # Ugly hack to allow for derived classes setting private member 
     126            # variables 
     127            if attrName.startswith('__'): 
     128                attrName = "_SAMLVersion" + attrName 
     129                 
     130            _dict[attrName] = getattr(self, attrName) 
     131             
     132        return _dict 
     133   
     134    def __setstate__(self, attrDict): 
     135        '''Enable pickling''' 
     136        for attrName, val in attrDict.items(): 
     137            setattr(self, attrName, val) 
    97138     
    98139    def __str__(self): 
Note: See TracChangeset for help on using the changeset viewer.