replit-river 0.17.11__py3-none-any.whl → 0.17.13__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.
@@ -101,6 +101,8 @@ class RiverConcreteType(BaseModel):
101
101
  items: "RiverType | None" = Field(default=None)
102
102
  const: str | int | None = Field(default=None)
103
103
  patternProperties: dict[str, "RiverType"] = Field(default_factory=lambda: dict())
104
+ id_: str | None = Field(default=None, alias="$id")
105
+ ref: str | None = Field(default=None, alias="$ref")
104
106
 
105
107
 
106
108
  class RiverUnionType(BaseModel):
@@ -158,7 +160,12 @@ def encode_type(
158
160
  base_model: str,
159
161
  in_module: list[ModuleName],
160
162
  permit_unknown_members: bool,
163
+ type_registry: dict[str, TypeName] | None = None,
161
164
  ) -> tuple[TypeExpression, list[ModuleName], list[FileContents], set[TypeName]]:
165
+ # Registry to track $id -> TypeName mappings for resolving $ref
166
+ if type_registry is None:
167
+ type_registry = {}
168
+
162
169
  def _make_open_union_type_expr(one_of: list[TypeExpression]) -> OpenUnionTypeExpr:
163
170
  if base_model == "RiverError":
164
171
  return OpenUnionTypeExpr(
@@ -175,6 +182,17 @@ def encode_type(
175
182
 
176
183
  encoder_name: TypeName | None = None # defining this up here to placate mypy
177
184
  chunks: list[FileContents] = []
185
+
186
+ # Handle $ref - return a forward reference to the registered type
187
+ if isinstance(type, RiverConcreteType) and type.ref is not None:
188
+ ref_id = type.ref
189
+ if ref_id in type_registry:
190
+ # Use forward reference string for the type
191
+ return (TypeName(f'"{type_registry[ref_id].value}"'), [], [], set())
192
+ else:
193
+ # Unknown ref, fall back to Any
194
+ return (TypeName("Any"), [], [], set())
195
+
178
196
  if isinstance(type, RiverNotType):
179
197
  return (NoneTypeExpr(), [], [], set())
180
198
  elif isinstance(type, RiverUnionType):
@@ -269,6 +287,7 @@ def encode_type(
269
287
  base_model,
270
288
  in_module,
271
289
  permit_unknown_members=permit_unknown_members,
290
+ type_registry=type_registry,
272
291
  )
273
292
  one_of.append(type_name)
274
293
  chunks.extend(contents)
@@ -304,6 +323,7 @@ def encode_type(
304
323
  base_model,
305
324
  in_module,
306
325
  permit_unknown_members=permit_unknown_members,
326
+ type_registry=type_registry,
307
327
  )
308
328
  one_of.append(type_name)
309
329
  chunks.extend(contents)
@@ -377,6 +397,7 @@ def encode_type(
377
397
  base_model,
378
398
  in_module,
379
399
  permit_unknown_members=permit_unknown_members,
400
+ type_registry=type_registry,
380
401
  )
381
402
  any_of.append(type_name)
382
403
  chunks.extend(contents)
@@ -462,6 +483,7 @@ def encode_type(
462
483
  base_model,
463
484
  in_module,
464
485
  permit_unknown_members=permit_unknown_members,
486
+ type_registry=type_registry,
465
487
  )
466
488
  elif isinstance(type, RiverConcreteType):
467
489
  typeddict_encoder = list[str]()
@@ -509,6 +531,7 @@ def encode_type(
509
531
  base_model,
510
532
  in_module,
511
533
  permit_unknown_members=permit_unknown_members,
534
+ type_registry=type_registry,
512
535
  )
513
536
  typeddict_encoder.append("TODO: dstewart")
514
537
  return (ListTypeExpr(type_name), module_info, type_chunks, encoder_names)
@@ -523,10 +546,15 @@ def encode_type(
523
546
  base_model,
524
547
  in_module,
525
548
  permit_unknown_members=permit_unknown_members,
549
+ type_registry=type_registry,
526
550
  )
527
551
  return (DictTypeExpr(type_name), module_info, type_chunks, encoder_names)
528
552
  assert type.type == "object", type.type
529
553
 
554
+ # Register $id for this type so $ref can resolve to it
555
+ if type.id_ is not None:
556
+ type_registry[type.id_] = prefix
557
+
530
558
  current_chunks: list[str] = [
531
559
  f"class {render_literal_type(prefix)}({base_model}):"
532
560
  ]
@@ -551,6 +579,7 @@ def encode_type(
551
579
  "BaseModel" if base_model == "RiverError" else base_model,
552
580
  in_module,
553
581
  permit_unknown_members=permit_unknown_members,
582
+ type_registry=type_registry,
554
583
  )
555
584
  encoder_name = None
556
585
  chunks.extend(contents)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: replit-river
3
- Version: 0.17.11
3
+ Version: 0.17.13
4
4
  Summary: Replit river toolkit for Python
5
5
  Author-email: Replit <eng@replit.com>
6
6
  License: MIT License
@@ -33,7 +33,7 @@ Classifier: Programming Language :: Python :: 3
33
33
  Classifier: Programming Language :: Python :: 3.11
34
34
  Classifier: Programming Language :: Python :: 3.12
35
35
  Classifier: Topic :: Internet
36
- Requires-Python: <4,>=3.11
36
+ Requires-Python: <4,>=3.12
37
37
  Requires-Dist: aiochannel>=1.2.1
38
38
  Requires-Dist: grpcio-tools>=1.59.3
39
39
  Requires-Dist: grpcio>=1.59.3
@@ -43,7 +43,7 @@ Requires-Dist: opentelemetry-api>=1.28.2
43
43
  Requires-Dist: opentelemetry-sdk>=1.28.2
44
44
  Requires-Dist: protobuf>=5.28.3
45
45
  Requires-Dist: pydantic-core>=2.20.1
46
- Requires-Dist: pydantic==2.9.2
46
+ Requires-Dist: pydantic<3,>=2.9.0
47
47
  Requires-Dist: websockets<14,>=13.0
48
48
  Description-Content-Type: text/markdown
49
49
 
@@ -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=EU3cuwDegkLI9V6SG0IWPPdLQvBl6dUyrSuu0JDYGpQ,59963
22
+ replit_river/codegen/client.py,sha256=LvNwtKd7apQyL7hhOscinhhfY2_IQZEEjRID88ImUSE,61189
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.11.dist-info/METADATA,sha256=9U5m2LMSUkhZ5TldtgasWKeFxiEWWciFsCH_xnd3Q9Q,4791
33
- replit_river-0.17.11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
34
- replit_river-0.17.11.dist-info/licenses/LICENSE,sha256=kyZ5E3kOH4dzPet_xD0w6xi04e-0fGT0HRMhKyLyLC0,1063
35
- replit_river-0.17.11.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any