Skip to content
Snippets Groups Projects
ipaaca-catlog 3.59 KiB
Newer Older
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# This file is part of IPAACA, the
#  "Incremental Processing Architecture
#   for Artificial Conversational Agents".
#
# Copyright (c) 2009-2015 Social Cognitive Systems Group
#                         CITEC, Bielefeld University
#
# http://opensource.cit-ec.de/projects/ipaaca/
# http://purl.org/net/ipaaca
#
# This file may be licensed under the terms of of the
# GNU Lesser General Public License Version 3 (the ``LGPL''),
# or (at your option) any later version.
#
# Software distributed under the License is distributed
# on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
# express or implied. See the LGPL for the specific language
# governing rights and limitations.
#
# You should have received a copy of the LGPL along with this
# program. If not, go to http://www.gnu.org/licenses/lgpl.html
# or write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The development of this software was supported by the
# Excellence Cluster EXC 277 Cognitive Interaction Technology.
# The Excellence Cluster EXC 277 is a grant of the Deutsche
# Forschungsgemeinschaft (DFG) in the context of the German
# Excellence Initiative.


from __future__ import division, print_function

import sys
import ipaaca
def pretty_printed_time(t):
	if t<0:
		t = -t
		sign = '-'
	else:
		sign = ' '
	s = float(t)
	h = int(s/3600)
	m = int(s/60) - h*60
	s -= h*3600 + m*60
	ms = int((s-int(s))*1000)
	return sign+'%01d:%02d:%02d.%03d'%(h, m, int(s), ms)

def modify(key, value, strip=False, pretty_printed_times=False, time_offset=0.0):
	if key=='time':
		f = float(value.strip()) - time_offset
		return pretty_printed_time(f) if pretty_printed_times else str(f)
	else:
		return value.strip() if strip else value

	try:
		iap = ipaaca.IpaacaArgumentParser('ipaaca-logcat')
		iap.add_argument(
			'-s', '--strip-fields',
			dest='strip', action='store_true',
			default=False,
			help='Strip leading/trailing whitespace from all fields')
		iap.add_argument(
			'-p', '--pretty-printed-times',
			dest='pretty_printed_times', action='store_true',
			default=False,
			help='Print human-readable times (hh:mm:ss.ms) instead of float seconds')
		iap.add_argument(
			'-d', '--delimiter',
			dest='delimiter', nargs=1,
			default=['\t'],
			help='field delimiter, interpreted as python unicode string (default \'\\t\')')
		iap.add_argument(
			'-t', '--align-times',
			dest='align_times', nargs=2,
			default=['0', '0'],
			help='Calculate relative output timestamps (default: 0  0 => keep)\nFirst argument is a reference event timestamp from the log file\nSecond argument is the new output time for that same event')
		iap.add_argument(
			'-f', '--fields',
			dest='fields', default=['time', 'text'], nargs='+',
			help='fields to print (defaults: \'time\' \'text\')')
		arguments = iap.parse_args()
		delimiter = eval("u'"+arguments.delimiter[0]+"'", {"__builtins__":None}, {} )
		ref_t, out_t = float(arguments.align_times[0]), float(arguments.align_times[1])
		time_offset = ref_t - out_t
		#print(arguments); sys.exit(1)
		#modify = (lambda s: s.strip()) if arguments.strip else (lambda s: s)
		#modify = lambda s: type(s).__name__
		for line in sys.stdin:
			record = eval(line.strip(), {"__builtins__":None}, {} )
			print(delimiter.join([modify(f, unicode(record[f]), arguments.strip, arguments.pretty_printed_times, time_offset) for f in arguments.fields]))
	except (KeyboardInterrupt, SystemExit):
		pass # ret below
	except Exception, e:
		print(u'Exception: '+unicode(traceback.format_exc()))
		ipaaca.exit(1)
	ipaaca.exit(0)