Skip to content

Commit

Permalink
provider: add more options to filter hidden files / dirs in hook
Browse files Browse the repository at this point in the history
  • Loading branch information
robcxyz committed Dec 28, 2022
1 parent a639287 commit bb53f3d
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 6 deletions.
35 changes: 30 additions & 5 deletions tackle/providers/paths/hooks/listdir.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,43 @@ class ListdirHook(BaseHook):
hook_type: str = 'listdir'
path: str = Field('.', description="Path to directory to list contents.")
sort: bool = Field(False, description="Boolean to sort the output")
ignore_hidden: bool = Field(
False, description="Boolean to ignore hidden files or directories"
)
ignore_hidden_files: bool = Field(
None, description="Boolean to ignore hidden files"
False, description="Boolean to ignore hidden files"
)
ignore_hidden_directories: bool = Field(
False, description="Boolean to ignore hidden directories"
)
only_files: bool = Field(False, description="Only return files.")
only_directories: bool = Field(False, description="Only return directories.")

args: list = ['path']
_docs_order = 2

def exec(self) -> list:
files = os.listdir(os.path.expanduser(self.path))
files = os.listdir(os.path.expanduser(os.path.expandvars(self.path)))
if self.sort:
files.sort()
if self.ignore_hidden:
files = [f for f in files if not f.startswith('.')]
if self.ignore_hidden_files:
return [f for f in files if not f.startswith('.')]
else:
return files
files = [
f
for f in files
if not (
f.startswith('.') and os.path.isfile(os.path.join(self.path, f))
)
]
if self.ignore_hidden_directories:
files = [
f
for f in files
if not (f.startswith('.') and os.path.isdir(os.path.join(self.path, f)))
]
if self.only_files:
files = [f for f in files if os.path.isfile(os.path.join(self.path, f))]
if self.only_directories:
files = [f for f in files if os.path.isdir(os.path.join(self.path, f))]
return files
Empty file.
7 changes: 7 additions & 0 deletions tackle/providers/paths/tests/listdir/tackle.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,10 @@ list_input:
- dirs/dir1
- dirs/dir2
path: "{{ item }}"

only_files->: listdir dirs --only_files
only_directories->: listdir dirs --only_directories

ignore_hidden->: listdir dirs --ignore_hidden
ignore_hidden_directories->: listdir dirs --ignore_hidden_directories
ignore_hidden_files->: listdir dirs --ignore_hidden_files
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,16 @@


def test_provider_system_hook_listdir(change_dir):
output = tackle('.', no_input=True)
output = tackle(no_input=True)

assert len(output['string_input']) == 3
assert len(output['string_input_sorted']) == 2
assert len(output['list_input']) == 2
assert 'dir1' in output['only_directories']
assert 'things.py' in output['only_files']
assert 'things.py' not in output['only_directories']
assert 'dir1' not in output['only_files']
assert '.hidden-dir' not in output['ignore_hidden']
assert '.hidden-dir' not in output['ignore_hidden_directories']
assert '.hidden-stuff' in output['ignore_hidden_directories']
assert '.hidden-dir' in output['ignore_hidden_files']

0 comments on commit bb53f3d

Please sign in to comment.