diff --git a/bob/bio/base/database/utils.py b/bob/bio/base/database/utils.py index 8fa550111d479e18cdc6b08d4962538da0835b2f..f88e7f6244f0d3e4cbbbc1c2274c66dd22a0159a 100644 --- a/bob/bio/base/database/utils.py +++ b/bob/bio/base/database/utils.py @@ -40,36 +40,30 @@ class FileSet: Use this class, whenever the database provides several files that belong to the same probe. - Each file set has an id, an associated client (aka. identity, person, user), and a list of associated files. - Usually, these files are part of a database, which has a common directory for all files. - The paths of this file set are usually *relative* to that common directory, and they are usually stored *without* filename extension. - The file id can be anything hashable, but needs to be unique all over the database. - The client id can be anything hashable, but needs to be identical for different files of the same client, and different between clients. + Each file set has an id, and a list of associated files, which are of type :py:class:`File` of the same client. + The file set id can be anything hashable, but needs to be unique all over the database. **Parameters:** - file_id : str or int - A unique ID that identifies the file. - This ID might be identical to the ``path``, though integral IDs perform faster. - - client_id : str or int - A unique ID that identifies the client (user) to which this file belongs. - This ID might be the name of the person, though integral IDs perform faster. + file_set_id : str or int + A unique ID that identifies the file set. - path : str - The file path of the file, which is relative to the common database directory, and without filename extension. + files : [:py:class:`File`] + A list of File objects that should be stored inside this file. + All files of that list need to have the same client ID. """ - def __init__(self, file_set_id, client_id, file_set_name): + def __init__(self, file_set_id, files, path=None): # The **unique** id of the file set self.id = file_set_id # The id of the client that is attached to the file - self.client_id = client_id - # A name of the file set - self.path = file_set_name + assert len(files) + self.client_id = files[0].client_id + assert all(f.client_id == self.client_id for f in files) # The list of files contained in this set - self.files = [] + self.files = files def __lt__(self, other): + """Defines an order between file sets by using the order of the file set ids.""" # compare two File set objects by comparing their IDs return self.id < other.id diff --git a/bob/bio/base/test/dummy/fileset.py b/bob/bio/base/test/dummy/fileset.py index a3f7ab6b7d4d28181ca1e051642a4e9dcb8538b7..de299f25ca7c9fce92558acd368939737f9e9f22 100644 --- a/bob/bio/base/test/dummy/fileset.py +++ b/bob/bio/base/test/dummy/fileset.py @@ -1,7 +1,7 @@ import bob.db.atnt import os -from bob.bio.base.database import DatabaseBob, DatabaseBobZT, FileSet +from bob.bio.base.database import DatabaseBob, DatabaseBobZT, File, FileSet from bob.bio.base.test.utils import atnt_database_directory class FileSetDatabase (DatabaseBobZT): @@ -28,9 +28,10 @@ class FileSetDatabase (DatabaseBobZT): # arrange files by clients file_sets = [] for client_files in files: + # convert into our File objects (so that they are tested as well) + our_files = [File(f.id, f.client_id, f.path) for f in client_files] # generate file set for each client - file_set = FileSet(client_files[0].client_id, client_files[0].client_id, client_files[0].path) - file_set.files = client_files + file_set = FileSet(our_files[0].client_id, our_files) file_sets.append(file_set) return file_sets