Merge pull request #392 from apa-1/master
Fix for session unique_key query
This commit is contained in:
@@ -111,7 +111,7 @@ class MockTable(object):
|
|||||||
self.session_expiry = session_expiry
|
self.session_expiry = session_expiry
|
||||||
self.with_lock = with_lock
|
self.with_lock = with_lock
|
||||||
|
|
||||||
def __call__(self, record_id):
|
def __call__(self, record_id, unique_key=None):
|
||||||
# Support DAL shortcut query: table(record_id)
|
# Support DAL shortcut query: table(record_id)
|
||||||
|
|
||||||
q = self.id # This will call the __getattr__ below
|
q = self.id # This will call the __getattr__ below
|
||||||
@@ -120,6 +120,7 @@ class MockTable(object):
|
|||||||
# Instructs MockQuery, to behave as db(table.id == record_id)
|
# Instructs MockQuery, to behave as db(table.id == record_id)
|
||||||
q.op = 'eq'
|
q.op = 'eq'
|
||||||
q.value = record_id
|
q.value = record_id
|
||||||
|
q.unique_key = unique_key
|
||||||
|
|
||||||
row = q.select()
|
row = q.select()
|
||||||
return row[0] if row else Storage()
|
return row[0] if row else Storage()
|
||||||
@@ -129,7 +130,7 @@ class MockTable(object):
|
|||||||
#return a fake query. We need to query it just by id for normal operations
|
#return a fake query. We need to query it just by id for normal operations
|
||||||
self.query = MockQuery(field='id', db=self.r_server,
|
self.query = MockQuery(field='id', db=self.r_server,
|
||||||
prefix=self.keyprefix, session_expiry=self.session_expiry,
|
prefix=self.keyprefix, session_expiry=self.session_expiry,
|
||||||
with_lock=self.with_lock)
|
with_lock=self.with_lock, unique_key=self.unique_key)
|
||||||
return self.query
|
return self.query
|
||||||
elif key == '_db':
|
elif key == '_db':
|
||||||
#needed because of the calls in sessions2trash.py and globals.py
|
#needed because of the calls in sessions2trash.py and globals.py
|
||||||
@@ -162,7 +163,7 @@ class MockQuery(object):
|
|||||||
and listing all keys. No other operation is supported
|
and listing all keys. No other operation is supported
|
||||||
"""
|
"""
|
||||||
def __init__(self, field=None, db=None, prefix=None, session_expiry=False,
|
def __init__(self, field=None, db=None, prefix=None, session_expiry=False,
|
||||||
with_lock=False):
|
with_lock=False, unique_key=None):
|
||||||
self.field = field
|
self.field = field
|
||||||
self.value = None
|
self.value = None
|
||||||
self.db = db
|
self.db = db
|
||||||
@@ -170,6 +171,7 @@ class MockQuery(object):
|
|||||||
self.op = None
|
self.op = None
|
||||||
self.session_expiry = session_expiry
|
self.session_expiry = session_expiry
|
||||||
self.with_lock = with_lock
|
self.with_lock = with_lock
|
||||||
|
self.unique_key = unique_key
|
||||||
|
|
||||||
def __eq__(self, value, op='eq'):
|
def __eq__(self, value, op='eq'):
|
||||||
self.value = value
|
self.value = value
|
||||||
@@ -187,7 +189,12 @@ class MockQuery(object):
|
|||||||
acquire_lock(self.db, key + ':lock', self.value)
|
acquire_lock(self.db, key + ':lock', self.value)
|
||||||
rtn = self.db.hgetall(key)
|
rtn = self.db.hgetall(key)
|
||||||
if rtn:
|
if rtn:
|
||||||
rtn['update_record'] = self.update # update record support
|
if self.unique_key:
|
||||||
|
#make sure the id and unique_key are correct
|
||||||
|
if rtn['unique_key'] == self.unique_key:
|
||||||
|
rtn['update_record'] = self.update # update record support
|
||||||
|
else:
|
||||||
|
rtn = None
|
||||||
return [Storage(rtn)] if rtn else []
|
return [Storage(rtn)] if rtn else []
|
||||||
elif self.op == 'ge' and self.field == 'id' and self.value == 0:
|
elif self.op == 'ge' and self.field == 'id' and self.value == 0:
|
||||||
#means that someone wants the complete list
|
#means that someone wants the complete list
|
||||||
|
|||||||
Reference in New Issue
Block a user