openrewrite-remote 0.11.0__py3-none-any.whl → 0.13.0__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.
@@ -1,100 +1,147 @@
1
+ # type: ignore
1
2
  from __future__ import absolute_import
2
3
 
3
4
  import decimal
4
5
  from abc import ABC, abstractmethod
5
6
  from dataclasses import fields
6
7
  from pathlib import Path
7
- from typing import Dict, Type, Any, Callable, ClassVar, TypeVar, Generic, Protocol, List, TYPE_CHECKING
8
+ from typing import (
9
+ Any,
10
+ Callable,
11
+ ClassVar,
12
+ Dict,
13
+ Generic,
14
+ List,
15
+ Optional,
16
+ Protocol,
17
+ TYPE_CHECKING,
18
+ Type,
19
+ TypeVar,
20
+ )
8
21
  from uuid import UUID
9
-
10
22
  import cbor2
11
23
  from cbor2 import CBOREncoder
12
- from rewrite import Tree, Markers, Marker, ParseErrorVisitor, Cursor, Style
13
- from rewrite.remote.type_utils import to_java_type_name, to_java_field_name, to_java_type_name_from_value
24
+
14
25
  from rewrite.visitor import TreeVisitor
26
+ from rewrite import Tree, Markers, Marker, ParseErrorVisitor, Cursor, Style
15
27
 
16
- from . import remote_utils
17
- from .event import *
18
- from .remote_utils import Operation
28
+ from rewrite_remote.type_utils import (
29
+ to_java_type_name,
30
+ to_java_field_name,
31
+ to_java_type_name_from_value,
32
+ )
33
+
34
+ from rewrite_remote import remote_utils
35
+ from rewrite_remote.event import *
36
+ from rewrite_remote.remote_utils import Operation
19
37
 
20
38
  if TYPE_CHECKING:
21
39
  from .remoting import RemotingContext
22
40
 
23
- A = TypeVar('A')
24
- T = TypeVar('T', bound=Tree)
25
- V = TypeVar('V')
26
- I = TypeVar('I')
41
+ A = TypeVar("A")
42
+ T = TypeVar("T", bound=Tree)
43
+ V = TypeVar("V")
44
+ I = TypeVar("I")
27
45
 
28
46
 
29
47
  class Sender(Protocol):
30
- def send(self, after: T, before: Optional[T], ctx: 'SenderContext') -> None:
31
- ...
48
+ def send(self, after: T, before: Optional[T], ctx: "SenderContext") -> None: ...
32
49
 
33
50
 
34
51
  class OmniSender(Sender):
35
- def send(self, after: Tree, before: Optional[Tree], ctx: 'SenderContext'):
52
+ def send(self, after: Tree, before: Optional[Tree], ctx: "SenderContext") -> None:
36
53
  sender = ctx.new_sender(type(after))
37
54
  sender.send(after, before, ctx)
38
55
 
39
56
 
40
57
  class TreeSender(Protocol):
41
- def send_node(self, diff_event: DiffEvent, visitor: Callable[['TreeSender'], None]):
42
- ...
58
+ def send_node(
59
+ self, diff_event: DiffEvent, visitor: Callable[["TreeSender"], None]
60
+ ) -> None: ...
43
61
 
44
- def send_value(self, diff_event: DiffEvent):
45
- ...
62
+ def send_value(self, diff_event: DiffEvent) -> None: ...
46
63
 
47
- def flush(self):
48
- ...
64
+ def flush(self) -> None: ...
49
65
 
50
66
 
51
67
  class SenderContext(Generic[T]):
52
- Registry: Dict[Type, Callable[[], Sender]] = {}
53
-
54
- def __init__(self, sender: 'TreeSender', visitor: TreeVisitor = None, before: Optional[Any] = None):
68
+ """
69
+ Context for serialization of tree nodes and values.
70
+ """
71
+
72
+ Registry: Dict[Type[Any], Callable[[], Sender]] = {}
73
+
74
+ def __init__(
75
+ self,
76
+ sender: "TreeSender",
77
+ visitor: TreeVisitor = None,
78
+ before: Optional[Any] = None,
79
+ ):
55
80
  self.sender = sender
56
81
  self.visitor = visitor
57
82
  self.before = before
58
83
 
59
- def new_sender(self, type_: Type) -> Sender:
84
+ def new_sender(self, type_: Type[Any]) -> Sender:
60
85
  for entry_type, factory in self.Registry.items():
