openrewrite-remote 0.15.0__py3-none-any.whl → 0.17.0__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.15.0.dist-info → openrewrite_remote-0.17.0.dist-info}/METADATA +1 -1
- {openrewrite_remote-0.15.0.dist-info → openrewrite_remote-0.17.0.dist-info}/RECORD +13 -13
- rewrite_remote/handlers/list_projects_handler.py +19 -21
- rewrite_remote/handlers/parse_project_sources_handler.py +12 -7
- rewrite_remote/handlers/project_helper.py +19 -13
- rewrite_remote/handlers/recipe_install_handler.py +9 -6
- rewrite_remote/handlers/run_recipe_load_and_visitor_handler.py +6 -3
- rewrite_remote/receiver.py +1 -0
- rewrite_remote/server.py +6 -3
- rewrite_remote/type_utils.py +3 -3
- {openrewrite_remote-0.15.0.dist-info → openrewrite_remote-0.17.0.dist-info}/WHEEL +0 -0
- {openrewrite_remote-0.15.0.dist-info → openrewrite_remote-0.17.0.dist-info}/entry_points.txt +0 -0
- {openrewrite_remote-0.15.0.dist-info → openrewrite_remote-0.17.0.dist-info}/top_level.txt +0 -0
@@ -1,24 +1,24 @@
|
|
1
1
|
rewrite_remote/__init__.py,sha256=gl4Dpp7mYIrfNgeyh2IeW2fsj9ep9pveAK_eeoDLu7c,278
|
2
2
|
rewrite_remote/client.py,sha256=95ZCAtVOngF0ZqqKnOsrweUeGKruf3UKGPXNGTrNyy0,1853
|
3
3
|
rewrite_remote/event.py,sha256=texLJD1mcFkpBpiXAa-Rmip0Tgqm2OlBpRPHFZyWcBs,359
|
4
|
-
rewrite_remote/receiver.py,sha256=
|
4
|
+
rewrite_remote/receiver.py,sha256=XgRhhOBW_77lV34nHkWbrdojajLfWfX38NdzuKJDj8A,20744
|
5
5
|
rewrite_remote/remote_utils.py,sha256=gU9hN-aHxy9NF4uRqjd4OhvgPrNfDyCt3y1PtrWMCgA,10677
|
6
6
|
rewrite_remote/remoting.py,sha256=yS2sYMPPBq0gt1xalmCTLbH4VXbBqNl-EXj8ZfgA5UM,13525
|
7
7
|
rewrite_remote/sender.py,sha256=PXX0hrmeHKEge_7qWEMqNn4KYleDrFUQqhBDWTq1pus,18993
|
8
|
-
rewrite_remote/server.py,sha256=
|
9
|
-
rewrite_remote/type_utils.py,sha256=
|
8
|
+
rewrite_remote/server.py,sha256=gzouNamoxR_RHh8uxAPZ-q07Wfv4h3yhygH2U9BDp7M,9623
|
9
|
+
rewrite_remote/type_utils.py,sha256=MHfEhbtpvN1jXNG_l2X4jTBVJZsbkmbaJIZEOHpeMTA,4400
|
10
10
|
rewrite_remote/handlers/__init__.py,sha256=ED6jHcYiuYpr_0vjGz0zx2lrrmJT9sDJCzIljoDfmlM,65
|
11
11
|
rewrite_remote/handlers/handler_helpers.py,sha256=xvAKAVGH56Hrjp9sbilp4v1a2_ra0L63YjXurF5K5o0,512
|
12
12
|
rewrite_remote/handlers/hello_world_handler.py,sha256=HLVukS16-PRRidlnfABT6ETXURhQYIJnTSb09PJnDek,1284
|
13
|
-
rewrite_remote/handlers/list_projects_handler.py,sha256=
|
14
|
-
rewrite_remote/handlers/parse_project_sources_handler.py,sha256=
|
15
|
-
rewrite_remote/handlers/project_helper.py,sha256=
|
13
|
+
rewrite_remote/handlers/list_projects_handler.py,sha256=MBCCWc6h8FX8fVxtMHbPo4bNxU2TVgcPRzfLZJrVC3k,2024
|
14
|
+
rewrite_remote/handlers/parse_project_sources_handler.py,sha256=VeRmBrQKtWuOLdDT1CDku9xa998nl-c1RDQCAAJPipM,3153
|
15
|
+
rewrite_remote/handlers/project_helper.py,sha256=La2lQnS158PevXE1z2Jnx_RNQwQtioelthzdNEJnIew,8711
|
16
16
|
rewrite_remote/handlers/pypi_manager.py,sha256=XulTdZUm5aTme7Qn-jaUvlgO6N9bKS03UUQtbxv9kYE,10247
|
17
|
-
rewrite_remote/handlers/recipe_install_handler.py,sha256=
|
18
|
-
rewrite_remote/handlers/run_recipe_load_and_visitor_handler.py,sha256=
|
17
|
+
rewrite_remote/handlers/recipe_install_handler.py,sha256=dUS50wzSUGbeET4VMOwjPyfB883MfF7QsN5Lhf71ylk,4974
|
18
|
+
rewrite_remote/handlers/run_recipe_load_and_visitor_handler.py,sha256=uF08S7ug1ZeXde6RjPlitjEUFKj7ijN9Agnsv0tZ8u4,4163
|
19
19
|
rewrite_remote/handlers/types.py,sha256=5TK_oFp-7iy1iACWisuQJsa_WHTsqcPrV9nQTZ-_xgo,518
|
20
|
-
openrewrite_remote-0.
|
21
|
-
openrewrite_remote-0.
|
22
|
-
openrewrite_remote-0.
|
23
|
-
openrewrite_remote-0.
|
24
|
-
openrewrite_remote-0.
|
20
|
+
openrewrite_remote-0.17.0.dist-info/METADATA,sha256=_qD0swgTb_KGT-FthuTEz7fMA7Blsli1aGXhxDa8sN0,386
|
21
|
+
openrewrite_remote-0.17.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
22
|
+
openrewrite_remote-0.17.0.dist-info/entry_points.txt,sha256=SMukuF7TPjQr3IZIcH8f98-_QBCqYSbYXYrVv-5UzRI,69
|
23
|
+
openrewrite_remote-0.17.0.dist-info/top_level.txt,sha256=ansTioSZ-62aH3F2L3d1Bua0pJF4GOtgQ1PpG-CzcP0,15
|
24
|
+
openrewrite_remote-0.17.0.dist-info/RECORD,,
|
@@ -4,11 +4,14 @@ from io import BytesIO
|
|
4
4
|
from typing import List
|
5
5
|
from cbor2 import dumps, CBORDecoder
|
6
6
|
|
7
|
-
from rewrite_remote.handlers.project_helper import
|
7
|
+
from rewrite_remote.handlers.project_helper import list_sub_projects
|
8
8
|
from rewrite_remote.remote_utils import COMMAND_END
|
9
9
|
from rewrite_remote.remoting import OK, RemotingContext, RemotingMessageType
|
10
10
|
from rewrite_remote.handlers.handler_helpers import respond_with_error
|
11
11
|
|
12
|
+
logger = logging.getLogger("list_projects_handler")
|
13
|
+
logger.setLevel(logging.DEBUG)
|
14
|
+
|
12
15
|
|
13
16
|
# Main command handler with the specified signature
|
14
17
|
def list_projects_handler(
|
@@ -30,37 +33,32 @@ def list_projects_handler(
|
|
30
33
|
return
|
31
34
|
|
32
35
|
# 2. Log the request
|
33
|
-
|
34
|
-
f"""[Server] Handling install-recipe request: {{
|
36
|
+
logger.info(f"""Handling list-recipe request: {{
|
35
37
|
root_project_file: {root_project_file},
|
36
|
-
}}"""
|
37
|
-
)
|
38
|
+
}}""")
|
38
39
|
|
39
40
|
# 3. Find projects
|
40
|
-
projects =
|
41
|
+
projects = list_sub_projects(root_project_file)
|
42
|
+
|
43
|
+
project_config_files: List[str] = [root_project_file]
|
41
44
|
|
42
|
-
# 4. Log the result
|
43
|
-
logging.info("[Server] Found %d project(s)", len(projects))
|
44
45
|
for project in projects:
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
project_config_files.append(project.project_root + "/pyproject.toml")
|
47
|
+
|
48
|
+
# 4. Log the result
|
49
|
+
logger.info("Found %d project(s)", len(project_config_files))
|
50
|
+
for project in project_config_files:
|
51
|
+
logger.info(
|
52
|
+
"Found project: %s",
|
53
|
+
project,
|
50
54
|
)
|
51
55
|
|
52
56
|
# 5. Write response to stream
|
53
|
-
response: List[str] = []
|
54
|
-
|
55
|
-
for project in projects:
|
56
|
-
response.append(project.project_root)
|
57
|
-
|
58
|
-
# Encode the response using CBOR
|
59
57
|
encoded_response = b""
|
60
58
|
encoded_response += dumps(RemotingMessageType.Response)
|
61
59
|
encoded_response += dumps(OK)
|
62
|
-
encoded_response += dumps(
|
60
|
+
encoded_response += dumps(project_config_files)
|
63
61
|
encoded_response += COMMAND_END
|
64
62
|
sock.sendall(encoded_response)
|
65
63
|
|
66
|
-
|
64
|
+
logger.info("Request completed.")
|
@@ -6,7 +6,7 @@ from typing import TypedDict
|
|
6
6
|
|
7
7
|
import cbor2
|
8
8
|
|
9
|
-
from cbor2 import
|
9
|
+
from cbor2 import CBORDecoder
|
10
10
|
|
11
11
|
from rewrite_remote.handlers.project_helper import (
|
12
12
|
find_python_files,
|
@@ -23,6 +23,9 @@ from rewrite_remote.remoting import RemotingContext
|
|
23
23
|
from rewrite_remote.handlers.handler_helpers import respond_with_error
|
24
24
|
from rewrite_remote.remoting import RemotingMessenger
|
25
25
|
|
26
|
+
logger = logging.getLogger("parse_project_sources_handler")
|
27
|
+
logger.setLevel(logging.DEBUG)
|
28
|
+
|
26
29
|
|
27
30
|
class ParseProjectSourcesArgs(TypedDict):
|
28
31
|
project_file_path: str # The path to the individual pyproject.toml
|
@@ -69,9 +72,9 @@ def parse_project_sources_handler(
|
|
69
72
|
return
|
70
73
|
|
71
74
|
# Log the request
|
72
|
-
|
73
|
-
"
|
74
|
-
"
|
75
|
+
logger.info(
|
76
|
+
"Handling parse-project-sources request: {\n"
|
77
|
+
"\tproject_file_path: %s,\n\t root_project_file_path: %s,\n\t repository_dir: %s\n}",
|
75
78
|
project_file_path,
|
76
79
|
root_project_file_path,
|
77
80
|
repository_dir,
|
@@ -83,13 +86,15 @@ def parse_project_sources_handler(
|
|
83
86
|
source_files = parse_python_sources(python_files)
|
84
87
|
|
85
88
|
# Write the response
|
89
|
+
messenger = RemotingMessenger(remoting_ctx)
|
86
90
|
response_stream = BytesIO()
|
87
91
|
cbor2.dump(RemotingMessageType.Response, response_stream)
|
88
92
|
cbor2.dump(OK, response_stream)
|
93
|
+
cbor2.dump(len(source_files), response_stream)
|
89
94
|
for source_file in source_files:
|
90
|
-
|
91
|
-
|
95
|
+
logger.info("Sending %s", source_file.source_path)
|
96
|
+
messenger.send_tree(response_stream, source_file, None)
|
92
97
|
cbor2.dump(COMMAND_END, response_stream)
|
93
98
|
sock.sendall(response_stream.getvalue())
|
94
99
|
|
95
|
-
|
100
|
+
logger.info("Request completed.")
|
@@ -8,7 +8,7 @@ from io import StringIO
|
|
8
8
|
from rewrite.tree import SourceFile
|
9
9
|
from rewrite.python.parser import PythonParserBuilder
|
10
10
|
|
11
|
-
from rewrite import ParserInput, InMemoryExecutionContext
|
11
|
+
from rewrite import ParserInput, InMemoryExecutionContext, ExecutionContext
|
12
12
|
|
13
13
|
from dataclasses import dataclass
|
14
14
|
|
@@ -20,7 +20,7 @@ class Project:
|
|
20
20
|
project_tool: str
|
21
21
|
|
22
22
|
|
23
|
-
def
|
23
|
+
def list_sub_projects(pyproject_path: str) -> list[Project]:
|
24
24
|
"""
|
25
25
|
Parses the pyproject.toml file to identify sub projects in a monorepo and returns a list of Projects.
|
26
26
|
"""
|
@@ -35,10 +35,13 @@ def list_projects(pyproject_path: str) -> list[Project]:
|
|
35
35
|
|
36
36
|
if is_poetry_project(data):
|
37
37
|
sub_projects = find_sub_projects_in_poetry(data, pyproject_path)
|
38
|
+
|
38
39
|
elif is_hatch_project(data):
|
39
40
|
sub_projects = find_sub_projects_in_hatch(data, pyproject_path)
|
41
|
+
|
40
42
|
elif is_uv_project(data):
|
41
43
|
sub_projects = find_sub_projects_in_uv_sources(data, pyproject_path)
|
44
|
+
|
42
45
|
else:
|
43
46
|
sub_projects = find_sub_projects_in_project_dependencies(data, pyproject_path)
|
44
47
|
|
@@ -169,7 +172,7 @@ def find_sub_projects_in_project_dependencies(
|
|
169
172
|
tomlData: dict[str, Any], toml_path: str
|
170
173
|
) -> list[Project]:
|
171
174
|
"""
|
172
|
-
Finds sub
|
175
|
+
Finds sub-projects in project dependencies by looking for dependencies with
|
173
176
|
the @ file:///${PROJECT_ROOT}//${SUBPROJECT_PATH} format:
|
174
177
|
[project]
|
175
178
|
dependencies = [
|
@@ -178,16 +181,19 @@ def find_sub_projects_in_project_dependencies(
|
|
178
181
|
]
|
179
182
|
"""
|
180
183
|
subProjects: list[Project] = []
|
181
|
-
for dep in tomlData
|
182
|
-
if isinstance(dep, str) and
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
184
|
+
for dep in tomlData.get("project", {}).get("dependencies", []):
|
185
|
+
if isinstance(dep, str) and "@ file:///${PROJECT_ROOT}//" in dep:
|
186
|
+
try:
|
187
|
+
rel_path = dep.split("@ file:///${PROJECT_ROOT}//", 1)[1]
|
188
|
+
subProjects.append(
|
189
|
+
Project(
|
190
|
+
project_name=os.path.basename(rel_path),
|
191
|
+
project_root=get_absolute_path(toml_path, rel_path),
|
192
|
+
project_tool="project.dependencies",
|
193
|
+
)
|
189
194
|
)
|
190
|
-
|
195
|
+
except IndexError:
|
196
|
+
print(f"Warning: Unexpected dependency format: {dep}")
|
191
197
|
return subProjects
|
192
198
|
|
193
199
|
|
@@ -222,7 +228,7 @@ def parse_python_sources(paths: List[str]) -> List[SourceFile]:
|
|
222
228
|
"""
|
223
229
|
parser = PythonParserBuilder().build()
|
224
230
|
ctx = InMemoryExecutionContext()
|
225
|
-
|
231
|
+
ctx.put_message(ExecutionContext.REQUIRE_PRINT_EQUALS_INPUT, False)
|
226
232
|
iterable_source_files: Iterable[SourceFile] = parser.parse_inputs(
|
227
233
|
[
|
228
234
|
ParserInput(
|
@@ -10,6 +10,9 @@ from rewrite_remote.handlers.handler_helpers import respond_with_error
|
|
10
10
|
from rewrite_remote.handlers.pypi_manager import PyPiManager, Source
|
11
11
|
from rewrite_remote.handlers.types import PackageSource
|
12
12
|
|
13
|
+
logger = logging.getLogger("recipe_install_handler")
|
14
|
+
logger.setLevel(logging.DEBUG)
|
15
|
+
|
13
16
|
|
14
17
|
class RecipeInstallArgs(TypedDict):
|
15
18
|
package_id: str
|
@@ -81,8 +84,8 @@ def recipe_install_handler(
|
|
81
84
|
return
|
82
85
|
|
83
86
|
# 2. Log the request
|
84
|
-
|
85
|
-
f"""
|
87
|
+
logger.info(
|
88
|
+
f"""Handling install-recipe request: {{
|
86
89
|
packageId: {package_id},
|
87
90
|
packageVersion: {package_version},
|
88
91
|
packageSources: {package_sources},
|
@@ -117,13 +120,13 @@ def recipe_install_handler(
|
|
117
120
|
return
|
118
121
|
|
119
122
|
# 5. Log the result
|
120
|
-
|
121
|
-
"
|
123
|
+
logger.info(
|
124
|
+
"Found %d recipe(s) for package %s",
|
122
125
|
len(installable_recipes.recipes),
|
123
126
|
package_id,
|
124
127
|
)
|
125
128
|
for recipe in installable_recipes.recipes:
|
126
|
-
|
129
|
+
logger.info(" Resolved recipe %s from %s", recipe, valid_source.source)
|
127
130
|
|
128
131
|
# 6. Write response to stream
|
129
132
|
response = {
|
@@ -147,4 +150,4 @@ def recipe_install_handler(
|
|
147
150
|
encoded_response += COMMAND_END
|
148
151
|
sock.sendall(encoded_response)
|
149
152
|
|
150
|
-
|
153
|
+
logger.info("Request completed.")
|
@@ -18,6 +18,9 @@ from rewrite_remote.handlers.handler_helpers import respond_with_error
|
|
18
18
|
|
19
19
|
from rewrite import InMemoryExecutionContext
|
20
20
|
|
21
|
+
logger = logging.getLogger("run_recipe_load_and_visitor_handler")
|
22
|
+
logger.setLevel(logging.DEBUG)
|
23
|
+
|
21
24
|
|
22
25
|
class RunRecipeLoadAndVisitorArgs(TypedDict):
|
23
26
|
recipe_name: str
|
@@ -68,8 +71,8 @@ def run_recipe_load_and_visitor_handler(
|
|
68
71
|
return
|
69
72
|
|
70
73
|
# Log the request
|
71
|
-
|
72
|
-
f"""
|
74
|
+
logger.info(
|
75
|
+
f"""Handling run-recipe-load-and-visitor request: {{
|
73
76
|
recipe_name: {recipe_name},
|
74
77
|
recipe_source: {recipe_source},
|
75
78
|
recipe_options: {recipe_options},
|
@@ -128,4 +131,4 @@ def run_recipe_load_and_visitor_handler(
|
|
128
131
|
encoded_response += COMMAND_END
|
129
132
|
sock.sendall(encoded_response)
|
130
133
|
|
131
|
-
|
134
|
+
logger.info("Request completed.")
|
rewrite_remote/receiver.py
CHANGED
rewrite_remote/server.py
CHANGED
@@ -54,11 +54,12 @@ _ERROR: int = 1
|
|
54
54
|
# Configure logging
|
55
55
|
logging.basicConfig(
|
56
56
|
level=logging.DEBUG,
|
57
|
-
format=
|
57
|
+
format="%(asctime)s - %(levelname)s - %(message)s",
|
58
58
|
)
|
59
|
-
logger = logging.getLogger(
|
59
|
+
logger = logging.getLogger("server")
|
60
60
|
logger.setLevel(logging.DEBUG)
|
61
61
|
|
62
|
+
|
62
63
|
def register_remoting_factories() -> None:
|
63
64
|
SenderContext.register(ParseError, ParseErrorSender)
|
64
65
|
SenderContext.register(Py, PythonSender)
|
@@ -172,7 +173,9 @@ class Server:
|
|
172
173
|
logger.error("Failed to send error response, socket was closed")
|
173
174
|
return
|
174
175
|
except Exception as inner_exception:
|
175
|
-
logger.error(
|
176
|
+
logger.error(
|
177
|
+
f"An error occurred while sending error response: {inner_exception}"
|
178
|
+
)
|
176
179
|
|
177
180
|
def parse_python_source(
|
178
181
|
self,
|
rewrite_remote/type_utils.py
CHANGED
@@ -108,6 +108,6 @@ def __convert_snake_to_camel(field_name: str) -> str:
|
|
108
108
|
|
109
109
|
def get_type(type_name: str) -> Type[Any]:
|
110
110
|
# `type_name` will look like `org.openrewrite.java.tree.J$CompilationUnit`
|
111
|
-
parts = type_name.split(
|
112
|
-
module = importlib.import_module(
|
113
|
-
return getattr(module, parts[-1].split(
|
111
|
+
parts = type_name.split(".")
|
112
|
+
module = importlib.import_module("rewrite." + parts[2])
|
113
|
+
return getattr(module, parts[-1].split("$")[1])
|
File without changes
|
{openrewrite_remote-0.15.0.dist-info → openrewrite_remote-0.17.0.dist-info}/entry_points.txt
RENAMED
File without changes
|
File without changes
|