mirror of https://github.com/tLDP/python-tldp
adjust logic into an inventory object
This commit is contained in:
parent
bc1c154108
commit
c1ccc544a3
113
tldp/driver.py
113
tldp/driver.py
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
import copy
|
||||||
|
|
||||||
from .utils import logger, statfiles, max_mtime, mtime_gt
|
from .utils import logger, statfiles, max_mtime, mtime_gt
|
||||||
|
|
||||||
from .sources import SourceCollection
|
from .sources import SourceCollection
|
||||||
|
@ -10,60 +12,61 @@ from .outputs import OutputCollection
|
||||||
from argparse import Namespace
|
from argparse import Namespace
|
||||||
|
|
||||||
|
|
||||||
def get_outputs(pubdir):
|
class Inventory(object):
|
||||||
o = OutputCollection(pubdir)
|
|
||||||
return o
|
def __init__(self, pubdir, sourcedirs):
|
||||||
|
self.outputs = OutputCollection(pubdir)
|
||||||
|
self.sources = SourceCollection(sourcedirs)
|
||||||
|
s = copy.deepcopy(self.sources)
|
||||||
|
o = copy.deepcopy(self.outputs)
|
||||||
|
sset = set(s.keys())
|
||||||
|
oset = set(o.keys())
|
||||||
|
|
||||||
|
self.orphans = OutputCollection()
|
||||||
|
for doc in oset.difference(sset):
|
||||||
|
self.orphans[doc] = o[doc]
|
||||||
|
del o[doc]
|
||||||
|
self.orphans[doc].status = 'orphan'
|
||||||
|
logger.info("Identified %d orphaned documents: %r.", len(self.orphans),
|
||||||
|
self.orphans.keys())
|
||||||
|
|
||||||
|
self.new = SourceCollection()
|
||||||
|
for doc in sset.difference(oset):
|
||||||
|
self.new[doc] = s[doc]
|
||||||
|
del s[doc]
|
||||||
|
self.new[doc].status = 'new'
|
||||||
|
logger.info("Identified %d new documents: %r.", len(self.new),
|
||||||
|
self.new.keys())
|
||||||
|
|
||||||
|
# -- sources + outputs should be same size now
|
||||||
|
assert len(s) == len(o)
|
||||||
|
for stem, odoc in o.items():
|
||||||
|
sdoc = s[stem]
|
||||||
|
sdoc.output = odoc
|
||||||
|
odoc.source = sdoc
|
||||||
|
odoc.status = sdoc.status = 'published'
|
||||||
|
self.published = s
|
||||||
|
logger.info("Identified %d published documents.", len(self.published))
|
||||||
|
|
||||||
|
self.stale = SourceCollection()
|
||||||
|
for stem, sdoc in s.items():
|
||||||
|
odoc = sdoc.output
|
||||||
|
mtime = max_mtime(statfiles(odoc.dirname, odoc.fileset))
|
||||||
|
fset = mtime_gt(mtime, statfiles(sdoc.dirname, sdoc.fileset))
|
||||||
|
if fset:
|
||||||
|
logger.debug("%s stale files %r", stem, fset)
|
||||||
|
odoc.status = sdoc.status = 'stale'
|
||||||
|
self.stale[stem] = sdoc
|
||||||
|
logger.info("Identified %d stale documents: %r.", len(self.stale),
|
||||||
|
self.stale.keys())
|
||||||
|
|
||||||
|
|
||||||
def get_sources(sourcedirs):
|
def get_sources(sourcedirs):
|
||||||
s = SourceCollection(sourcedirs)
|
return SourceCollection(sourcedirs)
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def get_differences_intersections(pubdir, sourcedirs):
|
def get_outputs(pubdir):
|
||||||
s = get_sources(sourcedirs)
|
return OutputCollection(pubdir)
|
||||||
o = get_outputs(pubdir)
|
|
||||||
sset = set(s.keys())
|
|
||||||
oset = set(o.keys())
|
|
||||||
|
|
||||||
orphans = OutputCollection()
|
|
||||||
for doc in oset.difference(sset):
|
|
||||||
orphans[doc] = o[doc]
|
|
||||||
del o[doc]
|
|
||||||
orphans[doc].status = 'orphan'
|
|
||||||
|
|
||||||
new = SourceCollection()
|
|
||||||
for doc in sset.difference(oset):
|
|
||||||
new[doc] = s[doc]
|
|
||||||
del s[doc]
|
|
||||||
new[doc].status = 'new'
|
|
||||||
|
|
||||||
return orphans, new, s, o
|
|
||||||
|
|
||||||
|
|
||||||
def get_published(pubdir, sourcedirs):
|
|
||||||
_, _, s, o = get_differences_intersections(pubdir, sourcedirs)
|
|
||||||
assert len(s) == len(o)
|
|
||||||
for stem, odoc in o.items():
|
|
||||||
sdoc = s[stem]
|
|
||||||
sdoc.output = odoc
|
|
||||||
odoc.source = sdoc
|
|
||||||
odoc.status = sdoc.status = 'published'
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def get_stale(pubdir, sourcedirs):
|
|
||||||
s = get_published(pubdir, sourcedirs)
|
|
||||||
stale = SourceCollection()
|
|
||||||
for stem, sdoc in s.items():
|
|
||||||
odoc = sdoc.output
|
|
||||||
mtime = max_mtime(statfiles(odoc.dirname, odoc.fileset))
|
|
||||||
fset = mtime_gt(mtime, statfiles(sdoc.dirname, sdoc.fileset))
|
|
||||||
if fset:
|
|
||||||
logger.debug("%s stale files %r", stem, fset)
|
|
||||||
odoc.status = sdoc.status = 'stale'
|
|
||||||
stale[stem] = sdoc
|
|
||||||
return stale
|
|
||||||
|
|
||||||
|
|
||||||
def print_sources(scollection, config=None):
|
def print_sources(scollection, config=None):
|
||||||
|
@ -103,18 +106,18 @@ def list_outputs(pubdir, config=None):
|
||||||
|
|
||||||
|
|
||||||
def list_stale(pubdir, sourcedirs, config=None):
|
def list_stale(pubdir, sourcedirs, config=None):
|
||||||
s = get_stale(pubdir, sourcedirs)
|
i = Inventory(pubdir, sourcedirs)
|
||||||
print_sources(s, config)
|
print_sources(i.stale, config)
|
||||||
|
|
||||||
|
|
||||||
def list_new(pubdir, sourcedirs, config=None):
|
def list_new(pubdir, sourcedirs, config=None):
|
||||||
_, s, _, _ = get_differences_intersections(pubdir, sourcedirs)
|
i = Inventory(pubdir, sourcedirs)
|
||||||
print_sources(s, config)
|
print_sources(i.new, config)
|
||||||
|
|
||||||
|
|
||||||
def list_orphans(pubdir, sourcedirs, config=None):
|
def list_orphans(pubdir, sourcedirs, config=None):
|
||||||
o, _, _, _ = get_differences_intersections(pubdir, sourcedirs)
|
i = Inventory(pubdir, sourcedirs)
|
||||||
print_outputs(o, config)
|
print_outputs(i.orphans, config)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue