1from pathlib
import Path
5from logging
import getLogger
6from typing
import Optional, Tuple
7log = getLogger(
'daqconf.consolidate')
11 includes = db.get_includes(file)
12 for include
in includes:
13 if "data.xml" not in include:
17 return list(set(includes))
19def consolidate_db(oksfile: str, output_file: str, session_id: Optional[str] =
None)->
None:
20 """Consolidates a single session
22 :param oksfile: OKS file(s) to consolidate
23 :param output_file: File to output consolidated database to
24 :param session_id: Name of session, defaults to None
26 log.info(f
"Consolidating database into output database '{output_file}'. Input database: '{oksfile}'.")
28 sys.setrecursionlimit(10000)
31 if session_id
is None:
32 log.debug(
"Consolidating all dals in %s into %s", oksfile, output_file)
35 log.debug(
"Consolidating all dals in session %s from %s into %s", session_id, oksfile, output_file)
42 Creates a blank oks .data.xml file stored in output_file with all the schema includes of oksfile
43 :param oksfile: OKS file to copy includes from
44 :param output_file: OKS file to copy includes into
46 :returns: Tuple of old_db, copied_db
48 log.debug(
"Reading database")
53 schemafiles += [i
for i
in includes
if "schema.xml" in i]
54 log.debug(f
"Included schemas: {schemafiles}")
56 log.debug(
"Creating new database")
58 new_db.create_db(output_file, schemafiles)
65 """Consolidates ALL dal objects in db into new_db
67 :param db: A conffwk.Configuration containing objects you want to copy over
68 :param new_db: A conffwk.Configuration you want to copy objects into
70 dal_list = list(db.get_all_dals().values())
75 Consolidates all objects related to the session with id 'session_id' into a single file
77 :param db: A conffwk.Configuration containing objects you want to copy over
78 :param new_db: A conffwk.Configuration you want to copy objects into
79 :param session_id: Name of session
84 dal_session = db.get_dal(
'Session', session_id)
85 except Exception
as e:
94 Recurssively get all objects related to current_dal
96 dal_list.append(current_dal)
98 for rel
in db.relations(current_dal.className(), all=
True):
99 rel_obj = getattr(current_dal, rel,
None)
103 if not isinstance(rel_obj, list):
106 for rel_obj
in rel_obj:
114 Copy a list of dals into a configuration
116 log.debug(
"Copying %d objects to new db", len(dal_list))
120 log.debug(
"Saving database")
125 if len(input_files) == 0:
128 log.info(f
"Copying configuration represented by databases: \'{input_files}\' to \'{dest_dir}\'")
129 dest_dir = dest_dir.resolve()
130 sys.setrecursionlimit(10000)
134 for input_file
in input_files:
136 includes = db.get_includes(
None)
137 schemas = [i
for i
in includes
if "schema.xml" in i]
138 dbs = [i
for i
in includes
if "data.xml" in i]
139 newdbs = copy_configuration(dest_dir, dbs)
141 output_file = dest_dir / os.path.basename(input_file)
144 new_db.create_db(str(output_file), schemas + newdbs)
147 dals = db.get_all_dals()
150 db.get_dal(dals[dal].className(), dals[dal].id)
151 new_db.add_dal(dals[dal])
154 output_dbs.append(str(output_file))
163 str_in_files =
'\n'.join(input_files)
164 log.info(f
"Consolidating {len(input_files)} databases into output database \'{oksfile}\'. Input databases: {str_in_files}")
165 sys.setrecursionlimit(10000)
167 for input_file
in input_files:
171 includes = list(set(includes))
172 includes = [i
for i
in includes
if i
not in input_files]
173 log.debug(f
"Included files: {includes}")
176 new_db.create_db(oksfile, includes)
181 log.debug(f
"Reading dal objects from old db {db}")
182 dals = db.get_all_dals()
184 log.debug(f
"Copying objects to new db {new_db}")
188 new_db.get_dal(dals[dal].className(), dals[dal].id)
190 new_db.add_dal(dals[dal])
193 log.debug(f
"Saving database {new_db}")
None copy_dals_to_cfg(conffwk.Configuration new_db, dal_list)
Tuple[conffwk.Configuration, conffwk.Configuration] create_copy_template(str oksfile, str output_file)
get_relationships(conffwk.Configuration db, current_dal, dal_list)
get_all_includes(db, file)
None consolidate_full(conffwk.Configuration db, conffwk.Configuration new_db)
None consolidate_session(conffwk.Configuration db, conffwk.Configuration new_db, str session_id)
copy_configuration(Path dest_dir, list input_files)
None consolidate_db(str oksfile, str output_file, Optional[str] session_id=None)
consolidate_files(oksfile, *input_files)