Aazam Thakur
06/23/2023, 10:36 PMclass MailChimpStream(HttpStream, ABC):
primary_key = "id"
page_size = 1000
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.current_offset = 0
self.data_center = kwargs["authenticator"].data_center
@property
def url_base(self) -> str:
return f"https://{self.data_center}.<http://api.mailchimp.com/3.0/|api.mailchimp.com/3.0/>"
@property
def availability_strategy(self) -> Optional["AvailabilityStrategy"]:
return None
def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]:
decoded_response = response.json()
api_data = decoded_response[self.data_field]
if len(api_data) < self.page_size:
self.current_offset = 0
return None
else:
self.current_offset += self.page_size
return {"offset": self.current_offset}
def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]:
response_json = response.json()
yield from response_json[self.data_field]
class GetMemberInfo(MailChimpStream):
data_field = ""kapa.ai
06/23/2023, 10:36 PMkapa.ai
06/23/2023, 10:37 PMGetMemberInfo class to handle API responses without a data_field, you can override the next_page_token and parse_response methods in the GetMemberInfo class. Here's an example of how you can do this: python class GetMemberInfo(MailChimpStream): data_field = "" def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: decoded_response = response.json() if len(decoded_response) < self.page_size: self.current_offset = 0 return None else: self.current_offset += self.page_size return {"offset": self.current_offset} def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: response_json = response.json() yield from response_json In this example, the next_page_token and parse_response methods are modified to work with the API response directly, without using the data_field property. The next_page_token method checks the length of the decoded response, and the parse_response method yields items from the response JSON directly.Aazam Thakur
06/23/2023, 11:00 PMlambda req, res, state, _slice: self.parse_response(res, stream_slice=_slice, stream_state=state), stream_slice, stream_state\nTypeError: GetMemberInfo.parse_response() got an unexpected keyword argument 'stream_slice'\n", "failure_type": "system_error"}}}kapa.ai
06/23/2023, 11:00 PMkapa.ai
06/23/2023, 11:00 PMAazam Thakur
06/23/2023, 11:35 PMValueError: Unexpected type for data_or_message: <class 'str'>: id\n", "failure_type": "system_error"kapa.ai
06/23/2023, 11:35 PMkapa.ai
06/23/2023, 11:35 PMAazam Thakur
06/24/2023, 12:03 AMkapa.ai
06/24/2023, 12:03 AMkapa.ai
06/24/2023, 12:03 AM