From 66c9c5a592de181ffba3cb261ff4601f58e4942d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Wed, 4 Sep 2019 15:13:11 +0200 Subject: [PATCH] Implement finding files from relative paths FileManager --- tfw/components/ide/file_manager/file_manager.py | 12 +++++++++++- tfw/components/ide/file_manager/test_file_manager.py | 8 +++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/tfw/components/ide/file_manager/file_manager.py b/tfw/components/ide/file_manager/file_manager.py index be74e22..1ebc5e0 100644 --- a/tfw/components/ide/file_manager/file_manager.py +++ b/tfw/components/ide/file_manager/file_manager.py @@ -1,7 +1,10 @@ +import logging from functools import wraps from glob import glob from fnmatch import fnmatchcase -from os.path import dirname, isdir, isfile, realpath +from os.path import dirname, isdir, isfile, realpath, isabs + +LOG = logging.getLogger(__name__) def _with_is_allowed(func): @@ -45,6 +48,13 @@ class FileManager: # pylint: disable=too-many-instance-attributes for pattern in self.patterns ) + def find_file(self, filename): + if not isabs(filename): + for filepath in self.files: + if filepath.endswith(filename): + return filepath + return filename + @_with_is_allowed def read_file(self, filepath): # pylint: disable=no-self-use with open(filepath, 'rb', buffering=0) as ifile: diff --git a/tfw/components/ide/file_manager/test_file_manager.py b/tfw/components/ide/file_manager/test_file_manager.py index d321ea3..b634b0d 100644 --- a/tfw/components/ide/file_manager/test_file_manager.py +++ b/tfw/components/ide/file_manager/test_file_manager.py @@ -2,7 +2,7 @@ from dataclasses import dataclass from secrets import token_urlsafe from os import mkdir, symlink -from os.path import join, realpath +from os.path import join, realpath, basename from pathlib import Path from tempfile import TemporaryDirectory @@ -86,3 +86,9 @@ def test_regular_ide_actions(context): context.manager.write_file(newfile2, content2) assert context.manager.read_file(newfile1) == content1 assert context.manager.read_file(newfile2) == content2 + +def test_find_file(context): + for _ in range(5): + file_abs = context.create_random_file(context.subdir, '.txt') + file_base = basename(file_abs) + assert context.manager.find_file(file_base) == file_abs