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