add def for getting values out of the material data

This commit is contained in:
2019-02-11 11:42:47 +01:00
parent a98b4ce919
commit e44f3c8fca

View File

@@ -103,6 +103,9 @@ def search_keys(data, keys):
from json import loads
def find_values(key, json_repr):
"""\
Find values inside json string
"""
results = []
def _decode_dict(a_dict):
try:
@@ -146,6 +149,19 @@ def print_quantity(quantity, prespaces=0):
print(prespaces*' ' + '%s' % quantity)
def get_value(data, element):
"""\
Get value of nested dictionary.
If element is itself a list of length one, the element of the list is returned
"""
keys = element.split('/')
for key in keys:
data = data.get(key)
if data and len(data) == 1:
data = next(iter(data.values()))
return data
def main():
"""\
Main function
@@ -209,25 +225,20 @@ def main():
if args.debug:
print("data:")
print_material(data)
mat_index = {
"rho": "Mechanical Properties/rho",
"E": "Mechanical Properties/E",
"R_p": "Mechanical Properties/Yield strength",
"R_m": "Mechanical Properties/R_m"
}
for element in args.const_collection: # iter the way it is been entered as args
if element == "rho":
print_quantity(data['Mechanical Properties']['rho'])
elif element == "E":
print_quantity(data['Mechanical Properties']['E'])
elif element == "R_p":
if len(data['Mechanical Properties']['Yield strength']) == 1:
print_quantity(next(iter(data['Mechanical Properties']['Yield strength'].values())))
else:
print_quantity(data['Mechanical Properties']['Yield strength'])
elif element == "R_m":
print_quantity(data['Mechanical Properties']['R_m'])
print_quantity(get_value(data, mat_index[element]))
elif args.search:
search_list = [element for element in args.search.split(',')]
if args.debug:
print("search_list: " + str(search_list))
data = read_material(args.materialname)
if args.debug:
print("search_list: " + str(search_list))
print("data: " + data)
data_dict = search_keys(data, keys=search_list)
print_dict(data_dict)