openrewrite-remote 0.13.2__py3-none-any.whl → 0.13.4__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.
rewrite_remote/sender.py CHANGED
@@ -2,39 +2,36 @@
2
2
  from __future__ import absolute_import
3
3
 
4
4
  import decimal
5
- from abc import ABC, abstractmethod
6
5
  from dataclasses import fields
7
6
  from pathlib import Path
8
7
  from typing import (
9
- Any,
10
8
  Callable,
11
9
  ClassVar,
12
10
  Dict,
13
11
  Generic,
14
12
  List,
15
- Optional,
16
13
  Protocol,
17
14
  TYPE_CHECKING,
18
15
  Type,
19
16
  TypeVar,
20
17
  )
21
18
  from uuid import UUID
19
+
22
20
  import cbor2
23
21
  from cbor2 import CBOREncoder
24
-
25
- from rewrite.visitor import TreeVisitor
26
22
  from rewrite import Tree, Markers, Marker, ParseErrorVisitor, Cursor, Style
23
+ from rewrite.visitor import TreeVisitor
24
+ from rewrite.java import JavaType
27
25
 
26
+ from rewrite_remote import remote_utils
27
+ from rewrite_remote.event import *
28
+ from rewrite_remote.remote_utils import Operation
28
29
  from rewrite_remote.type_utils import (
29
30
  to_java_type_name,
30
31
  to_java_field_name,
31
32
  to_java_type_name_from_value,
32
33
  )
33
34
 
34
- from rewrite_remote import remote_utils
35
- from rewrite_remote.event import *
36
- from rewrite_remote.remote_utils import Operation
37
-
38
35
  if TYPE_CHECKING:
39
36
  from .remoting import RemotingContext
40
37
 
@@ -56,7 +53,7 @@ class OmniSender(Sender):
56
53
 
57
54
  class TreeSender(Protocol):
58
55
  def send_node(
59
- self, diff_event: DiffEvent, visitor: Callable[["TreeSender"], None]
56
+ self, diff_event: DiffEvent, visitor: Callable[["TreeSender"], None]
60
57
  ) -> None: ...
61
58
 
62
59
  def send_value(self, diff_event: DiffEvent) -> None: ...
@@ -72,10 +69,10 @@ class SenderContext(Generic[T]):
72
69
  Registry: Dict[Type[Any], Callable[[], Sender]] = {}
73
70
 
74
71
  def __init__(
75
- self,
76
- sender: "TreeSender",
77
- visitor: TreeVisitor = None,
78
- before: Optional[Any] = None,
72
+ self,
73
+ sender: "TreeSender",
74
+ visitor: TreeVisitor = None,
75
+ before: Optional[Any] = None,
79
76
  ):
80
77
  self.sender = sender
81
78
  self.visitor = visitor
@@ -86,7 +83,7 @@ class SenderContext(Generic[T]):
86
83
  # FIXME find better solution
87
84
  try:
88
85
  if type_.__bases__.__contains__(entry_type) or issubclass(
89
- type_, entry_type
86
+ type_, entry_type
90
87
  ):
91
88
  return factory()
92
89
  except:
@@ -94,15 +91,15 @@ class SenderContext(Generic[T]):
94
91
  raise ValueError(f"Unsupported sender type: {type_}")
95
92
 
96
93
  def fork(
97
- self, visitor: TreeVisitor, before: Optional[Any] = None
94
+ self, visitor: TreeVisitor, before: Optional[Any] = None
98
95
  ) -> "SenderContext[T]":
99
96
  return SenderContext(self.sender, visitor, before)
100
97
 
101
98
  def visit(
102
- self,
103
- consumer: Callable[[V, "SenderContext"], None],
104
- after: V,
105
- before: Optional[V] = None,
99
+ self,
100
+ consumer: Callable[[V, "SenderContext"], None],
101
+ after: V,
102
+ before: Optional[V] = None,
106
103
  ) -> None:
107
104
  save_before = self.before
108
105
  self.before = before
@@ -116,10 +113,10 @@ class SenderContext(Generic[T]):
116
113
  OmniSender().send(after, before, self)
117
114
 
118
115
  def send_node(
119
- self,
120
- owner: A,
121
- extractor: Callable[[A], Optional[V]],
122
- details: Callable[[V, "SenderContext[T]"], None],
116
+ self,
117
+ owner: A,
118
+ extractor: Callable[[A], Optional[V]],
119
+ details: Callable[[V, "SenderContext[T]"], None],
123
120
  ) -> None:
124
121
  self.send_node_internal(
125
122
  extractor(owner),
@@ -128,7 +125,7 @@ class SenderContext(Generic[T]):
128
125
  )
