Skip to content

Commit 8a47874

Browse files
authored
Merge pull request #82 from yucongalicechen/metadata3
load args into DO metadata
2 parents 6dc86f5 + 523808c commit 8a47874

File tree

3 files changed

+90
-17
lines changed

3 files changed

+90
-17
lines changed

src/diffpy/labpdfproc/labpdfprocapp.py

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,7 @@
22
from argparse import ArgumentParser
33

44
from diffpy.labpdfproc.functions import apply_corr, compute_cve
5-
from diffpy.labpdfproc.tools import (
6-
known_sources,
7-
load_package_info,
8-
load_user_info,
9-
load_user_metadata,
10-
set_input_lists,
11-
set_output_directory,
12-
set_wavelength,
13-
)
5+
from diffpy.labpdfproc.tools import known_sources, load_metadata, preprocessing_args
146
from diffpy.utils.parsers.loaddata import loadData
157
from diffpy.utils.scattering_objects.diffraction_objects import XQUANTITIES, Diffraction_object
168

@@ -112,12 +104,7 @@ def get_args(override_cli_inputs=None):
112104

113105
def main():
114106
args = get_args()
115-
args = load_package_info(args)
116-
args = load_user_info(args)
117-
args = set_input_lists(args)
118-
args.output_directory = set_output_directory(args)
119-
args = set_wavelength(args)
120-
args = load_user_metadata(args)
107+
args = preprocessing_args(args)
121108

122109
for filepath in args.input_paths:
123110
outfilestem = filepath.stem + "_corrected"
@@ -144,7 +131,7 @@ def main():
144131
"tth",
145132
scat_quantity="x-ray",
146133
name=filepath.stem,
147-
metadata={"muD": args.mud, "anode_type": args.anode_type},
134+
metadata=load_metadata(args, filepath),
148135
)
149136

150137
absorption_correction = compute_cve(input_pattern, args.mud, args.wavelength)

src/diffpy/labpdfproc/tests/test_tools.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
from diffpy.labpdfproc.labpdfprocapp import get_args
88
from diffpy.labpdfproc.tools import (
99
known_sources,
10+
load_metadata,
1011
load_package_info,
1112
load_user_info,
1213
load_user_metadata,
14+
preprocessing_args,
1315
set_input_lists,
1416
set_output_directory,
1517
set_wavelength,
@@ -278,3 +280,41 @@ def test_load_package_info(mocker):
278280
actual_args = get_args(cli_inputs)
279281
actual_args = load_package_info(actual_args)
280282
assert actual_args.package_info == {"diffpy.labpdfproc": "1.2.3", "diffpy.utils": "3.3.0"}
283+
284+
285+
def test_load_metadata(mocker, user_filesystem):
286+
cwd = Path(user_filesystem)
287+
home_dir = cwd / "home_dir"
288+
mocker.patch("pathlib.Path.home", lambda _: home_dir)
289+
os.chdir(cwd)
290+
mocker.patch(
291+
"importlib.metadata.version",
292+
side_effect=lambda package_name: "3.3.0" if package_name == "diffpy.utils" else "1.2.3",
293+
)
294+
cli_inputs = [
295+
"2.5",
296+
".",
297+
"--user-metadata",
298+
"key=value",
299+
"--username",
300+
"cli_username",
301+
"--email",
302+
303+
]
304+
actual_args = get_args(cli_inputs)
305+
actual_args = preprocessing_args(actual_args)
306+
for filepath in actual_args.input_paths:
307+
actual_metadata = load_metadata(actual_args, filepath)
308+
expected_metadata = {
309+
"mud": 2.5,
310+
"input_directory": str(filepath),
311+
"anode_type": "Mo",
312+
"wavelength": 0.71,
313+
"output_directory": str(Path.cwd().resolve()),
314+
"xtype": "tth",
315+
"key": "value",
316+
"username": "cli_username",
317+
"email": "[email protected]",
318+
"package_info": {"diffpy.labpdfproc": "1.2.3", "diffpy.utils": "3.3.0"},
319+
}
320+
assert actual_metadata == expected_metadata

src/diffpy/labpdfproc/tools.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import copy
12
from pathlib import Path
23

34
from diffpy.utils.tools import get_package_info, get_user_info
45

56
WAVELENGTHS = {"Mo": 0.71, "Ag": 0.59, "Cu": 1.54}
67
known_sources = [key for key in WAVELENGTHS.keys()]
8+
METADATA_KEYS_TO_EXCLUDE = ["output_correction", "force_overwrite", "input", "input_paths"]
79

810

911
def set_output_directory(args):
@@ -110,7 +112,7 @@ def set_wavelength(args):
110112
111113
Returns
112114
-------
113-
float: the wavelength value
115+
args argparse.Namespace
114116
115117
we raise an ValueError if the input wavelength is non-positive
116118
or if the input anode_type is not one of the known sources
@@ -214,3 +216,47 @@ def load_package_info(args):
214216
metadata = get_package_info("diffpy.labpdfproc")
215217
setattr(args, "package_info", metadata["package_info"])
216218
return args
219+
220+
221+
def preprocessing_args(args):
222+
"""
223+
Perform preprocessing on the provided argparse Namespace
224+
225+
Parameters
226+
----------
227+
args argparse.Namespace
228+
the arguments from the parser, default is None
229+
230+
Returns
231+
-------
232+
the updated argparse Namespace with arguments preprocessed
233+
"""
234+
args = load_package_info(args)
235+
args = load_user_info(args)
236+
args = set_input_lists(args)
237+
args.output_directory = set_output_directory(args)
238+
args = set_wavelength(args)
239+
args = load_user_metadata(args)
240+
return args
241+
242+
243+
def load_metadata(args, filepath):
244+
"""
245+
Load relevant metadata from args
246+
247+
Parameters
248+
----------
249+
args argparse.Namespace
250+
the arguments from the parser
251+
252+
Returns
253+
-------
254+
A dictionary with relevant arguments from the parser
255+
"""
256+
257+
metadata = copy.deepcopy(vars(args))
258+
for key in METADATA_KEYS_TO_EXCLUDE:
259+
metadata.pop(key, None)
260+
metadata["input_directory"] = str(filepath)
261+
metadata["output_directory"] = str(metadata["output_directory"])
262+
return metadata

0 commit comments

Comments
 (0)