Skip to content

Commit

Permalink
fix: opening nested files with 'marimo edit <dir>' (#2477)
Browse files Browse the repository at this point in the history
* fix: opening nested files with 'marimo edit <dir>'

* add test
  • Loading branch information
mscolnick authored Oct 2, 2024
1 parent 4ad847d commit 23a7e6f
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 25 deletions.
19 changes: 2 additions & 17 deletions marimo/_server/file_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,23 +91,8 @@ def get_file_manager(
if key.startswith(AppFileRouter.NEW_FILE):
return AppFileManager(None, default_width)

for file in self.files:
if file.path == key:
return AppFileManager(file.path, default_width)

path = (
os.path.join(self.directory, key)
if self.directory is not None
else key
)

# Absolute path
if os.path.isabs(path):
return AppFileManager(path, default_width)

# Relative path
if os.path.exists(path):
return AppFileManager(path, default_width)
if os.path.exists(key):
return AppFileManager(key, default_width)

raise HTTPException(
status_code=HTTPStatus.NOT_FOUND,
Expand Down
40 changes: 32 additions & 8 deletions tests/_server/test_file_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,22 @@ def setUp(self):
self.test_file_3.write("marimo-version: 0.0.0".encode())
self.test_file_3.close()

# Create a nested directory and file
self.nested_dir = os.path.join(self.test_dir, "nested")
os.mkdir(self.nested_dir)
self.nested_file = tempfile.NamedTemporaryFile(
delete=False, dir=self.nested_dir, suffix=".py"
)
self.nested_file.write(file_contents.encode())
self.nested_file.close()

def tearDown(self):
# Clean up temporary files and directory
os.unlink(self.test_file1.name)
os.unlink(self.test_file2.name)
os.unlink(self.test_file_3.name)
os.unlink(self.nested_file.name)
shutil.rmtree(self.nested_dir)
shutil.rmtree(self.test_dir)

def test_infer_file(self):
Expand Down Expand Up @@ -84,7 +95,7 @@ def test_lazy_list_of_files(self):
)
files = router.files
assert (
len(files) == 2
len(files) == 3
) # Assuming the directory only contains the two created files

def test_lazy_list_with_broken_symlinks(self):
Expand All @@ -96,7 +107,7 @@ def test_lazy_list_with_broken_symlinks(self):
self.test_dir, include_markdown=False
)
files = router.files
assert len(files) == 2
assert len(files) == 3

# Remove the broken symlink
os.unlink(broken_symlink)
Expand All @@ -108,22 +119,35 @@ def test_lazy_list_with_markdown(self):
)
# Create markdown files
files = router.files
assert len(files) == 3
assert len(files) == 4

# Toggling markdown
router = router.toggle_markdown(False)
files = router.files
assert len(files) == 2
assert len(files) == 3

# Toggle markdown back
router = router.toggle_markdown(True)
files = router.files
assert len(files) == 3
assert len(files) == 4

def test_lazy_list_of_get_app_file_manager(self):
router = LazyListOfFilesAppFileRouter(
self.test_dir, include_markdown=False
)
basename = os.path.basename(self.test_file1.name)
file_manager = router.get_file_manager(key=basename)
assert file_manager.filename == os.path.join(self.test_dir, basename)
filename = self.test_file1.name
assert os.path.exists(filename), f"File {filename} does not exist"
file_manager = router.get_file_manager(key=filename)
assert file_manager.filename == os.path.join(self.test_dir, filename)

def test_lazy_list_of_get_app_file_manager_nested(self):
router = LazyListOfFilesAppFileRouter(
self.test_dir, include_markdown=False
)
nested_filename = self.nested_file.name
file_manager = router.get_file_manager(key=nested_filename)
assert file_manager.filename == self.nested_file.name
assert file_manager.filename is not None
assert os.path.exists(file_manager.filename)
assert file_manager.filename.startswith(self.test_dir)
assert "nested" in file_manager.filename

0 comments on commit 23a7e6f

Please sign in to comment.