From a7d4c6665f600510db498f5e23a5b8b49761a313 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Wed, 17 Nov 2021 13:12:36 +0300 Subject: [PATCH 01/13] Support Python 3.10 --- .github/workflows/build-darwin.yml | 11 ++++++++++- .github/workflows/build-linux.yml | 11 ++++++++++- .github/workflows/build-windows.yml | 14 +++++++++++++- dockerfiles/buildwheel.sh | 2 +- dockerfiles/develop/Dockerfile | 2 +- dockerfiles/slim/Dockerfile | 2 +- setup.py | 1 + 7 files changed, 37 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-darwin.yml b/.github/workflows/build-darwin.yml index 5651ecc..87faf79 100644 --- a/.github/workflows/build-darwin.yml +++ b/.github/workflows/build-darwin.yml @@ -12,6 +12,11 @@ jobs: steps: - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + name: Install Python 3.10 + with: + python-version: "3.10" + - uses: actions/setup-python@v2 name: Install Python 3.9 with: @@ -46,6 +51,10 @@ jobs: run: | pip install -r requirements-dev.txt + - name: Test for Python 3.10 + run: | + tox -e py310 + - name: Test for Python 3.9 run: | tox -e py39 @@ -67,7 +76,7 @@ jobs: run: | python -m cibuildwheel --output-dir wheelhouse env: - CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* + CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* cp310-* - uses: actions/upload-artifact@v1 if: contains(github.ref, 'tags/') diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index e380bc1..ffc7924 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -12,6 +12,11 @@ jobs: steps: - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + name: Install Python 3.10 + with: + python-version: "3.10" + - uses: actions/setup-python@v2 name: Install Python 3.9 with: @@ -46,6 +51,10 @@ jobs: run: | pip install -r requirements-dev.txt + - name: Test for Python 3.10 + run: | + tox -e py310 + - name: Test for Python 3.9 run: | tox -e py39 @@ -67,7 +76,7 @@ jobs: run: | python -m cibuildwheel --output-dir wheelhouse env: - CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* + CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* cp310-* - uses: actions/upload-artifact@v1 if: contains(github.ref, 'tags/') diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 359e269..a3883c5 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -18,6 +18,12 @@ jobs: steps: - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + name: Install Python 3.10 + with: + python-version: "3.10" + architecture: ${{ matrix.config.py-architecture }} + - uses: actions/setup-python@v2 name: Install Python 3.9 with: @@ -56,6 +62,12 @@ jobs: run: | pip install -r requirements-dev.txt + - name: Test for Python 3.10 + shell: cmd + run: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat" -no_logo -arch=${{ matrix.config.vs-arch }} + tox -e py310 + - name: Test for Python 3.9 shell: cmd run: | @@ -85,7 +97,7 @@ jobs: run: | python -m cibuildwheel --output-dir wheelhouse env: - CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* + CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* cp310-* - uses: actions/upload-artifact@v1 if: contains(github.ref, 'tags/') diff --git a/dockerfiles/buildwheel.sh b/dockerfiles/buildwheel.sh index debbd52..65dd8fa 100755 --- a/dockerfiles/buildwheel.sh +++ b/dockerfiles/buildwheel.sh @@ -4,7 +4,7 @@ set -e -x ARCH=`uname -p` echo "arch=$ARCH" -for V in cp39-cp39 cp38-cp38 cp37-cp37m cp36-cp36m; do +for V in cp310-cp310 cp39-cp39 cp38-cp38 cp37-cp37m cp36-cp36m; do PYBIN=/opt/python/$V/bin rm -rf build src/cchardet/__pycache__ src/cchardet/*.cpp src/cchardet/*.pyc src/cchardet/*.so src/cchardet.egg-info src/tests/__pycache__ src/tests/*.pyc $PYBIN/pip install -r requirements-dev.txt diff --git a/dockerfiles/develop/Dockerfile b/dockerfiles/develop/Dockerfile index d1c7074..83139ff 100644 --- a/dockerfiles/develop/Dockerfile +++ b/dockerfiles/develop/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9-buster +FROM python:3.10-buster RUN pip install -U cython chardet nose diff --git a/dockerfiles/slim/Dockerfile b/dockerfiles/slim/Dockerfile index 265e176..9cd55b1 100644 --- a/dockerfiles/slim/Dockerfile +++ b/dockerfiles/slim/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9-slim-buster +FROM python:3.10-slim-buster ENV BUILD_DEPS gcc g++ diff --git a/setup.py b/setup.py index 99d631c..c8ded7a 100644 --- a/setup.py +++ b/setup.py @@ -133,6 +133,7 @@ def read(f): 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', ], keywords=[ 'cython', From 6a45feb95355e137236742ff2c5809aa11ab43e5 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Wed, 17 Nov 2021 14:50:41 +0300 Subject: [PATCH 02/13] Use pytest --- requirements-dev.txt | 2 +- setup.cfg | 3 - src/tests/cchardet_test.py | 111 ++++++++++++++++++++++++++++ src/tests/test.py | 145 ------------------------------------- tox.ini | 2 +- 5 files changed, 113 insertions(+), 150 deletions(-) delete mode 100644 setup.cfg create mode 100644 src/tests/cchardet_test.py delete mode 100644 src/tests/test.py diff --git a/requirements-dev.txt b/requirements-dev.txt index 7853ef2..2eabc70 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,5 +1,5 @@ chardet==3.0.4 -nose==1.3.7 +pytest==6.2.5 tox==3.20.1 Cython==0.29.21 # pylint==2.6.0 diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 5061eef..0000000 --- a/setup.cfg +++ /dev/null @@ -1,3 +0,0 @@ -[nosetests] -verbose=1 -nocapture=1 diff --git a/src/tests/cchardet_test.py b/src/tests/cchardet_test.py new file mode 100644 index 0000000..35809f1 --- /dev/null +++ b/src/tests/cchardet_test.py @@ -0,0 +1,111 @@ +import glob +import os + +import cchardet + +SKIP_LIST = [ + 'src/tests/testdata/ja/utf-16le.txt', + 'src/tests/testdata/ja/utf-16be.txt', + 'src/tests/testdata/es/iso-8859-15.txt', + 'src/tests/testdata/da/iso-8859-1.txt', + 'src/tests/testdata/he/iso-8859-8.txt' +] + +# Python can't decode encoding +SKIP_LIST_02 = [ + 'src/tests/testdata/vi/viscii.txt', + 'src/tests/testdata/zh/euc-tw.txt' +] +SKIP_LIST_02.extend(SKIP_LIST) + + +def test_ascii(): + detected_encoding = cchardet.detect(b'abcdefghijklmnopqrstuvwxyz') + assert 'ascii' == detected_encoding['encoding'].lower() + + +def test_detect(): + testfiles = glob.glob('src/tests/testdata/*/*.txt') + for testfile in testfiles: + if testfile.replace("\\", "/") in SKIP_LIST: + continue + + base = os.path.basename(testfile) + expected_charset = os.path.splitext(base)[0] + with open(testfile, 'rb') as f: + msg = f.read() + detected_encoding = cchardet.detect(msg) + assert expected_charset.lower() == detected_encoding['encoding'].lower() + + +def test_detector(): + detector = cchardet.UniversalDetector() + with open("src/tests/samples/wikipediaJa_One_Thousand_and_One_Nights_SJIS.txt", 'rb') as f: + line = f.readline() + while line: + detector.feed(line) + if detector.done: + break + line = f.readline() + detector.close() + detected_encoding = detector.result + assert "shift_jis" == detected_encoding['encoding'].lower() + + +def test_github_issue_20(): + """ + https://github.com/PyYoshi/cChardet/issues/20 + """ + msg = b'\x8f' + + cchardet.detect(msg) + + detector = cchardet.UniversalDetector() + detector.feed(msg) + detector.close() + + +def test_decode(): + testfiles = glob.glob('src/tests/testdata/*/*.txt') + for testfile in testfiles: + if testfile.replace("\\", "/") in SKIP_LIST_02: + continue + + base = os.path.basename(testfile) + expected_charset = os.path.splitext(base)[0] + with open(testfile, 'rb') as f: + msg = f.read() + detected_encoding = cchardet.detect(msg) + try: + msg.decode(detected_encoding["encoding"]) + except LookupError as e: + print("LookupError: { file=%s, encoding=%s }" % ( + testfile, detected_encoding["encoding"])) + raise e + + +def test_utf8_with_bom(): + sample = b'\xEF\xBB\xBF' + detected_encoding = cchardet.detect(sample) + assert "utf-8-sig" == detected_encoding['encoding'].lower() + + +def test_null_bytes(): + sample = b'ABC\x00\x80\x81' + detected_encoding = cchardet.detect(sample) + + assert detected_encoding['encoding'] is None + +# def test_iso8859_2_csv(self): +# testfile = 'tests/samples/iso8859-2.csv' +# with open(testfile, 'rb') as f: +# msg = f.read() +# detected_encoding = cchardet.detect(msg) +# eq_( +# "iso8859-2", +# detected_encoding['encoding'].lower(), +# 'Expected %s, but got %s' % ( +# "iso8859-2", +# detected_encoding['encoding'].lower() +# ) +# ) diff --git a/src/tests/test.py b/src/tests/test.py deleted file mode 100644 index b0b94b5..0000000 --- a/src/tests/test.py +++ /dev/null @@ -1,145 +0,0 @@ -import sys -import glob -import os -import string - -from nose.tools import eq_ -import cchardet - -SKIP_LIST = [ - 'tests/testdata/ja/utf-16le.txt', - 'tests/testdata/ja/utf-16be.txt', - 'tests/testdata/es/iso-8859-15.txt', - 'tests/testdata/da/iso-8859-1.txt', - 'tests/testdata/he/iso-8859-8.txt' -] - - -# Python can't decode encoding -SKIP_LIST_02 = [ - 'tests/testdata/vi/viscii.txt', - 'tests/testdata/zh/euc-tw.txt' -] -SKIP_LIST_02.extend(SKIP_LIST) - - -class TestCChardet(): - def test_ascii(self): - detected_encoding = cchardet.detect(b'abcdefghijklmnopqrstuvwxyz') - eq_( - 'ascii', - detected_encoding['encoding'].lower(), - 'Expected %s, but got %s' % ( - 'ascii', - detected_encoding['encoding'].lower() - ) - ) - - def test_detect(self): - testfiles = glob.glob('tests/testdata/*/*.txt') - for testfile in testfiles: - if testfile.replace("\\", "/") in SKIP_LIST: - continue - - base = os.path.basename(testfile) - expected_charset = os.path.splitext(base)[0] - with open(testfile, 'rb') as f: - msg = f.read() - detected_encoding = cchardet.detect(msg) - eq_( - expected_charset.lower(), - detected_encoding['encoding'].lower(), - 'Expected %s, but got %s for "%s"' % ( - expected_charset.lower(), - detected_encoding['encoding'].lower(), - testfile - ) - ) - - def test_detector(self): - detector = cchardet.UniversalDetector() - with open("tests/samples/wikipediaJa_One_Thousand_and_One_Nights_SJIS.txt", 'rb') as f: - line = f.readline() - while line: - detector.feed(line) - if detector.done: - break - line = f.readline() - detector.close() - detected_encoding = detector.result - eq_( - "shift_jis", - detected_encoding['encoding'].lower(), - 'Expected %s, but got %s' % ( - "shift_jis", - detected_encoding['encoding'].lower() - ) - ) - - def test_github_issue_20(self): - """ - https://github.com/PyYoshi/cChardet/issues/20 - """ - msg = b'\x8f' - - cchardet.detect(msg) - - detector = cchardet.UniversalDetector() - detector.feed(msg) - detector.close() - - def test_decode(self): - testfiles = glob.glob('tests/testdata/*/*.txt') - for testfile in testfiles: - if testfile.replace("\\", "/") in SKIP_LIST_02: - continue - - base = os.path.basename(testfile) - expected_charset = os.path.splitext(base)[0] - with open(testfile, 'rb') as f: - msg = f.read() - detected_encoding = cchardet.detect(msg) - try: - msg.decode(detected_encoding["encoding"]) - except LookupError as e: - print("LookupError: { file=%s, encoding=%s }" % ( - testfile, detected_encoding["encoding"])) - raise e - - def test_utf8_with_bom(self): - sample = b'\xEF\xBB\xBF' - detected_encoding = cchardet.detect(sample) - eq_( - "utf-8-sig", - detected_encoding['encoding'].lower(), - 'Expected %s, but got %s' % ( - "utf-8-sig", - detected_encoding['encoding'].lower() - ) - ) - - def test_null_bytes(self): - sample = b'ABC\x00\x80\x81' - detected_encoding = cchardet.detect(sample) - - eq_( - None, - detected_encoding['encoding'], - 'Expected None, but got %s' % ( - detected_encoding['encoding'] - ) - ) - - # def test_iso8859_2_csv(self): - # testfile = 'tests/samples/iso8859-2.csv' - # with open(testfile, 'rb') as f: - # msg = f.read() - # detected_encoding = cchardet.detect(msg) - # eq_( - # "iso8859-2", - # detected_encoding['encoding'].lower(), - # 'Expected %s, but got %s' % ( - # "iso8859-2", - # detected_encoding['encoding'].lower() - # ) - # ) diff --git a/tox.ini b/tox.ini index 1f1229c..0aa91f8 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ envlist = py36, py37, py38, py39, py310 [testenv] commands = make clean - {envpython} setup.py nosetests + {envpython} -m pytest deps = -r requirements-dev.txt From 53d03013551c25a204d8909a3e534b9a2430beab Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Wed, 17 Nov 2021 14:56:03 +0300 Subject: [PATCH 03/13] Fix Makefile --- Makefile | 2 +- tox.ini | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 21020b4..41ce8e9 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ test: - python setup.py nosetests + python -m pytest clean: $(RM) -r build dist src/cchardet/__pycache__ src/cchardet/*.cpp src/cchardet/*.pyc src/cchardet/*.so src/cchardet.egg-info src/tests/__pycache__ src/tests/*.pyc diff --git a/tox.ini b/tox.ini index 0aa91f8..e7d45f3 100644 --- a/tox.ini +++ b/tox.ini @@ -2,6 +2,7 @@ envlist = py36, py37, py38, py39, py310 [testenv] +whitelist_externals = make commands = make clean {envpython} -m pytest From 27772dd11599945e558dfdfb7e4e8f7fedde4827 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Wed, 17 Nov 2021 15:13:28 +0300 Subject: [PATCH 04/13] Reformat --- src/tests/cchardet_test.py | 55 ++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/src/tests/cchardet_test.py b/src/tests/cchardet_test.py index 35809f1..486210b 100644 --- a/src/tests/cchardet_test.py +++ b/src/tests/cchardet_test.py @@ -4,43 +4,49 @@ import cchardet SKIP_LIST = [ - 'src/tests/testdata/ja/utf-16le.txt', - 'src/tests/testdata/ja/utf-16be.txt', - 'src/tests/testdata/es/iso-8859-15.txt', - 'src/tests/testdata/da/iso-8859-1.txt', - 'src/tests/testdata/he/iso-8859-8.txt' + "src/tests/testdata/ja/utf-16le.txt", + "src/tests/testdata/ja/utf-16be.txt", + "src/tests/testdata/es/iso-8859-15.txt", + "src/tests/testdata/da/iso-8859-1.txt", + "src/tests/testdata/he/iso-8859-8.txt", ] # Python can't decode encoding SKIP_LIST_02 = [ - 'src/tests/testdata/vi/viscii.txt', - 'src/tests/testdata/zh/euc-tw.txt' + "src/tests/testdata/vi/viscii.txt", + "src/tests/testdata/zh/euc-tw.txt", ] SKIP_LIST_02.extend(SKIP_LIST) def test_ascii(): - detected_encoding = cchardet.detect(b'abcdefghijklmnopqrstuvwxyz') - assert 'ascii' == detected_encoding['encoding'].lower() + detected_encoding = cchardet.detect(b"abcdefghijklmnopqrstuvwxyz") + assert "ascii" == detected_encoding["encoding"].lower() def test_detect(): - testfiles = glob.glob('src/tests/testdata/*/*.txt') + testfiles = glob.glob("src/tests/testdata/*/*.txt") for testfile in testfiles: if testfile.replace("\\", "/") in SKIP_LIST: continue base = os.path.basename(testfile) expected_charset = os.path.splitext(base)[0] - with open(testfile, 'rb') as f: + with open(testfile, "rb") as f: msg = f.read() detected_encoding = cchardet.detect(msg) - assert expected_charset.lower() == detected_encoding['encoding'].lower() + assert ( + expected_charset.lower() + == detected_encoding["encoding"].lower() + ) def test_detector(): detector = cchardet.UniversalDetector() - with open("src/tests/samples/wikipediaJa_One_Thousand_and_One_Nights_SJIS.txt", 'rb') as f: + with open( + "src/tests/samples/wikipediaJa_One_Thousand_and_One_Nights_SJIS.txt", + "rb", + ) as f: line = f.readline() while line: detector.feed(line) @@ -49,14 +55,14 @@ def test_detector(): line = f.readline() detector.close() detected_encoding = detector.result - assert "shift_jis" == detected_encoding['encoding'].lower() + assert "shift_jis" == detected_encoding["encoding"].lower() def test_github_issue_20(): """ https://github.com/PyYoshi/cChardet/issues/20 """ - msg = b'\x8f' + msg = b"\x8f" cchardet.detect(msg) @@ -66,35 +72,38 @@ def test_github_issue_20(): def test_decode(): - testfiles = glob.glob('src/tests/testdata/*/*.txt') + testfiles = glob.glob("src/tests/testdata/*/*.txt") for testfile in testfiles: if testfile.replace("\\", "/") in SKIP_LIST_02: continue base = os.path.basename(testfile) expected_charset = os.path.splitext(base)[0] - with open(testfile, 'rb') as f: + with open(testfile, "rb") as f: msg = f.read() detected_encoding = cchardet.detect(msg) try: msg.decode(detected_encoding["encoding"]) except LookupError as e: - print("LookupError: { file=%s, encoding=%s }" % ( - testfile, detected_encoding["encoding"])) + print( + "LookupError: { file=%s, encoding=%s }" + % (testfile, detected_encoding["encoding"]), + ) raise e def test_utf8_with_bom(): - sample = b'\xEF\xBB\xBF' + sample = b"\xEF\xBB\xBF" detected_encoding = cchardet.detect(sample) - assert "utf-8-sig" == detected_encoding['encoding'].lower() + assert "utf-8-sig" == detected_encoding["encoding"].lower() def test_null_bytes(): - sample = b'ABC\x00\x80\x81' + sample = b"ABC\x00\x80\x81" detected_encoding = cchardet.detect(sample) - assert detected_encoding['encoding'] is None + assert detected_encoding["encoding"] is None + # def test_iso8859_2_csv(self): # testfile = 'tests/samples/iso8859-2.csv' From ec71778bd18323f3c9d0881179b364500ec9c48b Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Tue, 19 Jul 2022 11:02:27 +0300 Subject: [PATCH 05/13] Update .github/workflows/build-linux.yml Co-authored-by: Christian Clauss --- .github/workflows/build-linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index ffc7924..671dc62 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 name: Install Python 3.10 with: python-version: "3.10" From 0d8454d1e9f9e7c010e765acb61e15596c404469 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Tue, 19 Jul 2022 11:02:34 +0300 Subject: [PATCH 06/13] Update .github/workflows/build-windows.yml Co-authored-by: Christian Clauss --- .github/workflows/build-windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index a3883c5..af38cc5 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -18,7 +18,7 @@ jobs: steps: - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 name: Install Python 3.10 with: python-version: "3.10" From b530335846af14b6f0c24be693e4decb92d8ff45 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Tue, 19 Jul 2022 11:02:45 +0300 Subject: [PATCH 07/13] Update .github/workflows/build-darwin.yml Co-authored-by: Christian Clauss --- .github/workflows/build-darwin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-darwin.yml b/.github/workflows/build-darwin.yml index 87faf79..9749294 100644 --- a/.github/workflows/build-darwin.yml +++ b/.github/workflows/build-darwin.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 name: Install Python 3.10 with: python-version: "3.10" From e9ca8644a5de6655722540cae2bf56261e2174a8 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Tue, 19 Jul 2022 11:17:02 +0300 Subject: [PATCH 08/13] Undo reformat --- src/tests/cchardet_test.py | 58 +++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/src/tests/cchardet_test.py b/src/tests/cchardet_test.py index 486210b..2f8deab 100644 --- a/src/tests/cchardet_test.py +++ b/src/tests/cchardet_test.py @@ -4,49 +4,43 @@ import cchardet SKIP_LIST = [ - "src/tests/testdata/ja/utf-16le.txt", - "src/tests/testdata/ja/utf-16be.txt", - "src/tests/testdata/es/iso-8859-15.txt", - "src/tests/testdata/da/iso-8859-1.txt", - "src/tests/testdata/he/iso-8859-8.txt", + 'src/tests/testdata/ja/utf-16le.txt', + 'src/tests/testdata/ja/utf-16be.txt', + 'src/tests/testdata/es/iso-8859-15.txt', + 'src/tests/testdata/da/iso-8859-1.txt', + 'src/tests/testdata/he/iso-8859-8.txt', ] # Python can't decode encoding SKIP_LIST_02 = [ - "src/tests/testdata/vi/viscii.txt", - "src/tests/testdata/zh/euc-tw.txt", + 'src/tests/testdata/vi/viscii.txt', + 'src/tests/testdata/zh/euc-tw.txt', ] SKIP_LIST_02.extend(SKIP_LIST) def test_ascii(): - detected_encoding = cchardet.detect(b"abcdefghijklmnopqrstuvwxyz") - assert "ascii" == detected_encoding["encoding"].lower() + detected_encoding = cchardet.detect(b'abcdefghijklmnopqrstuvwxyz') + assert 'ascii' == detected_encoding['encoding'].lower() def test_detect(): - testfiles = glob.glob("src/tests/testdata/*/*.txt") + testfiles = glob.glob('src/tests/testdata/*/*.txt') for testfile in testfiles: if testfile.replace("\\", "/") in SKIP_LIST: continue base = os.path.basename(testfile) expected_charset = os.path.splitext(base)[0] - with open(testfile, "rb") as f: + with open(testfile, 'rb') as f: msg = f.read() detected_encoding = cchardet.detect(msg) - assert ( - expected_charset.lower() - == detected_encoding["encoding"].lower() - ) + assert expected_charset.lower() == detected_encoding['encoding'].lower() def test_detector(): detector = cchardet.UniversalDetector() - with open( - "src/tests/samples/wikipediaJa_One_Thousand_and_One_Nights_SJIS.txt", - "rb", - ) as f: + with open("src/tests/samples/wikipediaJa_One_Thousand_and_One_Nights_SJIS.txt", 'rb') as f: line = f.readline() while line: detector.feed(line) @@ -55,14 +49,14 @@ def test_detector(): line = f.readline() detector.close() detected_encoding = detector.result - assert "shift_jis" == detected_encoding["encoding"].lower() + assert "shift_jis" == detected_encoding['encoding'].lower() def test_github_issue_20(): """ https://github.com/PyYoshi/cChardet/issues/20 """ - msg = b"\x8f" + msg = b'\x8f' cchardet.detect(msg) @@ -72,24 +66,24 @@ def test_github_issue_20(): def test_decode(): - testfiles = glob.glob("src/tests/testdata/*/*.txt") + testfiles = glob.glob('src/tests/testdata/*/*.txt') for testfile in testfiles: if testfile.replace("\\", "/") in SKIP_LIST_02: continue base = os.path.basename(testfile) expected_charset = os.path.splitext(base)[0] - with open(testfile, "rb") as f: + with open(testfile, 'rb') as f: msg = f.read() - detected_encoding = cchardet.detect(msg) - try: - msg.decode(detected_encoding["encoding"]) - except LookupError as e: - print( - "LookupError: { file=%s, encoding=%s }" - % (testfile, detected_encoding["encoding"]), - ) - raise e + detected_encoding = cchardet.detect(msg) + try: + msg.decode(detected_encoding["encoding"]) + except LookupError as e: + print( + "LookupError: { file=%s, encoding=%s }" + % (testfile, detected_encoding["encoding"]), + ) + raise e def test_utf8_with_bom(): From 79c03399883888bd1ef9e4aea2f5e0c0405490d1 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Tue, 19 Jul 2022 11:19:06 +0300 Subject: [PATCH 09/13] Update requirements-dev.txt Co-authored-by: Christian Clauss --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 2eabc70..8001917 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,7 +1,7 @@ chardet==3.0.4 pytest==6.2.5 tox==3.20.1 -Cython==0.29.21 +Cython==0.29.30 # pylint==2.6.0 # wheel==0.35.1 # twine==3.2.0 From 6aae31bb197fff46bdb520e6cf603a3c16c841a2 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Tue, 19 Jul 2022 11:22:05 +0300 Subject: [PATCH 10/13] Upgrade all actions --- .github/workflows/build-darwin.yml | 10 +++++----- .github/workflows/build-linux.yml | 10 +++++----- .github/workflows/build-windows.yml | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-darwin.yml b/.github/workflows/build-darwin.yml index 9749294..2e3baf7 100644 --- a/.github/workflows/build-darwin.yml +++ b/.github/workflows/build-darwin.yml @@ -10,29 +10,29 @@ jobs: runs-on: macos-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: actions/setup-python@v4 name: Install Python 3.10 with: python-version: "3.10" - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 name: Install Python 3.9 with: python-version: "3.9" - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 name: Install Python 3.8 with: python-version: "3.8" - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 name: Install Python 3.7 with: python-version: "3.7" - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 name: Install Python 3.6 with: python-version: "3.6" diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 671dc62..84bb346 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -10,29 +10,29 @@ jobs: runs-on: ubuntu-18.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: actions/setup-python@v4 name: Install Python 3.10 with: python-version: "3.10" - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 name: Install Python 3.9 with: python-version: "3.9" - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 name: Install Python 3.8 with: python-version: "3.8" - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 name: Install Python 3.7 with: python-version: "3.7" - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 name: Install Python 3.6 with: python-version: "3.6" diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index af38cc5..27e231a 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -16,7 +16,7 @@ jobs: py-architecture: x64 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: actions/setup-python@v4 name: Install Python 3.10 @@ -24,25 +24,25 @@ jobs: python-version: "3.10" architecture: ${{ matrix.config.py-architecture }} - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 name: Install Python 3.9 with: python-version: "3.9" architecture: ${{ matrix.config.py-architecture }} - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 name: Install Python 3.8 with: python-version: "3.8" architecture: ${{ matrix.config.py-architecture }} - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 name: Install Python 3.7 with: python-version: "3.7" architecture: ${{ matrix.config.py-architecture }} - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 name: Install Python 3.6 with: python-version: "3.6" From e8426f80b4e1ef5792aa40e0031c99597f136119 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Tue, 19 Jul 2022 13:09:39 +0300 Subject: [PATCH 11/13] Update Pipfile --- Pipfile | 2 +- Pipfile.lock | 513 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 300 insertions(+), 215 deletions(-) diff --git a/Pipfile b/Pipfile index d235388..a4ec28e 100644 --- a/Pipfile +++ b/Pipfile @@ -7,7 +7,7 @@ verify_ssl = true chardet = "==3.0.4" nose = "==1.3.7" tox = "==3.20.1" -Cython = "==0.29.21" +Cython = "==0.29.30" pylint = "==2.6.0" wheel = "==0.35.1" twine = "==3.2.0" diff --git a/Pipfile.lock b/Pipfile.lock index 8f198cd..a957fb3 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f956d7ec1ea47fafa18188c1f5c00df21c363c1b6b315a62216ea3dda3d4b2d9" + "sha256": "1809f3cd6cb3a89b21d2fbf06336f3b38c4788ac821e0c2f839eae07318c6bde" }, "pipfile-spec": 6, "requires": {}, @@ -15,18 +15,12 @@ }, "default": {}, "develop": { - "appdirs": { - "hashes": [ - "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", - "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128" - ], - "version": "==1.4.4" - }, "astroid": { "hashes": [ "sha256:87ae7f2398b8a0ae5638ddecf9987f081b756e0e9fc071aeebdca525671fc4dc", "sha256:b31c92f545517dcc452f284bc9c044050862fbe6d93d2b3de4a215a6b384bf0d" ], + "markers": "python_version >= '3.6'", "version": "==2.5" }, "autopep8": { @@ -38,59 +32,88 @@ }, "bleach": { "hashes": [ - "sha256:6123ddc1052673e52bab52cdc955bcb57a015264a1c57d37bea2f6b817af0125", - "sha256:98b3170739e5e83dd9dc19633f074727ad848cbedb6026708c8ac2d3b697a433" + "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a", + "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c" ], - "version": "==3.3.0" + "markers": "python_version >= '3.7'", + "version": "==5.0.1" }, "certifi": { "hashes": [ - "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", - "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" + "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d", + "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412" ], - "version": "==2020.12.5" + "markers": "python_version >= '3.6'", + "version": "==2022.6.15" }, "cffi": { "hashes": [ - "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813", - "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06", - "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea", - "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee", - "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396", - "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73", - "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315", - "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1", - "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49", - "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892", - "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482", - "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058", - "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5", - "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53", - "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045", - "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3", - "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5", - "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e", - "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c", - "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369", - "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827", - "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053", - "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa", - "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4", - "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322", - "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132", - "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62", - "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa", - "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0", - "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396", - "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e", - "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991", - "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6", - "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1", - "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406", - "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d", - "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c" - ], - "version": "==1.14.5" + "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", + "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", + "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", + "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", + "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", + "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", + "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", + "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", + "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", + "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", + "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", + "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", + "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", + "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", + "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", + "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", + "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", + "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", + "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", + "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", + "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", + "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", + "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", + "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", + "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", + "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", + "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", + "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", + "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", + "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", + "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", + "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", + "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", + "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", + "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", + "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", + "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", + "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", + "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", + "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", + "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", + "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", + "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", + "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", + "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", + "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", + "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", + "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", + "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", + "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", + "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", + "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", + "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", + "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", + "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", + "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", + "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", + "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", + "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", + "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", + "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", + "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", + "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", + "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" + ], + "version": "==1.15.1" }, "chardet": { "hashes": [ @@ -100,154 +123,193 @@ "index": "pypi", "version": "==3.0.4" }, + "charset-normalizer": { + "hashes": [ + "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5", + "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413" + ], + "markers": "python_version >= '3.6'", + "version": "==2.1.0" + }, "colorama": { "hashes": [ - "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b", - "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2" + "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da", + "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4" ], - "version": "==0.4.4" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.4.5" }, "cryptography": { "hashes": [ - "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d", - "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959", - "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6", - "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873", - "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2", - "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713", - "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1", - "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177", - "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250", - "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca", - "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d", - "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9" - ], - "version": "==3.4.7" + "sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59", + "sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596", + "sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3", + "sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5", + "sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab", + "sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884", + "sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82", + "sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b", + "sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441", + "sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa", + "sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d", + "sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b", + "sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a", + "sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6", + "sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157", + "sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280", + "sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282", + "sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67", + "sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8", + "sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046", + "sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327", + "sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9" + ], + "markers": "python_version >= '3.6'", + "version": "==37.0.4" }, "cython": { "hashes": [ - "sha256:0ac10bf476476a9f7ef61ec6e44c280ef434473124ad31d3132b720f7b0e8d2a", - "sha256:0e25c209c75df8785480dcef85db3d36c165dbc0f4c503168e8763eb735704f2", - "sha256:171b9f70ceafcec5852089d0f9c1e75b0d554f46c882cd4e2e4acaba9bd7d148", - "sha256:23f3a00b843a19de8bb4468b087db5b413a903213f67188729782488d67040e0", - "sha256:2922e3031ba9ebbe7cb9200b585cc33b71d66023d78450dcb883f824f4969371", - "sha256:31c71a615f38401b0dc1f2a5a9a6c421ffd8908c4cd5bbedc4014c1b876488e8", - "sha256:473df5d5e400444a36ed81c6596f56a5b52a3481312d0a48d68b777790f730ae", - "sha256:497841897942f734b0abc2dead2d4009795ee992267a70a23485fd0e937edc0b", - "sha256:539e59949aab4955c143a468810123bf22d3e8556421e1ce2531ed4893914ca0", - "sha256:540b3bee0711aac2e99bda4fa0a46dbcd8c74941666bfc1ef9236b1a64eeffd9", - "sha256:57ead89128dee9609119c93d3926c7a2add451453063147900408a50144598c6", - "sha256:5c4276fdcbccdf1e3c1756c7aeb8395e9a36874fa4d30860e7694f43d325ae13", - "sha256:5da187bebe38030325e1c0b5b8a804d489410be2d384c0ef3ba39493c67eb51e", - "sha256:5e545a48f919e40079b0efe7b0e081c74b96f9ef25b9c1ff4cdbd95764426b58", - "sha256:603b9f1b8e93e8b494d3e89320c410679e21018e48b6cbc77280f5db71f17dc0", - "sha256:695a6bcaf9e12b1e471dfce96bbecf22a1487adc2ac6106b15960a2b51b97f5d", - "sha256:715294cd2246b39a8edca464a8366eb635f17213e4a6b9e74e52d8b877a8cb63", - "sha256:7ebaa8800c376bcdae596fb1372cb4232a5ef957619d35839520d2786f2debb9", - "sha256:856c7fb31d247ce713d60116375e1f8153d0291ab5e92cca7d8833a524ba9991", - "sha256:8c6e25e9cc4961bb2abb1777c6fa9d0fa2d9b014beb3276cebe69996ff162b78", - "sha256:9207fdedc7e789a3dcaca628176b80c82fbed9ae0997210738cbb12536a56699", - "sha256:93f5fed1c9445fb7afe20450cdaf94b0e0356d47cc75008105be89c6a2e417b1", - "sha256:9ce5e5209f8406ffc2b058b1293cce7a954911bb7991e623564d489197c9ba30", - "sha256:a0674f246ad5e1571ef29d4c5ec1d6ecabe9e6c424ad0d6fee46b914d5d24d69", - "sha256:b2f9172e4d6358f33ecce6a4339b5960f9f83eab67ea244baa812737793826b7", - "sha256:b8a8a31b9e8860634adbca30fea1d0c7f08e208b3d7611f3e580e5f20992e5d7", - "sha256:b8d8497091c1dc8705d1575c71e908a93b1f127a174b2d472020f3d84263ac28", - "sha256:c111ac9abdf715762e4fb87395e59d61c0fbb6ce79eb2e24167700b6cfa8ba79", - "sha256:c4b78356074fcaac04ecb4de289f11d506e438859877670992ece11f9c90f37b", - "sha256:c541b2b49c6638f2b5beb9316726db84a8d1c132bf31b942dae1f9c7f6ad3b92", - "sha256:c8435959321cf8aec867bbad54b83b7fb8343204b530d85d9ea7a1f5329d5ac2", - "sha256:ccb77faeaad99e99c6c444d04862c6cf604204fe0a07d4c8f9cbf2c9012d7d5a", - "sha256:e272ed97d20b026f4f25a012b25d7d7672a60e4f72b9ca385239d693cd91b2d5", - "sha256:e57acb89bd55943c8d8bf813763d20b9099cc7165c0f16b707631a7654be9cad", - "sha256:e93acd1f603a0c1786e0841f066ae7cef014cf4750e3cd06fd03cfdf46361419" + "sha256:019d330ac580b2ca4a457c464ac0b8c35009d820ef5d09f328d6e31a10e1ce89", + "sha256:0b83a342a071c4f14e7410568e0c0bd95e2f20c0b32944e3a721649a1357fda4", + "sha256:0cd6c932e945af15ae4ddcf8fdc0532bda48784c92ed0a53cf4fae897067ccd1", + "sha256:1e078943bbde703ca08d43e719480eb8b187d9023cbd91798619f5b5e18d0d71", + "sha256:20778297c8bcba201ca122a2f792a9899d6e64c68a92363dd7eb24306d54d7ce", + "sha256:2235b62da8fe6fa8b99422c8e583f2fb95e143867d337b5c75e4b9a1a865f9e3", + "sha256:28db751e2d8365b39664d9cb62dc1668688b8fcc5b954e9ca9d20e0b8e03d8b0", + "sha256:3993aafd68a7311ef94e00e44a137f6a50a69af0575ebcc8a0a074ad4152a2b2", + "sha256:3d0239c7a22a0f3fb1deec75cab0078eba4dd17868aa992a54a178851e0c8684", + "sha256:5183356c756b56c2df12d96300d602e47ffb89943c5a0bded66faca5d3da7be0", + "sha256:58d2b734250c1093bc69c1c3a6f5736493b9f8b34eb765f0a28a4a09468c0b00", + "sha256:5a8a3709ad9343a1dc02b8ec9cf6bb284be248d2c64af85464d9c3525eec74a5", + "sha256:5c7cfd908efc77306ddd41ef07f5a7a352c9205ced5c1e00a0e5ece4391707c4", + "sha256:5f2dae7dd56860018d5fd5032a71f11fdc224020932b463d0511a1536f27df85", + "sha256:60d370c33d56077d30e5f425026e58c2559e93b4784106f61581cf54071f6270", + "sha256:6b389a94b42909ff56d3491fde7c44802053a103701a7d210dcdd449a5b4f7b4", + "sha256:71fd1d910aced510c001936667fc7f2901c49b2ca7a2ad67358979c94a7f42ac", + "sha256:786ee7b0cdb508b6de64c0f1f9c74f207186dfafad1ef938f25b7494cc481a80", + "sha256:7eff71c39b98078deaad1d1bdbf10864d234e2ab5d5257e980a6926a8523f697", + "sha256:80a7255ad84620f53235c0720cdee2bc7431d9e3db7b3742823a606c329eb539", + "sha256:88c5e2f92f16cd999ddfc43d572639679e8a057587088e627e98118e46a803e6", + "sha256:8e08f18d249b9b65e272a5a60f3360a8922c4c149036b98fc821fe1afad5bdae", + "sha256:9462e9cf284d9b1d2c5b53d62188e3c09cc5c7a0018ba349d99b73cf930238de", + "sha256:9826981308802c61a76f967875b31b7c683b7fc369eabaa6cbc22efeb12c90e8", + "sha256:9f1fe924c920b699af27aefebd722df4cfbb85206291623cd37d1a7ddfd57792", + "sha256:a30092c6e2d24255fbfe0525f9a750554f96a263ed986d12ac3c9f7d9a85a424", + "sha256:abcaf99f90cddc0f53600613eaafc81d27c4ac0671f0df8bce5466d4e86d54a1", + "sha256:acb72e0b42079862cf2f894964b41f261e941e75677e902c5f4304b3eb00af33", + "sha256:b17639b6a155abaa61a89f6f1323fb57b138d0529911ca03978d594945d062ba", + "sha256:c299c5b250ae9f81c38200441b6f1d023aeee9d8e7f61c04001c7437181ccb06", + "sha256:c79685dd4631a188e2385dc6a232896c7b67ea2e3e5f8b5555b4b743f475d6d7", + "sha256:d0859a958e0155b6ae4dee04170ccfac2c3d613a7e3bee8749614530b9e3b4a4", + "sha256:d0f34b44078e3e0b2f1be2b99044619b37127128e7d55c54bbd2438adcaf31d3", + "sha256:d166d9f853db436f5e10733a9bd615699ddb4238feadcbdf5ae50dc0b18b18f5", + "sha256:d52d5733dcb144deca8985f0a197c19cf71e6bd6bd9d8034f3f67b2dea68d12b", + "sha256:e29d3487f357108b711f2f29319811d92166643d29aec1b8e063aad46a346775", + "sha256:e36755e71fd20eceb410cc441b7f2586654c2edb013f4663842fdaf60b96c1ca", + "sha256:e5cb144728a335d7a7fd0a61dff6abb7a9aeff9acd46d50b886b7d9a95bb7311", + "sha256:e605635a92ae862cb46d84d1d6883324518f9aaff4a71cede6d61df20b6a410c", + "sha256:ffa8c09617833ff0824aa7926fa4fa9d2ec3929c67168e89105f276b7f36a63e" ], "index": "pypi", - "version": "==0.29.21" + "version": "==0.29.30" }, "distlib": { "hashes": [ - "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb", - "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1" + "sha256:a7f75737c70be3b25e2bee06288cec4e4c221de18455b2dd037fe2a795cab2fe", + "sha256:b710088c59f06338ca514800ad795a132da19fda270e3ce4affc74abf955a26c" ], - "version": "==0.3.1" + "version": "==0.3.5" }, "docutils": { "hashes": [ - "sha256:a71042bb7207c03d5647f280427f14bfbd1a65c9eb84f4b341d85fafb6bb4bdf", - "sha256:e2ffeea817964356ba4470efba7c2f42b6b0de0b04e66378507e3e2504bbff4c" + "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6", + "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc" ], - "version": "==0.17" + "markers": "python_version >= '3.7'", + "version": "==0.19" }, "filelock": { "hashes": [ - "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59", - "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836" + "sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404", + "sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04" ], - "version": "==3.0.12" + "markers": "python_version >= '3.7'", + "version": "==3.7.1" }, "idna": { "hashes": [ - "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", - "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", + "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" ], - "version": "==2.10" - }, - "importlib-metadata": { - "hashes": [ - "sha256:c9db46394197244adf2f0b08ec5bc3cf16757e9590b02af1fca085c16c0d600a", - "sha256:d2d46ef77ffc85cbf7dac7e81dd663fde71c45326131bea8033b9bad42268ebe" - ], - "version": "==3.10.0" + "markers": "python_version >= '3.5'", + "version": "==3.3" }, "isort": { "hashes": [ - "sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6", - "sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d" + "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7", + "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951" ], - "version": "==5.8.0" + "markers": "python_version < '4.0' and python_full_version >= '3.6.1'", + "version": "==5.10.1" }, "jeepney": { "hashes": [ - "sha256:7d59b6622675ca9e993a6bd38de845051d315f8b0c72cca3aef733a20b648657", - "sha256:aec56c0eb1691a841795111e184e13cad504f7703b9a64f63020816afa79a8ae" + "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", + "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755" ], "markers": "sys_platform == 'linux'", - "version": "==0.6.0" + "version": "==0.8.0" }, "keyring": { "hashes": [ - "sha256:045703609dd3fccfcdb27da201684278823b72af515aedec1a8515719a038cb8", - "sha256:8f607d7d1cc502c43a932a275a56fe47db50271904513a379d39df1af277ac48" + "sha256:782e1cd1132e91bf459fcd243bcf25b326015c1ac0b198e4408f91fa6791062b", + "sha256:e67fc91a7955785fd2efcbccdd72d7dacf136dbc381d27de305b2b660b3de886" ], - "version": "==23.0.1" + "markers": "python_version >= '3.7'", + "version": "==23.7.0" }, "lazy-object-proxy": { "hashes": [ - "sha256:17e0967ba374fc24141738c69736da90e94419338fd4c7c7bef01ee26b339653", - "sha256:1fee665d2638491f4d6e55bd483e15ef21f6c8c2095f235fef72601021e64f61", - "sha256:22ddd618cefe54305df49e4c069fa65715be4ad0e78e8d252a33debf00f6ede2", - "sha256:24a5045889cc2729033b3e604d496c2b6f588c754f7a62027ad4437a7ecc4837", - "sha256:410283732af311b51b837894fa2f24f2c0039aa7f220135192b38fcc42bd43d3", - "sha256:4732c765372bd78a2d6b2150a6e99d00a78ec963375f236979c0626b97ed8e43", - "sha256:489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726", - "sha256:4f60460e9f1eb632584c9685bccea152f4ac2130e299784dbaf9fae9f49891b3", - "sha256:5743a5ab42ae40caa8421b320ebf3a998f89c85cdc8376d6b2e00bd12bd1b587", - "sha256:85fb7608121fd5621cc4377a8961d0b32ccf84a7285b4f1d21988b2eae2868e8", - "sha256:9698110e36e2df951c7c36b6729e96429c9c32b3331989ef19976592c5f3c77a", - "sha256:9d397bf41caad3f489e10774667310d73cb9c4258e9aed94b9ec734b34b495fd", - "sha256:b579f8acbf2bdd9ea200b1d5dea36abd93cabf56cf626ab9c744a432e15c815f", - "sha256:b865b01a2e7f96db0c5d12cfea590f98d8c5ba64ad222300d93ce6ff9138bcad", - "sha256:bf34e368e8dd976423396555078def5cfc3039ebc6fc06d1ae2c5a65eebbcde4", - "sha256:c6938967f8528b3668622a9ed3b31d145fab161a32f5891ea7b84f6b790be05b", - "sha256:d1c2676e3d840852a2de7c7d5d76407c772927addff8d742b9808fe0afccebdf", - "sha256:d7124f52f3bd259f510651450e18e0fd081ed82f3c08541dffc7b94b883aa981", - "sha256:d900d949b707778696fdf01036f58c9876a0d8bfe116e8d220cfd4b15f14e741", - "sha256:ebfd274dcd5133e0afae738e6d9da4323c3eb021b3e13052d8cbd0e457b1256e", - "sha256:ed361bb83436f117f9917d282a456f9e5009ea12fd6de8742d1a4752c3017e93", - "sha256:f5144c75445ae3ca2057faac03fda5a902eff196702b0a24daf1d6ce0650514b" - ], - "version": "==1.6.0" + "sha256:043651b6cb706eee4f91854da4a089816a6606c1428fd391573ef8cb642ae4f7", + "sha256:07fa44286cda977bd4803b656ffc1c9b7e3bc7dff7d34263446aec8f8c96f88a", + "sha256:12f3bb77efe1367b2515f8cb4790a11cffae889148ad33adad07b9b55e0ab22c", + "sha256:2052837718516a94940867e16b1bb10edb069ab475c3ad84fd1e1a6dd2c0fcfc", + "sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f", + "sha256:39b0e26725c5023757fc1ab2a89ef9d7ab23b84f9251e28f9cc114d5b59c1b09", + "sha256:46ff647e76f106bb444b4533bb4153c7370cdf52efc62ccfc1a28bdb3cc95442", + "sha256:4dca6244e4121c74cc20542c2ca39e5c4a5027c81d112bfb893cf0790f96f57e", + "sha256:553b0f0d8dbf21890dd66edd771f9b1b5f51bd912fa5f26de4449bfc5af5e029", + "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61", + "sha256:6a24357267aa976abab660b1d47a34aaf07259a0c3859a34e536f1ee6e76b5bb", + "sha256:6a6e94c7b02641d1311228a102607ecd576f70734dc3d5e22610111aeacba8a0", + "sha256:6aff3fe5de0831867092e017cf67e2750c6a1c7d88d84d2481bd84a2e019ec35", + "sha256:6ecbb350991d6434e1388bee761ece3260e5228952b1f0c46ffc800eb313ff42", + "sha256:7096a5e0c1115ec82641afbdd70451a144558ea5cf564a896294e346eb611be1", + "sha256:70ed0c2b380eb6248abdef3cd425fc52f0abd92d2b07ce26359fcbc399f636ad", + "sha256:8561da8b3dd22d696244d6d0d5330618c993a215070f473b699e00cf1f3f6443", + "sha256:85b232e791f2229a4f55840ed54706110c80c0a210d076eee093f2b2e33e1bfd", + "sha256:898322f8d078f2654d275124a8dd19b079080ae977033b713f677afcfc88e2b9", + "sha256:8f3953eb575b45480db6568306893f0bd9d8dfeeebd46812aa09ca9579595148", + "sha256:91ba172fc5b03978764d1df5144b4ba4ab13290d7bab7a50f12d8117f8630c38", + "sha256:9d166602b525bf54ac994cf833c385bfcc341b364e3ee71e3bf5a1336e677b55", + "sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36", + "sha256:b9e89b87c707dd769c4ea91f7a31538888aad05c116a59820f28d59b3ebfe25a", + "sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b", + "sha256:c19814163728941bb871240d45c4c30d33b8a2e85972c44d4e63dd7107faba44", + "sha256:c4ce15276a1a14549d7e81c243b887293904ad2d94ad767f42df91e75fd7b5b6", + "sha256:c7a683c37a8a24f6428c28c561c80d5f4fd316ddcf0c7cab999b15ab3f5c5c69", + "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4", + "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84", + "sha256:dd7ed7429dbb6c494aa9bc4e09d94b778a3579be699f9d67da7e6804c422d3de", + "sha256:df2631f9d67259dc9620d831384ed7732a198eb434eadf69aea95ad18c587a28", + "sha256:e368b7f7eac182a59ff1f81d5f3802161932a41dc1b1cc45c1f757dc876b5d2c", + "sha256:e40f2013d96d30217a51eeb1db28c9ac41e9d0ee915ef9d00da639c5b63f01a1", + "sha256:f769457a639403073968d118bc70110e7dce294688009f5c24ab78800ae56dc8", + "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b", + "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb" + ], + "markers": "python_version >= '3.6'", + "version": "==1.7.1" }, "mccabe": { "hashes": [ @@ -267,52 +329,66 @@ }, "packaging": { "hashes": [ - "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", - "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a" + "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", + "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" ], - "version": "==20.9" + "markers": "python_version >= '3.6'", + "version": "==21.3" }, "pkginfo": { "hashes": [ - "sha256:029a70cb45c6171c329dfc890cde0879f8c52d6f3922794796e06f577bb03db4", - "sha256:9fdbea6495622e022cc72c2e5e1b735218e4ffb2a2a69cde2694a6c1f16afb75" + "sha256:848865108ec99d4901b2f7e84058b6e7660aae8ae10164e015a6dcf5b242a594", + "sha256:a84da4318dd86f870a9447a8c98340aa06216bfc6f2b7bdc4b8766984ae1867c" ], - "version": "==1.7.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.8.3" + }, + "platformdirs": { + "hashes": [ + "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", + "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19" + ], + "markers": "python_version >= '3.7'", + "version": "==2.5.2" }, "pluggy": { "hashes": [ - "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", - "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" + "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", + "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" ], - "version": "==0.13.1" + "markers": "python_version >= '3.6'", + "version": "==1.0.0" }, "py": { "hashes": [ - "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3", - "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a" + "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", + "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" ], - "version": "==1.10.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.11.0" }, "pycodestyle": { "hashes": [ - "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", - "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" + "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20", + "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f" ], - "version": "==2.7.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==2.8.0" }, "pycparser": { "hashes": [ - "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", - "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" ], - "version": "==2.20" + "version": "==2.21" }, "pygments": { "hashes": [ - "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94", - "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8" + "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb", + "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519" ], - "version": "==2.8.1" + "markers": "python_version >= '3.6'", + "version": "==2.12.0" }, "pylint": { "hashes": [ @@ -324,24 +400,27 @@ }, "pyparsing": { "hashes": [ - "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", - "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" + "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", + "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" ], - "version": "==2.4.7" + "markers": "python_full_version >= '3.6.8'", + "version": "==3.0.9" }, "readme-renderer": { "hashes": [ - "sha256:63b4075c6698fcfa78e584930f07f39e05d46f3ec97f65006e430b595ca6348c", - "sha256:92fd5ac2bf8677f310f3303aa4bce5b9d5f9f2094ab98c29f13791d7b805a3db" + "sha256:73b84905d091c31f36e50b4ae05ae2acead661f6a09a9abb4df7d2ddcdb6a698", + "sha256:a727999acfc222fc21d82a12ed48c957c4989785e5865807c65a487d21677497" ], - "version": "==29.0" + "markers": "python_version >= '3.7'", + "version": "==35.0" }, "requests": { "hashes": [ - "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", - "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" + "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983", + "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349" ], - "version": "==2.25.1" + "markers": "python_version >= '3.7' and python_version < '4.0'", + "version": "==2.28.1" }, "requests-toolbelt": { "hashes": [ @@ -352,31 +431,42 @@ }, "rfc3986": { "hashes": [ - "sha256:112398da31a3344dc25dbf477d8df6cb34f9278a94fee2625d89e4514be8bb9d", - "sha256:af9147e9aceda37c91a05f4deb128d4b4b49d6b199775fd2d2927768abdc8f50" + "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", + "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c" ], - "version": "==1.4.0" + "markers": "python_version >= '3.7'", + "version": "==2.0.0" }, "secretstorage": { "hashes": [ - "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f", - "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195" + "sha256:0a8eb9645b320881c222e827c26f4cfcf55363e8b374a021981ef886657a912f", + "sha256:755dc845b6ad76dcbcbc07ea3da75ae54bb1ea529eb72d15f83d26499a5df319" ], "markers": "sys_platform == 'linux'", - "version": "==3.3.1" + "version": "==3.3.2" + }, + "setuptools": { + "hashes": [ + "sha256:0d33c374d41c7863419fc8f6c10bfe25b7b498aa34164d135c622e52580c6b16", + "sha256:c04b44a57a6265fe34a4a444e965884716d34bae963119a76353434d6f18e450" + ], + "markers": "python_version >= '3.7'", + "version": "==63.2.0" }, "six": { "hashes": [ - "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", - "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "version": "==1.15.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" }, "toml": { "hashes": [ "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.10.2" }, "tox": { @@ -389,10 +479,11 @@ }, "tqdm": { "hashes": [ - "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3", - "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae" + "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d", + "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6" ], - "version": "==4.60.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==4.64.0" }, "twine": { "hashes": [ @@ -404,18 +495,19 @@ }, "urllib3": { "hashes": [ - "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", - "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" + "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec", + "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6" ], - "index": "pypi", - "version": "==1.26.4" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' and python_version < '4.0'", + "version": "==1.26.10" }, "virtualenv": { "hashes": [ - "sha256:49ec4eb4c224c6f7dd81bb6d0a28a09ecae5894f4e593c89b0db0885f565a107", - "sha256:83f95875d382c7abafe06bd2a4cdd1b363e1bb77e02f155ebe8ac082a916b37c" + "sha256:288171134a2ff3bfb1a2f54f119e77cd1b81c29fc1265a2356f3e8d14c7d58c4", + "sha256:b30aefac647e86af6d82bfc944c556f8f1a9c90427b2fb4e3bfbf338cb82becf" ], - "version": "==20.4.3" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.15.1" }, "webencodings": { "hashes": [ @@ -437,13 +529,6 @@ "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7" ], "version": "==1.12.1" - }, - "zipp": { - "hashes": [ - "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76", - "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098" - ], - "version": "==3.4.1" } } } From 1bd266772c337a460028aeb31cea9d4a37dff3e5 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:18:39 +0300 Subject: [PATCH 12/13] Add py311 --- .github/workflows/build-darwin.yml | 11 ++++++++++- .github/workflows/build-linux.yml | 11 ++++++++++- .github/workflows/build-windows.yml | 14 +++++++++++++- dockerfiles/buildwheel.sh | 2 +- dockerfiles/develop/Dockerfile | 2 +- dockerfiles/slim/Dockerfile | 2 +- setup.py | 1 + tox.ini | 2 +- 8 files changed, 38 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-darwin.yml b/.github/workflows/build-darwin.yml index 2e3baf7..f097098 100644 --- a/.github/workflows/build-darwin.yml +++ b/.github/workflows/build-darwin.yml @@ -12,6 +12,11 @@ jobs: steps: - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + name: Install Python 3.11 + with: + python-version: "3.11" + - uses: actions/setup-python@v4 name: Install Python 3.10 with: @@ -51,6 +56,10 @@ jobs: run: | pip install -r requirements-dev.txt + - name: Test for Python 3.11 + run: | + tox -e py311 + - name: Test for Python 3.10 run: | tox -e py310 @@ -76,7 +85,7 @@ jobs: run: | python -m cibuildwheel --output-dir wheelhouse env: - CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* cp310-* + CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* cp310-* cp311-* - uses: actions/upload-artifact@v1 if: contains(github.ref, 'tags/') diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 84bb346..a6eeb3f 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -12,6 +12,11 @@ jobs: steps: - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + name: Install Python 3.11 + with: + python-version: "3.11" + - uses: actions/setup-python@v4 name: Install Python 3.10 with: @@ -51,6 +56,10 @@ jobs: run: | pip install -r requirements-dev.txt + - name: Test for Python 3.11 + run: | + tox -e py311 + - name: Test for Python 3.10 run: | tox -e py310 @@ -76,7 +85,7 @@ jobs: run: | python -m cibuildwheel --output-dir wheelhouse env: - CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* cp310-* + CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* cp310-* cp311-* - uses: actions/upload-artifact@v1 if: contains(github.ref, 'tags/') diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 27e231a..2249ba5 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -18,6 +18,12 @@ jobs: steps: - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + name: Install Python 3.11 + with: + python-version: "3.11" + architecture: ${{ matrix.config.py-architecture }} + - uses: actions/setup-python@v4 name: Install Python 3.10 with: @@ -62,6 +68,12 @@ jobs: run: | pip install -r requirements-dev.txt + - name: Test for Python 3.11 + shell: cmd + run: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat" -no_logo -arch=${{ matrix.config.vs-arch }} + tox -e py311 + - name: Test for Python 3.10 shell: cmd run: | @@ -97,7 +109,7 @@ jobs: run: | python -m cibuildwheel --output-dir wheelhouse env: - CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* cp310-* + CIBW_BUILD: cp36-* cp37-* cp38-* cp39-* cp310-* cp311-* - uses: actions/upload-artifact@v1 if: contains(github.ref, 'tags/') diff --git a/dockerfiles/buildwheel.sh b/dockerfiles/buildwheel.sh index 65dd8fa..3d34c1b 100755 --- a/dockerfiles/buildwheel.sh +++ b/dockerfiles/buildwheel.sh @@ -4,7 +4,7 @@ set -e -x ARCH=`uname -p` echo "arch=$ARCH" -for V in cp310-cp310 cp39-cp39 cp38-cp38 cp37-cp37m cp36-cp36m; do +for V in cp311-cp311 cp310-cp310 cp39-cp39 cp38-cp38 cp37-cp37m cp36-cp36m; do PYBIN=/opt/python/$V/bin rm -rf build src/cchardet/__pycache__ src/cchardet/*.cpp src/cchardet/*.pyc src/cchardet/*.so src/cchardet.egg-info src/tests/__pycache__ src/tests/*.pyc $PYBIN/pip install -r requirements-dev.txt diff --git a/dockerfiles/develop/Dockerfile b/dockerfiles/develop/Dockerfile index 83139ff..8bc93f5 100644 --- a/dockerfiles/develop/Dockerfile +++ b/dockerfiles/develop/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.10-buster +FROM python:3.11-buster RUN pip install -U cython chardet nose diff --git a/dockerfiles/slim/Dockerfile b/dockerfiles/slim/Dockerfile index 9cd55b1..835dd0b 100644 --- a/dockerfiles/slim/Dockerfile +++ b/dockerfiles/slim/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.10-slim-buster +FROM python:3.11-slim-buster ENV BUILD_DEPS gcc g++ diff --git a/setup.py b/setup.py index c8ded7a..16116dc 100644 --- a/setup.py +++ b/setup.py @@ -134,6 +134,7 @@ def read(f): 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', ], keywords=[ 'cython', diff --git a/tox.ini b/tox.ini index e7d45f3..3950b52 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py36, py37, py38, py39, py310 +envlist = py36, py37, py38, py39, py310, py311 [testenv] whitelist_externals = make From 3389883fbf56b2dbfcecdb1a4790945507460264 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Sun, 6 Nov 2022 07:08:13 +0300 Subject: [PATCH 13/13] Bump cython --- Pipfile | 2 +- requirements-dev.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Pipfile b/Pipfile index a4ec28e..b68a8f2 100644 --- a/Pipfile +++ b/Pipfile @@ -7,7 +7,7 @@ verify_ssl = true chardet = "==3.0.4" nose = "==1.3.7" tox = "==3.20.1" -Cython = "==0.29.30" +Cython = "==0.29.32" pylint = "==2.6.0" wheel = "==0.35.1" twine = "==3.2.0" diff --git a/requirements-dev.txt b/requirements-dev.txt index 8001917..5f74673 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,7 +1,7 @@ chardet==3.0.4 pytest==6.2.5 tox==3.20.1 -Cython==0.29.30 +Cython==0.29.32 # pylint==2.6.0 # wheel==0.35.1 # twine==3.2.0