laydi/bin/dataset

117 lines
3.0 KiB
Python
Executable File

#!/usr/bin/python
import os,sys
from laydi import dataset
import cfgparse, optparse
import re
PROGRAM_NAME = 'dataset'
VERSION = '0.1.0'
def read_dataset_header(input):
name = ""
type = ""
dimensions = []
kv_re = re.compile('^\s*#\s*(\w+)\s*:(.*)$')
lines = []
line = input.readline()
while line.startswith('#'):
lines.append(line)
line = input.readline()
for line in lines:
match = kv_re.match(line)
if not match:
continue
k, v = match.groups()
k = k.strip()
if k == 'name':
name = v
elif k == 'type':
type = v
elif k == 'dimension':
values = v.split()
dimensions.append((values[0], values[1:]))
return (name, type, dimensions)
def show_info(input):
name, type, dimensions = read_dataset_header(input)
print "Name: %s" % name
print "Type: %s" % type
print "Dimensions:",
for i, dim in enumerate(dimensions):
dimname = dim[0]
length = len(dim[1])
print "%s(%i)" % (dimname, length),
if i < len(dimensions)-1:
print "x",
print
def list_dimension_ids(input, dimname):
name, type, dimensions = read_dataset_header(input)
for i, dim in enumerate(dimensions):
name, ids = dim
if name == dimname:
for id in ids:
print id
def parse_options():
conf_files = ['/etc/laydirc',
os.path.join(os.environ['HOME'], '.laydi')]
cp = cfgparse.ConfigParser()
op = optparse.OptionParser()
op.add_option('-c', '--csv',
action='store_true', default=False,
help='Export as CSV file.')
op.add_option('-d', '--dimension',
action='store', default=None,
help='Get all identifiers along a dimension.')
op.add_option('-i', '--info',
action='store_true', default=False,
help='Show dataset information.')
op.add_option('-l', '--longinfo',
action='store_true', default=False,
help='Display more information than -i.')
op.add_option('-o', '--output-file',
action='store_true', default=False,
help='Send output to file instead of stdout.')
op.add_option('-t', '--transpose',
action='store_true', default=False,
help='Transpose dataset.')
op.add_option('-y', '--change-type',
action='store_true', default=False,
help='Set new dataset type.')
for cf in conf_files:
if os.path.isfile(cf):
cp.add_file(cf)
return cp.parse(op)
if __name__ == '__main__':
options, params = parse_options()
input = sys.stdin
output = sys.stdout
if options.info:
show_info(input)
sys.exit(0)
elif options.dimension != None:
list_dimension_ids(input, options.dimension)