Coverage for python/lsst/meas/transiNet/modelPackages/storageAdapterFactory.py: 47%

13 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-01-06 13:00 +0000

1from .storageAdapterLocal import StorageAdapterLocal 

2from .storageAdapterNeighbor import StorageAdapterNeighbor 

3from .storageAdapterButler import StorageAdapterButler 

4 

5 

6class StorageAdapterFactory: 

7 """A factory for storage adapters, which represent possible storage 

8 types/modes for ModelPackages. 

9 

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 """ 

16 

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 } 

27 

28 @classmethod 

29 def create(cls, modelPackageName, storageMode, **kwargs): 

30 """ Factory method to create a storage adapter 

31 based on the storageMode parameter. 

32 

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. 

41 

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) 

54 

55 # Drop any None-valued kwargs. 

56 kwargs = {k: v for k, v in kwargs.items() if v is not None} 

57 

58 # Create and return the storage adapter. 

59 storageAdapter = cls.storageAdapterClasses[storageMode](modelPackageName, **kwargs) 

60 return storageAdapter