Skip to content

Commit 819c35d

Browse files
New session every time (#342)
* works but not sure if the best way * lint * setup * not sure if its fine * dev version * release candidate * fixed version * linter --------- Co-authored-by: rogeliolopez <rogelio.lpz94@gmail.com>
1 parent 67cf94b commit 819c35d

File tree

6 files changed

+32
-32
lines changed

6 files changed

+32
-32
lines changed

cuenca/http/client.py

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,15 @@
2424
class Session:
2525

2626
host: str = API_HOST
27+
headers: DictStrAny = {}
2728
basic_auth: Tuple[str, str]
2829
jwt_token: Optional[Jwt] = None
29-
session: requests.Session
3030

3131
def __init__(self):
32-
self.session = requests.Session()
33-
self.session.headers.update(
34-
{
35-
'X-Cuenca-Api-Version': API_VERSION,
36-
'User-Agent': f'cuenca-python/{CLIENT_VERSION}',
37-
}
38-
)
32+
self.headers = {
33+
'X-Cuenca-Api-Version': API_VERSION,
34+
'User-Agent': f'cuenca-python/{CLIENT_VERSION}',
35+
}
3936

4037
# basic auth
4138
api_key = os.getenv('CUENCA_API_KEY', '')
@@ -75,10 +72,10 @@ def configure(
7572
self.jwt_token = Jwt.create(self)
7673

7774
if login_token:
78-
self.session.headers['X-Cuenca-LoginToken'] = login_token
75+
self.headers['X-Cuenca-LoginToken'] = login_token
7976

8077
if session_token:
81-
self.session.headers['X-Cuenca-SessionId'] = session_token
78+
self.headers['X-Cuenca-SessionId'] = session_token
8279

8380
def get(
8481
self, endpoint: str, params: ClientRequestParams = None
@@ -105,19 +102,22 @@ def request(
105102
data: OptionalDict = None,
106103
**kwargs,
107104
) -> bytes:
108-
if self.jwt_token:
109-
if self.jwt_token.is_expired:
110-
self.jwt_token = Jwt.create(self)
111-
self.session.headers['X-Cuenca-Token'] = self.jwt_token.token
112-
113-
resp = self.session.request(
114-
method=method,
115-
url='https://' + self.host + urljoin('/', endpoint),
116-
auth=self.auth,
117-
json=json.loads(JSONEncoder().encode(data)),
118-
params=params,
119-
**kwargs,
120-
)
105+
resp = None
106+
with requests.Session() as session:
107+
session.headers = self.headers # type: ignore
108+
if self.jwt_token:
109+
if self.jwt_token.is_expired:
110+
self.jwt_token = Jwt.create(self)
111+
self.headers['X-Cuenca-Token'] = self.jwt_token.token
112+
session.headers = self.headers # type: ignore
113+
resp = session.request( # type: ignore
114+
method=method,
115+
url='https://' + self.host + urljoin('/', endpoint),
116+
auth=self.auth,
117+
json=json.loads(JSONEncoder().encode(data)),
118+
params=params,
119+
**kwargs,
120+
)
121121
self._check_response(resp)
122122
return resp.content
123123

cuenca/jwt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def get_expiration_date(token: str) -> dt.datetime:
4242
@classmethod
4343
def create(cls, session: 'Session') -> 'Jwt':
4444
session.jwt_token = None
45-
session.session.headers.pop('X-Cuenca-Token', None)
45+
session.headers.pop('X-Cuenca-Token', None)
4646
token = session.post('/token', dict())['token']
4747
expires_at = Jwt.get_expiration_date(token)
4848
return cls(expires_at=expires_at, token=token)

cuenca/resources/user_logins.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def create(
3333
req = UserLoginRequest(password=password, user_id=user_id)
3434
login = cast('UserLogin', cls._create(session=session, **req.dict()))
3535
if login.success:
36-
session.session.headers['X-Cuenca-LoginId'] = login.id
36+
session.headers['X-Cuenca-LoginId'] = login.id
3737
return login
3838

3939
@classmethod
@@ -43,4 +43,4 @@ def logout(
4343
# Using user_id vs user_login_id to avoid needing to store
4444
# user_login_id or perform a query to fetch it
4545
session.delete(f'{cls._resource}/{user_id}', dict())
46-
session.session.headers.pop('X-Cuenca-LoginId', None)
46+
session.headers.pop('X-Cuenca-LoginId', None)

cuenca/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
__version__ = '0.15.7'
1+
__version__ = '0.15.8'
22
CLIENT_VERSION = __version__
33
API_VERSION = '2020-03-19'

tests/resources/test_login_tokens.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from cuenca.http.client import Session
55

66

7-
@pytest.fixture
7+
@pytest.fixture(scope='function')
88
def session():
99
session = Session()
1010
session.configure(
@@ -19,6 +19,6 @@ def session():
1919
def test_login_token(session):
2020
UserLogin.create('222222', session=session)
2121
login_token = LoginToken.create(session=session)
22-
session.session.headers.pop('X-Cuenca-LoginId')
22+
session.headers.pop('X-Cuenca-LoginId')
2323
session.configure(login_token=login_token.id)
2424
Transfer.count(session=session)

tests/resources/test_user_logins.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def test_valid_login(session: Session):
2121
assert login.success
2222
assert login.last_login_at is not None
2323
assert login.id is not None
24-
assert session.session.headers['X-Cuenca-LoginId'] == login.id
24+
assert session.headers['X-Cuenca-LoginId'] == login.id
2525

2626

2727
@pytest.mark.vcr
@@ -30,11 +30,11 @@ def test_invalid_login(session: Session):
3030
assert not login.success
3131
assert login.last_login_at is None
3232
assert login.id is not None
33-
assert 'X-Cuenca-LoginId' not in session.session.headers
33+
assert 'X-Cuenca-LoginId' not in session.headers
3434

3535

3636
@pytest.mark.vcr
3737
def test_logout(session: Session):
3838
UserLogin.create('222222', session=session)
3939
UserLogin.logout(session=session)
40-
assert 'X-Cuenca-LoginId' not in session.session.headers
40+
assert 'X-Cuenca-LoginId' not in session.headers

0 commit comments

Comments
 (0)