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

59 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, util 

4from stripe.six.moves.urllib.parse import quote_plus 

5 

6 

7def nested_resource_class_methods( 

8 resource, path=None, operations=None, resource_plural=None 

9): 

10 if resource_plural is None: 

11 resource_plural = "%ss" % resource 

12 if path is None: 12 ↛ 14line 12 didn't jump to line 14, because the condition on line 12 was never false

13 path = resource_plural 

14 if operations is None: 14 ↛ 15line 14 didn't jump to line 15, because the condition on line 14 was never true

15 raise ValueError("operations list required") 

16 

17 def wrapper(cls): 

18 def nested_resource_url(cls, id, nested_id=None): 

19 url = "%s/%s/%s" % ( 

20 cls.class_url(), 

21 quote_plus(id), 

22 quote_plus(path), 

23 ) 

24 if nested_id is not None: 

25 url += "/%s" % quote_plus(nested_id) 

26 return url 

27 

28 resource_url_method = "%ss_url" % resource 

29 setattr(cls, resource_url_method, classmethod(nested_resource_url)) 

30 

31 def nested_resource_request( 

32 cls, 

33 method, 

34 url, 

35 api_key=None, 

36 idempotency_key=None, 

37 stripe_version=None, 

38 stripe_account=None, 

39 **params 

40 ): 

41 requestor = api_requestor.APIRequestor( 

42 api_key, api_version=stripe_version, account=stripe_account 

43 ) 

44 headers = util.populate_headers(idempotency_key) 

45 response, api_key = requestor.request(method, url, params, headers) 

46 return util.convert_to_stripe_object( 

47 response, api_key, stripe_version, stripe_account 

48 ) 

49 

50 resource_request_method = "%ss_request" % resource 

51 setattr( 

52 cls, resource_request_method, classmethod(nested_resource_request) 

53 ) 

54 

55 for operation in operations: 

56 if operation == "create": 

57 

58 def create_nested_resource(cls, id, **params): 

59 url = getattr(cls, resource_url_method)(id) 

60 return getattr(cls, resource_request_method)( 

61 "post", url, **params 

62 ) 

63 

64 create_method = "create_%s" % resource 

65 setattr( 

66 cls, create_method, classmethod(create_nested_resource) 

67 ) 

68 

69 elif operation == "retrieve": 

70 

71 def retrieve_nested_resource(cls, id, nested_id, **params): 

72 url = getattr(cls, resource_url_method)(id, nested_id) 

73 return getattr(cls, resource_request_method)( 

74 "get", url, **params 

75 ) 

76 

77 retrieve_method = "retrieve_%s" % resource 

78 setattr( 

79 cls, retrieve_method, classmethod(retrieve_nested_resource) 

80 ) 

81 

82 elif operation == "update": 

83 

84 def modify_nested_resource(cls, id, nested_id, **params): 

85 url = getattr(cls, resource_url_method)(id, nested_id) 

86 return getattr(cls, resource_request_method)( 

87 "post", url, **params 

88 ) 

89 

90 modify_method = "modify_%s" % resource 

91 setattr( 

92 cls, modify_method, classmethod(modify_nested_resource) 

93 ) 

94 

95 elif operation == "delete": 

96 

97 def delete_nested_resource(cls, id, nested_id, **params): 

98 url = getattr(cls, resource_url_method)(id, nested_id) 

99 return getattr(cls, resource_request_method)( 

100 "delete", url, **params 

101 ) 

102 

103 delete_method = "delete_%s" % resource 

104 setattr( 

105 cls, delete_method, classmethod(delete_nested_resource) 

106 ) 

107 

108 elif operation == "list": 108 ↛ 120line 108 didn't jump to line 120, because the condition on line 108 was never false

109 

110 def list_nested_resources(cls, id, **params): 

111 url = getattr(cls, resource_url_method)(id) 

112 return getattr(cls, resource_request_method)( 

113 "get", url, **params 

114 ) 

115 

116 list_method = "list_%s" % resource_plural 

117 setattr(cls, list_method, classmethod(list_nested_resources)) 

118 

119 else: 

120 raise ValueError("Unknown operation: %s" % operation) 

121 

122 return cls 

123 

124 return wrapper