diff --git a/platformio/commands/home/rpc/handlers/project.py b/platformio/commands/home/rpc/handlers/project.py index 20b1dcc8..c8ec6f54 100644 --- a/platformio/commands/home/rpc/handlers/project.py +++ b/platformio/commands/home/rpc/handlers/project.py @@ -184,7 +184,7 @@ class ProjectRPC: ) return sorted(result, key=lambda data: data["platform"]["title"]) - def init(self, board, framework, project_dir): + async def init(self, board, framework, project_dir): assert project_dir state = AppRPC.load_state() if not os.path.isdir(project_dir): @@ -197,14 +197,13 @@ class ProjectRPC: and state["storage"]["coreCaller"] in ProjectGenerator.get_supported_ides() ): args.extend(["--ide", state["storage"]["coreCaller"]]) - d = PIOCoreRPC.call( + await PIOCoreRPC.call( args, options={"cwd": project_dir, "force_subprocess": True} ) - d.addCallback(self._generate_project_main, project_dir, framework) - return d + return self._generate_project_main(project_dir, framework) @staticmethod - def _generate_project_main(_, project_dir, framework): + def _generate_project_main(project_dir, framework): main_content = None if framework == "arduino": main_content = "\n".join( @@ -251,7 +250,7 @@ class ProjectRPC: fp.write(main_content.strip()) return project_dir - def import_arduino(self, board, use_arduino_libs, arduino_project_dir): + async def import_arduino(self, board, use_arduino_libs, arduino_project_dir): board = str(board) # don't import PIO Project if is_platformio_project(arduino_project_dir): @@ -290,14 +289,9 @@ class ProjectRPC: and state["storage"]["coreCaller"] in ProjectGenerator.get_supported_ides() ): args.extend(["--ide", state["storage"]["coreCaller"]]) - d = PIOCoreRPC.call( + await PIOCoreRPC.call( args, options={"cwd": project_dir, "force_subprocess": True} ) - d.addCallback(self._finalize_arduino_import, project_dir, arduino_project_dir) - return d - - @staticmethod - def _finalize_arduino_import(_, project_dir, arduino_project_dir): with fs.cd(project_dir): config = ProjectConfig() src_dir = config.get_optional_dir("src") @@ -307,7 +301,7 @@ class ProjectRPC: return project_dir @staticmethod - def import_pio(project_dir): + async def import_pio(project_dir): if not project_dir or not is_platformio_project(project_dir): raise jsonrpc.exceptions.JSONRPCDispatchException( code=4001, message="Not an PlatformIO project: %s" % project_dir @@ -325,8 +319,7 @@ class ProjectRPC: and state["storage"]["coreCaller"] in ProjectGenerator.get_supported_ides() ): args.extend(["--ide", state["storage"]["coreCaller"]]) - d = PIOCoreRPC.call( + await PIOCoreRPC.call( args, options={"cwd": new_project_dir, "force_subprocess": True} ) - d.addCallback(lambda _: new_project_dir) - return d + return new_project_dir diff --git a/platformio/commands/home/run.py b/platformio/commands/home/run.py index 63c48b48..585c9268 100644 --- a/platformio/commands/home/run.py +++ b/platformio/commands/home/run.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import asyncio import os import click @@ -31,6 +30,7 @@ from platformio.commands.home.rpc.handlers.os import OSRPC from platformio.commands.home.rpc.handlers.piocore import PIOCoreRPC from platformio.commands.home.rpc.handlers.project import ProjectRPC from platformio.commands.home.rpc.server import WebSocketJSONRPCServerFactory +from platformio.compat import get_running_loop from platformio.exception import PlatformioException from platformio.package.manager.core import get_core_package_dir from platformio.proc import force_exit @@ -47,7 +47,7 @@ class ShutdownMiddleware: async def shutdown_server(_=None): - asyncio.get_event_loop().call_later(0.5, force_exit) + get_running_loop().call_later(0.5, force_exit) return PlainTextResponse("Server has been shutdown!")