Skip to content

Commit 33c013e

Browse files
Add a version of the pkg to headers (#10)
Add User-Agent which contains package version, requests version and python version.
1 parent 4a29674 commit 33c013e

File tree

5 files changed

+34
-5
lines changed

5 files changed

+34
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
# Changelog
22

33
## unreleased
4-
5-
N/A
4+
- Add a version of the package to headers [#9](https://github.com/EmergingTravel/papi-sdk-python/issues/9)
65

76
## [v1.0.2](https://github.com/emergingtravel/papi-sdk-python/releases/tag/v1.0.2) - 2020-12-30
87

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,5 @@ data = HotelInfoDumpRequest(language='ru')
4747
dump = papi.get_hotel_info_dump(data=data)
4848
print(dump.data.url)
4949
```
50+
51+
Note: if you don't provide your headers and specifically your `User-Agent` in requests options then it will be automatically added, ex. `papi-sdk/v1.0.2 requests/2.25.1 (python/3.8)`

papi_sdk/__version__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
__name__ = "papi_sdk"
2+
__version__ = "v1.0.2"

papi_sdk/api_v3.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
from typing import Tuple
1+
from sys import version_info
2+
from typing import Optional, Tuple
23

34
import requests
45
from requests.auth import HTTPBasicAuth
56

7+
from papi_sdk.__version__ import __name__, __version__
68
from papi_sdk.endpoints.endpoints import Endpoint
79
from papi_sdk.exceptions.base import InvalidAuthData
810
from papi_sdk.models.hotel_info import HotelInfoRequest, HotelInfoResponse
@@ -50,6 +52,10 @@
5052
)
5153
from papi_sdk.models.search.region.b2b import B2BRegionRequest, B2BRegionResponse
5254

55+
PAPI_SDK_VERSION = f"{__name__}/{__version__}"
56+
REQUESTS_VERSION = f"{requests.__name__}/{requests.__version__}"
57+
PYTHON_VERSION = f"python/{version_info.major}.{version_info.minor}"
58+
5359

5460
class APIv3:
5561
def __init__(self, key: str):
@@ -65,12 +71,30 @@ def _get_key_data(key: str) -> Tuple[str, str]:
6571
except ValueError:
6672
raise InvalidAuthData(key)
6773

74+
@staticmethod
75+
def _add_user_agent(requests_kwargs: Optional[dict]) -> dict:
76+
header_key = "headers"
77+
versions = f"{PAPI_SDK_VERSION} {REQUESTS_VERSION} ({PYTHON_VERSION})"
78+
user_agent = {"User-Agent": versions}
79+
80+
headers = requests_kwargs.get(header_key)
81+
if not headers:
82+
requests_kwargs[header_key] = user_agent
83+
return requests_kwargs
84+
85+
if "User-Agent" in headers:
86+
return requests_kwargs
87+
88+
requests_kwargs[header_key] = {**requests_kwargs[header_key], **user_agent}
89+
return requests_kwargs
90+
6891
def _get_request(
6992
self, endpoint: str, params: dict = None, **requests_kwargs
7093
) -> dict:
7194
"""
7295
Inner method for GET requests.
7396
"""
97+
requests_kwargs = self._add_user_agent(requests_kwargs)
7498
response = self.session.get(endpoint, params=params, **requests_kwargs)
7599
return response.json()
76100

@@ -80,6 +104,7 @@ def _post_request(
80104
"""
81105
Inner method for POST requests.
82106
"""
107+
requests_kwargs = self._add_user_agent(requests_kwargs)
83108
response = self.session.post(endpoint, json=json, **requests_kwargs)
84109
return response.json()
85110

@@ -225,7 +250,7 @@ def order_booking_finish_status(
225250
response = self._post_request(
226251
Endpoint.ORDER_BOOKING_FINISH_STATUS.value,
227252
data=data.json(),
228-
**requests_kwargs
253+
**requests_kwargs,
229254
)
230255
return HotelOrderBookingFinishStatusResponse(**response)
231256

papi_sdk/tests/test_base.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import unittest
2+
import uuid
23

34
from papi_sdk import APIv3
45

56

67
class BaseTest(unittest.TestCase):
7-
client = APIv3(key=f"1234:str(uuid.uuid4())")
8+
client = APIv3(key=f"1234:{str(uuid.uuid4())}")
89
status_ok = "ok"
910
status_error = "error"

0 commit comments

Comments
 (0)