Coverage for python/lsst/daf/persistence/dataId.py: 22%

19 statements  

« prev     ^ index     » next       coverage.py v7.2.1, created at 2023-03-12 01:29 -0800

1#!/usr/bin/env python 

2 

3# 

4# LSST Data Management System 

5# Copyright 2016 LSST Corporation. 

6# 

7# This product includes software developed by the 

8# LSST Project (http://www.lsst.org/). 

9# 

10# This program is free software: you can redistribute it and/or modify 

11# it under the terms of the GNU General Public License as published by 

12# the Free Software Foundation, either version 3 of the License, or 

13# (at your option) any later version. 

14# 

15# This program is distributed in the hope that it will be useful, 

16# but WITHOUT ANY WARRANTY; without even the implied warranty of 

17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

18# GNU General Public License for more details. 

19# 

20# You should have received a copy of the LSST License Statement and 

21# the GNU General Public License along with this program. If not, 

22# see <http://www.lsstcorp.org/LegalNotices/>. 

23# 

24from collections import UserDict 

25 

26import copy 

27 

28 

29class DataId(UserDict): 

30 """DataId is used to pass scientifically meaningful key-value pairs. It may be tagged as applicable only 

31 to repositories that are tagged with the same value""" 

32 

33 def __init__(self, initialdata=None, tag=None, **kwargs): 

34 """Constructor 

35 

36 Parameters 

37 ----------- 

38 initialdata : dict or dataId 

39 A dict of initial data for the DataId 

40 tag : any type, or a container of any type 

41 A value or container of values used to restrict the DataId to one or more repositories that 

42 share that tag value. It will be stored in a set for comparison with the set of tags assigned to 

43 repositories. 

44 kwargs : any values 

45 key-value pairs to be used as part of the DataId's data. 

46 """ 

47 UserDict.__init__(self, initialdata) 

48 try: 

49 self.tag = copy.deepcopy(initialdata.tag) 

50 except AttributeError: 

51 self.tag = set() 

52 

53 if tag is not None: 

54 if isinstance(tag, str): 

55 self.tag.update([tag]) 

56 else: 

57 try: 

58 self.tag.update(tag) 

59 except TypeError: 

60 self.tag.update([tag]) 

61 

62 self.data.update(kwargs) 

63 

64 def __repr__(self): 

65 return "DataId(initialdata=%s, tag=%s)" % (self.data.__repr__(), self.tag)