ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
DataQuality
DQDefects
python
folders.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
2
3
from
logging
import
getLogger; log = getLogger(
"DQDefects.folders"
)
4
5
from
DQUtils
import
Databases
6
7
from
DQDefects
import
(DEFECTS_FOLDER, DEFECT_FOLDER_DESC, DEFECT_LOGIC_FOLDER,
8
DEFECT_LOGIC_FOLDER_DESC, PARENT_FOLDERSET)
9
10
from
PyCool
import
cool
11
12
from
typing
import
Tuple
13
14
ST = cool.StorageType
15
FV = cool.FolderVersioning
16
17
class
DefectsDBFoldersMixin
(object):
18
"""
19
This mixin contains code for managing the defect folders
20
"""
21
22
def
__init__
(self) -> None:
23
self.
_defects_folder
=
None
24
self.
_defect_logic_folder
=
None
25
self.
_parent_folderset
=
None
26
self.
_connections
= []
27
super(DefectsDBFoldersMixin, self).
__init__
()
28
29
def
_clear_connections
(self) -> None:
30
log.debug(
"DefectsDB connections cleared"
)
31
for
connection
in
self.
_connections
:
32
connection.closeDatabase()
33
self.
_connections
= []
34
35
@property
36
def
parent_folderset
(self) -> cool.IFolderSet:
37
"""
38
Lazy-loads parent folderset (useful for heirarchical tag manipulation)
39
"""
40
if
self.
_parent_folderset
is
None
:
41
db = Databases.get_instance(self.connection_string,
42
read_only=self._read_only)
43
self.
_parent_folderset
= db.getFolderSet(PARENT_FOLDERSET)
44
return
self.
_parent_folderset
45
46
def
_load_folder
(self, folder, create_function) -> Tuple[cool.IFolder, cool.Record]:
47
"""
48
Internal function used to load a COOL folder
49
"""
50
db_folder_string =
"%s::%s"
% (self.connection_string, folder)
51
52
if
not
self.
_create
:
53
create_function =
None
54
55
db, folder = Databases.get_folder(db_folder_string,
56
read_only=self._read_only,
57
create_function=create_function,
58
also_db=
True
)
59
60
self.
_connections
.append(db)
61
62
payload = cool.Record(folder.payloadSpecification())
63
64
return
folder, payload
65
66
@property
67
def
defects_folder
(self) -> cool.IFolder:
68
"""
69
Returns the folder containing the defects, loading it if necessary
70
"""
71
if
self.
_defects_folder
is
None
: self.
_load_defects_folder
()
72
return
self.
_defects_folder
73
74
def
_load_defects_folder
(self) -> None:
75
"""
76
Internal function for populating the self._defects_folder variable
77
"""
78
log.debug(
"Loading defects folder"
)
79
res = self.
_load_folder
(DEFECTS_FOLDER, self.
_create_defects_folder
)
80
self.
_defects_folder
, self.
_defect_payload
= res
81
82
def
_create_defects_folder
(self, db: cool.IDatabase) -> cool.IFolder:
83
"""
84
Creates the COOL database/folder for defects, if they don't exist.
85
Internal - use create=True in the constructor to create the COOL folder.
86
"""
87
log.info(
"Creating defects folder"
)
88
89
record_spec = cool.RecordSpecification()
90
record_spec.extend(
"present"
, ST.Bool)
91
record_spec.extend(
"recoverable"
, ST.Bool)
92
record_spec.extend(
"user"
, ST.String255)
93
record_spec.extend(
"comment"
, ST.String255)
94
95
folder_spec = cool.FolderSpecification(FV.MULTI_VERSION, record_spec)
96
return
db.createFolder(DEFECTS_FOLDER, folder_spec,
97
DEFECT_FOLDER_DESC,
True
)
98
99
@property
100
def
defect_logic_folder
(self) -> cool.IFolder:
101
"""
102
Returns the folder containing the virtual defect logic, loading it if necessary
103
"""
104
if
self.
_defect_logic_folder
is
None
: self.
_load_defect_logic_folder
()
105
return
self.
_defect_logic_folder
106
107
def
_load_defect_logic_folder
(self) -> None:
108
"""
109
Internal function for populating the self._defect_logic_folder variable
110
"""
111
res = self.
_load_folder
(DEFECT_LOGIC_FOLDER,
112
self.
_create_defect_logic_folder
)
113
self.
_defect_logic_folder
, self.
_defect_logic_payload
= res
114
115
def
_create_defect_logic_folder
(self, db: cool.IDatabase) -> cool.IFolder:
116
"""
117
Creates the COOL database/folder for virtual defect logic, if they don't exist.
118
Internal - use create=True in the constructor to create the COOL folder.
119
"""
120
log.info(
"Creating defect logic folder"
)
121
122
record_spec = cool.RecordSpecification()
123
record_spec.extend(
"clauses"
, ST.String4k)
124
125
folder_spec = cool.FolderSpecification(FV.MULTI_VERSION, record_spec)
126
return
db.createFolder(DEFECT_LOGIC_FOLDER, folder_spec,
127
DEFECT_LOGIC_FOLDER_DESC,
True
)
python.folders.DefectsDBFoldersMixin
Definition
folders.py:17
python.folders.DefectsDBFoldersMixin._clear_connections
None _clear_connections(self)
Definition
folders.py:29
python.folders.DefectsDBFoldersMixin._defect_payload
_defect_payload
Definition
folders.py:80
python.folders.DefectsDBFoldersMixin._defect_logic_folder
_defect_logic_folder
Definition
folders.py:24
python.folders.DefectsDBFoldersMixin.__init__
None __init__(self)
Definition
folders.py:22
python.folders.DefectsDBFoldersMixin.defect_logic_folder
cool.IFolder defect_logic_folder(self)
Definition
folders.py:100
python.folders.DefectsDBFoldersMixin._parent_folderset
_parent_folderset
Definition
folders.py:25
python.folders.DefectsDBFoldersMixin._create_defect_logic_folder
cool.IFolder _create_defect_logic_folder(self, cool.IDatabase db)
Definition
folders.py:115
python.folders.DefectsDBFoldersMixin._load_defect_logic_folder
None _load_defect_logic_folder(self)
Definition
folders.py:107
python.folders.DefectsDBFoldersMixin._create
_create
Definition
folders.py:52
python.folders.DefectsDBFoldersMixin._create_defects_folder
cool.IFolder _create_defects_folder(self, cool.IDatabase db)
Definition
folders.py:82
python.folders.DefectsDBFoldersMixin._load_folder
Tuple[cool.IFolder, cool.Record] _load_folder(self, folder, create_function)
Definition
folders.py:46
python.folders.DefectsDBFoldersMixin._connections
list _connections
Definition
folders.py:26
python.folders.DefectsDBFoldersMixin.parent_folderset
cool.IFolderSet parent_folderset(self)
Definition
folders.py:36
python.folders.DefectsDBFoldersMixin._load_defects_folder
None _load_defects_folder(self)
Definition
folders.py:74
python.folders.DefectsDBFoldersMixin.defects_folder
cool.IFolder defects_folder(self)
Definition
folders.py:67
python.folders.DefectsDBFoldersMixin._defect_logic_payload
_defect_logic_payload
Definition
folders.py:113
python.folders.DefectsDBFoldersMixin._defects_folder
_defects_folder
Definition
folders.py:23
Generated on
for ATLAS Offline Software by
1.17.0