• Bug#1061756: python-twilio ftbfs with Python 3.12 as default

    From Matthias Klose@21:1/5 to All on Mon Jan 29 13:20:01 2024
    Package: src:python-twilio
    Version: 7.7.1+ds1-1
    Severity: serious
    Tags: sid trixie ftbfs
    User: debian-python@lists.debian.org
    Usertags: python3.12

    With python3-defaults from experimental, the package fails to build:

    [...]
    =================================== FAILURES ===================================
    ___________________ ClientValidationJwtTest.test_jwt_payload ___________________

    self = <tests.unit.jwt.test_client_validation.ClientValidationJwtTest testMethod=test_jwt_payload>

    def test_jwt_payload(self):
    vp = ValidationPayload(
    method='GET',
    path='/Messages',
    query_string='PageSize=5&Limit=10',
    signed_headers=['authorization', 'host'],
    all_headers={'authorization': 'foobar', 'host':
    'api.twilio.com'},
    body='foobar'
    )
    expected_hash = '4dc9b67bed579647914587b0e22a1c65c1641d8674797cd82de65e766cce5f80'

    jwt = ClientValidationJwt('AC123', 'SK123', 'CR123', 'secret', vp)

    self.assertDictContainsSubset({
    'hrh': 'authorization;host',
    'rqh': expected_hash,
    'iss': 'SK123',
    'sub': 'AC123',
    }, jwt.payload)
    E AttributeError: 'ClientValidationJwtTest' object has no
    attribute 'assertDictContainsSubset'

    tests/unit/jwt/test_client_validation.py:234: AttributeError ___________________ ClientValidationJwtTest.test_jwt_signing ___________________

    self = <tests.unit.jwt.test_client_validation.ClientValidationJwtTest testMethod=test_jwt_signing>

    def test_jwt_signing(self):
    vp = ValidationPayload(
    method='GET',
    path='/Messages',
    query_string='PageSize=5&Limit=10',
    signed_headers=['authorization', 'host'],
    all_headers={'authorization': 'foobar', 'host':
    'api.twilio.com'},
    body='foobar'
    )
    expected_hash = '4dc9b67bed579647914587b0e22a1c65c1641d8674797cd82de65e766cce5f80'

    private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
    )
    public_key =
    private_key.public_key().public_bytes(Encoding.PEM, PublicFormat.PKCS1)
    private_key = private_key.private_bytes(Encoding.PEM, PrivateFormat.PKCS8, NoEncryption())

    jwt = ClientValidationJwt('AC123', 'SK123', 'CR123',
    private_key, vp)
    decoded = ClientValidationJwt.from_jwt(jwt.to_jwt(), public_key)

    self.assertDictContainsSubset({
    'hrh': 'authorization;host',
    'rqh': expected_hash,
    'iss': 'SK123',
    'sub': 'AC123',
    }, decoded.payload)
    E AttributeError: 'ClientValidationJwtTest' object has no
    attribute 'assertDictContainsSubset'

    tests/unit/jwt/test_client_validation.py:271: AttributeError __________________________ JwtTest.test_encode_decode __________________________

    self = <tests.unit.jwt.test_jwt.JwtTest testMethod=test_encode_decode>

    def test_encode_decode(self):
    test_start = self.now()

    jwt = DummyJwt('secret_key', 'issuer', subject='hey',
    payload={'sick': 'sick'})
    decoded_jwt = Jwt.from_jwt(jwt.to_jwt(), 'secret_key')

    self.assertGreaterEqual(decoded_jwt.valid_until, self.now() + 3600)
    self.assertGreaterEqual(decoded_jwt.nbf, test_start)
    self.assertEqual(decoded_jwt.issuer, 'issuer')
    self.assertEqual(decoded_jwt.secret_key, 'secret_key')
    self.assertEqual(decoded_jwt.algorithm, 'HS256')
    self.assertEqual(decoded_jwt.subject, 'hey')

    self.assertEqual(decoded_jwt.headers, {'typ': 'JWT', 'alg':
    'HS256'})
    self.assertDictContainsSubset({
    'iss': 'issuer',
    'sub': 'hey',
    'sick': 'sick',
    }, decoded_jwt.payload)
    E AttributeError: 'JwtTest' object has no attribute 'assertDictContainsSubset'

    tests/unit/jwt/test_jwt.py:206: AttributeError

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)