DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
consolidate Namespace Reference

Functions

list[str] get_all_includes (conffwk.Configuration db, str file)
None consolidate_db (str oksfile, str output_file, Optional[str] session_id=None)
Tuple[conffwk.Configuration, conffwk.Configurationcreate_copy_template (str oksfile, str output_file)
None consolidate_full (conffwk.Configuration db, conffwk.Configuration new_db)
None consolidate_session (conffwk.Configuration db, conffwk.Configuration new_db, str session_id)
list[conffwk.Configurationget_relationships (conffwk.Configuration db, conffwk.Configuration current_dal, list[conffwk.Configuration] dal_list)
None copy_dals_to_cfg (conffwk.Configuration new_db, list[conffwk.Configuration] dal_list)
list[conffwk.Configurationcopy_configuration (Path dest_dir, list[conffwk.Configuration] input_files)
None consolidate_files (str oksfile, *input_files)

Variables

 log = getLogger('daqconf.consolidate')

Function Documentation

◆ consolidate_db()

None consolidate_db ( str oksfile,
str output_file,
Optional[str] session_id = None )
Consolidates a session database files into a single file.

The consolidated file contains all the schema and data required to define the entire
session. If session_id is None, all sessions will be consolidated into the single
output file.

Args:
    oksfile: OKS file(s) to consolidate
    output_file: File to output consolidated database to 
    session_id: Name of session, defaults to None

Returns:
    None

Raises:
    None

Definition at line 32 of file consolidate.py.

34) -> None:
35 """
36 Consolidates a session database files into a single file.
37
38 The consolidated file contains all the schema and data required to define the entire
39 session. If session_id is None, all sessions will be consolidated into the single
40 output file.
41
42 Args:
43 oksfile: OKS file(s) to consolidate
44 output_file: File to output consolidated database to
45 session_id: Name of session, defaults to None
46
47 Returns:
48 None
49
50 Raises:
51 None
52 """
53 log.info(f"Consolidating database into output database '{output_file}'. Input database: '{oksfile}'.")
54
55 sys.setrecursionlimit(10000) # for example
56 db, new_db = create_copy_template(oksfile, output_file)
57
58 if session_id is None:
59 log.debug("Consolidating all dals in %s into %s", oksfile, output_file)
60 consolidate_full(db, new_db)
61 else:
62 log.debug("Consolidating all dals in session %s from %s into %s", session_id, oksfile, output_file)
63
64 consolidate_session(db, new_db, session_id)
65
66

◆ consolidate_files()

None consolidate_files ( str oksfile,
* input_files )

Definition at line 190 of file consolidate.py.

190def consolidate_files(oksfile: str, *input_files) -> None:
191 includes = []
192 dbs = []
193 str_in_files = '\n'.join(input_files)
194 log.info(f"Consolidating {len(input_files)} databases into output database \'{oksfile}\'. Input databases: {str_in_files}")
195 sys.setrecursionlimit(10000) # for example
196
197 for input_file in input_files:
198 dbs.append(conffwk.Configuration("oksconflibs:" + input_file))
199 includes += get_all_includes(dbs[len(dbs) - 1], None)
200
201 includes = list(set(includes))
202 includes = [i for i in includes if i not in input_files]
203 log.debug(f"Included files: {includes}")
204
205 new_db = conffwk.Configuration("oksconflibs")
206 new_db.create_db(oksfile, includes)
207
208 new_db.commit()
209
210 for db in dbs:
211 log.debug(f"Reading dal objects from old db {db}")
212 dals = db.get_all_dals()
213
214 log.debug(f"Copying objects to new db {new_db}")
215 for dal in dals:
216
217 try:
218 new_db.get_dal(dals[dal].className(), dals[dal].id)
219 except:
220 new_db.add_dal(dals[dal])
221 new_db.commit()
222
223 log.debug(f"Saving database {new_db}")
224 new_db.commit()

◆ consolidate_full()

None consolidate_full ( conffwk.Configuration db,
conffwk.Configuration new_db )
Consolidates ALL dal objects in db into new_db

:param db: A conffwk.Configuration containing objects you want to copy over
:param new_db: A conffwk.Configuration you want to copy objects into

Definition at line 94 of file consolidate.py.

94def consolidate_full(db: conffwk.Configuration, new_db: conffwk.Configuration)->None:
95 """Consolidates ALL dal objects in db into new_db
96
97 :param db: A conffwk.Configuration containing objects you want to copy over
98 :param new_db: A conffwk.Configuration you want to copy objects into
99 """
100 dal_list = list(db.get_all_dals().values())
101 copy_dals_to_cfg(new_db, dal_list)
102

◆ consolidate_session()

None consolidate_session ( conffwk.Configuration db,
conffwk.Configuration new_db,
str session_id )
Consolidates all objects related to the session with id 'session_id' into a single file

:param db: A conffwk.Configuration containing objects you want to copy over
:param new_db: A conffwk.Configuration you want to copy objects into
:param session_id: Name of session

Definition at line 103 of file consolidate.py.

103def consolidate_session(db: conffwk.Configuration, new_db: conffwk.Configuration, session_id: str)->None:
104 """
105 Consolidates all objects related to the session with id 'session_id' into a single file
106
107 :param db: A conffwk.Configuration containing objects you want to copy over
108 :param new_db: A conffwk.Configuration you want to copy objects into
109 :param session_id: Name of session
110 """
111
112 # Check session exists and load
113 try:
114 dal_session = db.get_dal('Session', session_id)
115 except Exception as e:
116 log.exception(e)
117 raise e
118
119 dal_list = get_relationships(db, dal_session, [])
120 copy_dals_to_cfg(new_db, dal_list)
121

◆ copy_configuration()

list[conffwk.Configuration] copy_configuration ( Path dest_dir,
list[conffwk.Configuration] input_files )

Definition at line 154 of file consolidate.py.

154def copy_configuration(dest_dir : Path, input_files: list[conffwk.Configuration]) -> list[conffwk.Configuration]:
155 if len(input_files) == 0:
156 return []
157
158 log.info(f"Copying configuration represented by databases: \'{input_files}\' to \'{dest_dir}\'")
159 dest_dir = dest_dir.resolve() # Always include by absolute path when copying
160 sys.setrecursionlimit(10000) # for example
161
162 output_dbs = []
163
164 for input_file in input_files:
165 db = conffwk.Configuration("oksconflibs:" + input_file)
166 includes = db.get_includes(None)
167 schemas = [i for i in includes if "schema.xml" in i]
168 dbs = [i for i in includes if "data.xml" in i]
169 newdbs = copy_configuration(dest_dir, dbs)
170
171 output_file = dest_dir / os.path.basename(input_file)
172
173 new_db = conffwk.Configuration("oksconflibs")
174 new_db.create_db(str(output_file), schemas + newdbs)
175 new_db.commit()
176
177 dals = db.get_all_dals()
178
179 for dal in dals:
180 db.get_dal(dals[dal].className(), dals[dal].id)
181 new_db.add_dal(dals[dal])
182
183 new_db.commit()
184 output_dbs.append(str(output_file))
185 log.debug("DONE")
186
187 return output_dbs
188
189

◆ copy_dals_to_cfg()

None copy_dals_to_cfg ( conffwk.Configuration new_db,
list[conffwk.Configuration] dal_list )
Copy a list of dals into a configuration

Definition at line 142 of file consolidate.py.

142def copy_dals_to_cfg(new_db: conffwk.Configuration, dal_list: list[conffwk.Configuration]) -> None:
143 '''
144 Copy a list of dals into a configuration
145 '''
146 log.debug("Copying %d objects to new db", len(dal_list))
147 for dal in dal_list:
148 new_db.add_dal(dal)
149
150 log.debug("Saving database")
151 new_db.commit()
152
153

◆ create_copy_template()

Tuple[conffwk.Configuration, conffwk.Configuration] create_copy_template ( str oksfile,
str output_file )
Create a blank oks .data.xml template file with all the schema includes of oksfile.

Args:
    oksfile: OKS file to copy includes from
    output_file: OKS file to copy includes into

Returns:
    Tuple of old_db, copied_db

Definition at line 67 of file consolidate.py.

67def create_copy_template(oksfile: str, output_file: str)->Tuple[conffwk.Configuration, conffwk.Configuration]:
68 """
69 Create a blank oks .data.xml template file with all the schema includes of oksfile.
70
71 Args:
72 oksfile: OKS file to copy includes from
73 output_file: OKS file to copy includes into
74
75 Returns:
76 Tuple of old_db, copied_db
77 """
78 log.debug("Reading database")
79 db = conffwk.Configuration("oksconflibs:" + oksfile)
80
81 schemafiles = []
82 includes = get_all_includes(db, None)
83 schemafiles += [i for i in includes if "schema.xml" in i]
84 log.debug(f"Included schemas: {schemafiles}")
85
86 log.debug("Creating new database")
87 new_db = conffwk.Configuration("oksconflibs")
88 new_db.create_db(output_file, schemafiles)
89 new_db.commit()
90
91 return db, new_db
92
93

◆ get_all_includes()

list[str] get_all_includes ( conffwk.Configuration db,
str file )
Recursively get all includes from an OKS database

Args:
    db (conffwk.Configuration): The OKS database to get includes from
    file (str): The file to get includes from

Returns:
    list(str): A list of all includes in the database

Raises:
    None

Definition at line 10 of file consolidate.py.

10def get_all_includes(db: conffwk.Configuration, file: str) -> list[str]:
11 """
12 Recursively get all includes from an OKS database
13
14 Args:
15 db (conffwk.Configuration): The OKS database to get includes from
16 file (str): The file to get includes from
17
18 Returns:
19 list(str): A list of all includes in the database
20
21 Raises:
22 None
23 """
24 includes = db.get_includes(file)
25 for include in includes:
26 if "data.xml" not in include:
27 continue
28 includes += get_all_includes(db, include)
29
30 return list(set(includes))
31

◆ get_relationships()

list[conffwk.Configuration] get_relationships ( conffwk.Configuration db,
conffwk.Configuration current_dal,
list[conffwk.Configuration] dal_list )
Recurssively get all objects related to current_dal

Definition at line 122 of file consolidate.py.

122def get_relationships(db: conffwk.Configuration, current_dal: conffwk.Configuration, dal_list: list[conffwk.Configuration]) -> list[conffwk.Configuration]:
123 '''
124 Recurssively get all objects related to current_dal
125 '''
126 dal_list.append(current_dal)
127
128 for rel in db.relations(current_dal.className(), all=True):
129 rel_obj = getattr(current_dal, rel, None)
130 if rel_obj is None:
131 continue
132
133 if not isinstance(rel_obj, list):
134 rel_obj = [rel_obj]
135
136 for rel_obj in rel_obj:
137 dal_list = get_relationships(db, rel_obj, dal_list)
138
139 return dal_list
140
141

Variable Documentation

◆ log

consolidate.log = getLogger('daqconf.consolidate')

Definition at line 7 of file consolidate.py.