From 08fd817b28cbdbf5c99e11c57446eb05a4e9b14e Mon Sep 17 00:00:00 2001 From: rmorshea Date: Sat, 1 Apr 2023 19:14:29 -0600 Subject: [PATCH 1/2] fix event-to-object + fix npm release --- noxfile.py | 38 +++++++++++++------ .../packages/@reactpy/client/package.json | 2 +- .../packages/event-to-object/package.json | 5 +-- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/noxfile.py b/noxfile.py index a37549103..7120b6cd9 100644 --- a/noxfile.py +++ b/noxfile.py @@ -21,7 +21,9 @@ from typing import Literal, Protocol, TypeAlias class ReleasePrepFunc(Protocol): - def __call__(self, session: Session) -> Callable[[bool], None]: + def __call__( + self, session: Session, package: PackageInfo + ) -> Callable[[bool], None]: ... @@ -309,7 +311,7 @@ def publish( if tag_pkg not in packages: session.error(f"Tag {tag} references package {tag_pkg} that does not exist") - pkg_path, pkg_lang, pkg_ver = packages[tag_pkg] + pkg_name, pkg_path, pkg_lang, pkg_ver = pkg_info = packages[tag_pkg] if pkg_ver != tag_ver: session.error( f"Tag {tag} references version {tag_ver} of package {tag_pkg}, " @@ -318,7 +320,7 @@ def publish( session.chdir(pkg_path) session.log(f"Preparing {tag_pkg} for release...") - publishers.append((pkg_path, release_prep[pkg_lang](session))) + publishers.append((pkg_path, release_prep[pkg_lang](session, pkg_info))) for pkg_path, publish in publishers: session.log(f"Publishing {pkg_path}...") @@ -353,21 +355,30 @@ def get_reactpy_script_env() -> dict[str, str]: } -def prepare_javascript_release(session: Session) -> Callable[[bool], None]: +def prepare_javascript_release( + session: Session, package: PackageInfo +) -> Callable[[bool], None]: node_auth_token = session.env.get("NODE_AUTH_TOKEN") if node_auth_token is None: session.error("NODE_AUTH_TOKEN environment variable must be set") - # TODO: Make this `ci` instead of `install` somehow. By default `npm install` at - # workspace root does not generate a lockfile which is required by `npm ci`. - session.run("npm", "install", external=True) + session.run("npm", "ci", external=True) def publish(dry_run: bool) -> None: if dry_run: - session.run("npm", "pack", "--dry-run", external=True) + session.run( + "npm", + "--workspace", + package.name, + "pack", + "--dry-run", + external=True, + ) return session.run( "npm", + "--workspace", + package.name, "publish", "--access", "public", @@ -378,7 +389,9 @@ def publish(dry_run: bool) -> None: return publish -def prepare_python_release(session: Session) -> Callable[[bool], None]: +def prepare_python_release( + session: Session, package: PackageInfo +) -> Callable[[bool], None]: twine_username = session.env.get("PYPI_USERNAME") twine_password = session.env.get("PYPI_PASSWORD") @@ -412,7 +425,9 @@ def publish(dry_run: bool): def get_packages(session: Session) -> dict[str, PackageInfo]: packages: dict[str, PackageInfo] = { - "reactpy": PackageInfo(ROOT_DIR, "py", get_reactpy_package_version(session)) + "reactpy": PackageInfo( + "reactpy", ROOT_DIR, "py", get_reactpy_package_version(session) + ) } # collect javascript packages @@ -441,12 +456,13 @@ def get_packages(session: Session) -> dict[str, PackageInfo]: if pkg_name in packages: session.error(f"Duplicate package name {pkg_name}") - packages[pkg_name] = PackageInfo(pkg, "js", pkg_version) + packages[pkg_name] = PackageInfo(pkg_name, CLIENT_DIR, "js", pkg_version) return packages class PackageInfo(NamedTuple): + name: str path: Path language: LanguageName version: str diff --git a/src/client/packages/@reactpy/client/package.json b/src/client/packages/@reactpy/client/package.json index c878a3069..0217023f8 100644 --- a/src/client/packages/@reactpy/client/package.json +++ b/src/client/packages/@reactpy/client/package.json @@ -8,7 +8,7 @@ "type": "module", "version": "0.2.0", "dependencies": { - "event-to-object": "^0.1.0", + "event-to-object": "^0.1.1", "json-pointer": "^0.6.2" }, "devDependencies": { diff --git a/src/client/packages/event-to-object/package.json b/src/client/packages/event-to-object/package.json index caa871861..af0a817bb 100644 --- a/src/client/packages/event-to-object/package.json +++ b/src/client/packages/event-to-object/package.json @@ -4,11 +4,10 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "name": "event-to-object", - "description": "A client for ReactPy implemented in React", + "description": "Convert native events to JSON serializable objects", "type": "module", - "version": "0.1.0", + "version": "0.1.1", "dependencies": { - "event-to-object": "file:packages/event-to-object", "json-pointer": "^0.6.2" }, "devDependencies": { From 6da1f7065ac4d915ebac4ab18d38091ff8b27532 Mon Sep 17 00:00:00 2001 From: rmorshea Date: Sat, 1 Apr 2023 20:12:45 -0600 Subject: [PATCH 2/2] fix sanic error --- src/reactpy/backend/sanic.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/reactpy/backend/sanic.py b/src/reactpy/backend/sanic.py index 41c59f7db..ab0f3bb67 100644 --- a/src/reactpy/backend/sanic.py +++ b/src/reactpy/backend/sanic.py @@ -161,10 +161,8 @@ def _setup_single_view_dispatcher_route( async def model_stream( request: request.Request, socket: WebSocketConnection, path: str = "" ) -> None: - app = request.app - try: - asgi_app = app._asgi_app - except AttributeError: # pragma: no cover + asgi_app = getattr(request.app, "_asgi_app", None) + if asgi_app is None: # pragma: no cover logger.warning("No scope. Sanic may not be running with an ASGI server") scope: MutableMapping[str, Any] = {} else: