Add demo functions

This commit is contained in:
Davis Goglin 2016-03-15 16:01:07 -07:00 committed by Davis Goglin
parent cdf8f6be09
commit 7d74dcac00
1 changed files with 300 additions and 220 deletions

View File

@ -9,244 +9,324 @@ import six
import os import os
from . import printer, config from . import printer, config
c = config.Config() demo_functions = {
printer = c.printer() 'text': [
{'txt': 'Hello, World!',}
],
'qr': [
{'text': 'This tests a QR code'},
{'text': 'https://en.wikipedia.org/'}
],
'barcodes_a': [
{'bc': 'UPC-A', 'code': '13243546576'},
{'bc': 'UPC-E', 'code': '132435'},
{'bc': 'EAN13', 'code': '1324354657687'},
{'bc': 'EAN8', 'code': '13243546'},
{'bc': 'CODE39', 'code': '*TEST*'},
{'bc': 'ITF', 'code': '55867492279103'},
{'bc': 'NW7', 'code': 'A00000000A'},
],
'barcodes_b': [
{'bc': 'UPC-A', 'code': '13243546576', 'function_type': 'B'},
{'bc': 'UPC-E', 'code': '132435', 'function_type': 'B'},
{'bc': 'EAN13', 'code': '1324354657687', 'function_type': 'B'},
{'bc': 'EAN8', 'code': '13243546', 'function_type': 'B'},
{'bc': 'CODE39', 'code': '*TEST*', 'function_type': 'B'},
{'bc': 'ITF', 'code': '55867492279103', 'function_type': 'B'},
{'bc': 'NW7', 'code': 'A00000000A', 'function_type': 'B'},
{'bc': 'CODE93', 'code': 'A00000000A', 'function_type': 'B'},
{'bc': 'CODE93', 'code': '1324354657687', 'function_type': 'B'},
{'bc': 'CODE128A', 'code': '*TEST*', 'function_type': 'B'},
{'bc': 'CODE128B', 'code': '*TEST*', 'function_type': 'B'},
{'bc': 'CODE128C', 'code': '*TEST*', 'function_type': 'B'},
{'bc': 'GS1-128', 'code': '00123456780000000001', 'function_type': 'B'},
{'bc': 'GS1 DataBar Omnidirectional', 'code': '0000000000000', 'function_type': 'B'},
{'bc': 'GS1 DataBar Truncated', 'code': '0000000000000', 'function_type': 'B'},
{'bc': 'GS1 DataBar Limited', 'code': '0000000000000', 'function_type': 'B'},
{'bc': 'GS1 DataBar Expanded', 'code': '00AAAAAAA', 'function_type': 'B'},
]
}
parser = argparse.ArgumentParser( def main():
c = config.Config()
printer = c.printer()
parser = argparse.ArgumentParser(
description='CLI for python-escpos', description='CLI for python-escpos',
epilog='Printer configuration is defined in the python-escpos config file. See documentation for details.', epilog='Printer configuration is defined in the python-escpos config file. See documentation for details.',
) )
command_subparsers = parser.add_subparsers( command_subparsers = parser.add_subparsers(
title='ESCPOS Command', title='ESCPOS Command',
) )
# From here on func needs to be a string, since we don't have a printer to work on yet # From here on func needs to be a string, since we don't have a printer to work on yet
parser_command_qr = command_subparsers.add_parser('qr', help='Print a QR code') parser_command_qr = command_subparsers.add_parser('qr', help='Print a QR code')
parser_command_qr.set_defaults(func='qr') parser_command_qr.set_defaults(func='qr')
parser_command_qr.add_argument( parser_command_qr.add_argument(
'--text', '--text',
help='Text to print as a qr code', help='Text to print as a qr code',
required=True required=True
) )
parser_command_barcode = command_subparsers.add_parser('barcode', help='Print a barcode') parser_command_barcode = command_subparsers.add_parser('barcode', help='Print a barcode')
parser_command_barcode.set_defaults(func='barcode') parser_command_barcode.set_defaults(func='barcode')
parser_command_barcode.add_argument( parser_command_barcode.add_argument(
'--code', '--code',
help='Barcode data to print', help='Barcode data to print',
required=True required=True
) )
parser_command_barcode.add_argument( parser_command_barcode.add_argument(
'--bc', '--bc',
help='Barcode format', help='Barcode format',
required=True required=True
) )
parser_command_barcode.add_argument( parser_command_barcode.add_argument(
'--height', '--height',
help='Barcode height in px', help='Barcode height in px',
type=int type=int
) )
parser_command_barcode.add_argument( parser_command_barcode.add_argument(
'--width', '--width',
help='Barcode width', help='Barcode width',
type=int type=int
) )
parser_command_barcode.add_argument( parser_command_barcode.add_argument(
'--pos', '--pos',
help='Label position', help='Label position',
choices=['BELOW', 'ABOVE', 'BOTH', 'OFF'] choices=['BELOW', 'ABOVE', 'BOTH', 'OFF']
) )
parser_command_barcode.add_argument( parser_command_barcode.add_argument(
'--font', '--font',
help='Label font', help='Label font',
choices=['A', 'B'] choices=['A', 'B']
) )
parser_command_barcode.add_argument( parser_command_barcode.add_argument(
'--align_ct', '--align_ct',
help='Align barcode center', help='Align barcode center',
type=bool type=bool
) )
parser_command_barcode.add_argument( parser_command_barcode.add_argument(
'--function_type', '--function_type',
help='ESCPOS function type', help='ESCPOS function type',
choices=['A', 'B'] choices=['A', 'B']
) )
parser_command_text = command_subparsers.add_parser('text', help='Print plain text') parser_command_text = command_subparsers.add_parser('text', help='Print plain text')
parser_command_text.set_defaults(func='text') parser_command_text.set_defaults(func='text')
parser_command_text.add_argument( parser_command_text.add_argument(
'--txt', '--txt',
help='Text to print', help='Text to print',
required=True required=True
) )
parser_command_block_text = command_subparsers.add_parser('block_text', help='Print wrapped text') parser_command_block_text = command_subparsers.add_parser('block_text', help='Print wrapped text')
parser_command_block_text.set_defaults(func='block_text') parser_command_block_text.set_defaults(func='block_text')
parser_command_block_text.add_argument( parser_command_block_text.add_argument(
'--txt', '--txt',
help='block_text to print', help='block_text to print',
required=True required=True
) )
parser_command_block_text.add_argument( parser_command_block_text.add_argument(
'--columns', '--columns',
help='Number of columns', help='Number of columns',
type=int type=int
) )
parser_command_cut = command_subparsers.add_parser('cut', help='Cut the paper') parser_command_cut = command_subparsers.add_parser('cut', help='Cut the paper')
parser_command_cut.set_defaults(func='cut') parser_command_cut.set_defaults(func='cut')
parser_command_cut.add_argument( parser_command_cut.add_argument(
'--mode', '--mode',
help='Type of cut', help='Type of cut',
choices=['FULL', 'PART'] choices=['FULL', 'PART']
) )
parser_command_cashdraw = command_subparsers.add_parser('cashdraw', help='Kick the cash drawer') parser_command_cashdraw = command_subparsers.add_parser('cashdraw', help='Kick the cash drawer')
parser_command_cashdraw.set_defaults(func='cashdraw') parser_command_cashdraw.set_defaults(func='cashdraw')
parser_command_cashdraw.add_argument( parser_command_cashdraw.add_argument(
'--pin', '--pin',
help='Which PIN to kick', help='Which PIN to kick',
choices=[2, 5] choices=[2, 5]
) )
parser_command_image = command_subparsers.add_parser('image', help='Print an image') parser_command_image = command_subparsers.add_parser('image', help='Print an image')
parser_command_image.set_defaults(func='image') parser_command_image.set_defaults(func='image')
parser_command_image.add_argument( parser_command_image.add_argument(
'--path_img', '--path_img',
help='Path to image', help='Path to image',
required=True required=True
) )
parser_command_fullimage = command_subparsers.add_parser('fullimage', help='Print an fullimage') parser_command_fullimage = command_subparsers.add_parser('fullimage', help='Print an fullimage')
parser_command_fullimage.set_defaults(func='fullimage') parser_command_fullimage.set_defaults(func='fullimage')
parser_command_fullimage.add_argument( parser_command_fullimage.add_argument(
'--img', '--img',
help='Path to img', help='Path to img',
required=True required=True
) )
parser_command_fullimage.add_argument( parser_command_fullimage.add_argument(
'--max_height', '--max_height',
help='Max height of image in px', help='Max height of image in px',
type=int type=int
) )
parser_command_fullimage.add_argument( parser_command_fullimage.add_argument(
'--width', '--width',
help='Max width of image in px', help='Max width of image in px',
type=int type=int
) )
parser_command_fullimage.add_argument( parser_command_fullimage.add_argument(
'--histeq', '--histeq',
help='Equalize the histrogram', help='Equalize the histrogram',
type=bool type=bool
) )
parser_command_fullimage.add_argument( parser_command_fullimage.add_argument(
'--bandsize', '--bandsize',
help='Size of bands to divide into when printing', help='Size of bands to divide into when printing',
type=int type=int
) )
# Not supported # Not supported
# parser_command_direct_image = command_subparsers.add_parser('direct_direct_image', help='Print an direct_image') # parser_command_direct_image = command_subparsers.add_parser('direct_direct_image', help='Print an direct_image')
# parser_command_direct_image.set_defaults(func='direct_image') # parser_command_direct_image.set_defaults(func='direct_image')
parser_command_charcode = command_subparsers.add_parser('charcode', help='Set character code table') parser_command_charcode = command_subparsers.add_parser('charcode', help='Set character code table')
parser_command_charcode.set_defaults(func='charcode') parser_command_charcode.set_defaults(func='charcode')
parser_command_charcode.add_argument( parser_command_charcode.add_argument(
'--code', '--code',
help='Character code', help='Character code',
required=True required=True
) )
parser_command_set = command_subparsers.add_parser('set', help='Set text properties') parser_command_set = command_subparsers.add_parser('set', help='Set text properties')
parser_command_set.set_defaults(func='set') parser_command_set.set_defaults(func='set')
parser_command_set.add_argument( parser_command_set.add_argument(
'--align', '--align',
help='Horizontal alignment', help='Horizontal alignment',
choices=['left', 'center', 'right'] choices=['left', 'center', 'right']
) )
parser_command_set.add_argument( parser_command_set.add_argument(
'--font', '--font',
help='Font choice', help='Font choice',
choices=['left', 'center', 'right'] choices=['left', 'center', 'right']
) )
parser_command_set.add_argument( parser_command_set.add_argument(
'--text_type', '--text_type',
help='Text properties', help='Text properties',
choices=['B', 'U', 'U2', 'BU', 'BU2', 'NORMAL'] choices=['B', 'U', 'U2', 'BU', 'BU2', 'NORMAL']
) )
parser_command_set.add_argument( parser_command_set.add_argument(
'--width', '--width',
help='Width multiplier', help='Width multiplier',
type=int type=int
) )
parser_command_set.add_argument( parser_command_set.add_argument(
'--height', '--height',
help='Height multiplier', help='Height multiplier',
type=int type=int
) )
parser_command_set.add_argument( parser_command_set.add_argument(
'--density', '--density',
help='Print density', help='Print density',
type=int type=int
) )
parser_command_set.add_argument( parser_command_set.add_argument(
'--invert', '--invert',
help='White on black printing', help='White on black printing',
type=bool type=bool
) )
parser_command_set.add_argument( parser_command_set.add_argument(
'--smooth', '--smooth',
help='Text smoothing. Effective on >= 4x4 text', help='Text smoothing. Effective on >= 4x4 text',
type=bool type=bool
) )
parser_command_set.add_argument( parser_command_set.add_argument(
'--flip', '--flip',
help='Text smoothing. Effective on >= 4x4 text', help='Text smoothing. Effective on >= 4x4 text',
type=bool type=bool
) )
parser_command_hw = command_subparsers.add_parser('hw', help='Hardware operations') parser_command_hw = command_subparsers.add_parser('hw', help='Hardware operations')
parser_command_hw.set_defaults(func='hw') parser_command_hw.set_defaults(func='hw')
parser_command_hw.add_argument( parser_command_hw.add_argument(
'--hw', '--hw',
help='Operation', help='Operation',
choices=['INIT', 'SELECT', 'RESET'], choices=['INIT', 'SELECT', 'RESET'],
required=True required=True
) )
parser_command_control = command_subparsers.add_parser('control', help='Control sequences') parser_command_control = command_subparsers.add_parser('control', help='Control sequences')
parser_command_control.set_defaults(func='control') parser_command_control.set_defaults(func='control')
parser_command_control.add_argument( parser_command_control.add_argument(
'--ctl', '--ctl',
help='Control sequence', help='Control sequence',
choices=['LF', 'FF', 'CR', 'HT', 'VT'], choices=['LF', 'FF', 'CR', 'HT', 'VT'],
required=True required=True
) )
parser_command_control.add_argument( parser_command_control.add_argument(
'--pos', '--pos',
help='Horizontal tab position (1-4)', help='Horizontal tab position (1-4)',
type=int type=int
) )
parser_command_panel_buttons = command_subparsers.add_parser('panel_buttons', help='Disables panel buttons') parser_command_panel_buttons = command_subparsers.add_parser('panel_buttons', help='Disables panel buttons')
parser_command_panel_buttons.set_defaults(func='panel_buttons') parser_command_panel_buttons.set_defaults(func='panel_buttons')
parser_command_panel_buttons.add_argument( parser_command_panel_buttons.add_argument(
'--enable', '--enable',
help='Feed button enabled', help='Feed button enabled',
type=bool, type=bool,
required=True required=True
) )
parser_command_demo = command_subparsers.add_parser('demo', help='Demonstrates various functions')
parser_command_demo.set_defaults(func='demo')
demo_group = parser_command_demo.add_mutually_exclusive_group()
demo_group.add_argument(
'--barcodes-a',
help='Print demo barcodes for function type A',
action='store_true',
)
demo_group.add_argument(
'--barcodes-b',
help='Print demo barcodes for function type B',
action='store_true',
)
demo_group.add_argument(
'--qr',
help='Print some demo QR codes',
action='store_true',
)
demo_group.add_argument(
'--text',
help='Print some demo text',
action='store_true',
)
if not printer: if not printer:
raise Exception('No printers loaded from config') raise Exception('No printers loaded from config')
# Get only arguments actually passed # Get only arguments actually passed
args_dict = vars(parser.parse_args()) args_dict = vars(parser.parse_args())
command_arguments = dict([k, v] for k, v in six.iteritems(args_dict) if v) command_arguments = dict([k, v] for k, v in six.iteritems(args_dict) if v)
target_command = command_arguments.pop('func') target_command = command_arguments.pop('func')
# print command with args if hasattr(printer, target_command):
getattr(printer, target_command)(**command_arguments) # print command with args
getattr(printer, target_command)(**command_arguments)
else:
command_arguments['printer'] = printer
globals()[target_command](**command_arguments)
def demo(printer, **kwargs):
for demo_choice in kwargs.keys():
command = getattr(
printer,
demo_choice
.replace('barcodes_a', 'barcode')
.replace('barcodes_b', 'barcode')
)
for params in demo_functions[demo_choice]:
command(**params)
if __name__ == '__main__':
main()