106 lines
3.0 KiB
Python
106 lines
3.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# -*- mode: python-mode; python-indent-offset: 2; tab-width: 2 -*-
|
|
"""
|
|
Created on Mon Dec 21 19:39:44 2015
|
|
|
|
@author: Daniel
|
|
"""
|
|
import sys, os
|
|
import argparse
|
|
|
|
|
|
def list():
|
|
from os import listdir
|
|
|
|
for data in listdir("./data"):
|
|
file_name = data.split('.')[0]
|
|
if file_name != "INFO":
|
|
print(file_name)
|
|
|
|
|
|
def read(input, search_keys=None):
|
|
import json
|
|
from pprint import pprint
|
|
|
|
def find_values(id, json_repr):
|
|
results = []
|
|
|
|
def _decode_dict(a_dict):
|
|
try: results.append(a_dict[id])
|
|
except KeyError: pass
|
|
return a_dict
|
|
|
|
json.loads(json_repr, object_hook=_decode_dict) # return value ignored
|
|
return results
|
|
|
|
try:
|
|
with open(os.path.join('data', input + '.json')) as data_file:
|
|
if search_keys is not None:
|
|
data = data_file.read()
|
|
for search_key in search_keys:
|
|
found_values = find_values(search_key, data)
|
|
#print(found_values)
|
|
for value in found_values:
|
|
#print('%-5s' % value[0] + ' ' + value[1])
|
|
print(search_key + ' = ' + '%s' % value[0] + ' ' + value[1])
|
|
|
|
#def getLength(element):
|
|
# try:
|
|
# element.__iter__
|
|
# return sum([getLength(i) for i in element])
|
|
# except:
|
|
# return 1
|
|
#print(len(data))
|
|
#print(getLength(json.loads(data)))
|
|
|
|
else:
|
|
data = json.load(data_file)
|
|
pprint(data)
|
|
|
|
except (OSError, IOError) as err:
|
|
print(str(err))
|
|
sys.exit(2)
|
|
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Material database.')
|
|
|
|
subparsers = parser.add_subparsers(help='commands', dest='command')
|
|
|
|
# list materials
|
|
list_parser = subparsers.add_parser('list',
|
|
description='List materials.',
|
|
help='list all available materials')
|
|
|
|
# material
|
|
material_parser = subparsers.add_parser('material',
|
|
help='the material to get information from')
|
|
material_parser.add_argument('materialname', action='store',
|
|
help='list available material information')
|
|
material_parser.add_argument('-r', '--rho', dest='const_collection',
|
|
action='append_const', const="rho",
|
|
help='get density from material')
|
|
material_parser.add_argument('-T', '--Tm', dest='const_collection',
|
|
action='append_const', const="Tm",
|
|
help='get melting point temperature')
|
|
|
|
parser.add_argument('-v', '--version', action='version',
|
|
version='%(prog)s 1.0')
|
|
|
|
args = parser.parse_args()
|
|
print(args)
|
|
if args.command == 'list':
|
|
list()
|
|
elif args.command == 'material':
|
|
if args.const_collection:
|
|
read(args.materialname, search_keys=args.const_collection)
|
|
else:
|
|
read(args.materialname)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|