def run_main(main_function, configuration_requirements=Namespace()): required_config = Namespace() required_config.add_option( 'rule_system_class', doc='the fully qualified name of the RuleSystem class', default=RuleSystem, from_string_converter=class_converter, ) required_config.update(logging_config) required_config.update(configuration_requirements) config = configuration(required_config) logging.basicConfig(level=config.logging_level, format=config.logging_format) log_config(config) rule_system = config.rule_system_class(config) loop = asyncio.get_event_loop() loop.run_until_complete(rule_system.initialize()) main_function(config, rule_system) loop.run_until_complete(rule_system.go()) try: loop.run_forever() except KeyboardInterrupt: pass
required_config.server = Namespace() required_config.server.add_option( name='wot_server_class', default="pywot.WoTServer", doc="the fully qualified name of the WoT Server class", from_string_converter=class_converter) required_config.add_option( name="scene_thing_class", default=SceneThing, doc="the fully qualified name of the class that implents scene control", from_string_converter=class_converter) required_config.add_option( 'things_gateway_auth_key', doc='the api key to access the Things Gateway', short_form="G", default='THINGS GATEWAY AUTH KEY', ) required_config.update(logging_config) config = configuration(required_config) logging.basicConfig(level=config.logging_level, format=config.logging_format) log_config(config) scene_thing = config.scene_thing_class(config) server = config.server.wot_server_class(config, [scene_thing], port=config.server.service_port) server.run() logging.debug('done.')