Exemple #1
0
    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()
Exemple #2
0
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()
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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()
Exemple #6
0
# -*- 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()
Exemple #8
0
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))
Exemple #10
0
from eventloop import EventLoop

if __name__ == '__main__':
    event_loop = EventLoop()
    event_loop.start()