Coverage for python/lsst/meas/transiNet/modelPackages/storageAdapterFactory.py: 47%
13 statements
« prev ^ index » next coverage.py v7.5.0, created at 2024-04-25 10:51 -0700
« prev ^ index » next coverage.py v7.5.0, created at 2024-04-25 10:51 -0700
1from .storageAdapterLocal import StorageAdapterLocal
2from .storageAdapterNeighbor import StorageAdapterNeighbor
3from .storageAdapterButler import StorageAdapterButler
6class StorageAdapterFactory:
7 """A factory for storage adapters, which represent possible storage
8 types/modes for ModelPackages.
10 As of March 2023, the following modes are supported:
11 neighbor
12 A ModelPackage stored inside the ``rbClassifier_data`` Git repository.
13 local
14 A ModelPackage stored inside the ``meas_transiNet`` Git repository.
15 """
17 # A dict mapping storage modes to storage adapter class.
18 #
19 # This is necessary to guarantee that the user does not
20 # specify a too customized storage mode -- to try to prevent
21 # source injection attacks.
22 storageAdapterClasses = {
23 'local': StorageAdapterLocal,
24 'neighbor': StorageAdapterNeighbor,
25 'butler': StorageAdapterButler,
26 }
28 @classmethod
29 def create(cls, modelPackageName, storageMode, **kwargs):
30 """ Factory method to create a storage adapter
31 based on the storageMode parameter.
33 Parameters
34 ----------
35 modelPackageName : `str`
36 The name of the model package.
37 storageMode : `str`
38 The storage mode for the model package.
39 **kwargs
40 Additional keyword arguments to pass to the storage adapter.
42 Returns
43 -------
44 storageAdapter : `StorageAdapterBase`
45 A storage adapter object, based on the storageMode parameter. It is
46 an instance of one of the classes in the
47 storageAdapterFactory.storageAdapterClasses dict.
48 """
49 # Check that the storage mode is valid.
50 # Convert to lower case to make it case insensitive.
51 storageMode = storageMode.lower()
52 if storageMode not in cls.storageAdapterClasses:
53 raise ValueError('Invalid storage mode: ' + storageMode)
55 # Drop any None-valued kwargs.
56 kwargs = {k: v for k, v in kwargs.items() if v is not None}
58 # Create and return the storage adapter.
59 storageAdapter = cls.storageAdapterClasses[storageMode](modelPackageName, **kwargs)
60 return storageAdapter