61
86
  # FIXME find better solution
62
87
  try:
63
- if type_.__bases__.__contains__(entry_type) or issubclass(type_, entry_type):
88
+ if type_.__bases__.__contains__(entry_type) or issubclass(
89
+ type_, entry_type
90
+ ):
64
91
  return factory()
65
92
  except:
66
93
  pass
67
94
  raise ValueError(f"Unsupported sender type: {type_}")
68
95
 
69
- def fork(self, visitor: TreeVisitor, before: Optional[Any] = None) -> 'SenderContext':
96
+ def fork(
97
+ self, visitor: TreeVisitor, before: Optional[Any] = None
98
+ ) -> "SenderContext[T]":
70
99
  return SenderContext(self.sender, visitor, before)
71
100
 
72
- def visit(self, consumer: Callable[[V, 'SenderContext'], None], after: V, before: Optional[V] = None):
101
+ def visit(
102
+ self,
103
+ consumer: Callable[[V, "SenderContext"], None],
104
+ after: V,
105
+ before: Optional[V] = None,
106
+ ) -> None:
73
107
  save_before = self.before
74
108
  self.before = before
75
109
  consumer(after, self)
76
110
  self.before = save_before
77
111
 
78
- def send_tree(self, after: T, ctx: 'SenderContext'):
112
+ def send_tree(self, after: T, ctx: "SenderContext[T]") -> None:
79
113
  after.accept(self.visitor, ctx)
80
114
 
81
- def send_any_tree(self, after: T, before: Optional[T]):
115
+ def send_any_tree(self, after: T, before: Optional[T]) -> None:
82
116
  OmniSender().send(after, before, self)
83
117
 
84
- def send_node(self, owner: A, extractor: Callable[[A], Optional[V]], details: Callable[[V, 'SenderContext'], None]):
85
- self.send_node_internal(extractor(owner), extractor(self.before) if self.before is not None else None, details)
86
-
87
- def send_value(self, owner, value_extractor: Callable[[T], Optional[V]]):
118
+ def send_node(
119
+ self,
120
+ owner: A,
121
+ extractor: Callable[[A], Optional[V]],
122
+ details: Callable[[V, "SenderContext[T]"], None],
123
+ ) -> None:
124
+ self.send_node_internal(
125
+ extractor(owner),
126
+ extractor(self.before) if self.before is not None else None,
127
+ details,
128
+ )
129
+
130
+ def send_value(
131
+ self, owner: Any, value_extractor: Callable[[T], Optional[V]]
132
+ ) -> None:
88
133
  after_value = value_extractor(owner)
89
134
  before_value = value_extractor(self.before) if self.before is not None else None
90
135
  self.send_value_internal(after_value, before_value)
91
136
 
92
- def send_typed_value(self, owner: A, value_extractor: Callable[[A], V]):
137
+ def send_typed_value(self, owner: A, value_extractor: Callable[[A], V]) -> None:
93
138
  after_value = value_extractor(owner)
94
139
  before_value = value_extractor(self.before) if self.before is not None else None
95
140
  self.send_typed_value_internal(after_value, before_value)
96
141
 
97
- def send_list_event(self, after: Optional[List[V]], before: Optional[List[V]]) -> bool:
142
+ def send_list_event(
143
+ self, after: Optional[List[V]], before: Optional[List[V]]
144
+ ) -> bool:
98
145
  if after == before:
99
146
  evt = DiffEvent(EventType.NoChange, None, None)
100
147
  elif before is None:
@@ -105,12 +152,21 @@ class SenderContext(Generic[T]):
105
152
  evt = DiffEvent(EventType.Update, None, len(after))
106
153
 
107
154
  self.sender.send_value(evt)
108
- return evt.event_type != EventType.NoChange and evt.event_type != EventType.Delete
109
-
110
- def send_nodes(self, owner: A, element_extractor: Callable[[A], List[V]],
111
- details: Callable[[V, 'SenderContext'], None], id_function: Callable[[V], I]):
155
+ return (
156
+ evt.event_type != EventType.NoChange and evt.event_type != EventType.Delete
157
+ )
158
+
159
+ def send_nodes(
160
+ self,
161
+ owner: A,
162
+ element_extractor: Callable[[A], List[V]],
163
+ details: Callable[[V, "SenderContext"], None],
164
+ id_function: Callable[[V], I],
165
+ ) -> None:
112
166
  after_list = element_extractor(owner)
