mirror of
				https://github.com/python-escpos/python-escpos
				synced 2025-10-23 09:30:00 +00:00 
			
		
		
		
	REFACTOR fix minor PEP8 and similar mistakes
This commit is contained in:
		@@ -1,2 +1,5 @@
 | 
			
		||||
import constants, escpos, exceptions, printer
 | 
			
		||||
import constants
 | 
			
		||||
import escpos
 | 
			
		||||
import exceptions
 | 
			
		||||
import printer
 | 
			
		||||
__all__ = ["constants", "escpos", "exceptions", "printer"]
 | 
			
		||||
 
 | 
			
		||||
@@ -46,9 +46,11 @@ __license__ = "MIT"
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
from escpos import printer
 | 
			
		||||
 | 
			
		||||
epson = printer.Usb(0x0416, 0x5011)
 | 
			
		||||
# TODO: Un-hardcode this
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _print_text_file(path):
 | 
			
		||||
    """Print the given text file"""
 | 
			
		||||
    epson.set(align='left')
 | 
			
		||||
@@ -56,10 +58,12 @@ def _print_text_file(path):
 | 
			
		||||
        for line in fobj:
 | 
			
		||||
            epson.text(line)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _print_image_file(path):
 | 
			
		||||
    """Print the given image file."""
 | 
			
		||||
    epson.fullimage(path, histeq=False, width=384)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def print_files(args):
 | 
			
		||||
    """The 'print' subcommand"""
 | 
			
		||||
    for path in args.paths:
 | 
			
		||||
@@ -74,6 +78,7 @@ def print_files(args):
 | 
			
		||||
KNOWN_BARCODE_TYPES = ['UPC-A', 'UPC-E', 'EAN13', 'ITF']
 | 
			
		||||
re_barcode_escape = re.compile(r'^%(?P<type>\S+)\s(?P<data>[0-9X]+)$')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def echo(args):  # pylint: disable=unused-argument
 | 
			
		||||
    """TTY-like line-by-line keyboard-to-printer echo loop."""
 | 
			
		||||
    try:
 | 
			
		||||
@@ -94,6 +99,7 @@ def echo(args):  # pylint: disable=unused-argument
 | 
			
		||||
 | 
			
		||||
from PIL import Image, ImageDraw
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _stall_test(width, height):
 | 
			
		||||
    """Generate a pattern to detect print glitches due to vertical stalling."""
 | 
			
		||||
    img = Image.new('1', (width, height))
 | 
			
		||||
@@ -101,6 +107,7 @@ def _stall_test(width, height):
 | 
			
		||||
        img.putpixel(pos, not sum(pos) % 10)
 | 
			
		||||
    return img
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _test_basic():
 | 
			
		||||
    """The original test code from python-escpos's Usage wiki page"""
 | 
			
		||||
    epson.set(align='left')
 | 
			
		||||
@@ -120,24 +127,26 @@ def _test_basic():
 | 
			
		||||
    # Cut paper
 | 
			
		||||
    epson.cut()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _test_barcodes():
 | 
			
		||||
    """Print test barcodes for all ESCPOS-specified formats."""
 | 
			
		||||
    for name, data in (
 | 
			
		||||
        # pylint: disable=bad-continuation
 | 
			
		||||
        ('UPC-A', '123456789012\x00'),
 | 
			
		||||
        ('UPC-E', '02345036\x00'),
 | 
			
		||||
        ('EAN13', '1234567890128\x00'),
 | 
			
		||||
        ('EAN8', '12345670\x00'),
 | 
			
		||||
        ('CODE39', 'BARCODE12345678\x00'),
 | 
			
		||||
        ('ITF', '123456\x00'),
 | 
			
		||||
        ('CODABAR', 'A40156B'),
 | 
			
		||||
        # TODO: CODE93 and CODE128
 | 
			
		||||
            # pylint: disable=bad-continuation
 | 
			
		||||
            ('UPC-A', '123456789012\x00'),
 | 
			
		||||
            ('UPC-E', '02345036\x00'),
 | 
			
		||||
            ('EAN13', '1234567890128\x00'),
 | 
			
		||||
            ('EAN8', '12345670\x00'),
 | 
			
		||||
            ('CODE39', 'BARCODE12345678\x00'),
 | 
			
		||||
            ('ITF', '123456\x00'),
 | 
			
		||||
            ('CODABAR', 'A40156B'),
 | 
			
		||||
            # TODO: CODE93 and CODE128
 | 
			
		||||
    ):
 | 
			
		||||
        # TODO: Fix the library to restore old alignment somehow
 | 
			
		||||
        epson.set(align='center')
 | 
			
		||||
        epson.text('\n%s\n' % name)
 | 
			
		||||
        epson.barcode(data, name, 64, 2, '', '')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _test_patterns(width=384, height=255):
 | 
			
		||||
    """Print a set of test patterns for raster image output."""
 | 
			
		||||
    # Test our guess of the paper width
 | 
			
		||||
