diff --git a/pelican/generators.py b/pelican/generators.py index 606a1aa7..30ac7884 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -84,6 +84,21 @@ class Generator(object): % (name, self._templates_path))) return self._templates[name] + def _include_path(self, path, extensions=None): + """Inclusion logic for .get_files(), returns True/False + + :param path: the path which might be including + :param extensions: the list of allowed extensions (if False, all + extensions are allowed) + """ + if extensions is None: + extensions = self.markup + basename = os.path.basename(path) + if extensions is False or \ + (True in [basename.endswith(ext) for ext in extensions]): + return True + return False + def get_files(self, path, exclude=[], extensions=None): """Return a list of files to use, based on rules @@ -92,24 +107,19 @@ class Generator(object): :param extensions: the list of allowed extensions (if False, all extensions are allowed) """ - if extensions is None: - extensions = self.markup - files = [] - try: - iter = os.walk(path, followlinks=True) - except TypeError: # python 2.5 does not support followlinks - iter = os.walk(path) - - for root, dirs, temp_files in iter: - for e in exclude: - if e in dirs: - dirs.remove(e) - for f in temp_files: - if extensions is False or \ - (True in [f.endswith(ext) for ext in extensions]): - files.append(os.sep.join((root, f))) + if os.path.isdir(path): + for root, dirs, temp_files in os.walk(path, followlinks=True): + for e in exclude: + if e in dirs: + dirs.remove(e) + for f in temp_files: + fp = os.path.join(root, f) + if self._include_path(fp, extensions): + files.append(fp) + elif os.path.exists(path) and self._include_path(path, extensions): + files.append(path) # can't walk non-directories return files def add_source_path(self, content):