113
- before_list = element_extractor(self.before) if self.before is not None else None
167
+ before_list = (
168
+ element_extractor(self.before) if self.before is not None else None
169
+ )
114
170
 
115
171
  if self.send_list_event(after_list, before_list):
116
172
  if before_list is not None:
@@ -122,17 +178,26 @@ class SenderContext(Generic[T]):
122
178
  id_function,
123
179
  lambda op, _1, _2, bv, av: {
124
180
  Operation.Delete: lambda: self.send_node_internal(av, bv, details),
125
- Operation.NoChange: lambda: self.send_node_internal(av, bv, details),
181
+ Operation.NoChange: lambda: self.send_node_internal(
182
+ av, bv, details
183
+ ),
126
184
  Operation.Add: lambda: self.send_node_internal(av, bv, details),
127
185
  Operation.Update: lambda: self.send_node_internal(av, bv, details),
128
- Operation.Move: lambda: NotImplementedError("Unexpected operation: " + str(op))
129
- }[op]()
186
+ Operation.Move: lambda: NotImplementedError(
187
+ "Unexpected operation: " + str(op)
188
+ ),
189
+ }[op](),
130
190
  )
131
191
 
132
192
  if before_list is not None:
133
193
  self.sender.send_value(DiffEvent(EventType.EndList, None, None))
134
194
 
135
- def send_values(self, owner, value_extractor: Callable[[T], List[V]], id_function: Callable[[V], I]):
195
+ def send_values(
196
+ self,
197
+ owner: T,
198
+ value_extractor: Callable[[T], List[V]],
199
+ id_function: Callable[[V], I],
200
+ ) -> None:
136
201
  after_list = value_extractor(owner)
137
202
  before_list = value_extractor(self.before) if self.before is not None else None
138
203
 
@@ -149,14 +214,21 @@ class SenderContext(Generic[T]):
149
214
  Operation.NoChange: lambda: self.send_value_internal(av, bv),
150
215
  Operation.Add: lambda: self.send_value_internal(av, bv),
151
216
  Operation.Update: lambda: self.send_value_internal(av, bv),
152
- Operation.Move: lambda: NotImplementedError("Unexpected operation: " + str(op))
153
- }[op]()
217
+ Operation.Move: lambda: NotImplementedError(
218
+ "Unexpected operation: " + str(op)
219
+ ),
220
+ }[op](),
154
221
  )
155
222
 
156
223
  if before_list is not None:
157
224
  self.sender.send_value(DiffEvent(EventType.EndList, None, None))
158
225
 
159
- def send_typed_values(self, owner: T, value_extractor: Callable[[T], List[V]], id_function: Callable[[V], I]):
226
+ def send_typed_values(
227
+ self,
228
+ owner: T,
229
+ value_extractor: Callable[[T], List[V]],
230
+ id_function: Callable[[V], I],
231
+ ) -> None:
160
232
  after_list = value_extractor(owner)
161
233
  before_list = value_extractor(self.before) if self.before is not None else None
162
234
 
@@ -173,22 +245,24 @@ class SenderContext(Generic[T]):
173
245
  Operation.NoChange: lambda: self.send_typed_value_internal(av, bv),
174
246
  Operation.Add: lambda: self.send_typed_value_internal(av, bv),
175
247
  Operation.Update: lambda: self.send_typed_value_internal(av, bv),
176
- Operation.Move: lambda: NotImplementedError("Unexpected operation: " + str(op))
177
- }[op]()
248
+ Operation.Move: lambda: NotImplementedError(
249
+ "Unexpected operation: " + str(op)
250
+ ),
251
+ }[op](),
178
252
  )
179
253
 
180
254
  if before_list is not None:
181
255
  self.sender.send_value(DiffEvent(EventType.EndList, None, None))
182
256
 
183
- def send_markers(self, markers: Markers, ignore):
257
+ def send_markers(self, markers: Markers, ignore: Optional[bool]) -> None:
184
258
  self.send_value(markers, lambda ms: ms.id)
185
259
  self.send_values(markers, lambda ms: ms.markers, lambda ms: ms.id)
186
260
 
187
- def send_tree_visitor(self, after: T, ctx: 'SenderContext'):
261
+ def send_tree_visitor(self, after: T, ctx: "SenderContext") -> None:
188
262
  after.accept(self.visitor, ctx)
189
263
 