@@ -152,6 +161,7 @@ def _test_patterns(width=384, height=255):
 | 
			
		||||
    epson.image(_stall_test(width, height))
 | 
			
		||||
    epson.image(_stall_test(width / 2, height))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test(args):
 | 
			
		||||
    """The 'test' subcommand"""
 | 
			
		||||
    if args.barcodes:
 | 
			
		||||
@@ -161,6 +171,7 @@ def test(args):
 | 
			
		||||
    else:
 | 
			
		||||
        _test_basic()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
@@ -168,25 +179,26 @@ def main():
 | 
			
		||||
    # pylint: disable=bad-continuation
 | 
			
		||||
 | 
			
		||||
    import argparse
 | 
			
		||||
 | 
			
		||||
    parser = argparse.ArgumentParser(
 | 
			
		||||
        description="Command-line interface to python-escpos")
 | 
			
		||||
    subparsers = parser.add_subparsers(title='subcommands')
 | 
			
		||||
 | 
			
		||||
    echo_parser = subparsers.add_parser('echo', help='Echo the keyboard to '
 | 
			
		||||
        'the printer line-by-line (Exit with Ctrl+C)')
 | 
			
		||||
                                                     'the printer line-by-line (Exit with Ctrl+C)')
 | 
			
		||||
    echo_parser.set_defaults(func=echo)
 | 
			
		||||
 | 
			
		||||
    print_parser = subparsers.add_parser('print', help='Print the given files')
 | 
			
		||||
    print_parser.add_argument('--images', action='store_true',
 | 
			
		||||
        help="Provided files are images rather than text files.")
 | 
			
		||||
                              help="Provided files are images rather than text files.")
 | 
			
		||||
    print_parser.add_argument('paths', metavar='path', nargs='+')
 | 
			
		||||
    print_parser.set_defaults(func=print_files)
 | 
			
		||||
 | 
			
		||||
    test_parser = subparsers.add_parser('test', help='Print test patterns')
 | 
			
		||||
    test_modes = test_parser.add_mutually_exclusive_group()
 | 
			
		||||
    test_modes.add_argument('--barcodes', action='store_true',
 | 
			
		||||
        help="Test supported barcode types (Warning: Some printers must be "
 | 
			
		||||
        "reset after attempting an unsupported barcode type.)")
 | 
			
		||||
                            help="Test supported barcode types (Warning: Some printers must be "
 | 
			
		||||
                                 "reset after attempting an unsupported barcode type.)")
 | 
			
		||||
    test_modes.add_argument('--patterns', action='store_true',
 | 
			
		||||
                            help="Print test patterns")
 | 
			
		||||
    test_parser.set_defaults(func=test)
 | 
			
		||||
@@ -194,6 +206,7 @@ def main():
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    args.func(args)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    main()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,10 +15,8 @@ except ImportError:
 | 
			
		||||
    from PIL import Image
 | 
			
		||||
 | 
			
		||||
import qrcode
 | 
			
		||||
import time
 | 
			
		||||
import textwrap
 | 
			
		||||
import binascii
 | 
			
		||||
import os
 | 
			
		||||
import operator
 | 
			
		||||
 | 
			
		||||
from .constants import *
 | 
			
		||||
@@ -26,6 +24,7 @@ from .exceptions import *
 | 
			
		||||
 | 
			
		||||
from abc import ABCMeta, abstractmethod  # abstract base class support
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Escpos(object):
 | 
			
		||||
    """ ESC/POS Printer object
 | 
			
		||||
 | 
			
		||||
@@ -64,9 +63,9 @@ class Escpos(object):
 | 
			
		||||
        else:
 | 
			
		||||
            image_border = 32 - (size % 32)
 | 
			
		||||
            if (image_border % 2) == 0:
 | 
			
		||||
                return (round(image_border / 2), round(image_border / 2))
 | 
			
		||||
                return round(image_border / 2), round(image_border / 2)
 | 
			
		||||
            else:
 | 
			
		||||
                return (round(image_border / 2), round((image_border / 2) + 1))
 | 
			
		||||
                return round(image_border / 2), round((image_border / 2) + 1)
 | 
			
		||||
 | 
			
		||||
    def _print_image(self, line, size):
 | 
			
		||||
        """ Print formatted image
 | 
			
		||||
@@ -221,16 +220,16 @@ class Escpos(object):
 | 
			
		||||
        #self._raw(binascii.unhexlify(buf))
 | 
			
		||||
        for y in range(height):
 | 
			
		||||
            for x in range(width):
 | 
			
		||||
                value = image.getpixel((x,y))
 | 
			
		||||
                value = (value << 8) | value;
 | 
			
		||||
                value = image.getpixel((x, y))
 | 
			
		||||
                value |= (value << 8)
 | 
			
		||||
                if value == 0:
 | 
			
		||||
                    temp |= mask
 | 
			
		||||
 | 
			
		||||
                mask = mask >> 1
 | 
			
		||||
                mask >>= 1
 | 
			
		||||
 | 
			
		||||
                i += 1
 | 
			
		||||
                if i == 8:
 | 
			
		||||
                    buf +=   ("%02X" % temp)
 | 
			
		||||
                    buf += ("%02X" % temp)
 | 
			
		||||
                    mask = 0x80
 | 
			
		||||
                    i = 0
 | 
			
		||||
                    temp = 0
 | 
			
		||||
@@ -413,7 +412,7 @@ class Escpos(object):
 | 
			
		||||
        :param columns: amount of columns
 | 
			
		||||
        :return: None
 | 
			
		||||
        """
 | 
			
		||||
        colCount = self.columns if columns == None else columns
 | 
			
		||||
        colCount = self.columns if columns is None else columns
 | 
			
		||||
        self.text(textwrap.fill(txt, colCount))
 | 
			
		||||
 | 
			
		||||
    def set(self, align='left', font='a', text_type='normal', width=1, height=1, density=9):
 | 
			
		||||
 
 | 
			
		||||
@@ -153,6 +153,7 @@ class CharCodeError(Error):
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return "Valid char code must be set"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class USBNotFoundError(Error):
 | 
			
		||||
    """ Device wasn't found (probably not plugged in)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,6 @@ import serial
 | 
			
		||||
import socket
 | 
			
		||||
 | 
			
		||||
from .escpos import *
 | 
			
		||||
from .constants import *
 | 
			
		||||
from .exceptions import *
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -32,7 +31,7 @@ class Usb(Escpos):
 | 
			
		||||
        :param out_ep: Output end point
 | 
			
		||||
        """
 | 
			
		||||
        Escpos.__init__(self, *args, **kwargs)
 | 
			
		||||
        self.idVendor  = idVendor
 | 
			
		||||
        self.idVendor = idVendor
 | 
			
		||||
        self.idProduct = idProduct
 | 
			
		||||
        self.interface = interface
 | 
			
		||||
        self.in_ep = in_ep
 | 
			
		||||
@@ -100,10 +99,10 @@ class Serial(Escpos):
 | 
			
		||||
        :param dsrdtr:   Hardware flow control (False to enable RTS/CTS)
 | 
			
		||||
        """
 | 
			
		||||
        Escpos.__init__(self, *args, **kwargs)
 | 
			
		||||
        self.devfile  = devfile
 | 
			
		||||
        self.devfile = devfile
 | 
			
		||||
        self.baudrate = baudrate
 | 
			
		||||
        self.bytesize = bytesize
 | 
			
		||||
        self.timeout  = timeout
 | 
			
		||||
        self.timeout = timeout
 | 
			
		||||
        self.parity = parity
 | 
			
		||||
        self.stopbits = stopbits
 | 
			
		||||
        self.xonxoff = xonxoff
 | 
			
		||||
@@ -208,9 +207,9 @@ class File(Escpos):
 | 
			
		||||
        :param msg: arbitrary code to be printed
 | 
			
		||||
        """
 | 
			
		||||
        if type(msg) is str:
 | 
			
		||||
            self.device.write(msg.encode());
 | 
			
		||||
            self.device.write(msg.encode())
 | 
			
		||||
        else:
 | 
			
		||||
            self.device.write(msg);
 | 
			
		||||
            self.device.write(msg)
 | 
			
		||||
 | 
			
		||||
    def __del__(self):
 | 
			
		||||
        """ Close system file """
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								setup.py
									
									
									
									
									
								
							@@ -5,10 +5,12 @@ import sys
 | 
			
		||||
from setuptools import setup
 | 
			
		||||
from setuptools.command.test import test as TestCommand
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def read(fname):
 | 
			
		||||
    """read file from same path as setup.py"""
 | 
			
		||||
    return open(os.path.join(os.path.dirname(__file__), fname)).read()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Tox(TestCommand):
 | 
			
		||||
    """proxy class that enables tox to be run with setup.py test"""
 | 
			
		||||
    user_options = [('tox-args=', 'a', "Arguments to pass to tox")]
 | 
			
		||||
@@ -26,7 +28,7 @@ class Tox(TestCommand):
 | 
			
		||||
 | 
			
		||||
    def run_tests(self):
 | 
			
		||||
        """run tox and pass on user-options"""
 | 
			
		||||
        #import here, cause outside the eggs aren't loaded
 | 
			
		||||
        # import here, cause outside the eggs aren't loaded
 | 
			
		||||
        import tox
 | 
			
		||||
        import shlex
 | 
			
		||||
        args = self.tox_args
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user