pylabel/pylabel/__main__.py
2021-04-26 14:54:03 +10:00

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))