190
264
  @staticmethod
191
- def register(type_: Type, sender_factory: Callable[[], Sender]):
265
+ def register(type_: Type, sender_factory: Callable[[], Sender]) -> None:
192
266
  SenderContext.Registry[type_] = sender_factory
193
267
 
194
268
  @staticmethod
@@ -198,12 +272,18 @@ class SenderContext(Generic[T]):
198
272
 
199
273
  return isinstance(after, (Tree, Markers)) or isinstance(before, (Tree, Markers))
200
274
 
201
- def send_node_internal(self, after: Optional[V], before: Optional[V],
202
- details: Callable[[V, 'SenderContext'], None]):
275
+ def send_node_internal(
276
+ self,
277
+ after: Optional[V],
278
+ before: Optional[V],
279
+ details: Callable[[V, "SenderContext"], None],
280
+ ) -> None:
203
281
  if self.are_equal(after, before):
204
282
  evt = DiffEvent(EventType.NoChange, None, None)
205
283
  elif before is None:
206
- concrete_type = to_java_type_name(type(after)) if after is not None else None
284
+ concrete_type = (
285
+ to_java_type_name(type(after)) if after is not None else None
286
+ )
207
287
  evt = DiffEvent(EventType.Add, concrete_type, None)
208
288
  elif after is None:
209
289
  evt = DiffEvent(EventType.Delete, None, None)
@@ -212,11 +292,13 @@ class SenderContext(Generic[T]):
212
292
 
213
293
  self.sender.send_node(evt, lambda _: self.visit(details, after, before))
214
294
 
215
- def send_value_internal(self, after: V, before: Optional[V]):
295
+ def send_value_internal(self, after: V, before: Optional[V]) -> None:
216
296
  if self.before is not None and self.are_equal(after, before):
217
297
  evt = DiffEvent(EventType.NoChange, None, None)
218
298
  elif self.before is None or before is None:
219
- concrete_type = to_java_type_name(type(after)) if isinstance(after, Marker) else None
299
+ concrete_type = (
300
+ to_java_type_name(type(after)) if isinstance(after, Marker) else None
301
+ )
220
302
  evt = DiffEvent(EventType.Add, concrete_type, after)
221
303
  elif after is None:
222
304
  evt = DiffEvent(EventType.Delete, None, None)
@@ -225,11 +307,13 @@ class SenderContext(Generic[T]):
225
307
 
226
308
  self.sender.send_value(evt)
227
309
 
228
- def send_typed_value_internal(self, after: V, before: Optional[V]):
310
+ def send_typed_value_internal(self, after: V, before: Optional[V]) -> None:
229
311
  if self.before is not None and self.are_equal(after, before):
230
312
  evt = DiffEvent(EventType.NoChange, None, None)
231
313
  elif self.before is None or before is None:
232
- concrete_type = to_java_type_name_from_value(after) if after is not None else None
314
+ concrete_type = (
315
+ to_java_type_name_from_value(after) if after is not None else None
316
+ )
233
317
  evt = DiffEvent(EventType.Add, concrete_type, after)
234
318
  elif after is None:
235
319
  evt = DiffEvent(EventType.Delete, None, None)
@@ -240,12 +324,17 @@ class SenderContext(Generic[T]):
240
324
 
241
325
 
242
326
  class SerializationContext:
243
- def __init__(self, remoting_context: 'RemotingContext',
244
- value_serializers: Optional[Dict[Type, 'ValueSerializer']] = None):
327
+ def __init__(
328
+ self,
329
+ remoting_context: "RemotingContext",
330
+ value_serializers: Optional[Dict[Type[Any], "ValueSerializer"]] = None,
331
+ ):
245
332
  self.remoting_context = remoting_context
246
333
  self.value_serializers = value_serializers or {}
247
334
 
248
- def serialize(self, value: Any, type_name: Optional[str], encoder: CBOREncoder):
335
+ def serialize(
336
+ self, value: Any, type_name: Optional[str], encoder: CBOREncoder
337
+ ) -> None:
249
338
  if value is None:
250
339
  encoder.encode_none(None)
251
340
  return
@@ -266,12 +355,14 @@ class JsonSender(TreeSender):
266
355
  self._context = context
267
356
  self._encoder = cbor2.CBOREncoder(self._stream)
268
357
 
269
- def send_node(self, diff_event, visitor):
358
+ def send_node(self, diff_event, visitor) -> None:
270
359
 
