diff --git a/.github/workflows/pythonpackage-windows.yml b/.github/workflows/pythonpackage-windows.yml new file mode 100644 index 0000000..140e218 --- /dev/null +++ b/.github/workflows/pythonpackage-windows.yml @@ -0,0 +1,55 @@ +name: Python package on Windows + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: windows-latest + strategy: + matrix: + python-version: ['3.11', '3.12'] + + steps: + - uses: actions/checkout@v4 + with: + submodules: 'recursive' + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4.7.1 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 pytest tox tox-gh-actions + If (Test-Path .\requirements.txt) { pip install -r .\requirements.txt } + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E,F,W --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with tox + run: | + tox + env: + ESCPOS_CAPABILITIES_FILE: D:\a\python-escpos\python-escpos\capabilities-data\dist\capabilities.json + - name: Test mypy with tox + run: | + tox -e mypy + env: + ESCPOS_CAPABILITIES_FILE: D:\a\python-escpos\python-escpos\capabilities-data\dist\capabilities.json + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + directory: ./coverage/reports/ + env_vars: OS,PYTHON + fail_ci_if_error: true + files: ./coverage.xml,!./cache + flags: unittests + name: coverage-tox-${{ matrix.python-version }} + verbose: true diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index e10e810..addc9e3 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8', '3.9', '3.10', '3.11'] + python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v4 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a9ec19d..850d2e4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,7 @@ changes - changed - fix the encoding search so that lower encodings are found first +- add GitHub action for test on Windows contributors ^^^^^^^^^^^^ @@ -20,6 +21,7 @@ contributors - contributors - Scott Rotondo in `#570 `_ +- Patrick Kanzler 2023-05-11 - Version 3.0a9 - "Pride Comes Before A Fall" -------------------------------------------------------- diff --git a/setup.cfg b/setup.cfg index 0df7ca4..44836c4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -22,6 +22,7 @@ classifiers = Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 + Programming Language :: Python :: 3.12 Programming Language :: Python :: Implementation :: CPython Topic :: Software Development :: Libraries :: Python Modules Topic :: Office/Business :: Financial :: Point-Of-Sale @@ -64,13 +65,13 @@ usb = serial = pyserial cups = - pycups + pycups; platform_system!='Windows' win32 = pywin32; platform_system=='Windows' all = pyusb>=1.0.0 pyserial - pycups + pycups; platform_system!='Windows' pywin32; platform_system=='Windows' [flake8] diff --git a/src/escpos/constants.py b/src/escpos/constants.py index f6bfcea..5328f4e 100644 --- a/src/escpos/constants.py +++ b/src/escpos/constants.py @@ -249,23 +249,26 @@ BARCODE_TYPE_B: Dict[str, bytes] = { #: supported barcode formats BARCODE_FORMATS = { - "UPC-A": ([(11, 12)], "^[0-9]{11,12}$"), - "UPC-E": ([(7, 8), (11, 12)], "^([0-9]{7,8}|[0-9]{11,12})$"), - "EAN13": ([(12, 13)], "^[0-9]{12,13}$"), - "EAN8": ([(7, 8)], "^[0-9]{7,8}$"), - "CODE39": ([(1, 255)], "^([0-9A-Z \$\%\+\-\.\/]+|\*[0-9A-Z \$\%\+\-\.\/]+\*)$"), - "ITF": ([(2, 255)], "^([0-9]{2})+$"), - "NW7": ([(1, 255)], "^[A-Da-d][0-9\$\+\-\.\/\:]+[A-Da-d]$"), - "CODABAR": ([(1, 255)], "^[A-Da-d][0-9\$\+\-\.\/\:]+[A-Da-d]$"), # Same as NW7 - "CODE93": ([(1, 255)], "^[\\x00-\\x7F]+$"), - "CODE128": ([(2, 255)], "^\{[A-C][\\x00-\\x7F]+$"), - "GS1-128": ([(2, 255)], "^\{[A-C][\\x00-\\x7F]+$"), # same as CODE128 - "GS1 DATABAR OMNIDIRECTIONAL": ([(13, 13)], "^[0-9]{13}$"), - "GS1 DATABAR TRUNCATED": ([(13, 13)], "^[0-9]{13}$"), # same as GS1 omnidirectional - "GS1 DATABAR LIMITED": ([(13, 13)], "^[01][0-9]{12}$"), + "UPC-A": ([(11, 12)], r"^[0-9]{11,12}$"), + "UPC-E": ([(7, 8), (11, 12)], r"^([0-9]{7,8}|[0-9]{11,12})$"), + "EAN13": ([(12, 13)], r"^[0-9]{12,13}$"), + "EAN8": ([(7, 8)], r"^[0-9]{7,8}$"), + "CODE39": ([(1, 255)], r"^([0-9A-Z \$\%\+\-\.\/]+|\*[0-9A-Z \$\%\+\-\.\/]+\*)$"), + "ITF": ([(2, 255)], r"^([0-9]{2})+$"), + "NW7": ([(1, 255)], r"^[A-Da-d][0-9\$\+\-\.\/\:]+[A-Da-d]$"), + "CODABAR": ([(1, 255)], r"^[A-Da-d][0-9\$\+\-\.\/\:]+[A-Da-d]$"), # Same as NW7 + "CODE93": ([(1, 255)], r"^[\x00-\x7F]+$"), + "CODE128": ([(2, 255)], r"^\{[A-C][\x00-\x7F]+$"), + "GS1-128": ([(2, 255)], r"^\{[A-C][\x00-\x7F]+$"), # same as CODE128 + "GS1 DATABAR OMNIDIRECTIONAL": ([(13, 13)], r"^[0-9]{13}$"), + "GS1 DATABAR TRUNCATED": ( + [(13, 13)], + r"^[0-9]{13}$", + ), # same as GS1 omnidirectional + "GS1 DATABAR LIMITED": ([(13, 13)], r"^[01][0-9]{12}$"), "GS1 DATABAR EXPANDED": ( [(2, 255)], - "^\([0-9][A-Za-z0-9 \!\"\%\&'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\_\{]+$", + r"^\([0-9][A-Za-z0-9 \!\"\%\&'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\_\{]+$", ), }