Skip to content

Commit 60ecc7b

Browse files
authored
refactor(cli): share importer package setup (#922)
1 parent 3ac831b commit 60ecc7b

3 files changed

Lines changed: 46 additions & 52 deletions

File tree

src/openenv/cli/importers/base.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,42 @@ def qualified_name(self) -> str:
257257
return f"{self.module_path}:{self.class_name}"
258258

259259

260+
@dataclass(frozen=True)
261+
class ImportPackageContext:
262+
"""Shared details produced while scaffolding an imported environment package."""
263+
264+
class_name_prefix: str
265+
vendor_dir: str
266+
267+
268+
def prepare_import_package(
269+
source: Path, destination: Path, env_name: str
270+
) -> ImportPackageContext:
271+
from openenv.cli.commands.init import (
272+
_copy_template_directory,
273+
_create_template_replacements,
274+
)
275+
276+
replacements = _create_template_replacements(env_name)
277+
_copy_template_directory(
278+
"openenv.cli.templates.openenv_env",
279+
"",
280+
destination,
281+
replacements,
282+
env_name,
283+
)
284+
285+
vendor_dir = safe_vendor_dir_name(source)
286+
vendor_path = destination / "vendor" / vendor_dir
287+
copy_source_tree(source, vendor_path)
288+
ensure_vendor_package(vendor_path)
289+
290+
return ImportPackageContext(
291+
class_name_prefix=replacements["__ENV_CLASS_NAME__"],
292+
vendor_dir=vendor_dir,
293+
)
294+
295+
260296
class EnvironmentImporter(Protocol):
261297
source_type: str
262298

src/openenv/cli/importers/ors.py

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,11 @@
88
from .base import (
99
append_dependency_files,
1010
collect_source_dependencies,
11-
copy_source_tree,
1211
DetectedEnvironment,
13-
ensure_vendor_package,
1412
iter_python_files,
1513
module_path,
14+
prepare_import_package,
1615
render_importer_template,
17-
safe_vendor_dir_name,
1816
write_text,
1917
)
2018

@@ -209,39 +207,20 @@ def generate(
209207
env_name: str,
210208
detected: DetectedEnvironment,
211209
) -> None:
212-
from openenv.cli.commands.init import (
213-
_copy_template_directory,
214-
_create_template_replacements,
215-
)
216-
217-
replacements = _create_template_replacements(env_name)
218-
_copy_template_directory(
219-
"openenv.cli.templates.openenv_env",
220-
"",
221-
destination,
222-
replacements,
223-
env_name,
224-
)
225-
226-
vendor_dir = safe_vendor_dir_name(source)
227-
vendor_path = destination / "vendor" / vendor_dir
228-
copy_source_tree(source, vendor_path)
229-
ensure_vendor_package(vendor_path)
230-
231-
prefix = replacements["__ENV_CLASS_NAME__"]
210+
package = prepare_import_package(source, destination, env_name)
232211
write_text(
233212
destination / "server" / f"{env_name}_environment.py",
234213
_wrapper_source(
235214
env_name=env_name,
236-
class_name_prefix=prefix,
215+
class_name_prefix=package.class_name_prefix,
237216
source_module=detected.module_path,
238217
source_class=detected.class_name,
239-
vendor_dir=vendor_dir,
218+
vendor_dir=package.vendor_dir,
240219
),
241220
)
242221
write_text(
243222
destination / "server" / "app.py",
244-
_app_source(env_name=env_name, class_name_prefix=prefix),
223+
_app_source(env_name=env_name, class_name_prefix=package.class_name_prefix),
245224
)
246225
dependencies = collect_source_dependencies(source)
247226
for dependency in detect_ors_dependencies(source):

src/openenv/cli/importers/verifiers.py

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,11 @@
88
from .base import (
99
append_dependency_files,
1010
collect_source_dependencies,
11-
copy_source_tree,
1211
DetectedEnvironment,
13-
ensure_vendor_package,
1412
iter_python_files,
1513
module_path,
14+
prepare_import_package,
1615
render_importer_template,
17-
safe_vendor_dir_name,
1816
write_text,
1917
)
2018

@@ -110,38 +108,19 @@ def generate(
110108
env_name: str,
111109
detected: DetectedEnvironment,
112110
) -> None:
113-
from openenv.cli.commands.init import (
114-
_copy_template_directory,
115-
_create_template_replacements,
116-
)
117-
118-
replacements = _create_template_replacements(env_name)
119-
_copy_template_directory(
120-
"openenv.cli.templates.openenv_env",
121-
"",
122-
destination,
123-
replacements,
124-
env_name,
125-
)
126-
127-
vendor_dir = safe_vendor_dir_name(source)
128-
vendor_path = destination / "vendor" / vendor_dir
129-
copy_source_tree(source, vendor_path)
130-
ensure_vendor_package(vendor_path)
131-
132-
prefix = replacements["__ENV_CLASS_NAME__"]
111+
package = prepare_import_package(source, destination, env_name)
133112
write_text(
134113
destination / "server" / f"{env_name}_environment.py",
135114
_wrapper_source(
136115
env_name=env_name,
137-
class_name_prefix=prefix,
116+
class_name_prefix=package.class_name_prefix,
138117
source_module=detected.module_path,
139-
vendor_dir=vendor_dir,
118+
vendor_dir=package.vendor_dir,
140119
),
141120
)
142121
write_text(
143122
destination / "server" / "app.py",
144-
_app_source(env_name=env_name, class_name_prefix=prefix),
123+
_app_source(env_name=env_name, class_name_prefix=package.class_name_prefix),
145124
)
146125
dependencies = collect_source_dependencies(source)
147126
if "verifiers>=0.1.14" not in dependencies:

0 commit comments

Comments
 (0)