271
360
  if diff_event.event_type in (EventType.Add, EventType.Update):
272
361
  self._encoder.encode(
273
- [diff_event.event_type.value] if diff_event.concrete_type is None else [diff_event.event_type.value,
274
- diff_event.concrete_type])
362
+ [diff_event.event_type.value]
363
+ if diff_event.concrete_type is None
364
+ else [diff_event.event_type.value, diff_event.concrete_type]
365
+ )
275
366
 
276
367
  if self.Debug:
277
368
  print(f"SEND: {diff_event}")
@@ -287,12 +378,21 @@ class JsonSender(TreeSender):
287
378
 
288
379
  def send_value(self, diff_event):
289
380
  if diff_event.event_type in (EventType.Add, EventType.Update):
290
- self._encoder.encode_length(4, 3 if diff_event.concrete_type is not None else 2)
381
+ self._encoder.encode_length(
382
+ 4, 3 if diff_event.concrete_type is not None else 2
383
+ )
291
384
  self._encoder.encode_int(diff_event.event_type.value)
292
385
  if diff_event.concrete_type is not None:
293
386
  self._encoder.encode(diff_event.concrete_type)
294
- self._context.serialize(diff_event.msg, diff_event.concrete_type, self._encoder)
295
- elif diff_event.event_type in (EventType.Delete, EventType.NoChange, EventType.StartList, EventType.EndList):
387
+ self._context.serialize(
388
+ diff_event.msg, diff_event.concrete_type, self._encoder
389
+ )
390
+ elif diff_event.event_type in (
391
+ EventType.Delete,
392
+ EventType.NoChange,
393
+ EventType.StartList,
394
+ EventType.EndList,
395
+ ):
296
396
  self._encoder.encode([diff_event.event_type.value])
297
397
  else:
298
398
  raise NotImplementedError()
@@ -304,23 +404,34 @@ class JsonSender(TreeSender):
304
404
  self._stream.flush()
305
405
 
306
406
 
307
- INDEFINITE_ARRAY_START = b'\x9f'
308
- INDEFINITE_MAP_START = b'\xbf'
309
- BREAK_MARKER = b'\xff'
407
+ INDEFINITE_ARRAY_START = b"\x9f"
408
+ INDEFINITE_MAP_START = b"\xbf"
409
+ BREAK_MARKER = b"\xff"
310
410
 
311
411
 
312
412
  class ValueSerializer(ABC):
313
413
 
314
414
  @abstractmethod
315
- def serialize(self, value: Any, type_name: Optional[str], writer: CBOREncoder, context: SerializationContext):
415
+ def serialize(
416
+ self,
417
+ value: Any,
418
+ type_name: Optional[str],
419
+ writer: CBOREncoder,
420
+ context: SerializationContext,
421
+ ) -> None:
316
422
  pass
317
423
 
318
424
  @staticmethod
319
- def write_object_using_reflection(value: Any, type_name: Optional[str], with_id: bool,
320
- encoder: CBOREncoder, context: SerializationContext):
321
- if type(value).__qualname__ == 'JavaType.Primitive':
425
+ def write_object_using_reflection(
426
+ value: Any,
427
+ type_name: Optional[str],
428
+ with_id: bool,
429
+ encoder: CBOREncoder,
430
+ context: SerializationContext,
431
+ ) -> None:
432
+ if type(value).__qualname__ == "JavaType.Primitive":
322
433
  # FIXME implement type attribution support
323
- encoder.encode(['org.openrewrite.java.tree.JavaType$Primitive', 0])
434
+ encoder.encode(["org.openrewrite.java.tree.JavaType$Primitive", 0])
324
435
  return
325
436
  if with_id and (id := context.remoting_context.try_get_id(value)):
326
437
  encoder.encode_int(id)
@@ -335,14 +446,23 @@ class ValueSerializer(ABC):
335
446
  encoder.encode_int(id)
336
447
 
337
448
  for field in fields(value):
338
- if field.name[0] == '_' and (not hasattr(field.type, '__origin__') or field.type.__origin__ is not ClassVar):
449
+ if field.name[0] == "_" and (
450
+ not hasattr(field.type, "__origin__")
451
+ or field.type.__origin__ is not ClassVar
452
+ ):
339
453
  encoder.encode_string(to_java_field_name(field))
340
454
  context.serialize(getattr(value, field.name), None, encoder)
