1"""Provide a compatibility layer for requests.auth.HTTPDigestAuth."""
2import requests
3
4
5class _ThreadingDescriptor(object):
6 def __init__(self, prop, default):
7 self.prop = prop
8 self.default = default
9
10 def __get__(self, obj, objtype=None):
11 return getattr(obj._thread_local, self.prop, self.default)
12
13 def __set__(self, obj, value):
14 setattr(obj._thread_local, self.prop, value)
15
16
17class _HTTPDigestAuth(requests.auth.HTTPDigestAuth):
18 init = _ThreadingDescriptor('init', True)
19 last_nonce = _ThreadingDescriptor('last_nonce', '')
20 nonce_count = _ThreadingDescriptor('nonce_count', 0)
21 chal = _ThreadingDescriptor('chal', {})
22 pos = _ThreadingDescriptor('pos', None)
23 num_401_calls = _ThreadingDescriptor('num_401_calls', 1)
24
25
26if requests.__build__ < 0x020800:
27 HTTPDigestAuth = requests.auth.HTTPDigestAuth
28else:
29 HTTPDigestAuth = _HTTPDigestAuth