diff --git a/xbob/db/replay/query.py b/xbob/db/replay/query.py index ceadfc2c87d3d3399f6fa9e4263494ae774ddad4..30e39a6c1b83cf267f4c4bd4c669bddb26cc0b6a 100644 --- a/xbob/db/replay/query.py +++ b/xbob/db/replay/query.py @@ -136,19 +136,19 @@ class Database(object): # real-accesses are simpler to query if 'enroll' in cls: - q = self.session.query(RealAccess).join(File).join(Client).filter(Client.set.in_(groups)).filter(RealAccess.purpose=='enroll').filter(File.light.in_(light)).order_by(Client.id) + q = self.session.query(RealAccess).with_lockmode('read').join(File).join(Client).filter(Client.set.in_(groups)).filter(RealAccess.purpose=='enroll').filter(File.light.in_(light)).order_by(Client.id) for key, value in [(k.file.id, k.file.path) for k in q]: retval[key] = make_path(str(value), directory, extension) # real-accesses are simpler to query if 'real' in cls: - q = self.session.query(RealAccess).join(File).join(Client).filter(RealAccess.protocols.contains(protocol)).filter(Client.set.in_(groups)).filter(File.light.in_(light)).order_by(Client.id) + q = self.session.query(RealAccess).with_lockmode('read').join(File).join(Client).filter(RealAccess.protocols.contains(protocol)).filter(Client.set.in_(groups)).filter(File.light.in_(light)).order_by(Client.id) for key, value in [(k.file.id, k.file.path) for k in q]: retval[key] = make_path(str(value), directory, extension) # attacks will have to be filtered a little bit more if 'attack' in cls: - q = self.session.query(Attack).join(File).join(Client).filter(Attack.protocols.contains(protocol)).filter(Client.set.in_(groups)).filter(Attack.attack_support.in_(support)).filter(File.light.in_(light)).order_by(Client.id) + q = self.session.query(Attack).with_lockmode('read').join(File).join(Client).filter(Attack.protocols.contains(protocol)).filter(Client.set.in_(groups)).filter(Attack.attack_support.in_(support)).filter(File.light.in_(light)).order_by(Client.id) for key, value in [(k.file.id, k.file.path) for k in q]: retval[key] = make_path(str(value), directory, extension) @@ -161,7 +161,7 @@ class Database(object): if not self.is_valid(): raise RuntimeError, "Database '%s' cannot be found at expected location '%s'. Create it and then try re-connecting using Database.connect()" % (INFO.name(), SQLITE_FILE) - return tuple([k.name for k in self.session.query(Protocol)]) + return tuple([k.name for k in self.session.query(Protocol).with_lockmode('read')]) def has_protocol(self, name): """Tells if a certain protocol is available""" @@ -169,7 +169,7 @@ class Database(object): if not self.is_valid(): raise RuntimeError, "Database '%s' cannot be found at expected location '%s'. Create it and then try re-connecting using Database.connect()" % (INFO.name(), SQLITE_FILE) - return self.session.query(Protocol).filter(Protocol.name==name).count() != 0 + return self.session.query(Protocol).with_lockmode('read').filter(Protocol.name==name).count() != 0 def protocol(self, name): """Returns the protocol object in the database given a certain name. Raises @@ -178,7 +178,7 @@ class Database(object): if not self.is_valid(): raise RuntimeError, "Database '%s' cannot be found at expected location '%s'. Create it and then try re-connecting using Database.connect()" % (INFO.name(), SQLITE_FILE) - return self.session.query(Protocol).filter(Protocol.name==name).one() + return self.session.query(Protocol).with_lockmode('read').filter(Protocol.name==name).one() def groups(self): """Returns the names of all registered groups""" @@ -228,7 +228,7 @@ class Database(object): if not self.is_valid(): raise RuntimeError, "Database '%s' cannot be found at expected location '%s'. Create it and then try re-connecting using Database.connect()" % (INFO.name(), SQLITE_FILE) - fobj = self.session.query(File).filter(File.id.in_(ids)) + fobj = self.session.query(File).with_lockmode('read').filter(File.id.in_(ids)) retval = [] for p in ids: retval.extend([os.path.join(prefix, str(k.path) + suffix) @@ -250,7 +250,7 @@ class Database(object): if not self.is_valid(): raise RuntimeError, "Database '%s' cannot be found at expected location '%s'. Create it and then try re-connecting using Database.connect()" % (INFO.name(), SQLITE_FILE) - fobj = self.session.query(File).filter(File.path.in_(paths)) + fobj = self.session.query(File).with_lockmode('read').filter(File.path.in_(paths)) retval = [] for p in paths: retval.extend([k.id for k in fobj if k.path == p]) @@ -284,7 +284,7 @@ class Database(object): from bob.io import save - fobj = self.session.query(File).filter_by(id=id).one() + fobj = self.session.query(File).with_lockmode('read').filter_by(id=id).one() fullpath = os.path.join(directory, str(fobj.path) + extension) fulldir = os.path.dirname(fullpath) utils.makedirs_safe(fulldir)