DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
consolidate.py
Go to the documentation of this file.
1from pathlib import Path
2import conffwk
3import sys
4import os
5from logging import getLogger
6log = getLogger('daqconf.consolidate')
7
8
9def get_all_includes(db, file):
10 includes = db.get_includes(file)
11 for include in includes:
12 if "data.xml" not in include:
13 continue
14 includes += get_all_includes(db, include)
15
16 return list(set(includes))
17
18def consolidate_db(oksfile, output_file):
19 log.info(f"Consolidating database into output database \'{output_file}\'. Input database: \'{oksfile}\'.")
20
21 sys.setrecursionlimit(10000) # for example
22 log.debug("Reading database")
23 db = conffwk.Configuration("oksconflibs:" + oksfile)
24
25 schemafiles = []
26 includes = get_all_includes(db, None)
27 schemafiles += [i for i in includes if "schema.xml" in i]
28 log.debug(f"Included schemas: {schemafiles}")
29
30 log.debug("Creating new database")
31 new_db = conffwk.Configuration("oksconflibs")
32 new_db.create_db(output_file, schemafiles)
33
34 new_db.commit()
35
36 log.debug("Reading dal objects from old db")
37 dals = db.get_all_dals()
38
39 log.debug(f"Copying objects to new db")
40
41 for dal in dals:
42 this_dal = db.get_dal(dals[dal].className(), dals[dal].id)
43 new_db.add_dal(this_dal)
44
45 log.debug("Saving database")
46 new_db.commit()
47
48
49def copy_configuration(dest_dir : Path, input_files: list):
50 if len(input_files) == 0:
51 return []
52
53 log.info(f"Copying configuration represented by databases: \'{input_files}\' to \'{dest_dir}\'")
54 dest_dir = dest_dir.resolve() # Always include by absolute path when copying
55 sys.setrecursionlimit(10000) # for example
56
57 output_dbs = []
58
59 for input_file in input_files:
60 db = conffwk.Configuration("oksconflibs:" + input_file)
61 includes = db.get_includes(None)
62 schemas = [i for i in includes if "schema.xml" in i]
63 dbs = [i for i in includes if "data.xml" in i]
64 newdbs = copy_configuration(dest_dir, dbs)
65
66 output_file = dest_dir / os.path.basename(input_file)
67
68 new_db = conffwk.Configuration("oksconflibs")
69 new_db.create_db(str(output_file), schemas + newdbs)
70 new_db.commit()
71
72 dals = db.get_all_dals()
73
74 for dal in dals:
75
76 db.get_dal(dals[dal].className(), dals[dal].id)
77
78 new_db.add_dal(dals[dal])
79
80 new_db.commit()
81 output_dbs.append(str(output_file))
82 log.debug("DONE")
83
84 return output_dbs
85
86
87def consolidate_files(oksfile, *input_files):
88 includes = []
89 dbs = []
90 str_in_files = '\n'.join(input_files)
91 log.info(f"Consolidating {len(input_files)} databases into output database \'{oksfile}\'. Input databases: {str_in_files}")
92 sys.setrecursionlimit(10000) # for example
93
94 for input_file in input_files:
95 dbs.append(conffwk.Configuration("oksconflibs:" + input_file))
96 includes += get_all_includes(dbs[len(dbs) - 1], None)
97
98 includes = list(set(includes))
99 includes = [i for i in includes if i not in input_files]
100 log.debug(f"Included files: {includes}")
101
102 new_db = conffwk.Configuration("oksconflibs")
103 new_db.create_db(oksfile, includes)
104
105 new_db.commit()
106
107 for db in dbs:
108 log.debug(f"Reading dal objects from old db {db}")
109 dals = db.get_all_dals()
110
111 log.debug(f"Copying objects to new db {new_db}")
112 for dal in dals:
113
114 try:
115 new_db.get_dal(dals[dal].className(), dals[dal].id)
116 except:
117 new_db.add_dal(dals[dal])
118 new_db.commit()
119
120 log.debug(f"Saving database {new_db}")
121 new_db.commit()
consolidate_db(oksfile, output_file)
get_all_includes(db, file)
Definition consolidate.py:9
copy_configuration(Path dest_dir, list input_files)
consolidate_files(oksfile, *input_files)