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