Coverage for amazonorders/orders.py: 91.49%
47 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-14 16:09 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-14 16:09 +0000
1import datetime
3from amazonorders.entity.order import Order
4from amazonorders.exception import AmazonOrdersError
5from amazonorders.session import BASE_URL
7__author__ = "Alex Laird"
8__copyright__ = "Copyright 2024, Alex Laird"
9__version__ = "0.0.3"
12class AmazonOrders:
13 def __init__(self,
14 amazon_session,
15 debug=False,
16 print_output=False) -> None:
17 self.amazon_session = amazon_session
19 self.debug = debug
20 self.print_output = print_output
22 def get_order_history(self,
23 year=datetime.date.today().year,
24 start_index=None,
25 full_details=False):
26 if not self.amazon_session.is_authenticated:
27 raise AmazonOrdersError("Call AmazonSession.login() to authenticate first.")
29 orders = []
30 next_page = "{}/your-orders/orders?timeFilter=year-{}{}".format(BASE_URL,
31 year,
32 "&startIndex={}".format(
33 start_index) if start_index else "")
34 while next_page:
35 self.amazon_session.get(next_page)
36 response = self.amazon_session.last_response
37 response_parsed = self.amazon_session.last_response_parsed
39 if self.debug:
40 page_name = self.amazon_session._get_page_from_url(response.url)
41 with open(page_name, "w") as html_file:
42 html_file.write(response.text)
44 for order_tag in response_parsed.find_all("div", {"class": "order-card"}):
45 order = Order(order_tag)
47 if full_details:
48 self.amazon_session.get(order.order_details_link)
49 order_details_tag = self.amazon_session.last_response_parsed.find("div", id="orderDetails")
50 order = Order(order_details_tag, full_details=True, clone=order)
52 orders.append(order)
54 next_page = None
55 if not start_index:
56 try:
57 next_page = "{}{}".format(BASE_URL,
58 response_parsed.find("ul", {"class", "a-pagination"}).find(
59 "li", {"class": "a-last"}).find("a").attrs["href"])
60 except AttributeError:
61 pass
63 if self.print_output:
64 for order in orders:
65 print(order)
67 return orders
69 def get_order(self, order_id):
70 if not self.amazon_session.is_authenticated:
71 raise AmazonOrdersError("Call AmazonSession.login() to authenticate first.")
73 self.amazon_session.get("{}/gp/your-account/order-details?orderID={}".format(BASE_URL, order_id))
75 if self.debug:
76 page_name = self.amazon_session._get_page_from_url(self.amazon_session.last_response.url)
77 with open(page_name, "w") as html_file:
78 html_file.write(self.amazon_session.last_response.text)
80 order_details_tag = self.amazon_session.last_response_parsed.find("div", id="orderDetails")
81 order = Order(order_details_tag, full_details=True)
83 if self.print_output:
84 print(order)
86 return order