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

1import datetime 

2 

3from amazonorders.entity.order import Order 

4from amazonorders.exception import AmazonOrdersError 

5from amazonorders.session import BASE_URL 

6 

7__author__ = "Alex Laird" 

8__copyright__ = "Copyright 2024, Alex Laird" 

9__version__ = "0.0.3" 

10 

11 

12class AmazonOrders: 

13 def __init__(self, 

14 amazon_session, 

15 debug=False, 

16 print_output=False) -> None: 

17 self.amazon_session = amazon_session 

18 

19 self.debug = debug 

20 self.print_output = print_output 

21 

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.") 

28 

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 

38 

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) 

43 

44 for order_tag in response_parsed.find_all("div", {"class": "order-card"}): 

45 order = Order(order_tag) 

46 

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) 

51 

52 orders.append(order) 

53 

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 

62 

63 if self.print_output: 

64 for order in orders: 

65 print(order) 

66 

67 return orders 

68 

69 def get_order(self, order_id): 

70 if not self.amazon_session.is_authenticated: 

71 raise AmazonOrdersError("Call AmazonSession.login() to authenticate first.") 

72 

73 self.amazon_session.get("{}/gp/your-account/order-details?orderID={}".format(BASE_URL, order_id)) 

74 

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) 

79 

80 order_details_tag = self.amazon_session.last_response_parsed.find("div", id="orderDetails") 

81 order = Order(order_details_tag, full_details=True) 

82 

83 if self.print_output: 

84 print(order) 

85 

86 return order