57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
import argparse
|
|
import sys
|
|
import logging
|
|
import importlib
|
|
|
|
from . import LabelSheet
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
parser = argparse.ArgumentParser(description="Generate a page of labels")
|
|
|
|
parser.add_argument("profile", help="Profile to load")
|
|
|
|
parser.add_argument('--style', '-s', type=argparse.FileType('r'), help='Additional stylesheet')
|
|
parser.add_argument('--skip', '-n', type=int, default=0, help="Skip first n labels")
|
|
parser.add_argument('--template', '-t', type=argparse.FileType('r'), help='Template for label')
|
|
parser.add_argument('--json', '-j', action='store_true', help='Parse lines as json')
|
|
|
|
parser.add_argument('--logging', '-l', default="info", help="Logging level")
|
|
options = parser.parse_args()
|
|
|
|
logging.basicConfig(level=getattr(logging, options.logging.upper(), logging.INFO))
|
|
|
|
logger.debug(options)
|
|
|
|
try:
|
|
module, profile = options.profile.rsplit('.', 1)
|
|
m = importlib.import_module(module)
|
|
p = getattr(m, profile)
|
|
except ValueError:
|
|
raise RuntimeError("Expected profile in the form module.profile")
|
|
except ModuleNotFoundError:
|
|
raise RuntimeError(f"Unable to find profile module {module}")
|
|
except AttributeError:
|
|
raise RuntimeError(f"Unable to file profile {profile} in module {module}")
|
|
|
|
sheet = LabelSheet(p)
|
|
|
|
extra_style=""
|
|
if options.style is not None:
|
|
extra_style = options.style.read()
|
|
options.style.close()
|
|
|
|
template = '<b>{data[text]}</b>'
|
|
if options.template is not None:
|
|
template = options.template.read()
|
|
options.template.close()
|
|
|
|
lines = [ l.strip() for l in sys.stdin.readlines() if l != '\n' ]
|
|
|
|
if options.json:
|
|
import json
|
|
data = [ json.loads(line) for line in lines ]
|
|
else:
|
|
data = [ {'text': line} for line in lines ]
|
|
|
|
sys.stdout.write(sheet.render_html(template, data, options.skip, extra_style)) |