def useNonce(self, server_url, timestamp, salt):
        if abs(timestamp - time.time()) > nonce.SKEW:
            return False

        server_url_hash = hashlib.sha256(server_url).hexdigest()
        rowkey = "%s_%s_%s" % (server_url_hash, str(timestamp), str(salt))
        
        #Let's check if this nonce exists
        try:
            assoc_rec = cass.getRecord(self._nonce_cf, rowkey)
        except cass.NotFoundError:
            columns = {'server_url': server_url,
                       'timestamp': timestamp,
                       'salt': salt}
            #Not found so try and insert
            try:
                cass.insertRecord(self._nonce_cf, rowkey, columns)
                #Inserted successfully, nonce is valid
                return True
            except cass.DatabaseError:
                raise
        except cass.DatabaseError:
            raise
        else:
            #Nonce already existed so nonce is invalid
            return False
    def getAssociation(self, server_url, handle=None):
        if handle is None:
            return None

        server_url_hash = hashlib.sha256(server_url).hexdigest()
        handle_hash = hashlib.sha256(handle).hexdigest()
        rowkey = "%s_%s" % (server_url_hash, handle_hash)
        
        try:
            assoc_rec = cass.getRecord(self._cf, rowkey)
        except cass.NotFoundError:
            return None
        except cass.DatabaseError:
            raise
        
        server_url = assoc_rec['server_url']
        handle = assoc_rec['handle']
        secret = assoc_rec['secret']
        issued = assoc_rec['issued']
        lifetime = assoc_rec['lifetime']
        assoc_type = assoc_rec['assoc_type']
        
        association = Association(handle, secret, issued, lifetime, assoc_type)
        
        if association.getExpiresIn() == 0:
            return None
        
        return association
 def exists(self, session_key):
     try:
         session_rec = cass.getRecord(self._cf, session_key)
         return True
     except cass.NotFoundError:
         return False
     except cass.DatabaseError:
         raise
 def load(self):
     try:
         session_rec = cass.getRecord(self._cf, self.session_key)
         return self.decode(session_rec["serialized"])
     except cass.NotFoundError:
         self.create()
         return {}
     except cass.DatabaseError:
         raise