129
126
 
130
127
  def send_value(
131
- self, owner: Any, value_extractor: Callable[[T], Optional[V]]
128
+ self, owner: Any, value_extractor: Callable[[T], Optional[V]]
132
129
  ) -> None:
133
130
  after_value = value_extractor(owner)
134
131
  before_value = value_extractor(self.before) if self.before is not None else None
@@ -140,7 +137,7 @@ class SenderContext(Generic[T]):
140
137
  self.send_typed_value_internal(after_value, before_value)
141
138
 
142
139
  def send_list_event(
143
- self, after: Optional[List[V]], before: Optional[List[V]]
140
+ self, after: Optional[List[V]], before: Optional[List[V]]
144
141
  ) -> bool:
145
142
  if after == before:
146
143
  evt = DiffEvent(EventType.NoChange, None, None)
@@ -153,15 +150,15 @@ class SenderContext(Generic[T]):
153
150
 
154
151
  self.sender.send_value(evt)
155
152
  return (
156
- evt.event_type != EventType.NoChange and evt.event_type != EventType.Delete
153
+ evt.event_type != EventType.NoChange and evt.event_type != EventType.Delete
157
154
  )
158
155
 
159
156
  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],
157
+ self,
158
+ owner: A,
159
+ element_extractor: Callable[[A], List[V]],
160
+ details: Callable[[V, "SenderContext"], None],
161
+ id_function: Callable[[V], I],
165
162
  ) -> None:
166
163
  after_list = element_extractor(owner)
167
164
  before_list = (
@@ -193,10 +190,10 @@ class SenderContext(Generic[T]):
193
190
  self.sender.send_value(DiffEvent(EventType.EndList, None, None))
194
191
 
195
192
  def send_values(
196
- self,
197
- owner: T,
198
- value_extractor: Callable[[T], List[V]],
199
- id_function: Callable[[V], I],
193
+ self,
194
+ owner: T,
195
+ value_extractor: Callable[[T], List[V]],
196
+ id_function: Callable[[V], I],
200
197
  ) -> None:
201
198
  after_list = value_extractor(owner)
202
199
  before_list = value_extractor(self.before) if self.before is not None else None
@@ -224,10 +221,10 @@ class SenderContext(Generic[T]):
224
221
  self.sender.send_value(DiffEvent(EventType.EndList, None, None))
225
222
 
226
223
  def send_typed_values(
227
- self,
228
- owner: T,
229
- value_extractor: Callable[[T], List[V]],
230
- id_function: Callable[[V], I],
224
+ self,
225
+ owner: T,
226
+ value_extractor: Callable[[T], List[V]],
227
+ id_function: Callable[[V], I],
231
228
  ) -> None:
232
229
  after_list = value_extractor(owner)
233
230
  before_list = value_extractor(self.before) if self.before is not None else None
@@ -273,10 +270,10 @@ class SenderContext(Generic[T]):
273
270
  return isinstance(after, (Tree, Markers)) or isinstance(before, (Tree, Markers))
274
271
 
275
272
  def send_node_internal(
276
- self,
277
- after: Optional[V],
278
- before: Optional[V],
279
- details: Callable[[V, "SenderContext"], None],
273
+ self,
274
+ after: Optional[V],
275
+ before: Optional[V],
276
+ details: Callable[[V, "SenderContext"], None],
280
277
  ) -> None:
281
278
  if self.are_equal(after, before):
282
279
  evt = DiffEvent(EventType.NoChange, None, None)
@@ -325,15 +322,15 @@ class SenderContext(Generic[T]):
325
322
 
326
323
  class SerializationContext:
327
324
  def __init__(
328
- self,
329
- remoting_context: "RemotingContext",
330
- value_serializers: Optional[Dict[Type[Any], "ValueSerializer"]] = None,
325
+ self,
326
+ remoting_context: "RemotingContext",
327
+ value_serializers: Optional[Dict[Type[Any], "ValueSerializer"]] = None,
331
328
  ):
332
329
  self.remoting_context = remoting_context
333
330
  self.value_serializers = value_serializers or {}
334
331
 
335
332
  def serialize(
336
- self, value: Any, type_name: Optional[str], encoder: CBOREncoder
333
+ self, value: Any, type_name: Optional[str], encoder: CBOREncoder
337
334
  ) -> None:
338
335
  if value is None:
339
336
  encoder.encode_none(None)
@@ -388,10 +385,10 @@ class JsonSender(TreeSender):
388
385
  diff_event.msg, diff_event.concrete_type, self._encoder
389
386
  )
390
387
  elif diff_event.event_type in (
391
- EventType.Delete,
392
- EventType.NoChange,
393
- EventType.StartList,
394
- EventType.EndList,
388
+ EventType.Delete,
389
+ EventType.NoChange,
390
+ EventType.StartList,
391
+ EventType.EndList,
395
392
  ):
396
393
  self._encoder.encode([diff_event.event_type.value])
397
394
  else:
@@ -408,60 +405,48 @@ INDEFINITE_ARRAY_START = b"\x9f"
408
405
  INDEFINITE_MAP_START = b"\xbf"
409
406
  BREAK_MARKER = b"\xff"
410
407
 
408
+ ValueSerializer = Callable[[Any, Optional[str], CBOREncoder, SerializationContext], None]
411
409
 
412
- class ValueSerializer(ABC):
413
-
414
- @abstractmethod
415
- def serialize(
416
- self,
417
- value: Any,
418
- type_name: Optional[str],
419
- writer: CBOREncoder,
420
- context: SerializationContext,
421
- ) -> None:
422
- pass
423
410
 
424
- @staticmethod
425
- def write_object_using_reflection(
411
+ def write_object_using_reflection(
426
412
  value: Any,
427
413
  type_name: Optional[str],
428
414
  with_id: bool,
429
415
  encoder: CBOREncoder,
430
416
  context: SerializationContext,
431
- ) -> None:
432
- if type(value).__qualname__ == "JavaType.Primitive":
433
- # FIXME implement type attribution support
434
- encoder.encode(["org.openrewrite.java.tree.JavaType$Primitive", 0])
435
- return
436
- if with_id and (id := context.remoting_context.try_get_id(value)):
437
- encoder.encode_int(id)
438
- return
439
-
440
- encoder.write(INDEFINITE_MAP_START)
441
- encoder.encode_string("@c")
442
- encoder.encode_string(type_name or to_java_type_name(type(value)))
443
- if with_id:
444
- encoder.encode_string("@ref")
445
- id = context.remoting_context.add(value)
446
- encoder.encode_int(id)
447
-
448
- for field in fields(value):
449
- if field.name[0] == "_" and (
417
+ ) -> None:
418
+ if with_id and (id := context.remoting_context.try_get_id(value)):
419
+ encoder.encode_int(id)
420
+ return
421
+
422
+ encoder.write(INDEFINITE_MAP_START)
423
+ encoder.encode_string("@c")
424
+ encoder.encode_string(type_name or to_java_type_name(type(value)))
425
+ if with_id:
426
+ encoder.encode_string("@ref")
427
+ id = context.remoting_context.add(value)
428
+ encoder.encode_int(id)
429
+
430
+ for field in fields(value):
431
+ if field.name[0] == "_" and (
450
432
  not hasattr(field.type, "__origin__")
451
433
  or field.type.__origin__ is not ClassVar
452
- ):
453
- encoder.encode_string(to_java_field_name(field))
454
- context.serialize(getattr(value, field.name), None, encoder)
455
- encoder.write(BREAK_MARKER)
434
+ ):
435
+ encoder.encode_string(to_java_field_name(field))
436
+ context.serialize(getattr(value, field.name), None, encoder)
437
+ encoder.write(BREAK_MARKER)
456
438
 
457
439
 
458
440
  class DefaultValueSerializer(ValueSerializer):
441
+ def __call__(self, *args, **kwargs):
442
+ return self.serialize(*args, **kwargs)
443
+
459
444
  def serialize(
460
- self,
461
- value: Any,
462
- type_name: Optional[str],
463
- encoder: CBOREncoder,
464
- context: SerializationContext,
445
+ self,
446
+ value: Any,
447
+ type_name: Optional[str],
448
+ encoder: CBOREncoder,
449
+ context: SerializationContext,
465
450
  ) -> None:
466
451
  if isinstance(value, (int, float, str, bool, decimal.Decimal)):
467
452
  encoder.encode(value)
@@ -470,7 +455,11 @@ class DefaultValueSerializer(ValueSerializer):
470
455
  elif isinstance(value, UUID):
471
456
  encoder.encode(value.bytes)
472
457
  elif isinstance(value, Enum):
473
- encoder.encode(value.value)
458
+ if isinstance(value, JavaType.Primitive):
459
+ # FIXME implement type attribution support
460
+ encoder.encode(["org.openrewrite.java.tree.JavaType$Primitive", value.value])
461
+ else:
462
+ encoder.encode(value.value)
474
463
  elif isinstance(value, Path):
475
464
  encoder.encode(str(value))
476
465
  elif isinstance(value, (list, set, tuple)):
@@ -503,8 +492,8 @@ class DefaultValueSerializer(ValueSerializer):
503
492
  encoder.encode_int(id)
504
493
  for field in fields(value):
505
494
  if field.name[0] == "_" and (
506
- not hasattr(field.type, "__origin__")
507
- or field.type.__origin__ is not ClassVar
495
+ not hasattr(field.type, "__origin__")
496
+ or field.type.__origin__ is not ClassVar
508
497
  ):
509
498
  encoder.encode_string(to_java_field_name(field))
510
499
  context.serialize(getattr(value, field.name), None, encoder)
@@ -515,21 +504,21 @@ class DefaultValueSerializer(ValueSerializer):
515
504
  elif isinstance(value, complex):
516
505
  encoder.encode(str(value))
517
506
  else:
518
- ValueSerializer.write_object_using_reflection(
507
+ write_object_using_reflection(
519
508
  value, type_name, False, encoder, context
520
509
  )
521
510
 
522
511
 
523
512
  def delegate_based_serializer(
524
- delegate: Callable[[Any, Optional[str], CBOREncoder, SerializationContext], None]
513
+ delegate: Callable[[Any, Optional[str], CBOREncoder, SerializationContext], None]
525
514
  ) -> Type[ValueSerializer]:
526
515
  class DelegateBasedSerializer(ValueSerializer):
527
516
  def serialize(
528
- self,
529
- value: Any,
530
- type_name: Optional[str],
531
- encoder: CBOREncoder,
532
- context: SerializationContext,
517
+ self,
518
+ value: Any,
519
+ type_name: Optional[str],
520
+ encoder: CBOREncoder,
521
+ context: SerializationContext,
533
522
  ) -> None:
534
523
  delegate(value, type_name, encoder, context)
535
524
 
rewrite_remote/server.py CHANGED
@@ -23,8 +23,7 @@ from rewrite import (
23
23
  Recipe,
24
24
  )
25
25
  from rewrite.java import J
26
- from rewrite.java.remote.receiver import JavaReceiver
27
- from rewrite.java.remote.sender import JavaSender
26
+ from rewrite.java.remote import *
28
27
  from rewrite.python import Py
29
28
  from rewrite.python.parser import PythonParserBuilder
30
29
  from rewrite.python.remote.receiver import PythonReceiver
@@ -1,14 +0,0 @@
1
- rewrite_remote/__init__.py,sha256=uuLrPH--ewvE-5owXbNItXDfjCypMXQgsm-72hO_dtc,286
2
- rewrite_remote/client.py,sha256=95ZCAtVOngF0ZqqKnOsrweUeGKruf3UKGPXNGTrNyy0,1853
3
- rewrite_remote/event.py,sha256=texLJD1mcFkpBpiXAa-Rmip0Tgqm2OlBpRPHFZyWcBs,359
4
- rewrite_remote/receiver.py,sha256=U50jtbhmAVy361Vm5Bwd-amv19KcS8ltDRBOy2nC51E,18983
5
- rewrite_remote/remote_utils.py,sha256=wUo9WZoldgCLihFJGf6RaE1SufhDiEPCFlX74tcODVM,10552
6
- rewrite_remote/remoting.py,sha256=83Wvvj8tMCkUjOam0wWevWJeN-uHW1k9lGdoCsI0u0g,13690
7
- rewrite_remote/sender.py,sha256=pa68X6bjvCQW_25wuVtHq0ByjA6WgI1Rl3EbL8CcvX4,20003
8
- rewrite_remote/server.py,sha256=mKI9_PVvBuShoQmfqk0EhNA70CUJOtyzHB3xv-cNBYs,9413
9
- rewrite_remote/type_utils.py,sha256=oVrB0olWFSCqhmg2nTU2wrwiAU7kBCUscjwdHK7gf3Y,4219
10
- openrewrite_remote-0.13.2.dist-info/METADATA,sha256=tFsowCEQH6-nSrm8SsD1GLGeRXq_cZvN82p_To920yU,386
11
- openrewrite_remote-0.13.2.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
12
- openrewrite_remote-0.13.2.dist-info/entry_points.txt,sha256=SMukuF7TPjQr3IZIcH8f98-_QBCqYSbYXYrVv-5UzRI,69
13
- openrewrite_remote-0.13.2.dist-info/top_level.txt,sha256=ansTioSZ-62aH3F2L3d1Bua0pJF4GOtgQ1PpG-CzcP0,15
14
- openrewrite_remote-0.13.2.dist-info/RECORD,,