summaryrefslogtreecommitdiff
path: root/isort/finders.py
diff options
context:
space:
mode:
Diffstat (limited to 'isort/finders.py')
-rw-r--r--isort/finders.py26
1 files changed, 20 insertions, 6 deletions
diff --git a/isort/finders.py b/isort/finders.py
index ca4cb7bd..c419bec8 100644
--- a/isort/finders.py
+++ b/isort/finders.py
@@ -35,6 +35,11 @@ try:
except ImportError:
Pipfile = None
+try:
+ from functools import lru_cache
+except ImportError:
+ from backports.functools_lru_cache import lru_cache
+
KNOWN_SECTION_MAPPING = {
'STDLIB': 'STANDARD_LIBRARY',
@@ -260,6 +265,13 @@ class RequirementsFinder(ReqsBaseFinder):
def _get_files_from_dir(self, path):
"""Return paths to requirements files from passed dir.
"""
+ return RequirementsFinder._get_files_from_dir_cached(path)
+
+ @classmethod
+ @lru_cache(maxsize=16)
+ def _get_files_from_dir_cached(cls, path):
+ result = []
+
for fname in os.listdir(path):
if 'requirements' not in fname:
continue
@@ -268,18 +280,20 @@ class RequirementsFinder(ReqsBaseFinder):
# *requirements*/*.{txt,in}
if os.path.isdir(full_path):
for subfile_name in os.listdir(path):
- for ext in self.exts:
+ for ext in cls.exts:
if subfile_name.endswith(ext):
- yield os.path.join(path, subfile_name)
+ result.append(os.path.join(path, subfile_name))
continue
# *requirements*.{txt,in}
if os.path.isfile(full_path):
- for ext in self.exts:
+ for ext in cls.exts:
if fname.endswith(ext):
- yield full_path
+ result.append(full_path)
break
+ return result
+
def _get_names(self, path):
"""Load required packages from path to requirements file
"""
@@ -315,8 +329,8 @@ class FindersManager(object):
LocalFinder,
KnownPatternFinder,
PathFinder,
- # PipfileFinder,
- # RequirementsFinder,
+ PipfileFinder,
+ RequirementsFinder,
DefaultFinder,
)