mirror of https://github.com/tLDP/python-tldp
132 lines
4.3 KiB
Python
132 lines
4.3 KiB
Python
#! /usr/bin/python
|
|
# -*- coding: utf8 -*-
|
|
|
|
from __future__ import absolute_import, division, print_function
|
|
|
|
import os
|
|
import sys
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
import tldp
|
|
|
|
from argparse import Namespace
|
|
|
|
|
|
def detail(config, args):
|
|
i = tldp.inventory.Inventory(config.pubdir, config.sourcedir)
|
|
width = Namespace()
|
|
width.status = max([len(x) for x in tldp.inventory.status_types])
|
|
width.stem = max([len(x) for x in i.source.keys()])
|
|
# -- if user just said "list" with no args, then give the user something
|
|
# sane, "all"; it would make sense for this to be "work", too, but
|
|
# "all" seems to be less surprising
|
|
#
|
|
if not args:
|
|
args.append('all')
|
|
for arg in args:
|
|
status_class = tldp.inventory.status_classes[arg]
|
|
for status in status_class:
|
|
s = getattr(i, status, None)
|
|
assert s is not None
|
|
for stem, doc in s.items():
|
|
# -- a 'stale' or 'broken' document is implicitly a 'published'
|
|
# document as well, but we only want to list each document
|
|
# once
|
|
#
|
|
if doc.status == status:
|
|
doc.detail(width, config.verbose, file=sys.stdout)
|
|
return 0
|
|
|
|
|
|
def status(config, args):
|
|
i = tldp.inventory.Inventory(config.pubdir, config.sourcedir)
|
|
width = Namespace()
|
|
width.status = max([len(x) for x in tldp.inventory.status_types])
|
|
width.count = len(str(len(i.source.keys())))
|
|
for status in tldp.inventory.status_types:
|
|
if status == 'all':
|
|
continue
|
|
count = len(getattr(i, status, 0))
|
|
s = '{0:{w.status}} {1:{w.count}} '.format(status, count, w=width)
|
|
print(s, end="")
|
|
if config.verbose:
|
|
print('\t'.join(getattr(i, status).keys()))
|
|
else:
|
|
abbrev = getattr(i, status).keys()
|
|
displaynum = 3
|
|
if len(abbrev) > displaynum:
|
|
abbrev = abbrev[:displaynum]
|
|
remainder = count - displaynum
|
|
abbrev.append('[and %d more]' % (remainder,))
|
|
print('\t'.join(abbrev))
|
|
return 0
|
|
|
|
|
|
def build(config, args):
|
|
targets = list()
|
|
stems = list()
|
|
if args:
|
|
for arg in args:
|
|
if os.path.isfile(arg) or os.path.isdir(arg):
|
|
source = tldp.sources.SourceDocument(arg)
|
|
targets.append(source)
|
|
else:
|
|
stems.append(arg)
|
|
if stems or not args:
|
|
i = tldp.inventory.Inventory(config.pubdir, config.sourcedir)
|
|
if stems:
|
|
for source in i.source.values():
|
|
if source.stem in stems:
|
|
targets.append(source)
|
|
else:
|
|
targets.extend(i.new.values())
|
|
targets.extend(i.stale.values())
|
|
targets.extend(i.broken.values())
|
|
for source in targets:
|
|
if source.stem in config.skip:
|
|
logger.info("%s skipping build per request", source.stem)
|
|
continue
|
|
if not source.output:
|
|
dirname = os.path.join(config.pubdir, source.stem)
|
|
source.output = tldp.outputs.OutputDirectory(dirname)
|
|
if not source.doctype:
|
|
logger.warning("%s skipping document of unknown doctype",
|
|
source.stem)
|
|
continue
|
|
output = source.output
|
|
runner = source.doctype(source=source, output=output, config=config)
|
|
runner.generate()
|
|
return 0
|
|
|
|
|
|
def run():
|
|
tag = os.path.basename(sys.argv[0]).strip('.py')
|
|
argv = sys.argv[1:]
|
|
config, args = tldp.config.collectconfiguration(tag, argv)
|
|
|
|
# -- check to see if the user wishes to --list things
|
|
# this function and friends is called 'detail', because
|
|
# Python reserves a special (fundamental) meaning for the word
|
|
# list; but for the end-user they are synonyms
|
|
#
|
|
if config.detail:
|
|
sys.exit(detail(config, args))
|
|
|
|
# -- check to see if the user wants --status output
|
|
#
|
|
if config.status:
|
|
if config.pubdir is None:
|
|
sys.exit("Option --pubdir required for --status.")
|
|
if not config.sourcedir:
|
|
sys.exit("Option --sourcedir required for --status.")
|
|
sys.exit(status(config, args))
|
|
|
|
# -- our primary action is to try to build
|
|
if config.build is None:
|
|
config.all = True
|
|
sys.exit(build(config, args))
|
|
|
|
#
|
|
# -- end of file
|