ATLAS Offline Software
Loading...
Searching...
No Matches
folders.py
Go to the documentation of this file.
1# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
2
3from logging import getLogger; log = getLogger("DQDefects.folders")
4
5from DQUtils import Databases
6
7from DQDefects import (DEFECTS_FOLDER, DEFECT_FOLDER_DESC, DEFECT_LOGIC_FOLDER,
8 DEFECT_LOGIC_FOLDER_DESC, PARENT_FOLDERSET)
9
10from PyCool import cool
11
12from typing import Tuple
13
14ST = cool.StorageType
15FV = cool.FolderVersioning
16
18 """
19 This mixin contains code for managing the defect folders
20 """
21
22 def __init__(self) -> None:
23 self._defects_folder = 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)
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,
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)
cool.IFolder defect_logic_folder(self)
Definition folders.py:100
cool.IFolder _create_defect_logic_folder(self, cool.IDatabase db)
Definition folders.py:115
cool.IFolder _create_defects_folder(self, cool.IDatabase db)
Definition folders.py:82
Tuple[cool.IFolder, cool.Record] _load_folder(self, folder, create_function)
Definition folders.py:46
cool.IFolderSet parent_folderset(self)
Definition folders.py:36
cool.IFolder defects_folder(self)
Definition folders.py:67