Skip to content

Commit 3a009b6

Browse files
authored
fix event-to-object + fix npm release (#962)
* fix event-to-object + fix npm release * fix sanic error
1 parent 82a8bd6 commit 3a009b6

File tree

4 files changed

+32
-19
lines changed

4 files changed

+32
-19
lines changed

Diff for: noxfile.py

+27-11
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
from typing import Literal, Protocol, TypeAlias
2222

2323
class ReleasePrepFunc(Protocol):
24-
def __call__(self, session: Session) -> Callable[[bool], None]:
24+
def __call__(
25+
self, session: Session, package: PackageInfo
26+
) -> Callable[[bool], None]:
2527
...
2628

2729

@@ -309,7 +311,7 @@ def publish(
309311
if tag_pkg not in packages:
310312
session.error(f"Tag {tag} references package {tag_pkg} that does not exist")
311313

312-
pkg_path, pkg_lang, pkg_ver = packages[tag_pkg]
314+
pkg_name, pkg_path, pkg_lang, pkg_ver = pkg_info = packages[tag_pkg]
313315
if pkg_ver != tag_ver:
314316
session.error(
315317
f"Tag {tag} references version {tag_ver} of package {tag_pkg}, "
@@ -318,7 +320,7 @@ def publish(
318320

319321
session.chdir(pkg_path)
320322
session.log(f"Preparing {tag_pkg} for release...")
321-
publishers.append((pkg_path, release_prep[pkg_lang](session)))
323+
publishers.append((pkg_path, release_prep[pkg_lang](session, pkg_info)))
322324

323325
for pkg_path, publish in publishers:
324326
session.log(f"Publishing {pkg_path}...")
@@ -353,21 +355,30 @@ def get_reactpy_script_env() -> dict[str, str]:
353355
}
354356

355357

356-
def prepare_javascript_release(session: Session) -> Callable[[bool], None]:
358+
def prepare_javascript_release(
359+
session: Session, package: PackageInfo
360+
) -> Callable[[bool], None]:
357361
node_auth_token = session.env.get("NODE_AUTH_TOKEN")
358362
if node_auth_token is None:
359363
session.error("NODE_AUTH_TOKEN environment variable must be set")
360364

361-
# TODO: Make this `ci` instead of `install` somehow. By default `npm install` at
362-
# workspace root does not generate a lockfile which is required by `npm ci`.
363-
session.run("npm", "install", external=True)
365+
session.run("npm", "ci", external=True)
364366

365367
def publish(dry_run: bool) -> None:
366368
if dry_run:
367-
session.run("npm", "pack", "--dry-run", external=True)
369+
session.run(
370+
"npm",
371+
"--workspace",
372+
package.name,
373+
"pack",
374+
"--dry-run",
375+
external=True,
376+
)
368377
return
369378
session.run(
370379
"npm",
380+
"--workspace",
381+
package.name,
371382
"publish",
372383
"--access",
373384
"public",
@@ -378,7 +389,9 @@ def publish(dry_run: bool) -> None:
378389
return publish
379390

380391

381-
def prepare_python_release(session: Session) -> Callable[[bool], None]:
392+
def prepare_python_release(
393+
session: Session, package: PackageInfo
394+
) -> Callable[[bool], None]:
382395
twine_username = session.env.get("PYPI_USERNAME")
383396
twine_password = session.env.get("PYPI_PASSWORD")
384397

@@ -412,7 +425,9 @@ def publish(dry_run: bool):
412425

413426
def get_packages(session: Session) -> dict[str, PackageInfo]:
414427
packages: dict[str, PackageInfo] = {
415-
"reactpy": PackageInfo(ROOT_DIR, "py", get_reactpy_package_version(session))
428+
"reactpy": PackageInfo(
429+
"reactpy", ROOT_DIR, "py", get_reactpy_package_version(session)
430+
)
416431
}
417432

418433
# collect javascript packages
@@ -441,12 +456,13 @@ def get_packages(session: Session) -> dict[str, PackageInfo]:
441456
if pkg_name in packages:
442457
session.error(f"Duplicate package name {pkg_name}")
443458

444-
packages[pkg_name] = PackageInfo(pkg, "js", pkg_version)
459+
packages[pkg_name] = PackageInfo(pkg_name, CLIENT_DIR, "js", pkg_version)
445460

446461
return packages
447462

448463

449464
class PackageInfo(NamedTuple):
465+
name: str
450466
path: Path
451467
language: LanguageName
452468
version: str

Diff for: src/client/packages/@reactpy/client/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"type": "module",
99
"version": "0.2.0",
1010
"dependencies": {
11-
"event-to-object": "^0.1.0",
11+
"event-to-object": "^0.1.1",
1212
"json-pointer": "^0.6.2"
1313
},
1414
"devDependencies": {

Diff for: src/client/packages/event-to-object/package.json

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44
"main": "dist/index.js",
55
"types": "dist/index.d.ts",
66
"name": "event-to-object",
7-
"description": "A client for ReactPy implemented in React",
7+
"description": "Convert native events to JSON serializable objects",
88
"type": "module",
9-
"version": "0.1.0",
9+
"version": "0.1.1",
1010
"dependencies": {
11-
"event-to-object": "file:packages/event-to-object",
1211
"json-pointer": "^0.6.2"
1312
},
1413
"devDependencies": {

Diff for: src/reactpy/backend/sanic.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,8 @@ def _setup_single_view_dispatcher_route(
161161
async def model_stream(
162162
request: request.Request, socket: WebSocketConnection, path: str = ""
163163
) -> None:
164-
app = request.app
165-
try:
166-
asgi_app = app._asgi_app
167-
except AttributeError: # pragma: no cover
164+
asgi_app = getattr(request.app, "_asgi_app", None)
165+
if asgi_app is None: # pragma: no cover
168166
logger.warning("No scope. Sanic may not be running with an ASGI server")
169167
scope: MutableMapping[str, Any] = {}
170168
else:

0 commit comments

Comments
 (0)