replit-river 0.17.13__py3-none-any.whl → 0.17.15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- replit_river/codegen/client.py +59 -25
- {replit_river-0.17.13.dist-info → replit_river-0.17.15.dist-info}/METADATA +1 -1
- {replit_river-0.17.13.dist-info → replit_river-0.17.15.dist-info}/RECORD +5 -5
- {replit_river-0.17.13.dist-info → replit_river-0.17.15.dist-info}/WHEEL +0 -0
- {replit_river-0.17.13.dist-info → replit_river-0.17.15.dist-info}/licenses/LICENSE +0 -0
replit_river/codegen/client.py
CHANGED
|
@@ -389,7 +389,8 @@ def encode_type(
|
|
|
389
389
|
type = original_type
|
|
390
390
|
any_of: list[TypeExpression] = []
|
|
391
391
|
|
|
392
|
-
|
|
392
|
+
# Collect (type_check, encoder_expr) pairs for building ternary chain
|
|
393
|
+
encoder_parts: list[tuple[str | None, str]] = []
|
|
393
394
|
for i, t in enumerate(type.anyOf):
|
|
394
395
|
type_name, _, contents, _ = encode_type(
|
|
395
396
|
t,
|
|
@@ -403,34 +404,65 @@ def encode_type(
|
|
|
403
404
|
chunks.extend(contents)
|
|
404
405
|
if isinstance(t, RiverConcreteType):
|
|
405
406
|
if t.type == "string":
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
# TODO(dstewart): This structure changed since we were incorrectly
|
|
409
|
-
# leaking ListTypeExprs into codegen. This generated
|
|
410
|
-
# code is probably wrong.
|
|
407
|
+
encoder_parts.append(("isinstance(x, str)", "x"))
|
|
408
|
+
elif t.type == "array":
|
|
411
409
|
match type_name:
|
|
412
|
-
case ListTypeExpr(inner_type_name)
|
|
413
|
-
|
|
414
|
-
|
|
410
|
+
case ListTypeExpr(inner_type_name) if isinstance(
|
|
411
|
+
inner_type_name, TypeName
|
|
412
|
+
):
|
|
413
|
+
# Primitives don't need encoding
|
|
414
|
+
inner_type_str = render_literal_type(inner_type_name)
|
|
415
|
+
if inner_type_str in ("str", "int", "float", "bool", "Any"):
|
|
416
|
+
encoder_parts.append(("isinstance(x, list)", "list(x)"))
|
|
417
|
+
else:
|
|
418
|
+
encoder_parts.append(
|
|
419
|
+
(
|
|
420
|
+
"isinstance(x, list)",
|
|
421
|
+
f"[encode_{inner_type_str}(y) for y in x]",
|
|
422
|
+
)
|
|
423
|
+
)
|
|
424
|
+
case _:
|
|
425
|
+
encoder_parts.append(("isinstance(x, list)", "list(x)"))
|
|
426
|
+
elif t.type == "object":
|
|
427
|
+
match type_name:
|
|
428
|
+
case TypeName(value):
|
|
429
|
+
encoder_parts.append(
|
|
430
|
+
("isinstance(x, dict)", f"encode_{value}(x)")
|
|
415
431
|
)
|
|
432
|
+
case _:
|
|
433
|
+
encoder_parts.append(("isinstance(x, dict)", "dict(x)"))
|
|
434
|
+
elif t.type in ("number", "integer"):
|
|
435
|
+
match type_name:
|
|
416
436
|
case LiteralTypeExpr(const):
|
|
417
|
-
|
|
437
|
+
encoder_parts.append((f"x == {repr(const)}", repr(const)))
|
|
438
|
+
case _:
|
|
439
|
+
encoder_parts.append(("isinstance(x, (int, float))", "x"))
|
|
440
|
+
elif t.type == "boolean":
|
|
441
|
+
encoder_parts.append(("isinstance(x, bool)", "x"))
|
|
442
|
+
elif t.type == "null" or t.type == "undefined":
|
|
443
|
+
encoder_parts.append(("x is None", "None"))
|
|
444
|
+
else:
|
|
445
|
+
# Fallback for other types
|
|
446
|
+
match type_name:
|
|
418
447
|
case TypeName(value):
|
|
419
|
-
|
|
448
|
+
encoder_parts.append((None, f"encode_{value}(x)"))
|
|
449
|
+
case LiteralTypeExpr(const):
|
|
450
|
+
encoder_parts.append((None, repr(const)))
|
|
420
451
|
case NoneTypeExpr():
|
|
421
|
-
|
|
422
|
-
case
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
452
|
+
encoder_parts.append((None, "None"))
|
|
453
|
+
case _:
|
|
454
|
+
encoder_parts.append((None, "x"))
|
|
455
|
+
|
|
456
|
+
# Build the ternary chain from encoder_parts
|
|
457
|
+
typeddict_encoder = list[str]()
|
|
458
|
+
for i, (type_check, encoder_expr) in enumerate(encoder_parts):
|
|
459
|
+
is_last = i == len(encoder_parts) - 1
|
|
460
|
+
if is_last or type_check is None:
|
|
461
|
+
# Last item or no type check - just the expression
|
|
462
|
+
typeddict_encoder.append(encoder_expr)
|
|
463
|
+
else:
|
|
464
|
+
# Add expression with type check
|
|
465
|
+
typeddict_encoder.append(f"{encoder_expr} if {type_check} else")
|
|
434
466
|
if permit_unknown_members:
|
|
435
467
|
union = _make_open_union_type_expr(any_of)
|
|
436
468
|
else:
|
|
@@ -603,7 +635,9 @@ def encode_type(
|
|
|
603
635
|
f"encode_{render_literal_type(type_name)}"
|
|
604
636
|
)
|
|
605
637
|
encoder_names.add(encoder_name)
|
|
606
|
-
typeddict_encoder.append(
|
|
638
|
+
typeddict_encoder.append(
|
|
639
|
+
f"{render_literal_type(encoder_name)}(x[{repr(name)}])"
|
|
640
|
+
)
|
|
607
641
|
elif isinstance(prop, RiverConcreteType):
|
|
608
642
|
if name == "$kind":
|
|
609
643
|
safe_name = "kind"
|
|
@@ -19,7 +19,7 @@ replit_river/transport_options.py,sha256=Kx3n6_x6sA69WV52EUvm-GzJhDaaewUQzbtcdPl
|
|
|
19
19
|
replit_river/websocket_wrapper.py,sha256=xrk421A5eXTH2bjAcNeBZN96zTO6xQsl0VS9qcwus6M,814
|
|
20
20
|
replit_river/codegen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
21
|
replit_river/codegen/__main__.py,sha256=LyKe1OXIyev0BuUcu43iu6zBLJzeogQ8DocxDkALD-Q,153
|
|
22
|
-
replit_river/codegen/client.py,sha256=
|
|
22
|
+
replit_river/codegen/client.py,sha256=7N_C-Cof8PoNBzcTRcE1qO_PgOzRPqCTRcWUwSRI7dE,63040
|
|
23
23
|
replit_river/codegen/format.py,sha256=pLa9nWlw8hTOnjzZjMsMpgcmNYiLaF5VAHNQTwwJ7Zw,285
|
|
24
24
|
replit_river/codegen/run.py,sha256=InJaUDJft80pY7v2l-LoXHr8HYg3Bmb_6XQvlqgvxv4,3170
|
|
25
25
|
replit_river/codegen/schema.py,sha256=y3kzrEPgzW9gKMjqiF2souZk47mE_kuFkHlsxRdD560,5344
|
|
@@ -29,7 +29,7 @@ replit_river/v2/__init__.py,sha256=Fi4wP87qHOQwaWQmVbPJOOiGfkiZ6gTWg5bF5J8je5s,1
|
|
|
29
29
|
replit_river/v2/client.py,sha256=PQ1qz15lFTdMOs0kktBdzMUEYD66OnJJN0loYFVjdn4,7241
|
|
30
30
|
replit_river/v2/client_transport.py,sha256=swtsFoWIX8nnG5cBeHMkZSZsJ5SW-VbdNHBdLtldMgU,3445
|
|
31
31
|
replit_river/v2/session.py,sha256=8EMKw8bevoIrMfQBKMl3oXFlOJ91lzjmuqsm3qZN8Ts,54147
|
|
32
|
-
replit_river-0.17.
|
|
33
|
-
replit_river-0.17.
|
|
34
|
-
replit_river-0.17.
|
|
35
|
-
replit_river-0.17.
|
|
32
|
+
replit_river-0.17.15.dist-info/METADATA,sha256=Ji0xKb-X5DoBLLJr48V13DwVAIEZDAcX6dnyITxWp8Y,4794
|
|
33
|
+
replit_river-0.17.15.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
34
|
+
replit_river-0.17.15.dist-info/licenses/LICENSE,sha256=kyZ5E3kOH4dzPet_xD0w6xi04e-0fGT0HRMhKyLyLC0,1063
|
|
35
|
+
replit_river-0.17.15.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|