Skip to content

Commit 9ece2d0

Browse files
authored
Merge pull request #95 from IdentityPython/httpc_params_loader
feat: httpc_params_loader (httpc default timeout refactor)
2 parents e6432b4 + 29fca4a commit 9ece2d0

File tree

7 files changed

+33
-23
lines changed

7 files changed

+33
-23
lines changed

pytest.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[pytest]
2+
markers =
3+
network: mark a test as a network.

src/cryptojwt/key_bundle.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@
2929
from .jwk.rsa import RSAKey
3030
from .jwk.rsa import new_rsa_key
3131
from .utils import as_unicode
32+
from .utils import httpc_params_loader
3233

3334
__author__ = "Roland Hedberg"
3435

3536
KEYLOADERR = "Failed to load %s key from '%s' (%s)"
3637
REMOTE_FAILED = "Remote key update from '{}' failed, HTTP status {}"
3738
MALFORMED = "Remote key update from {} failed, malformed JWKS."
38-
DEFAULT_HTTPC_TIMEOUT = 10
3939

4040
LOGGER = logging.getLogger(__name__)
4141

@@ -254,9 +254,7 @@ def __init__(
254254
else:
255255
self.httpc = requests.request
256256

257-
self.httpc_params = httpc_params or {}
258-
if "timeout" not in self.httpc_params:
259-
self.httpc_params["timeout"] = DEFAULT_HTTPC_TIMEOUT
257+
self.httpc_params = httpc_params_loader(httpc_params)
260258

261259
if keys:
262260
self.source = None

src/cryptojwt/key_issuer.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88

99
from .jwe.utils import alg2keytype as jwe_alg2keytype
1010
from .jws.utils import alg2keytype as jws_alg2keytype
11-
from .key_bundle import DEFAULT_HTTPC_TIMEOUT
1211
from .key_bundle import KeyBundle
1312
from .key_bundle import build_key_bundle
1413
from .key_bundle import key_diff
1514
from .key_bundle import update_key_bundle
15+
from .utils import httpc_params_loader
1616
from .utils import importer
1717
from .utils import qualified_name
1818

@@ -58,9 +58,7 @@ def __init__(
5858

5959
self.ca_certs = ca_certs
6060
self.httpc = httpc or request
61-
self.httpc_params = httpc_params or {}
62-
if "timeout" not in self.httpc_params:
63-
self.httpc_params["timeout"] = DEFAULT_HTTPC_TIMEOUT
61+
self.httpc_params = httpc_params_loader(httpc_params)
6462
self.keybundle_cls = keybundle_cls
6563
self.name = name
6664
self.remove_after = remove_after

src/cryptojwt/key_jar.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
from .exception import IssuerNotFound
99
from .jwe.jwe import alg2keytype as jwe_alg2keytype
1010
from .jws.utils import alg2keytype as jws_alg2keytype
11-
from .key_bundle import DEFAULT_HTTPC_TIMEOUT
1211
from .key_bundle import KeyBundle
1312
from .key_issuer import KeyIssuer
1413
from .key_issuer import build_keyissuer
1514
from .key_issuer import init_key_issuer
1615
from .utils import deprecated_alias
16+
from .utils import httpc_params_loader
1717
from .utils import importer
1818
from .utils import qualified_name
1919

@@ -51,9 +51,7 @@ def __init__(
5151
self.keybundle_cls = keybundle_cls
5252
self.remove_after = remove_after
5353
self.httpc = httpc or request
54-
self.httpc_params = httpc_params or {}
55-
if "timeout" not in self.httpc_params:
56-
self.httpc_params["timeout"] = DEFAULT_HTTPC_TIMEOUT
54+
self.httpc_params = httpc_params_loader(httpc_params)
5755

5856
# Now part of httpc_params
5957
# self.verify_ssl = verify_ssl

src/cryptojwt/utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
from cryptojwt.exception import BadSyntax
1212

13+
DEFAULT_HTTPC_TIMEOUT = 10
14+
1315
# ---------------------------------------------------------------------------
1416
# Helper functions
1517

@@ -255,3 +257,10 @@ def rename_kwargs(func_name, kwargs, aliases):
255257
raise TypeError("{} received both {} and {}".format(func_name, alias, new))
256258
warnings.warn("{} is deprecated; use {}".format(alias, new), DeprecationWarning)
257259
kwargs[new] = kwargs.pop(alias)
260+
261+
262+
def httpc_params_loader(httpc_params):
263+
httpc_params = httpc_params or {}
264+
if "timeout" not in httpc_params:
265+
httpc_params["timeout"] = DEFAULT_HTTPC_TIMEOUT
266+
return httpc_params

tests/test_04_key_jar.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1058,7 +1058,7 @@ def test_similar():
10581058

10591059
kj = KeyJar()
10601060
kb = KeyBundle(JWK2)
1061-
kj.add_kb(issuer=ISSUER, kb=kb)
1061+
kj.add_kb(issuer_id=ISSUER, kb=kb)
10621062

10631063
keys1 = kj.get_issuer_keys(ISSUER)
10641064
keys2 = kj[ISSUER].all_keys()

tests/test_50_argument_alias.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,33 +65,35 @@ def setup(self):
6565
self.bob_keyjar["Bob"] = self.bob_keyjar[""]
6666

6767
# To Alice's keyjar add Bob's public keys
68-
self.alice_keyjar.import_jwks(self.bob_keyjar.export_jwks(issuer="Bob"), "Bob")
68+
self.alice_keyjar.import_jwks(self.bob_keyjar.export_jwks(issuer_id="Bob"), "Bob")
6969

7070
# To Bob's keyjar add Alice's public keys
71-
self.bob_keyjar.import_jwks(self.alice_keyjar.export_jwks(issuer="Alice"), "Alice")
71+
self.bob_keyjar.import_jwks(self.alice_keyjar.export_jwks(issuer_id="Alice"), "Alice")
7272

7373
_jws = JWS('{"aud": "Bob", "iss": "Alice"}', alg="RS256")
74-
sig_key = self.alice_keyjar.get_signing_key("rsa", owner="Alice")[0]
74+
sig_key = self.alice_keyjar.get_signing_key("rsa", issuer_id="Alice")[0]
7575
self.sjwt_a = _jws.sign_compact([sig_key])
7676

7777
_jws = JWS('{"aud": "Alice", "iss": "Bob"}', alg="RS256")
78-
sig_key = self.bob_keyjar.get_signing_key("rsa", owner="Bob")[0]
78+
sig_key = self.bob_keyjar.get_signing_key("rsa", issuer_id="Bob")[0]
7979
self.sjwt_b = _jws.sign_compact([sig_key])
8080

8181
def test_no_kid_multiple_keys_no_kid_issuer(self):
82-
a_kids = [k.kid for k in self.alice_keyjar.get_verify_key(owner="Alice", key_type="RSA")]
82+
a_kids = [
83+
k.kid for k in self.alice_keyjar.get_verify_key(issuer_id="Alice", key_type="RSA")
84+
]
8385
no_kid_issuer = {"Alice": a_kids}
8486
_jwt = factory(self.sjwt_a)
8587
_jwt.jwt.headers["kid"] = ""
8688
keys = self.bob_keyjar.get_jwt_verify_keys(_jwt.jwt, no_kid_issuer=no_kid_issuer)
8789
assert len(keys) == 3
8890

8991
def test_aud(self):
90-
self.alice_keyjar.import_jwks(JWK1, issuer="D")
91-
self.bob_keyjar.import_jwks(JWK1, issuer="D")
92+
self.alice_keyjar.import_jwks(JWK1, issuer_id="D")
93+
self.bob_keyjar.import_jwks(JWK1, issuer_id="D")
9294

9395
_jws = JWS('{"iss": "D", "aud": "A"}', alg="HS256")
94-
sig_key = self.alice_keyjar.get_signing_key("oct", owner="D")[0]
96+
sig_key = self.alice_keyjar.get_signing_key("oct", issuer_id="D")[0]
9597
_sjwt = _jws.sign_compact([sig_key])
9698

9799
no_kid_issuer = {"D": []}
@@ -121,7 +123,9 @@ def test_init_key_jar_dump_private():
121123
os.unlink(_file)
122124

123125
# New set of keys, JWKSs with keys and public written to file
124-
_keyjar = init_key_jar(private_path=PRIVATE_FILE, key_defs=KEYSPEC, owner="https://example.com")
126+
_keyjar = init_key_jar(
127+
private_path=PRIVATE_FILE, key_defs=KEYSPEC, issuer_id="https://example.com"
128+
)
125129
assert list(_keyjar.owners()) == ["https://example.com"]
126130

127131
# JWKS will be read from disc, not created new
@@ -138,7 +142,7 @@ def test_init_key_jar_update():
138142
_keyjar_1 = init_key_jar(
139143
private_path=PRIVATE_FILE,
140144
key_defs=KEYSPEC,
141-
owner="https://example.com",
145+
issuer_id="https://example.com",
142146
public_path=PUBLIC_FILE,
143147
read_only=False,
144148
)

0 commit comments

Comments
 (0)