openrewrite-remote 0.4.8__py3-none-any.whl → 0.5.1__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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openrewrite-remote
3
- Version: 0.4.8
3
+ Version: 0.5.1
4
4
  Summary: Remoting functionality for the OpenRewrite library.
5
5
  License: Apache-2.0
6
6
  Author: Moderne Inc.
@@ -0,0 +1,12 @@
1
+ rewrite/remote/__init__.py,sha256=e8QQGZNZpUFcqo1NGQRAJb0il0_Zq0R5CrtM0i5DF9w,245
2
+ rewrite/remote/client.py,sha256=LBCh8msEv04wex7kenXVwI11i7JB4YvcnSIbf3oJ3pg,1608
3
+ rewrite/remote/event.py,sha256=9AL5z6D6_GUBUPrNb9WJCHv3RJkID4k2vgiArwIJtmQ,354
4
+ rewrite/remote/receiver.py,sha256=YLu6YhLCj6aNTeRsHdRFIeC7FY1rp4vGAA5PRze3JO0,15586
5
+ rewrite/remote/remote_utils.py,sha256=wZhsDEV3qnayy3M98r6M-NMxGeowQ1qW7rFSJR0cY24,10145
6
+ rewrite/remote/remoting.py,sha256=30tsczUenwEikpTXZE1ghNU8YTl4JU5LoXTgkzDsPgs,13091
7
+ rewrite/remote/sender.py,sha256=AOCUNfbkcptifhjETwqDEWJUSAP3TrzCkJnL4TNboHU,18399
8
+ rewrite/remote/server.py,sha256=5Nlr0wHPs0HnWZSRLNML1VqtQoj2xsl_Z2tgL1RD15s,7808
9
+ rewrite/remote/type_utils.py,sha256=YJxdB25iurj0iqvaOgon3W-MlQDqFToFSuWf14vlJC8,3847
10
+ openrewrite_remote-0.5.1.dist-info/METADATA,sha256=YBapowVlWI2SV__2WIBxhRoM4rdTbniJ6cm6SkWQplY,650
11
+ openrewrite_remote-0.5.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
12
+ openrewrite_remote-0.5.1.dist-info/RECORD,,
@@ -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
- if command == "hello":
139
- self.handle_hello_command(stream, sock)
140
- elif command == "reset":
141
- self.handle_reset_command(stream, sock)
142
- elif command == "load-recipe":
143
- self.handle_load_recipe_command(stream, sock)
144
- elif command == "run-recipe-visitor":
145
- self.handle_run_recipe_visitor_command(stream, sock)
146
- elif command == "print":
147
- self.handle_print_command(stream, sock)
148
- else:
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
- raise NotImplementedError(f"Unsupported command: {command}")
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
- response_stream.write(output_stream.getvalue())
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
- receiver_context = self._context.new_receiver_context(stream)
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 send_request_stream(self, sock: socket.socket, command: str, *args):
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.send_request_stream(sock, "print",
240
- lambda s: self.send_tree(s, cast(Tree, cursor.value)))
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, tree: Tree):
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(tree, None)
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.send_request_stream(sock, "run-recipe", lambda s: (
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._context.new_sender_context(s).send_any_tree(sf, None) for sf in source_files]
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
- receiver_context = self._context.new_receiver_context(input_stream)
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
 
rewrite/remote/sender.py CHANGED
@@ -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
 
rewrite/remote/server.py CHANGED
@@ -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
- remoting_ctx.new_sender_context(response_stream).send_any_tree(cu, None)
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
- remoting_ctx.new_sender_context(response_stream).send_any_tree(cu, None)
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 -2_147_483_648 <= v <= 2_147_483_647:
12
+ if bit_length < 32:
13
13
  return 'java.lang.Integer'
14
- elif -9223372036854775808 <= v <= 9223372036854775807:
14
+ elif bit_length < 64:
15
15
  return 'java.lang.Long'
16
16
  else:
17
- return 'java.lang.BigInteger'
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
 
@@ -1,12 +0,0 @@
1
- rewrite/remote/__init__.py,sha256=e8QQGZNZpUFcqo1NGQRAJb0il0_Zq0R5CrtM0i5DF9w,245
2
- rewrite/remote/client.py,sha256=LBCh8msEv04wex7kenXVwI11i7JB4YvcnSIbf3oJ3pg,1608
3
- rewrite/remote/event.py,sha256=9AL5z6D6_GUBUPrNb9WJCHv3RJkID4k2vgiArwIJtmQ,354
4
- rewrite/remote/receiver.py,sha256=YLu6YhLCj6aNTeRsHdRFIeC7FY1rp4vGAA5PRze3JO0,15586
5
- rewrite/remote/remote_utils.py,sha256=wZhsDEV3qnayy3M98r6M-NMxGeowQ1qW7rFSJR0cY24,10145
6
- rewrite/remote/remoting.py,sha256=9HntUG6NYyWrP9uiok6N68HD1Ee0PKKzoJQiiJcHvb4,13000
7
- rewrite/remote/sender.py,sha256=ONvokHe-4MbuqzGgUsXgwaUBL-vmh3b-7dBONYz4O-o,18319
8
- rewrite/remote/server.py,sha256=dFbox37Ne7e1dsQfxDAUmT37HyMQgrFZLSV593txodE,7604
9
- rewrite/remote/type_utils.py,sha256=BcFLjz54QbzywFEjN4PJlkLmh2bLDF-qwtiE249vJyY,3834
10
- openrewrite_remote-0.4.8.dist-info/METADATA,sha256=NXuXDw2YNY3p9gb30r_q6FJG-RE3Z1h5k6RWQ3ty9SM,650
11
- openrewrite_remote-0.4.8.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
12
- openrewrite_remote-0.4.8.dist-info/RECORD,,