Coverage for amazonorders/orders.py: 97.96%
49 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-16 15:31 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-16 15:31 +0000
1import datetime
2import logging
4from amazonorders.entity.order import Order
5from amazonorders.exception import AmazonOrdersError
6from amazonorders.session import BASE_URL
8__author__ = "Alex Laird"
9__copyright__ = "Copyright 2024, Alex Laird"
10__version__ = "0.0.5"
12logger = logging.getLogger(__name__)
15class AmazonOrders:
16 def __init__(self,
17 amazon_session,
18 debug=False,
19 print_output=False) -> None:
20 self.amazon_session = amazon_session
22 self.debug = debug
23 if self.debug:
24 logger.setLevel(logging.DEBUG)
25 self.print_output = print_output
27 def get_order_history(self,
28 year=datetime.date.today().year,
29 start_index=None,
30 full_details=False):
31 if not self.amazon_session.is_authenticated:
32 raise AmazonOrdersError("Call AmazonSession.login() to authenticate first.")
34 orders = []
35 next_page = "{}/your-orders/orders?timeFilter=year-{}{}".format(BASE_URL,
36 year,
37 "&startIndex={}".format(
38 start_index) if start_index else "")
39 while next_page:
40 self.amazon_session.get(next_page)
41 response_parsed = self.amazon_session.last_response_parsed
43 for order_tag in response_parsed.find_all("div", {"class": "order-card"}):
44 order = Order(order_tag)
46 if full_details:
47 self.amazon_session.get(order.order_details_link)
48 order_details_tag = self.amazon_session.last_response_parsed.find("div", id="orderDetails")
49 order = Order(order_details_tag, full_details=True, clone=order)
51 orders.append(order)
53 next_page = None
54 if not start_index:
55 try:
56 next_page = "{}{}".format(BASE_URL,
57 response_parsed.find("ul", {"class", "a-pagination"}).find(
58 "li", {"class": "a-last"}).find("a").attrs["href"])
59 except AttributeError:
60 logger.debug("No next page")
61 else:
62 logger.debug("start_index is given, not paging")
64 if self.print_output:
65 for order in orders:
66 print(order)
68 return orders
70 def get_order(self, order_id):
71 if not self.amazon_session.is_authenticated:
72 raise AmazonOrdersError("Call AmazonSession.login() to authenticate first.")
74 self.amazon_session.get("{}/gp/your-account/order-details?orderID={}".format(BASE_URL, order_id))
76 order_details_tag = self.amazon_session.last_response_parsed.find("div", id="orderDetails")
77 order = Order(order_details_tag, full_details=True)
79 if self.print_output:
80 print(order)
82 return order