Should print [0, 2, 4, 8, 10] after 5 seconds (because the last Promise from the given list fulfills after 5 seconds) """ list_of_promises = [Promise.delayed(6-i, 2*i) for i in range(6)]; Promise.all(list_of_promises).then(my_print); def test6(): """ Tests foreach. Should print 1, [delay 1s], 2, [delay 2s], 3, [delay 3s], 4 """ def f(x): print('%d'%x) return Promise.delayed(x, x) Promise.foreach([1, 2, 3, 4], f) e = EventLoop() e.start() #p = Promise(print_inc_wait()); #pdb.set_trace(); #test1() #test2() #test3() #test4() #test5() test6()
def main(): import argparse colorama_init() example_text = """examples: mugi-sync /path/to/src /path/to/dst -i "*.cpp" -e "moc_*" ".git" mugi-sync /src/path/libfoo.dll /dst/path mugi-sync /path/to/src /path/to/dst --no-initial-sync """ parser = argparse.ArgumentParser(prog="mugi-sync", epilog=example_text, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('src', help="Source directory or file") parser.add_argument('dst', help="Destination directory or file") parser.add_argument('--include','-i', nargs='+', help="Include globs") parser.add_argument('--exclude','-e', nargs='+', help="Exclude globs") parser.add_argument('--no-initial-sync', action='store_true', help="Disable initial sync") parser.add_argument('--create', action='store_true', help="Create target directory") parser.add_argument('--short-log', action='store_true', help="Short log") args = parser.parse_args() #print(args); exit(0) logger = Logger(args.src, args.dst, args.short_log) if args.create: makedirs(args.dst) if not os.path.isdir(args.dst): logger.print_error("Failed to create {}".format(args.dst)) return if os.path.isdir(args.src) and os.path.isfile(args.dst): logger.print_error("{} is dir and {} is file, cannot syncronize dir to file".format(args.src, args.dst)) parser.print_help() return executor = Executor(logger) schedule = Schedule(executor) def dst_path(path): dst = None if os.path.isfile(args.src): if os.path.isfile(args.dst): dst = args.dst elif os.path.isdir(args.dst): dst = os.path.join(args.dst, os.path.basename(args.src)) else: logger.print_error("{} not a file not a dir".format(args.dst)) return elif os.path.isdir(args.src): if os.path.isfile(args.dst): pass elif os.path.isdir(args.dst): dst = os.path.join(args.dst, os.path.relpath(path, args.src)) else: logger.print_error("{} not a file not a dir".format(args.dst)) return else: logger.print_error("{} not a file not a dir".format(args.src)) return return dst def on_change(path, event): src = path dst = dst_path(src) schedule.append((src, dst), 1) def initial_sync(): _, files = walk(args.src, args.include, args.exclude) tasks = [] for src in files: dst = dst_path(src) if not os.path.exists(dst): add = True else: m1 = os.path.getmtime(src) m2 = os.path.getmtime(dst) add = m2 <= m1 if add: tasks.append((src, dst)) if len(tasks) > 0: schedule.append(tasks, 0) loop = EventLoop() if not args.no_initial_sync: logger.print_info("Initial sync") initial_sync() watch = FileSystemWatch() logger.print_info("Watching {}".format(args.src)) watch.start(args.src, on_change, recursive=True, include=args.include, exclude=args.exclude) loop.start()
def main() -> None: # Parse start arguments parser = argparse.ArgumentParser( description="Moonraker - Klipper API Server") parser.add_argument( "-c", "--configfile", default="~/moonraker.conf", metavar='<configfile>', help="Location of moonraker configuration file") parser.add_argument( "-l", "--logfile", default="/tmp/moonraker.log", metavar='<logfile>', help="log file name and location") parser.add_argument( "-n", "--nologfile", action='store_true', help="disable logging to a file") cmd_line_args = parser.parse_args() app_args = {'config_file': cmd_line_args.configfile} # Setup Logging version = utils.get_software_version() if cmd_line_args.nologfile: app_args['log_file'] = "" else: app_args['log_file'] = os.path.normpath( os.path.expanduser(cmd_line_args.logfile)) app_args['software_version'] = version ql, file_logger = utils.setup_logging(app_args) if sys.version_info < (3, 7): msg = f"Moonraker requires Python 3.7 or above. " \ f"Detected Version: {sys.version}" logging.info(msg) print(msg) ql.stop() exit(1) # Start asyncio event loop and server event_loop = EventLoop() estatus = 0 while True: try: server = Server(app_args, file_logger, event_loop) except Exception: logging.exception("Moonraker Error") estatus = 1 break try: event_loop.start() except Exception: logging.exception("Server Running Error") estatus = 1 break if server.exit_reason == "terminate": break event_loop.close() # Since we are running outside of the the server # it is ok to use a blocking sleep here time.sleep(.5) logging.info("Attempting Server Restart...") for _ in range(5): # Sometimes the new loop does not properly instantiate. # Give 5 attempts before raising an exception new_loop = asyncio.new_event_loop() if not new_loop.is_closed(): break logging.info("Failed to create open eventloop, " "retyring in .5 seconds...") time.sleep(.5) else: raise RuntimeError("Unable to create new open eventloop") asyncio.set_event_loop(new_loop) event_loop = EventLoop() event_loop.close() logging.info("Server Shutdown") ql.stop() exit(estatus)
def main(cmd_line_args: argparse.Namespace) -> None: cfg_file = cmd_line_args.configfile app_args = {'config_file': cfg_file} # Setup Logging version = utils.get_software_version() if cmd_line_args.nologfile: app_args['log_file'] = "" else: app_args['log_file'] = os.path.normpath( os.path.expanduser(cmd_line_args.logfile)) app_args['software_version'] = version app_args['python_version'] = sys.version.replace("\n", " ") ql, file_logger, warning = utils.setup_logging(app_args) if warning is not None: app_args['log_warning'] = warning # Start asyncio event loop and server event_loop = EventLoop() alt_config_loaded = False estatus = 0 while True: try: server = Server(app_args, file_logger, event_loop) server.load_components() except confighelper.ConfigError as e: backup_cfg = confighelper.find_config_backup(cfg_file) logging.exception("Server Config Error") if alt_config_loaded or backup_cfg is None: estatus = 1 break app_args['config_file'] = backup_cfg app_args['config_warning'] = ( f"Server configuration error: {e}\n" f"Loaded server from most recent working configuration:" f" '{app_args['config_file']}'\n" f"Please fix the issue in moonraker.conf and restart " f"the server.") alt_config_loaded = True continue except Exception: logging.exception("Moonraker Error") estatus = 1 break try: event_loop.register_callback(server.server_init) event_loop.start() except Exception: logging.exception("Server Running Error") estatus = 1 break if server.exit_reason == "terminate": break # Restore the original config and clear the warning # before the server restarts if alt_config_loaded: app_args['config_file'] = cfg_file app_args.pop('config_warning', None) alt_config_loaded = False event_loop.close() # Since we are running outside of the the server # it is ok to use a blocking sleep here time.sleep(.5) logging.info("Attempting Server Restart...") event_loop.reset() event_loop.close() logging.info("Server Shutdown") ql.stop() exit(estatus)
def main(): parser = argparse.ArgumentParser(prog="watch-ui") parser.add_argument('path', nargs='?', help="Path to watch, defaults to current directory") parser.add_argument('--no-initial-scan', action='store_true', help="Skip initial scan") parser.add_argument('--no-class-files', action='store_true', help="") args = parser.parse_args() #print(args); exit(0) colorama_init() watch_path = args.path if args.path is not None else os.getcwd() logger = Logger(watch_path) collection = Collection() executor = Executor(logger, collection, args.no_class_files) loop = EventLoop() schedule = Schedule(executor, collection) def on_event(path, _): schedule.append(path, 1) def initial_scan(): _, files = walk(watch_path, ["*.qrc"], []) for path in files: update_collection(path, collection) _, files = walk(watch_path, ["*.ui", "*.qrc"], []) tasks = [] for path in files: src = path ext = os.path.splitext(src)[1] if ext == ".ui": data = UiData(path) dst = data.dst_path() add = True if os.path.exists(dst): m1 = os.path.getmtime(src) m2 = os.path.getmtime(dst) add = m2 <= m1 if add: tasks.append(src) elif ext == ".qrc": data = RcData(path) dst = data.dst_path() add = False if os.path.exists(dst): m1 = os.path.getmtime(src) m2 = os.path.getmtime(dst) add = m2 <= m1 if add: tasks.append(src) if len(tasks) > 0: schedule.append(tasks, 0) if not args.no_initial_scan: logger.print_info("Initial scan") initial_scan() watch = FileSystemWatch() logger.print_info("Watching {}".format(watch_path)) resource_includes = ["*" + ext for ext in collection.exts()] debug_print('resource_includes', resource_includes) watch.start(watch_path, on_event, recursive=True, include=["*.ui", "*.qrc"] + resource_includes) loop.start()
# -*- coding: utf-8 -*- ''' Created on 04/03/2013 @author: Cuble Desarrollo ''' from eventloop import EventLoop def event1(): print "event1" if __name__ == "__main__": el = EventLoop() el.queue.put("event1") el.queue.put("event1") el.queue.put("event1") el.queue.put("event1") el.add_handler("event1", event1) el.start() print "Started"
#!/usr/bin/env python ''' ''' import argparse import zmq from eventloop import EventLoop if __name__ == '__main__': parser = argparse.ArgumentParser(description='Quotesource that streams quotes from csv-files') parser.add_argument('--exchange-id', help='Specifies exchange ID for all streams', required=True) parser.add_argument('--control-ep', help='Specifies control endpoint', required=True) parser.add_argument('--naive-delta', action='store_true', help='Enables naive delta calculation (upticks are buy, downticks are sell)') args = parser.parse_args() config = {'naive-delta' : False} if args.naive_delta: config['naive-delta'] = True ctx = zmq.Context.instance() loop = EventLoop(ctx, args.control_ep, args.exchange_id, config) loop.start() loop.wait()
def main() -> None: # Parse start arguments parser = argparse.ArgumentParser( description="Moonraker - Klipper API Server") parser.add_argument("-c", "--configfile", default="~/moonraker.conf", metavar='<configfile>', help="Location of moonraker configuration file") parser.add_argument("-l", "--logfile", default="/tmp/moonraker.log", metavar='<logfile>', help="log file name and location") parser.add_argument("-n", "--nologfile", action='store_true', help="disable logging to a file") cmd_line_args = parser.parse_args() cfg_file = cmd_line_args.configfile app_args = {'config_file': cfg_file} # Setup Logging version = utils.get_software_version() if cmd_line_args.nologfile: app_args['log_file'] = "" else: app_args['log_file'] = os.path.normpath( os.path.expanduser(cmd_line_args.logfile)) app_args['software_version'] = version ql, file_logger, warning = utils.setup_logging(app_args) if warning is not None: app_args['log_warning'] = warning if sys.version_info < (3, 7): msg = f"Moonraker requires Python 3.7 or above. " \ f"Detected Version: {sys.version}" logging.info(msg) print(msg) ql.stop() exit(1) # Start asyncio event loop and server event_loop = EventLoop() alt_config_loaded = False estatus = 0 while True: try: server = Server(app_args, file_logger, event_loop) server.load_components() except confighelper.ConfigError as e: backup_cfg = confighelper.find_config_backup(cfg_file) if alt_config_loaded or backup_cfg is None: logging.exception("Server Config Error") estatus = 1 break app_args['config_file'] = backup_cfg app_args['config_warning'] = ( f"Server configuration error: {e}\n" f"Loaded server from most recent working configuration:" f" '{app_args['config_file']}'\n" f"Please fix the issue in moonraker.conf and restart " f"the server.") alt_config_loaded = True continue except Exception: logging.exception("Moonraker Error") estatus = 1 break try: event_loop.register_callback(server.server_init) event_loop.start() except Exception: logging.exception("Server Running Error") estatus = 1 break if server.exit_reason == "terminate": break # Restore the original config and clear the warning # before the server restarts if alt_config_loaded: app_args['config_file'] = cfg_file app_args.pop('config_warning', None) alt_config_loaded = False event_loop.close() # Since we are running outside of the the server # it is ok to use a blocking sleep here time.sleep(.5) logging.info("Attempting Server Restart...") for _ in range(5): # Sometimes the new loop does not properly instantiate. # Give 5 attempts before raising an exception new_loop = asyncio.new_event_loop() if not new_loop.is_closed(): break logging.info("Failed to create open eventloop, " "retyring in .5 seconds...") time.sleep(.5) else: raise RuntimeError("Unable to create new open eventloop") asyncio.set_event_loop(new_loop) event_loop.reset() event_loop.close() logging.info("Server Shutdown") ql.stop() exit(estatus)
class Test(unittest.TestCase): def setUp(self): self.ctx = zmq.Context.instance() self.control = self.ctx.socket(zmq.DEALER) self.eventloop = EventLoop(self.ctx, "inproc://eventloop-control", "MOEX") self.control.connect("inproc://eventloop-control") self.eventloop.start() def tearDown(self): self.eventloop.stop() self.ctx.destroy() def doStreamPing(self): self.control.send_json({"command" : "stream-ping"}) response = self.control.recv_json() ping = self.stream.recv_multipart() self.assertEqual("success", response["result"]) self.assertEqual(b'\x03\x00\x00\x00\x02\x00\x00\x00', ping[1]) def sendControlCommand(self, json_object): self.control.send_multipart([b'', b'\x01', json.dumps(json_object).encode('utf-8')]) def recvControlResponse(self): response = self.control.recv_multipart() self.assertEqual(b'', response[0]) self.assertEqual(b'\x01', response[1]) return json.loads(response[2].decode('utf-8')) def sendStreamCredit(self): self.control.send_multipart([b'', b'\x03']) def recvStreamPacket(self): packet = self.control.recv_multipart() self.assertEqual(b'', packet[0]) self.assertEqual(0x02, packet[1][0]) return packet[2:] def doBarsCheck(self, filename, min_date, max_date, expected_period): self.sendStreamCredit() with open(filename) as csvfile: r = csv.DictReader(csvfile) for row in r: this_time = datetime.datetime.strptime(row["<DATE>"] + "-" + row["<TIME>"], "%Y%m%d-%H%M%S") if min_date and this_time < min_date: continue if max_date and this_time >= max_date: continue dt = int((this_time - datetime.datetime(1970, 1, 1)).total_seconds()) self.sendStreamCredit() packet = self.recvStreamPacket() self.assertEqual("MOEX:GAZP", packet[0].decode('utf-8')) data = packet[1] (packet_type, timestamp, useconds, datatype, p_open, p_open_frac, p_high, p_high_frac, p_low, p_low_frac, p_close, p_close_frac, volume, summary_period_sec) = struct.unpack("<IQIIqiqiqiqiiI", data) self.assertEqual(0x02, packet_type) self.assertEqual(expected_period, summary_period_sec) self.assertEqual(0x01, datatype) true_open = float(row["<OPEN>"]) true_high = float(row["<HIGH>"]) true_low = float(row["<LOW>"]) true_close = float(row["<CLOSE>"]) true_vol = int(row["<VOL>"]) self.assertEqual(dt, timestamp) self.assertEqual(0, useconds) self.assertAlmostEqual(true_open, p_open + p_open_frac / 1000000000) self.assertAlmostEqual(true_high, p_high + p_high_frac / 1000000000) self.assertAlmostEqual(true_low, p_low + p_low_frac / 1000000000) self.assertAlmostEqual(true_close, p_close + p_close_frac / 1000000000) self.assertEqual(true_vol, volume) packet = self.recvStreamPacket() self.assertEqual("MOEX:GAZP", packet[0].decode('utf-8')) self.assertEqual(struct.pack("<II", 0x03, 0x01), packet[1]) def doTicksCheck(self, filename, min_date, max_date): self.sendStreamCredit() with open(filename) as csvfile: r = csv.DictReader(csvfile) for row in r: this_time = datetime.datetime.strptime(row["<DATE>"] + "-" + row["<TIME>"], "%Y%m%d-%H%M%S") if min_date and this_time < min_date: continue if max_date and this_time >= max_date: continue dt = int((this_time - datetime.datetime(1970, 1, 1)).total_seconds()) self.sendStreamCredit() packet = self.recvStreamPacket() self.assertEqual("MOEX:GAZP", packet[0].decode('utf-8')) data = packet[1] (packet_type, timestamp, useconds, datatype, price_int, price_frac, volume) = struct.unpack("<IQIIqii", data) self.assertEqual(0x01, packet_type) self.assertEqual(0x01, datatype) true_price = float(row["<LAST>"]) true_vol = int(row["<VOL>"]) self.assertEqual(dt, timestamp) self.assertEqual(0, useconds) self.assertAlmostEqual(true_price, price_int + price_frac / 1000000000) self.assertEqual(true_vol, volume) packet = self.recvStreamPacket() self.assertEqual("MOEX:GAZP", packet[0].decode('utf-8')) self.assertEqual(struct.pack("<II", 0x03, 0x01), packet[1]) def testShutdown(self): self.sendControlCommand({"command" : "shutdown"}) response = self.recvControlResponse() self.assertEqual("success", response["result"]) def testBarFeed(self): self.sendControlCommand({ "command" : "start", "src" : ["test/data/GAZP_010101_151231.txt"]}) response = self.recvControlResponse() self.assertEqual("success", response["result"]) self.doBarsCheck("test/data/GAZP_010101_151231.txt", None, None, 86400) def testBarFeed_timeBoundaries(self): self.sendControlCommand({ "command" : "start", "src" : ["test/data/GAZP_010101_151231.txt"], "from" : "2010-01-01", "to" : "2011-01-01"}) response = self.recvControlResponse() self.assertEqual("success", response["result"]) self.doBarsCheck("test/data/GAZP_010101_151231.txt", datetime.datetime(2010, 1, 1), datetime.datetime(2011, 1, 1), 86400) def testBarFeed_timeBoundaries_incorrectBoundaries(self): self.sendControlCommand({ "command" : "start", "src" : ["test/data/GAZP_010101_151231.txt"], "from" : "2012-01-01", "to" : "2011-01-01"}) response = self.recvControlResponse() self.assertEqual("error", response["result"]) def testBarFeed_invalidSource(self): self.sendControlCommand({ "command" : "start", "src" : ["does-not-exist.txt"]}) response = self.recvControlResponse() self.assertEqual("error", response["result"]) def testTickFeed(self): self.sendControlCommand( {"command" : "start", "src" : ["test/data/GAZP_ticks.txt"] } ) response = self.recvControlResponse() self.assertEqual("success", response["result"]) self.doTicksCheck("test/data/GAZP_ticks.txt", None, None) def testTickFeed_timeBoundaries(self): self.sendControlCommand( {"command" : "start", "src" : ["test/data/GAZP_ticks.txt"], "from" : "2015-04-01 10:10:00", "to" : "2015-04-01 11:00:00" } ) response = self.recvControlResponse() self.assertEqual("success", response["result"]) self.doTicksCheck("test/data/GAZP_ticks.txt", datetime.datetime(2015, 4, 1, 10, 10), datetime.datetime(2015, 4, 1, 11, 0))
from eventloop import EventLoop if __name__ == '__main__': event_loop = EventLoop() event_loop.start()