def generate_swagger() -> str: # Create an APISpec spec = APISpec( title="ARCOR2 Data Models", version=arcor2.api_version(), openapi_version="3.0.2", plugins=[FlaskPlugin(), DataclassesPlugin()], ) # TODO avoid explicit naming of all sub-modules in rpc module for module in (arcor2.data.common, arcor2.data.object_type, rpc.common, rpc.execution, rpc.objects, rpc.robot, rpc.scene, rpc.project, rpc.services, rpc.storage, arcor2.data.events): for name, obj in inspect.getmembers(module): if not inspect.isclass(obj) or not issubclass( obj, JsonSchemaMixin) or obj == JsonSchemaMixin: continue try: spec.components.schema(obj.__name__, schema=obj) except DuplicateComponentNameError: continue return spec.to_yaml()
async def system_info_cb(req: rpc.common.SystemInfoRequest, ui: WsClient) -> rpc.common.SystemInfoResponse: resp = rpc.common.SystemInfoResponse() resp.data.version = arcor2.version() resp.data.api_version = arcor2.api_version() resp.data.supported_parameter_types = set(PARAM_PLUGINS.keys()) resp.data.supported_rpc_requests = {key.request for key in RPC_DICT.keys()} return resp
def main(): assert sys.version_info >= (3, 8) parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", help="Increase verbosity.", action="store_const", const=True, default=False) parser.add_argument("-d", "--debug", help="Set logging level to debug.", action="store_const", const=LogLevel.DEBUG, default=LogLevel.INFO) parser.add_argument('--version', action='version', version=arcor2.version(), help="Shows ARCOR2 version and exits.") parser.add_argument('--api_version', action='version', version=arcor2.api_version(), help="Shows API version and exits.") parser.add_argument("-a", "--asyncio_debug", help="Turn on asyncio debug mode.", action="store_const", const=True, default=False) args = parser.parse_args() glob.logger.level = args.debug glob.VERBOSE = args.verbose loop = asyncio.get_event_loop() loop.set_debug(enabled=args.asyncio_debug) compile_json_schemas() if os.path.exists(settings.URDF_PATH): shutil.rmtree(settings.URDF_PATH) os.makedirs(settings.URDF_PATH) run(aio_main(), loop=loop, stop_on_unhandled_errors=True)
async def _initialize_server() -> None: exe_version = await exe.manager_request( rpc.common.VersionRequest(uuid.uuid4().int)) assert isinstance(exe_version, rpc.common.VersionResponse) """ Following check is especially useful when running server/execution in Docker containers. Then it might easily happen that one tries to use different versions together. """ try: hlp.check_compatibility(arcor2.api_version(), exe_version.data.version) except Arcor2Exception as e: raise Arcor2Exception( "ARServer/Execution API_VERSION mismatch.") from e while True: # wait until Project service becomes available try: await storage.get_projects() break except storage.PersistentStorageException as e: print(e.message) await asyncio.sleep(1) # this has to be done sequentially as objects might depend on services so (all) services has to be known first await osa.get_service_types() await osa.get_object_types() await osa.get_object_actions() bound_handler = functools.partial(hlp.server, logger=glob.logger, register=register, unregister=unregister, rpc_dict=RPC_DICT, event_dict=EVENT_DICT, verbose=glob.VERBOSE) await glob.logger.info("Server initialized.") await asyncio.wait([websockets.serve(bound_handler, '0.0.0.0', glob.PORT)])
def main() -> None: assert sys.version_info >= (3, 8) parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", help="Increase output verbosity", action="store_const", const=LogLevel.DEBUG, default=LogLevel.INFO) parser.add_argument('--version', action='version', version=arcor2.version(), help="Shows ARCOR2 version and exits.") parser.add_argument('--api_version', action='version', version=arcor2.api_version(), help="Shows API version and exits.") parser.add_argument("-a", "--asyncio_debug", help="Turn on asyncio debug mode.", action="store_const", const=True, default=False) args = parser.parse_args() logger.level = args.verbose loop = asyncio.get_event_loop() loop.set_debug(enabled=args.asyncio_debug) compile_json_schemas() run(aio_main(), loop=loop, stop_on_unhandled_errors=True)
async def _version_cb(req: rpc.common.VersionRequest, ui: WsClient) -> rpc.common.VersionResponse: return rpc.common.VersionResponse( data=rpc.common.VersionData(arcor2.api_version()))