-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuser.py
More file actions
35 lines (30 loc) · 1.44 KB
/
user.py
File metadata and controls
35 lines (30 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from typing import Any
from requests import Response
import requests
import models
import datetime
from models import OperationResult, OperationStatus
from models.auth import UserLoginRequest
from api.auth_api import login as login_to_api
class User:
def __init__(self, api_token: str, jwt_token: models.auth.JwtToken | None = None) -> None:
self.api_token = api_token
self.jwt_token = jwt_token
def login(self) -> OperationResult:
if self.jwt_token and self.jwt_token.expires > datetime.datetime.now(tz=datetime.timezone.utc) + datetime.timedelta(seconds=10):
return OperationResult(status=OperationStatus.Ok)
result = login_to_api(UserLoginRequest(apiToken=self.api_token))
self.jwt_token = result.data
return OperationResult(status=result.status)
def post_json(self, url: str, json: Any) -> OperationResult[Response]:
res = self.login()
if res.status != OperationStatus.Ok:
return res
return OperationResult(status=OperationStatus.Ok, data=requests.post(
url, json=json, headers={"Authorization": f"Bearer {self.jwt_token.token}"}))
def get(self, url: str) -> OperationResult[Response]:
res = self.login()
if res.status != OperationStatus.Ok:
return res
return OperationResult(status=OperationStatus.Ok, data=requests.get(
url, headers={"Authorization": f"Bearer {self.jwt_token.token}"}))