341
455
  encoder.write(BREAK_MARKER)
342
456
 
343
457
 
344
458
  class DefaultValueSerializer(ValueSerializer):
345
- def serialize(self, value: Any, type_name: Optional[str], encoder: CBOREncoder, context: SerializationContext):
459
+ def serialize(
460
+ self,
461
+ value: Any,
462
+ type_name: Optional[str],
463
+ encoder: CBOREncoder,
464
+ context: SerializationContext,
465
+ ) -> None:
346
466
  if isinstance(value, (int, float, str, bool, decimal.Decimal)):
347
467
  encoder.encode(value)
348
468
  elif value is None:
@@ -358,32 +478,34 @@ class DefaultValueSerializer(ValueSerializer):
358
478
  for item in value:
359
479
  context.serialize(item, None, encoder)
360
480
  elif isinstance(value, Markers):
361
- if (id := context.remoting_context.try_get_id(value)):
481
+ if id := context.remoting_context.try_get_id(value):
362
482
  encoder.encode_int(id)
363
483
  else:
364
484
  id = context.remoting_context.add(value)
365
485
  encoder.encode_length(5, 3)
366
- encoder.encode_string('@ref')
486
+ encoder.encode_string("@ref")
367
487
  encoder.encode_int(id)
368
- encoder.encode_string('id')
488
+ encoder.encode_string("id")
369
489
  encoder.encode_uuid(value.id)
370
- encoder.encode_string('markers')
490
+ encoder.encode_string("markers")
371
491
  encoder.encode_length(4, len(value.markers))
372
492
  for marker in value.markers:
373
493
  context.serialize(marker, None, encoder)
374
494
  elif isinstance(value, (Marker, Style)):
375
- if (id := context.remoting_context.try_get_id(value)):
495
+ if id := context.remoting_context.try_get_id(value):
376
496
  encoder.encode_int(id)
377
497
  else:
378
498
  id = context.remoting_context.add(value)
379
499
  encoder.write(INDEFINITE_MAP_START)
380
500
  encoder.encode_string("@c")
381
501
  encoder.encode_string(to_java_type_name(type(value)))
382
- encoder.encode_string('@ref')
502
+ encoder.encode_string("@ref")
383
503
  encoder.encode_int(id)
384
504
  for field in fields(value):
385
- if field.name[0] == '_' and (not hasattr(field.type,
386
- '__origin__') or field.type.__origin__ is not ClassVar):
505
+ if field.name[0] == "_" and (
506
+ not hasattr(field.type, "__origin__")
507
+ or field.type.__origin__ is not ClassVar
508
+ ):
387
509
  encoder.encode_string(to_java_field_name(field))
388
510
  context.serialize(getattr(value, field.name), None, encoder)
389
511
  encoder.write(BREAK_MARKER)
@@ -393,19 +515,29 @@ class DefaultValueSerializer(ValueSerializer):
393
515
  elif isinstance(value, complex):
394
516
  encoder.encode(str(value))
395
517
  else:
396
- ValueSerializer.write_object_using_reflection(value, type_name, False, encoder, context)
518
+ ValueSerializer.write_object_using_reflection(
519
+ value, type_name, False, encoder, context
520
+ )
397
521
 
398
522
 
399
- def delegate_based_serializer(delegate: Callable[[Any, Optional[str], CBOREncoder, SerializationContext], None]):
523
+ def delegate_based_serializer(
524
+ delegate: Callable[[Any, Optional[str], CBOREncoder, SerializationContext], None]
525
+ ) -> Type[ValueSerializer]:
400
526
  class DelegateBasedSerializer(ValueSerializer):
401
- def serialize(self, value: Any, type_name: Optional[str], encoder: CBOREncoder, context: SerializationContext):
527
+ def serialize(
528
+ self,
529
+ value: Any,
530
+ type_name: Optional[str],
531
+ encoder: CBOREncoder,
532
+ context: SerializationContext,
533
+ ) -> None:
402
534
  delegate(value, type_name, encoder, context)
403
535
 
404
536
  return DelegateBasedSerializer
405
537
 
406
538
 
407
539
  class ParseErrorSender(Sender):
408
- def send(self, after, before, ctx):
540
+ def send(self, after: Tree, before: Optional[Tree], ctx: "SenderContext") -> None:
409
541
  visitor = self.Visitor()
410
542
  visitor.visit(after, ctx.fork(visitor, before))
411
543