Skip to content
Snippets Groups Projects
Commit f8cda1bf authored by Hugh Dickinson's avatar Hugh Dickinson
Browse files

Functionality to add shopping items to basket from IDA.

parent 2d135a3f
No related branches found
No related tags found
No related merge requests found
......@@ -36,9 +36,13 @@ class shopping_client:
self.connectors = connectors
self.basket = None
self.username = None
def get_basket(
self, convert_to_pandas: bool = False, reload: bool = False, filter_archives: bool = False
self,
convert_to_pandas: bool = False,
reload: bool = False,
filter_archives: bool = False,
) -> Union[list, pd.DataFrame, None]:
"""Retrieve the shopping basket for a user.
Prompts for access token if one was not supplied to constructor.
......@@ -87,6 +91,56 @@ class shopping_client:
return self.basket
def add_to_basket(self, items: list):
"""Add items to user's shopping basket.
Parameters
----------
items : list
List of objects, each containing the data for a single
shopping item. Objects should be JSON-serializable. Examples
include Python `dict`s or `list`s.
Returns
-------
bool
`True` if items were successfully added otherwise `False`.
"""
url = urllib.parse.urljoin(self.host, shopping_client.endpoint)
if self.username is None:
# Retrieve username
response = requests.get(url, headers=self._request_header())
if response.ok:
self.username = json.loads(response.content)["results"][0]["user_name"]
else:
warn(
f"Unable to retrieve username from {self.host}; is your key valid?"
)
return False, response
# PATCH not working properly need to add existing basket items
payload = {
"shopping_cart": [
json.loads(item["item_data"]) for item in self.get_basket()
]
+ items
}
# trailing "/" required for PATCH
url = urllib.parse.urljoin(url, self.username) + "/"
response = requests.patch(url, json=payload, headers=self._request_header())
if response.ok:
print(
f"{len(items)} item{'s' if len(items) > 1 else ''} successfully added."
)
return True
else:
warn(f"Unable to add data to basket at {self.host}; is your key valid?")
return False, response
def _request_header(self):
while self.token is None:
self._get_token()
......@@ -102,12 +156,14 @@ class shopping_client:
item_data = json.loads(item["item_data"])
for connector in self.connectors:
if "archive" in item_data and item_data["archive"] == connector.archive:
if (
"archive" in item_data
and item_data["archive"] == connector.archive
):
filtered_items.append(item)
return filtered_items
def _basket_to_pandas(self):
if len(self.connectors):
converted_basket = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment