mirror of
https://github.com/scito/extract_otp_secret_keys.git
synced 2025-12-07 07:14:57 +01:00
workaround Windows fatal exception: access violation in log_debug *values: enable ci win tests again
This commit is contained in:
parent
9463dc3e88
commit
fce36ee279
9 changed files with 94 additions and 84 deletions
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
|
|
@ -21,7 +21,7 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["3.12", "3.11", "3.10", "3.9", "3.8"]
|
python-version: ["3.12", "3.11", "3.10", "3.9", "3.8"]
|
||||||
platform: [ubuntu-latest, macos-latest]
|
platform: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
# exclude:
|
# exclude:
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
|
||||||
|
|
@ -915,10 +915,15 @@ def get_raw_version() -> str:
|
||||||
|
|
||||||
# workaround for PYTHON <= 3.9 use: BaseException | None
|
# workaround for PYTHON <= 3.9 use: BaseException | None
|
||||||
def log_debug(*values: object, sep: Optional[str] = ' ') -> None:
|
def log_debug(*values: object, sep: Optional[str] = ' ') -> None:
|
||||||
|
if os.name == 'nt':
|
||||||
|
# Workaround "Windows fatal exception: access violation"
|
||||||
|
print(f"\nDEBUG: {str(values[0])}")
|
||||||
|
return
|
||||||
|
|
||||||
if colored:
|
if colored:
|
||||||
print(f"{colorama.Fore.CYAN}\nDEBUG: {str(values[0])}", *values[1:], colorama.Fore.RESET, sep)
|
print(f"{colorama.Fore.CYAN}\nDEBUG: {str(values[0])}", *values[1:], colorama.Fore.RESET, sep=sep)
|
||||||
else:
|
else:
|
||||||
print(f"\nDEBUG: {str(values[0])}", *values[1:], sep)
|
print(f"\nDEBUG: {str(values[0])}", *values[1:], sep=sep)
|
||||||
|
|
||||||
|
|
||||||
# workaround for PYTHON <= 3.9 use: BaseException | None
|
# workaround for PYTHON <= 3.9 use: BaseException | None
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
QReader installed: True
|
QReader installed: True
|
||||||
CV2 version: 4.7.0
|
CV2 version: 4.10.0
|
||||||
QR reading mode: ZBAR
|
QR reading mode: ZBAR
|
||||||
|
|
||||||
Input files: ['example_export.txt']
|
Input files: ['example_export.txt']
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
QReader installed: True
|
QReader installed: True
|
||||||
CV2 version: 4.7.0
|
CV2 version: 4.10.0
|
||||||
QR reading mode: ZBAR
|
QR reading mode: ZBAR
|
||||||
|
|
||||||
Input files: ['example_export.txt']
|
Input files: ['example_export.txt']
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
QReader installed: True
|
QReader installed: True
|
||||||
CV2 version: 4.7.0
|
CV2 version: 4.10.0
|
||||||
QR reading mode: ZBAR
|
QR reading mode: ZBAR
|
||||||
|
|
||||||
Version: extract_otp_secrets 2.0.2.post50+git.158245dd.dirty Linux x86_64 Python 3.11.1 (CPython/called as script)
|
Version: extract_otp_secrets 2.8.1.post17+git.3dc7d1c2.dirty Linux x86_64 Python 3.11.9 (CPython/called as script)
|
||||||
|
|
||||||
Input files: ['example_export.txt']
|
Input files: ['example_export.txt']
|
||||||
Processing infile example_export.txt
|
Processing infile example_export.txt
|
||||||
|
|
@ -41,7 +41,8 @@ DEBUG: data_base64=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVyc
|
||||||
DEBUG: data_base64_fixed=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK+/////8B
|
DEBUG: data_base64_fixed=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK+/////8B
|
||||||
|
|
||||||
DEBUG:
|
DEBUG:
|
||||||
1. Payload Line otp_parameters {
|
1. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "pi@raspberrypi"
|
name: "pi@raspberrypi"
|
||||||
issuer: "raspberrypi"
|
issuer: "raspberrypi"
|
||||||
|
|
@ -54,7 +55,6 @@ batch_size: 1
|
||||||
batch_id: -1320898453
|
batch_id: -1320898453
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1. Secret
|
1. Secret
|
||||||
|
|
||||||
DEBUG: OTP enum type: OTP_TOTP
|
DEBUG: OTP enum type: OTP_TOTP
|
||||||
|
|
@ -77,7 +77,8 @@ DEBUG: data_base64=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYA
|
||||||
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4/////wE=
|
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4/////wE=
|
||||||
|
|
||||||
DEBUG:
|
DEBUG:
|
||||||
2. Payload Line otp_parameters {
|
2. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "pi@raspberrypi"
|
name: "pi@raspberrypi"
|
||||||
algorithm: ALGO_SHA1
|
algorithm: ALGO_SHA1
|
||||||
|
|
@ -89,7 +90,6 @@ batch_size: 1
|
||||||
batch_id: -2094403140
|
batch_id: -2094403140
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2. Secret
|
2. Secret
|
||||||
|
|
||||||
DEBUG: OTP enum type: OTP_TOTP
|
DEBUG: OTP enum type: OTP_TOTP
|
||||||
|
|
@ -112,7 +112,8 @@ DEBUG: data_base64=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKE
|
||||||
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa+f////8B
|
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa+f////8B
|
||||||
|
|
||||||
DEBUG:
|
DEBUG:
|
||||||
3. Payload Line otp_parameters {
|
3. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "pi@raspberrypi"
|
name: "pi@raspberrypi"
|
||||||
algorithm: ALGO_SHA1
|
algorithm: ALGO_SHA1
|
||||||
|
|
@ -132,7 +133,6 @@ batch_size: 1
|
||||||
batch_id: -1822886384
|
batch_id: -1822886384
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
3. Secret
|
3. Secret
|
||||||
|
|
||||||
DEBUG: OTP enum type: OTP_TOTP
|
DEBUG: OTP enum type: OTP_TOTP
|
||||||
|
|
@ -164,7 +164,8 @@ DEBUG: data_base64=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAK
|
||||||
DEBUG: data_base64_fixed=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6/////wE=
|
DEBUG: data_base64_fixed=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6/////wE=
|
||||||
|
|
||||||
DEBUG:
|
DEBUG:
|
||||||
4. Payload Line otp_parameters {
|
4. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "hotp demo"
|
name: "hotp demo"
|
||||||
algorithm: ALGO_SHA1
|
algorithm: ALGO_SHA1
|
||||||
|
|
@ -177,7 +178,6 @@ batch_size: 1
|
||||||
batch_id: -1558849573
|
batch_id: -1558849573
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
5. Secret
|
5. Secret
|
||||||
|
|
||||||
DEBUG: OTP enum type: OTP_HOTP
|
DEBUG: OTP enum type: OTP_HOTP
|
||||||
|
|
@ -201,7 +201,8 @@ DEBUG: data_base64=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZ
|
||||||
DEBUG: data_base64_fixed=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv//////AQ==
|
DEBUG: data_base64_fixed=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv//////AQ==
|
||||||
|
|
||||||
DEBUG:
|
DEBUG:
|
||||||
5. Payload Line otp_parameters {
|
5. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "encoding: ¿äÄéÉ? (demo)"
|
name: "encoding: ¿äÄéÉ? (demo)"
|
||||||
algorithm: ALGO_SHA1
|
algorithm: ALGO_SHA1
|
||||||
|
|
@ -213,7 +214,6 @@ batch_size: 1
|
||||||
batch_id: -171198419
|
batch_id: -171198419
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
6. Secret
|
6. Secret
|
||||||
|
|
||||||
DEBUG: OTP enum type: OTP_TOTP
|
DEBUG: OTP enum type: OTP_TOTP
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
QReader installed: True
|
QReader installed: True
|
||||||
CV2 version: 4.7.0
|
CV2 version: 4.10.0
|
||||||
QR reading mode: ZBAR
|
QR reading mode: ZBAR
|
||||||
|
|
||||||
Input files: ['example_export.txt']
|
Input files: ['example_export.txt']
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
QReader installed: True
|
QReader installed: True
|
||||||
CV2 version: 4.7.0
|
CV2 version: 4.10.0
|
||||||
QR reading mode: ZBAR
|
QR reading mode: ZBAR
|
||||||
|
|
||||||
Input files: ['example_export.txt']
|
Input files: ['example_export.txt']
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
QReader installed: True
|
QReader installed: True
|
||||||
CV2 version: 4.7.0
|
CV2 version: 4.10.0
|
||||||
QR reading mode: ZBAR
|
QR reading mode: ZBAR
|
||||||
|
|
||||||
Version: extract_otp_secrets 2.0.2.post50+git.158245dd.dirty Linux x86_64 Python 3.11.1 (CPython/called as script)
|
Version: extract_otp_secrets 2.8.1.post17+git.3dc7d1c2.dirty Linux x86_64 Python 3.11.9 (CPython/called as script)
|
||||||
|
|
||||||
Input files: ['example_export.txt']
|
Input files: ['example_export.txt']
|
||||||
[36mProcessing infile example_export.txt[39m
|
[36mProcessing infile example_export.txt[39m
|
||||||
|
|
@ -41,7 +41,8 @@ DEBUG: data_base64=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVyc
|
||||||
DEBUG: data_base64_fixed=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK+/////8B [39m
|
DEBUG: data_base64_fixed=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK+/////8B [39m
|
||||||
[36m
|
[36m
|
||||||
DEBUG:
|
DEBUG:
|
||||||
1. Payload Line otp_parameters {
|
1. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "pi@raspberrypi"
|
name: "pi@raspberrypi"
|
||||||
issuer: "raspberrypi"
|
issuer: "raspberrypi"
|
||||||
|
|
@ -52,8 +53,8 @@ DEBUG:
|
||||||
version: 1
|
version: 1
|
||||||
batch_size: 1
|
batch_size: 1
|
||||||
batch_id: -1320898453
|
batch_id: -1320898453
|
||||||
[39m
|
|
||||||
|
|
||||||
|
[39m
|
||||||
|
|
||||||
1. Secret
|
1. Secret
|
||||||
[36m
|
[36m
|
||||||
|
|
@ -77,7 +78,8 @@ DEBUG: data_base64=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYA
|
||||||
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4/////wE= [39m
|
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4/////wE= [39m
|
||||||
[36m
|
[36m
|
||||||
DEBUG:
|
DEBUG:
|
||||||
2. Payload Line otp_parameters {
|
2. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "pi@raspberrypi"
|
name: "pi@raspberrypi"
|
||||||
algorithm: ALGO_SHA1
|
algorithm: ALGO_SHA1
|
||||||
|
|
@ -87,8 +89,8 @@ DEBUG:
|
||||||
version: 1
|
version: 1
|
||||||
batch_size: 1
|
batch_size: 1
|
||||||
batch_id: -2094403140
|
batch_id: -2094403140
|
||||||
[39m
|
|
||||||
|
|
||||||
|
[39m
|
||||||
|
|
||||||
2. Secret
|
2. Secret
|
||||||
[36m
|
[36m
|
||||||
|
|
@ -112,7 +114,8 @@ DEBUG: data_base64=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKE
|
||||||
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa+f////8B [39m
|
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa+f////8B [39m
|
||||||
[36m
|
[36m
|
||||||
DEBUG:
|
DEBUG:
|
||||||
3. Payload Line otp_parameters {
|
3. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "pi@raspberrypi"
|
name: "pi@raspberrypi"
|
||||||
algorithm: ALGO_SHA1
|
algorithm: ALGO_SHA1
|
||||||
|
|
@ -130,8 +133,8 @@ otp_parameters {
|
||||||
version: 1
|
version: 1
|
||||||
batch_size: 1
|
batch_size: 1
|
||||||
batch_id: -1822886384
|
batch_id: -1822886384
|
||||||
[39m
|
|
||||||
|
|
||||||
|
[39m
|
||||||
|
|
||||||
3. Secret
|
3. Secret
|
||||||
[36m
|
[36m
|
||||||
|
|
@ -164,7 +167,8 @@ DEBUG: data_base64=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAK
|
||||||
DEBUG: data_base64_fixed=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6/////wE= [39m
|
DEBUG: data_base64_fixed=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6/////wE= [39m
|
||||||
[36m
|
[36m
|
||||||
DEBUG:
|
DEBUG:
|
||||||
4. Payload Line otp_parameters {
|
4. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "hotp demo"
|
name: "hotp demo"
|
||||||
algorithm: ALGO_SHA1
|
algorithm: ALGO_SHA1
|
||||||
|
|
@ -175,8 +179,8 @@ DEBUG:
|
||||||
version: 1
|
version: 1
|
||||||
batch_size: 1
|
batch_size: 1
|
||||||
batch_id: -1558849573
|
batch_id: -1558849573
|
||||||
[39m
|
|
||||||
|
|
||||||
|
[39m
|
||||||
|
|
||||||
5. Secret
|
5. Secret
|
||||||
[36m
|
[36m
|
||||||
|
|
@ -201,7 +205,8 @@ DEBUG: data_base64=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZ
|
||||||
DEBUG: data_base64_fixed=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv//////AQ== [39m
|
DEBUG: data_base64_fixed=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv//////AQ== [39m
|
||||||
[36m
|
[36m
|
||||||
DEBUG:
|
DEBUG:
|
||||||
5. Payload Line otp_parameters {
|
5. Payload Line
|
||||||
|
otp_parameters {
|
||||||
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
||||||
name: "encoding: ¿äÄéÉ? (demo)"
|
name: "encoding: ¿äÄéÉ? (demo)"
|
||||||
algorithm: ALGO_SHA1
|
algorithm: ALGO_SHA1
|
||||||
|
|
@ -211,8 +216,8 @@ DEBUG:
|
||||||
version: 1
|
version: 1
|
||||||
batch_size: 1
|
batch_size: 1
|
||||||
batch_id: -171198419
|
batch_id: -171198419
|
||||||
[39m
|
|
||||||
|
|
||||||
|
[39m
|
||||||
|
|
||||||
6. Secret
|
6. Secret
|
||||||
[36m
|
[36m
|
||||||
|
|
|
||||||
|
|
@ -559,7 +559,7 @@ def test_normalize_bytes() -> None:
|
||||||
# Generate verbose output:
|
# Generate verbose output:
|
||||||
# for color in '' '-n'; do for level in '' '-v' '-vv' '-vvv'; do python3.11 src/extract_otp_secrets.py example_export.txt $color $level > tests/data/print_verbose_output$color$level.txt; done; done
|
# for color in '' '-n'; do for level in '' '-v' '-vv' '-vvv'; do python3.11 src/extract_otp_secrets.py example_export.txt $color $level > tests/data/print_verbose_output$color$level.txt; done; done
|
||||||
# workaround for PYTHON <= 3.10
|
# workaround for PYTHON <= 3.10
|
||||||
@pytest.mark.skipif(sys.version_info < (3, 10), reason="fileinput.input encoding exists since PYTHON 3.10")
|
@pytest.mark.skipif(sys.version_info < (3, 10) or sys.platform.startswith("win"), reason="fileinput.input encoding exists since PYTHON 3.10 OR Windows fatal exception: access violation")
|
||||||
@pytest.mark.parametrize("verbose_level", ['', '-v', '-vv', '-vvv'])
|
@pytest.mark.parametrize("verbose_level", ['', '-v', '-vv', '-vvv'])
|
||||||
@pytest.mark.parametrize("color", ['', '-n'])
|
@pytest.mark.parametrize("color", ['', '-n'])
|
||||||
def test_extract_verbose(verbose_level: str, color: str, capsys: pytest.CaptureFixture[str], relaxed: bool) -> None:
|
def test_extract_verbose(verbose_level: str, color: str, capsys: pytest.CaptureFixture[str], relaxed: bool) -> None:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue