openrewrite-remote 0.4.8__tar.gz → 0.5.1__tar.gz
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.4.8 → openrewrite_remote-0.5.1}/PKG-INFO +1 -1
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/pyproject.toml +1 -1
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/rewrite/remote/remoting.py +40 -38
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/rewrite/remote/sender.py +2 -0
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/rewrite/remote/server.py +6 -2
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/rewrite/remote/type_utils.py +5 -3
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/rewrite/remote/__init__.py +0 -0
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/rewrite/remote/client.py +0 -0
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/rewrite/remote/event.py +0 -0
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/rewrite/remote/receiver.py +0 -0
- {openrewrite_remote-0.4.8 → openrewrite_remote-0.5.1}/rewrite/remote/remote_utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "openrewrite-remote"
|
3
|
-
version = "0.
|
3
|
+
version = "0.5.1" # This will be replaced by the GitHub Actions workflow
|
4
4
|
description = "Remoting functionality for the OpenRewrite library."
|
5
5
|
authors = ["Moderne Inc. <support@moderne.io>"]
|
6
6
|
license = "Apache-2.0"
|
@@ -2,20 +2,20 @@ from __future__ import absolute_import
|
|
2
2
|
|
3
3
|
import socket
|
4
4
|
import threading
|
5
|
+
import traceback
|
5
6
|
from dataclasses import dataclass
|
6
7
|
from io import BytesIO
|
7
8
|
from threading import Lock
|
8
|
-
from typing import Any, Dict, Optional, Type, List, Tuple, Callable, cast
|
9
|
+
from typing import Any, Dict, Optional, Type, List, Tuple, Callable, cast, Union, BinaryIO
|
9
10
|
|
10
11
|
import cbor2
|
11
12
|
from cbor2 import dumps, loads, load
|
12
|
-
from rewrite.execution import DelegatingExecutionContext
|
13
|
-
from rewrite.tree import PrintOutputCapture, P
|
14
|
-
from rewrite.visitor import T
|
15
|
-
|
16
13
|
from rewrite import Recipe, InMemoryExecutionContext, Cursor, PrinterFactory, TreeVisitor, Tree
|
14
|
+
from rewrite.execution import DelegatingExecutionContext
|
17
15
|
from rewrite.remote import ValueSerializer, ValueDeserializer, SenderContext, ReceiverContext, JsonSender, JsonReceiver, \
|
18
16
|
SerializationContext, DeserializationContext, remote_utils
|
17
|
+
from rewrite.tree import PrintOutputCapture, P
|
18
|
+
from rewrite.visitor import T
|
19
19
|
|
20
20
|
|
21
21
|
class RemotingContext:
|
@@ -135,21 +135,26 @@ class RemotingMessenger:
|
|
135
135
|
stream = remote_utils.read_to_command_end(sock)
|
136
136
|
command = cbor2.load(stream)
|
137
137
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
if command in self._additional_handlers:
|
150
|
-
self._additional_handlers[command](stream, sock, self._context)
|
138
|
+
try:
|
139
|
+
if command == "hello":
|
140
|
+
self.handle_hello_command(stream, sock)
|
141
|
+
elif command == "reset":
|
142
|
+
self.handle_reset_command(stream, sock)
|
143
|
+
elif command == "load-recipe":
|
144
|
+
self.handle_load_recipe_command(stream, sock)
|
145
|
+
elif command == "run-recipe-visitor":
|
146
|
+
self.handle_run_recipe_visitor_command(stream, sock)
|
147
|
+
elif command == "print":
|
148
|
+
self.handle_print_command(stream, sock)
|
151
149
|
else:
|
152
|
-
|
150
|
+
if command in self._additional_handlers:
|
151
|
+
self._additional_handlers[command](stream, sock, self._context)
|
152
|
+
else:
|
153
|
+
raise NotImplementedError(f"Unsupported command: {command}")
|
154
|
+
except:
|
155
|
+
traceback.print_exc()
|
156
|
+
finally:
|
157
|
+
self.send_end_message(sock)
|
153
158
|
|
154
159
|
return True
|
155
160
|
|
@@ -185,26 +190,20 @@ class RemotingMessenger:
|
|
185
190
|
def handle_run_recipe_visitor_command(self, stream: BytesIO, sock: socket.socket):
|
186
191
|
recipe_index = cbor2.load(stream)
|
187
192
|
recipe = self._recipes[recipe_index]
|
193
|
+
received = self.receive_tree(sock, self._state)
|
188
194
|
|
189
|
-
output_stream = BytesIO()
|
190
|
-
|
191
|
-
receiver_context = self._context.new_receiver_context(stream)
|
192
|
-
received = receiver_context.receive_tree(self._state)
|
193
195
|
ctx = InMemoryExecutionContext()
|
194
196
|
RemotingExecutionContextView.view(ctx).remoting_context = self._context
|
195
197
|
self._state = recipe.get_visitor().visit(received, ctx)
|
196
|
-
sender_context = self._context.new_sender_context(output_stream)
|
197
|
-
sender_context.send_any_tree(self._state, received)
|
198
198
|
|
199
199
|
response_stream = BytesIO()
|
200
200
|
cbor2.dump(RemotingMessageType.Response, response_stream)
|
201
201
|
cbor2.dump(OK, response_stream)
|
202
|
-
|
202
|
+
self.send_tree(response_stream, self._state, received)
|
203
203
|
sock.sendall(response_stream.getvalue())
|
204
204
|
|
205
205
|
def handle_print_command(self, stream: BytesIO, sock: socket.socket):
|
206
|
-
|
207
|
-
received = receiver_context.receive_any_tree(None)
|
206
|
+
received = self.receive_tree(sock, None)
|
208
207
|
root_cursor = Cursor(None, Cursor.ROOT_VALUE)
|
209
208
|
ctx = InMemoryExecutionContext()
|
210
209
|
RemotingExecutionContextView.view(ctx).remoting_context = self._context
|
@@ -224,7 +223,7 @@ class RemotingMessenger:
|
|
224
223
|
sock.sendall(dumps(arg))
|
225
224
|
self.send_end_message(sock)
|
226
225
|
|
227
|
-
def
|
226
|
+
def __send_request_stream(self, sock: socket.socket, command: str, *args):
|
228
227
|
sock.sendall(dumps(RemotingMessageType.Request))
|
229
228
|
sock.sendall(dumps(command))
|
230
229
|
for arg in args:
|
@@ -236,8 +235,8 @@ class RemotingMessenger:
|
|
236
235
|
sock.sendall(b'\x81\x17')
|
237
236
|
|
238
237
|
def send_print_request(self, sock: socket.socket, cursor: Cursor):
|
239
|
-
self.
|
240
|
-
|
238
|
+
self.__send_request_stream(sock, "print",
|
239
|
+
lambda s: self.send_tree(s, cast(Tree, cursor.value)))
|
241
240
|
if self.recv_byte(sock) != RemotingMessageType.Response:
|
242
241
|
raise ValueError("Unexpected message type.")
|
243
242
|
if self.recv_byte(sock) != 0:
|
@@ -247,17 +246,21 @@ class RemotingMessenger:
|
|
247
246
|
# end = load(data) # end
|
248
247
|
return print_msg
|
249
248
|
|
250
|
-
def send_tree(self, sock: socket.socket,
|
249
|
+
def send_tree(self, sock: Union[BinaryIO, socket.socket], after: Tree, before: Optional[Tree] = None):
|
251
250
|
b = BytesIO()
|
252
|
-
self._context.new_sender_context(b).send_any_tree(
|
253
|
-
sock.sendall(b.getvalue())
|
251
|
+
self._context.new_sender_context(b).send_any_tree(after, before)
|
252
|
+
sock.sendall(dumps(b.getvalue()))
|
253
|
+
|
254
|
+
def receive_tree(self, data: Union[BinaryIO, socket.socket], before: Optional[Tree] = None):
|
255
|
+
receiver_context = self._context.new_receiver_context(cbor2.load(data))
|
256
|
+
return receiver_context.receive_any_tree(before)
|
254
257
|
|
255
258
|
def send_run_recipe_request(self, sock: socket.socket, recipe, options: dict, source_files: list):
|
256
|
-
self.
|
259
|
+
self.__send_request_stream(sock, "run-recipe", lambda s: (
|
257
260
|
sock.sendall(dumps(recipe)),
|
258
261
|
sock.sendall(dumps(options)),
|
259
262
|
sock.sendall(dumps(len(source_files))),
|
260
|
-
*[self.
|
263
|
+
*[self.send_tree(sock, sf, None) for sf in source_files]
|
261
264
|
))
|
262
265
|
while self.recv_byte(sock) == RemotingMessageType.Request:
|
263
266
|
self.process_request(sock)
|
@@ -266,8 +269,7 @@ class RemotingMessenger:
|
|
266
269
|
if self.recv_byte(sock) != 0:
|
267
270
|
raise ValueError(f"Remote recipe run failed: {loads(self.recv_all(sock))}")
|
268
271
|
input_stream = remote_utils.read_to_command_end(sock)
|
269
|
-
|
270
|
-
updated = [receiver_context.receive_any_tree(sf) for sf in source_files]
|
272
|
+
updated = [self.receive_tree(input_stream, sf) for sf in source_files]
|
271
273
|
loads(input_stream) # end
|
272
274
|
return updated
|
273
275
|
|
@@ -390,6 +390,8 @@ class DefaultValueSerializer(ValueSerializer):
|
|
390
390
|
elif isinstance(value, bytes):
|
391
391
|
# FIXME verify that this can be deserialized
|
392
392
|
encoder.encode(value)
|
393
|
+
elif isinstance(value, complex):
|
394
|
+
encoder.encode(str(value))
|
393
395
|
else:
|
394
396
|
ValueSerializer.write_object_using_reflection(value, type_name, False, encoder, context)
|
395
397
|
|
@@ -141,7 +141,9 @@ class Server:
|
|
141
141
|
response_stream = BytesIO()
|
142
142
|
cbor2.dump(RemotingMessageType.Response, response_stream)
|
143
143
|
cbor2.dump(OK, response_stream)
|
144
|
-
|
144
|
+
source_stream = BytesIO()
|
145
|
+
remoting_ctx.new_sender_context(source_stream).send_any_tree(cu, None)
|
146
|
+
cbor2.dump(source_stream.getvalue(), response_stream)
|
145
147
|
sock.sendall(response_stream.getvalue())
|
146
148
|
|
147
149
|
def parse_python_file(self, stream: BytesIO, sock: socket.socket, remoting_ctx: RemotingContext):
|
@@ -155,7 +157,9 @@ class Server:
|
|
155
157
|
response_stream = BytesIO()
|
156
158
|
cbor2.dump(RemotingMessageType.Response, response_stream)
|
157
159
|
cbor2.dump(OK, response_stream)
|
158
|
-
|
160
|
+
source_stream = BytesIO()
|
161
|
+
remoting_ctx.new_sender_context(source_stream).send_any_tree(cu, None)
|
162
|
+
cbor2.dump(source_stream.getvalue(), response_stream)
|
159
163
|
sock.sendall(response_stream.getvalue())
|
160
164
|
|
161
165
|
|
@@ -9,12 +9,14 @@ def to_java_type_name_from_value(v: Any) -> str:
|
|
9
9
|
return 'java.lang.Boolean'
|
10
10
|
elif isinstance(v, int):
|
11
11
|
bit_length = v.bit_length()
|
12
|
-
if
|
12
|
+
if bit_length < 32:
|
13
13
|
return 'java.lang.Integer'
|
14
|
-
elif
|
14
|
+
elif bit_length < 64:
|
15
15
|
return 'java.lang.Long'
|
16
16
|
else:
|
17
|
-
return 'java.
|
17
|
+
return 'java.math.BigInteger'
|
18
|
+
elif isinstance(v, complex):
|
19
|
+
return 'java.lang.String'
|
18
20
|
return to_java_type_name(type(v))
|
19
21
|
|
20
22
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|