diff --git a/pavement.py b/pavement.py index 0490b25d..d4b4bd7a 100644 --- a/pavement.py +++ b/pavement.py @@ -128,7 +128,14 @@ options( 'Topic :: System :: Distributed Computing', ], ext_modules = cext, - cmdclass = {'build_ext': build_ext}, + cmdclass = { + 'build_ext': build_ext + }, + entry_points = { + 'console_scripts': [ + 'zipline = zipline.core.interpreter:main', + ] + }, ), ) diff --git a/zipline/core/component.py b/zipline/core/component.py index fec82966..d5b14d96 100644 --- a/zipline/core/component.py +++ b/zipline/core/component.py @@ -10,6 +10,7 @@ import socket import logging import traceback import humanhash +from setproctitle import setproctitle # pyzmq import zmq @@ -167,6 +168,8 @@ class Component(object): self.zmq = zmq self.context = self.zmq.Context() self.zmq_poller = self.zmq.Poller + # The the process title so you can watch it in top + setproctitle(self.__class__.__name__) return if flavor == 'thread': self.zmq = zmq diff --git a/zipline/core/interpreter.py b/zipline/core/interpreter.py new file mode 100644 index 00000000..f36f5661 --- /dev/null +++ b/zipline/core/interpreter.py @@ -0,0 +1,71 @@ +import sys +import yaml +import argparse +import fileinput +from cStringIO import StringIO + +def interpret(args): + print 'Reading {ifile}'.format(ifile=args.file) + + metastart = False + metadone = False + + metadata = StringIO() + algorithm = StringIO() + + for line in fileinput.input(sys.argv[1]): + if line.startswith('---'): + if metastart: + metastart = False + metadone = False + else: + metastart = True + metadone = False + metadata.write(line) + + elif metastart: + metadata.write(line) + else: + algorithm.write(line) + + #print 'Metadata:' + #print metadata.getvalue() + + #print 'Algorithm:' + #print algorithm.getvalue() + + try: + meta = yaml.load_all(metadata.getvalue()) + except yaml.error.YAMLError, e: + print e + sys.exit(0) + + try: + meta = meta.next() + except StopIteration: + raise RuntimeError("No metadata in file.") + + start = meta['start'] + end = meta['end'] + + print end - start + + ns = {} + exec(algorithm.getvalue()) in ns + + assert ns['initialize'] + assert ns['get_sid_filter'] + assert ns['handle_data'] + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('file', metavar='file', help='Algorithm file.') + args = parser.parse_args() + + if not args.file: + print parser.print_help() + sys.exit(0) + interpret(args) + +if __name__ == '__main__': + main()