mirror of
https://github.com/djohnlewis/stackdump
synced 2025-01-23 15:11:36 +00:00
63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
__all__ = ['HashCol']
|
|
|
|
import sqlobject.col
|
|
|
|
class DbHash:
|
|
""" Presents a comparison object for hashes, allowing plain text to be
|
|
automagically compared with the base content. """
|
|
|
|
def __init__( self, hash, hashMethod ):
|
|
self.hash = hash
|
|
self.hashMethod = hashMethod
|
|
|
|
def __cmp__( self, other ):
|
|
if other is None:
|
|
if self.hash is None:
|
|
return 0
|
|
return True
|
|
if not isinstance( other, basestring ):
|
|
raise TypeError( "A hash may only be compared with a string, or None." )
|
|
return cmp( self.hashMethod( other ), self.hash )
|
|
|
|
def __repr__( self ):
|
|
return "<DbHash>"
|
|
|
|
class HashValidator( sqlobject.col.StringValidator ):
|
|
""" Provides formal SQLObject validation services for the HashCol. """
|
|
|
|
def to_python( self, value, state ):
|
|
""" Passes out a hash object. """
|
|
if value is None:
|
|
return None
|
|
return DbHash( hash = value, hashMethod = self.hashMethod )
|
|
|
|
def from_python( self, value, state ):
|
|
""" Store the given value as a MD5 hash, or None if specified. """
|
|
if value is None:
|
|
return None
|
|
return self.hashMethod( value )
|
|
|
|
class SOHashCol( sqlobject.col.SOStringCol ):
|
|
""" The internal HashCol definition. By default, enforces a md5 digest. """
|
|
|
|
def __init__( self, **kw ):
|
|
if 'hashMethod' not in kw:
|
|
from md5 import md5
|
|
self.hashMethod = lambda v: md5( v ).hexdigest()
|
|
if 'length' not in kw:
|
|
kw['length'] = 32
|
|
else:
|
|
self.hashMethod = kw['hashMethod']
|
|
del kw['hashMethod']
|
|
super( sqlobject.col.SOStringCol, self ).__init__( **kw )
|
|
|
|
def createValidators( self ):
|
|
return [HashValidator( name=self.name, hashMethod=self.hashMethod )] + \
|
|
super( SOHashCol, self ).createValidators()
|
|
|
|
class HashCol( sqlobject.col.StringCol ):
|
|
""" End-user HashCol class. May be instantiated with 'hashMethod', a function
|
|
which returns the string hash of any other string (i.e. basestring). """
|
|
|
|
baseClass = SOHashCol
|