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.
@@ -389,7 +389,8 @@ def encode_type(
389
389
  type = original_type
390
390
  any_of: list[TypeExpression] = []
391
391
 
392
- typeddict_encoder = []
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
- typeddict_encoder.extend(["x", " if isinstance(x, str) else "])
407
- else:
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
- typeddict_encoder.append(
414
- f"encode_{render_literal_type(inner_type_name)}(x)"
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
- typeddict_encoder.append(repr(const))
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
- typeddict_encoder.append(f"encode_{value}(x)")
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
- typeddict_encoder.append("None")
422
- case other:
423
- _o2: (
424
- DictTypeExpr
425
- | OpenUnionTypeExpr
426
- | UnionTypeExpr
427
- | LiteralType
428
- ) = other
429
- raise ValueError(
430
- f"What does it mean to have {
431
- render_type_expr(_o2)
432
- } here?"
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(f"{encoder_name}(x[{repr(name)}])")
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"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: replit-river
3
- Version: 0.17.13
3
+ Version: 0.17.15
4
4
  Summary: Replit river toolkit for Python
5
5
  Author-email: Replit <eng@replit.com>
6
6
  License: MIT License
@@ -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=LvNwtKd7apQyL7hhOscinhhfY2_IQZEEjRID88ImUSE,61189
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.13.dist-info/METADATA,sha256=qxC6HcTGBxbAXq-HNidfwfZOISeg7V6ZkFDTqVKkLP0,4794
33
- replit_river-0.17.13.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
34
- replit_river-0.17.13.dist-info/licenses/LICENSE,sha256=kyZ5E3kOH4dzPet_xD0w6xi04e-0fGT0HRMhKyLyLC0,1063
35
- replit_river-0.17.13.dist-info/RECORD,,
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,,