Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/stripe/api_resources/search_result_object.py: 32%

46 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1from __future__ import absolute_import, division, print_function 

2 

3from stripe import api_requestor, six, util 

4from stripe.stripe_object import StripeObject 

5 

6 

7class SearchResultObject(StripeObject): 

8 OBJECT_NAME = "search_result" 

9 

10 def search( 

11 self, api_key=None, stripe_version=None, stripe_account=None, **params 

12 ): 

13 stripe_object = self._request( 

14 "get", 

15 self.get("url"), 

16 api_key=api_key, 

17 stripe_version=stripe_version, 

18 stripe_account=stripe_account, 

19 **params 

20 ) 

21 stripe_object._retrieve_params = params 

22 return stripe_object 

23 

24 def _request( 

25 self, 

26 method_, 

27 url_, 

28 api_key=None, 

29 idempotency_key=None, 

30 stripe_version=None, 

31 stripe_account=None, 

32 **params 

33 ): 

34 api_key = api_key or self.api_key 

35 stripe_version = stripe_version or self.stripe_version 

36 stripe_account = stripe_account or self.stripe_account 

37 

38 requestor = api_requestor.APIRequestor( 

39 api_key, api_version=stripe_version, account=stripe_account 

40 ) 

41 headers = util.populate_headers(idempotency_key) 

42 response, api_key = requestor.request(method_, url_, params, headers) 

43 stripe_object = util.convert_to_stripe_object( 

44 response, api_key, stripe_version, stripe_account 

45 ) 

46 return stripe_object 

47 

48 def __getitem__(self, k): 

49 if isinstance(k, six.string_types): 

50 return super(SearchResultObject, self).__getitem__(k) 

51 else: 

52 raise KeyError( 

53 "You tried to access the %s index, but SearchResultObject types " 

54 "only support string keys. (HINT: Search calls return an object " 

55 "with a 'data' (which is the data array). You likely want to " 

56 "call .data[%s])" % (repr(k), repr(k)) 

57 ) 

58 

59 def __iter__(self): 

60 return getattr(self, "data", []).__iter__() 

61 

62 def __len__(self): 

63 return getattr(self, "data", []).__len__() 

64 

65 def auto_paging_iter(self): 

66 page = self 

67 

68 while True: 

69 for item in page: 

70 yield item 

71 page = page.next_search_result_page() 

72 

73 if page.is_empty: 

74 break 

75 

76 @classmethod 

77 def empty_search_result( 

78 cls, api_key=None, stripe_version=None, stripe_account=None 

79 ): 

80 return cls.construct_from( 

81 {"data": [], "has_more": False, "next_page": None}, 

82 key=api_key, 

83 stripe_version=stripe_version, 

84 stripe_account=stripe_account, 

85 last_response=None, 

86 ) 

87 

88 @property 

89 def is_empty(self): 

90 return not self.data 

91 

92 def next_search_result_page( 

93 self, api_key=None, stripe_version=None, stripe_account=None, **params 

94 ): 

95 if not self.has_more: 

96 return self.empty_search_result( 

97 api_key=api_key, 

98 stripe_version=stripe_version, 

99 stripe_account=stripe_account, 

100 ) 

101 

102 params_with_filters = self._retrieve_params.copy() 

103 params_with_filters.update({"page": self.next_page}) 

104 params_with_filters.update(params) 

105 

106 return self.search( 

107 api_key=api_key, 

108 stripe_version=stripe_version, 

109 stripe_account=stripe_account, 

110 **params_with_filters 

111 )