add ability to only write to temp files when reading many measurements
This commit is contained in:
parent
e4ef0d57b7
commit
6a3e433ab1
3 changed files with 32 additions and 14 deletions
|
|
@ -17,7 +17,7 @@ from .tracker import get, save, unlock
|
||||||
CACHE_DIR = ".cache"
|
CACHE_DIR = ".cache"
|
||||||
|
|
||||||
|
|
||||||
def write_measurement(path: Path, ensemble: str, measurement: dict[str, dict[str, dict[str, Any]]], uuid: str, code: str, parameter_file: str | None) -> None:
|
def write_measurement(path: Path, ensemble: str, measurement: dict[str, dict[str, dict[str, Any]]], uuid: str, code: str, parameter_file: str | None, final_write: dict[str, bool]) -> None:
|
||||||
"""
|
"""
|
||||||
Write a measurement to the backlog.
|
Write a measurement to the backlog.
|
||||||
If the file for the measurement already exists, update the measurement.
|
If the file for the measurement already exists, update the measurement.
|
||||||
|
|
@ -36,6 +36,8 @@ def write_measurement(path: Path, ensemble: str, measurement: dict[str, dict[str
|
||||||
Name of the code that was used for the project.
|
Name of the code that was used for the project.
|
||||||
parameter_file: str
|
parameter_file: str
|
||||||
The parameter file used for the measurement.
|
The parameter file used for the measurement.
|
||||||
|
final_write: bool
|
||||||
|
Determmines whether this is the final ime the file is touched during the current import.
|
||||||
"""
|
"""
|
||||||
path = Path(path)
|
path = Path(path)
|
||||||
db_file = get_db_file(path)
|
db_file = get_db_file(path)
|
||||||
|
|
@ -52,12 +54,16 @@ def write_measurement(path: Path, ensemble: str, measurement: dict[str, dict[str
|
||||||
for corr in measurement.keys():
|
for corr in measurement.keys():
|
||||||
file_in_archive = Path('.') / 'archive' / ensemble / corr / str(uuid + '.json.gz')
|
file_in_archive = Path('.') / 'archive' / ensemble / corr / str(uuid + '.json.gz')
|
||||||
file = Path(path) / file_in_archive
|
file = Path(path) / file_in_archive
|
||||||
known_meas = {}
|
tmp_file_in_archive = Path('.') / 'archive' / ensemble / corr / (str(uuid) + ".p")
|
||||||
|
tmp_file = Path(path) / tmp_file_in_archive
|
||||||
|
known_meas: dict[str, Any] = {}
|
||||||
if not os.path.exists(path / 'archive' / ensemble / corr):
|
if not os.path.exists(path / 'archive' / ensemble / corr):
|
||||||
os.makedirs(path / 'archive' / ensemble / corr)
|
os.makedirs(path / 'archive' / ensemble / corr)
|
||||||
files_to_save.append(file_in_archive)
|
files_to_save.append(file_in_archive)
|
||||||
else:
|
else:
|
||||||
if os.path.exists(file):
|
if os.path.exists(tmp_file):
|
||||||
|
known_meas = load_object(str(tmp_file))
|
||||||
|
elif os.path.exists(file):
|
||||||
if file not in files_to_save:
|
if file not in files_to_save:
|
||||||
unlock(path, file_in_archive)
|
unlock(path, file_in_archive)
|
||||||
files_to_save.append(file_in_archive)
|
files_to_save.append(file_in_archive)
|
||||||
|
|
@ -132,7 +138,12 @@ def write_measurement(path: Path, ensemble: str, measurement: dict[str, dict[str
|
||||||
c.execute("INSERT INTO backlogs (name, ensemble, code, path, project, parameters, parameter_file, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))",
|
c.execute("INSERT INTO backlogs (name, ensemble, code, path, project, parameters, parameter_file, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))",
|
||||||
(corr, ensemble, code, meas_path, uuid, pars[subkey], parameter_file))
|
(corr, ensemble, code, meas_path, uuid, pars[subkey], parameter_file))
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
if final_write[str(file)]:
|
||||||
pj.dump_dict_to_json(known_meas, str(file))
|
pj.dump_dict_to_json(known_meas, str(file))
|
||||||
|
if os.path.exists(tmp_file):
|
||||||
|
os.remove(tmp_file)
|
||||||
|
else:
|
||||||
|
dump_object(known_meas, str(tmp_file)[:-2])
|
||||||
conn.close()
|
conn.close()
|
||||||
save(path, message="Add measurements to database", files=files_to_save)
|
save(path, message="Add measurements to database", files=files_to_save)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,6 @@ def import_toml(path: Path, file: str, copy_file: bool=True) -> None:
|
||||||
mname_list = list(measurements.keys())
|
mname_list = list(measurements.keys())
|
||||||
for mname in mname_list:
|
for mname in mname_list:
|
||||||
md = measurements[mname]
|
md = measurements[mname]
|
||||||
print(f"Import measurement {imeas}/{nmeas}: {mname}")
|
|
||||||
ensemble = md['ensemble']
|
ensemble = md['ensemble']
|
||||||
if project['code'] == 'sfcf':
|
if project['code'] == 'sfcf':
|
||||||
param = sfcf.read_param(path, uuid, md['param_file'])
|
param = sfcf.read_param(path, uuid, md['param_file'])
|
||||||
|
|
@ -204,9 +203,12 @@ def import_toml(path: Path, file: str, copy_file: bool=True) -> None:
|
||||||
affected_by_meas = affected_files(param['type'], ensemble, uuid)
|
affected_by_meas = affected_files(param['type'], ensemble, uuid)
|
||||||
elif md['measurement'] == 't1':
|
elif md['measurement'] == 't1':
|
||||||
affected_by_meas = affected_files(param['type'], ensemble, uuid)
|
affected_by_meas = affected_files(param['type'], ensemble, uuid)
|
||||||
affected_file_d[mname] = affected_by_meas
|
affected_file_d[mname] = [str(path / f) for f in affected_by_meas]
|
||||||
discard_after = step_differences(mname_list, affected_file_d)
|
future_affected_file_d = {}
|
||||||
|
for i,mname in enumerate(mname_list):
|
||||||
|
future_affected_file_d[mname] = []
|
||||||
|
for mname2 in mname_list[i+1:]:
|
||||||
|
future_affected_file_d[mname].extend(affected_file_d[mname2])
|
||||||
for mname in mname_list:
|
for mname in mname_list:
|
||||||
md = measurements[mname]
|
md = measurements[mname]
|
||||||
print(f"Import measurement {imeas}/{nmeas}: {mname}")
|
print(f"Import measurement {imeas}/{nmeas}: {mname}")
|
||||||
|
|
@ -267,7 +269,12 @@ def import_toml(path: Path, file: str, copy_file: bool=True) -> None:
|
||||||
measurement = openQCD.extract_t1(path, uuid, md['path'], ensemble, param, str(md["prefix"]), int(md["dtr_read"]), int(md["xmin"]), int(md["spatial_extent"]),
|
measurement = openQCD.extract_t1(path, uuid, md['path'], ensemble, param, str(md["prefix"]), int(md["dtr_read"]), int(md["xmin"]), int(md["spatial_extent"]),
|
||||||
fit_range=int(md.get('fit_range', 5)), postfix=str(md.get('postfix', '')), names=md.get('names', []), files=md.get('files', []),
|
fit_range=int(md.get('fit_range', 5)), postfix=str(md.get('postfix', '')), names=md.get('names', []), files=md.get('files', []),
|
||||||
r_start=md.get('r_start', []), r_stop=md.get('r_stop', []), r_step=md.get('r_step', 1))
|
r_start=md.get('r_start', []), r_stop=md.get('r_stop', []), r_step=md.get('r_step', 1))
|
||||||
write_measurement(path, ensemble, measurement, uuid, project['code'], (md['param_file'] if 'param_file' in md else None))
|
final_write = {}
|
||||||
|
for file in affected_file_d[mname]:
|
||||||
|
final_write[str(file)] = True
|
||||||
|
if str(file) in future_affected_file_d[mname]:
|
||||||
|
final_write[str(file)] = False
|
||||||
|
write_measurement(path, ensemble, measurement, uuid, project['code'], (md['param_file'] if 'param_file' in md else None), final_write)
|
||||||
imeas += 1
|
imeas += 1
|
||||||
print(mname + " imported.")
|
print(mname + " imported.")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,12 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"__commit_id__",
|
|
||||||
"__version__",
|
"__version__",
|
||||||
"__version_tuple__",
|
"__version_tuple__",
|
||||||
"commit_id",
|
|
||||||
"version",
|
"version",
|
||||||
"version_tuple",
|
"version_tuple",
|
||||||
|
"__commit_id__",
|
||||||
|
"commit_id",
|
||||||
]
|
]
|
||||||
|
|
||||||
version: str
|
version: str
|
||||||
|
|
@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
||||||
commit_id: str | None
|
commit_id: str | None
|
||||||
__commit_id__: str | None
|
__commit_id__: str | None
|
||||||
|
|
||||||
__version__ = version = '0.3.1.dev22+g4b1c21309.d20260701'
|
__version__ = version = '0.3.1.dev32+g906a2bdf3.d20260710'
|
||||||
__version_tuple__ = version_tuple = (0, 3, 1, 'dev22', 'g4b1c21309.d20260701')
|
__version_tuple__ = version_tuple = (0, 3, 1, 'dev32', 'g906a2bdf3.d20260710')
|
||||||
|
|
||||||
__commit_id__ = commit_id = 'g4b1c21309'
|
__commit_id__ = commit_id = 'g906a2bdf3'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue