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.
- {openrewrite_remote-0.13.2.dist-info → openrewrite_remote-0.13.4.dist-info}/METADATA +1 -1
- openrewrite_remote-0.13.4.dist-info/RECORD +23 -0
- rewrite_remote/handlers/__init__.py +1 -0
- rewrite_remote/handlers/handler_helpers.py +16 -0
- rewrite_remote/handlers/hello_world_handler.py +40 -0
- rewrite_remote/handlers/list_projects_handler.py +66 -0
- rewrite_remote/handlers/project_helper.py +196 -0
- rewrite_remote/handlers/pypi_manager.py +300 -0
- rewrite_remote/handlers/recipe_install_handler.py +152 -0
- rewrite_remote/handlers/run_recipe_load_and_visitor_handler.py +135 -0
- rewrite_remote/handlers/types.py +30 -0
- rewrite_remote/receiver.py +41 -23
- rewrite_remote/remoting.py +5 -12
- rewrite_remote/sender.py +92 -103
- rewrite_remote/server.py +1 -2
- openrewrite_remote-0.13.2.dist-info/RECORD +0 -14
- {openrewrite_remote-0.13.2.dist-info → openrewrite_remote-0.13.4.dist-info}/WHEEL +0 -0
- {openrewrite_remote-0.13.2.dist-info → openrewrite_remote-0.13.4.dist-info}/entry_points.txt +0 -0
- {openrewrite_remote-0.13.2.dist-info → openrewrite_remote-0.13.4.dist-info}/top_level.txt +0 -0
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
|
-
|
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
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
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
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
153
|
+
evt.event_type != EventType.NoChange and evt.event_type != EventType.Delete
|
157
154
|
)
|
158
155
|
|
159
156
|
def send_nodes(
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
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
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
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
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
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
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
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
|
-
|
329
|
-
|
330
|
-
|
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
|
-
|
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
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
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
|
-
|
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
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
encoder.
|
441
|
-
|
442
|
-
encoder.
|
443
|
-
|
444
|
-
|
445
|
-
|
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
|
-
|
454
|
-
|
455
|
-
|
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
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
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
|
-
|
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
|
-
|
507
|
-
|
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
|
-
|
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
|
-
|
513
|
+
delegate: Callable[[Any, Optional[str], CBOREncoder, SerializationContext], None]
|
525
514
|
) -> Type[ValueSerializer]:
|
526
515
|
class DelegateBasedSerializer(ValueSerializer):
|
527
516
|
def serialize(
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
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
|
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,,
|
File without changes
|
{openrewrite_remote-0.13.2.dist-info → openrewrite_remote-0.13.4.dist-info}/entry_points.txt
RENAMED
File without changes
|
File without changes
|