From e2bfd0d94fdf7c109e60354e709e163ed058fd68 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauldmccarthy@gmail.com>
Date: Wed, 16 Jan 2019 08:26:37 +0000
Subject: [PATCH] ENH: New convnience function to list all known trees

---
 fsl/utils/filetree/__init__.py |  2 +-
 fsl/utils/filetree/parse.py    | 14 +++++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/fsl/utils/filetree/__init__.py b/fsl/utils/filetree/__init__.py
index 9d31383db..8e0b7add9 100644
--- a/fsl/utils/filetree/__init__.py
+++ b/fsl/utils/filetree/__init__.py
@@ -277,4 +277,4 @@ of the short variable names defined in the
 __author__ = 'Michiel Cottaar <Michiel.Cottaar@ndcn.ox.ac.uk>'
 
 from .filetree import FileTree, register_tree, MissingVariable
-from .parse import tree_directories
+from .parse import tree_directories, list_all_trees
diff --git a/fsl/utils/filetree/parse.py b/fsl/utils/filetree/parse.py
index c89b381fd..11a8f1f22 100644
--- a/fsl/utils/filetree/parse.py
+++ b/fsl/utils/filetree/parse.py
@@ -1,7 +1,8 @@
+import glob
 import os.path as op
 from . import filetree
 from pathlib import PurePath
-from typing import Tuple
+from typing import Tuple, List
 import re
 
 
@@ -26,6 +27,17 @@ def search_tree(name: str) -> str:
     raise ValueError("No file tree found for %s" % name)
 
 
+def list_all_trees() -> List[str]:
+    """Return a list containing paths to all tree files that can be found in
+    :data:`tree_directories`
+    """
+    trees = []
+    for directory in tree_directories:
+        directory = op.abspath(directory)
+        trees.extend(glob.glob(op.join(directory, '*.tree')))
+    return trees
+
+
 def read_line(line: str) -> Tuple[int, PurePath, str]:
     """
     Parses line from the tree file
-- 
GitLab