begin refactoring of directory document handling

This commit is contained in:
Martin A. Brown 2016-02-19 00:55:53 -08:00
parent b1840b03bf
commit 19f01a0a4c
1 changed files with 23 additions and 7 deletions

View File

@ -7,7 +7,7 @@ import os
import errno
import collections
from .utils import logger, statfiles
from .utils import logger, statfiles, stem_and_ext
from .typeguesser import guess, knownextensions
@ -59,11 +59,9 @@ def scansourcedirs(dirnames):
if os.path.isfile(possible):
candidates.append(SourceDocument(possible))
elif os.path.isdir(possible):
stem = os.path.basename(fname)
for ext in knownextensions:
possible = os.path.join(sdir, fname, stem + ext)
if os.path.isfile(possible):
candidates.append(SourceDocument(possible))
possible = sourcedoc_fromdir(possible)
if possible:
candidates.append(SourceDocument(possible))
else:
logger.warning("Skipping non-directory, non-plain file %s",
possible)
@ -79,6 +77,24 @@ def scansourcedirs(dirnames):
return found
def sourcedoc_fromdir(dirname):
candidates = list()
stem, _ = stem_and_ext(dirname)
parentdir = os.path.dirname(dirname)
for ext in knownextensions:
possible = os.path.join(parentdir, stem, stem + ext)
if os.path.isfile(possible):
candidates.append(possible)
if len(candidates) > 1:
logger.warning("%s multiple document choices in dir %s, bailing....",
stem, dirname)
raise Exception("multiple document choices in " + dirname)
elif len(candidates) == 0:
return None
else:
return candidates.pop()
class SourceCollection(collections.MutableMapping):
'''a dict-like container for SourceDocument objects
@ -161,7 +177,7 @@ class SourceDocument(object):
self.doctype = guess(self.filename)
self.status = 'source'
self.dirname, self.basename = os.path.split(self.filename)
self.stem, self.ext = os.path.splitext(self.basename)
self.stem, self.ext = stem_and_ext(self.basename)
parentbase = os.path.basename(self.dirname)
logger.debug("%s found source %s", self.stem, self.filename)
if parentbase == self.stem: