|
1 | 1 | # Copyright 2024 Marimo. All rights reserved. |
2 | 2 | from __future__ import annotations |
3 | 3 |
|
| 4 | +from typing import List |
| 5 | + |
4 | 6 | from marimo._runtime.packages.module_name_to_pypi_name import ( |
5 | 7 | module_name_to_pypi_name, |
6 | 8 | ) |
@@ -48,6 +50,42 @@ class UvPackageManager(PypiPackageManager): |
48 | 50 | async def _install(self, package: str) -> bool: |
49 | 51 | return self.run(["uv", "pip", "install", package]) |
50 | 52 |
|
| 53 | + def update_notebook_script_metadata( |
| 54 | + self, |
| 55 | + filepath: str, |
| 56 | + import_namespaces_to_add: List[str], |
| 57 | + import_namespaces_to_remove: List[str], |
| 58 | + ) -> None: |
| 59 | + # Convert from module name to package name |
| 60 | + packages_to_add = [ |
| 61 | + self.module_to_package(im) for im in import_namespaces_to_add |
| 62 | + ] |
| 63 | + packages_to_remove = [ |
| 64 | + self.module_to_package(im) for im in import_namespaces_to_remove |
| 65 | + ] |
| 66 | + |
| 67 | + # Filter to packages that are found by "uv pip show" |
| 68 | + packages_to_add = [ |
| 69 | + im for im in packages_to_add if self._is_installed(im) |
| 70 | + ] |
| 71 | + packages_to_remove = [ |
| 72 | + im for im in packages_to_remove if self._is_installed(im) |
| 73 | + ] |
| 74 | + |
| 75 | + if packages_to_add: |
| 76 | + self.run( |
| 77 | + ["uv", "--quiet", "add", "--script", filepath] |
| 78 | + + packages_to_add |
| 79 | + ) |
| 80 | + if packages_to_remove: |
| 81 | + self.run( |
| 82 | + ["uv", "--quiet", "remove", "--script", filepath] |
| 83 | + + packages_to_remove |
| 84 | + ) |
| 85 | + |
| 86 | + def _is_installed(self, package: str) -> bool: |
| 87 | + return self.run(["uv", "--quiet", "pip", "show", package]) |
| 88 | + |
51 | 89 |
|
52 | 90 | class RyePackageManager(PypiPackageManager): |
53 | 91 | name = "rye" |
|
0 commit comments