Skip to content

Commit d952bce

Browse files
committed
add pagination for fulfillment line items
1 parent 859af9b commit d952bce

File tree

1 file changed

+79
-2
lines changed

1 file changed

+79
-2
lines changed

tap_shopify/streams/fulfillment_orders.py

Lines changed: 79 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,72 @@ def transform_childitems(self, data, parent_id, key, next_page_key):
6565

6666
return child_records
6767

68+
def get_fulfillment_line_items(self, fulfillment_id, next_page=None):
69+
"""
70+
Fetch all fulfillment line items for a given fulfillment ID.
71+
"""
72+
fulfillment_line_items = []
73+
query = """
74+
query FulfillmentLineItems($fulfillmentId: ID!, $next_page: String) {
75+
fulfillment(id: $fulfillmentId) {
76+
fulfillmentLineItems(first: 1, after: $next_page) {
77+
pageInfo {
78+
hasNextPage
79+
endCursor
80+
}
81+
nodes {
82+
id
83+
quantity
84+
originalTotalSet {
85+
presentmentMoney {
86+
amount
87+
currencyCode
88+
}
89+
shopMoney {
90+
amount
91+
currencyCode
92+
}
93+
}
94+
discountedTotalSet {
95+
presentmentMoney {
96+
amount
97+
currencyCode
98+
}
99+
shopMoney {
100+
amount
101+
currencyCode
102+
}
103+
}
104+
lineItem {
105+
id
106+
}
107+
}
108+
}
109+
}
110+
}
111+
"""
112+
113+
params = {
114+
"fulfillmentId": fulfillment_id,
115+
}
116+
if next_page:
117+
params["next_page"] = next_page
118+
119+
while True:
120+
response = self.call_api(params, query=query, data_key="fulfillment")
121+
fulfillment_line_items.extend(
122+
node for item in response.get("fulfillmentLineItems", {}).get("nodes", [])
123+
if (node := item)
124+
)
125+
126+
page_info = response.get("fulfillmentLineItems", {}).get("pageInfo", {})
127+
if not page_info.get("hasNextPage"):
128+
break
129+
130+
params["next_page"] = page_info.get("endCursor")
131+
132+
return fulfillment_line_items
133+
68134
def transform_object(self, obj):
69135
"""
70136
Transforms a collection object.
@@ -98,8 +164,16 @@ def transform_object(self, obj):
98164
)
99165
for item in obj["fulfillments"]:
100166
item["fulfillmentOrders"] = item["fulfillmentOrders"]["nodes"]
101-
item["fulfillmentLineItems"] = item["fulfillmentLineItems"]["nodes"]
102167
item["events"] = item["events"]["nodes"]
168+
initial_nodes = item["fulfillmentLineItems"]["nodes"]
169+
if item["fulfillmentLineItems"]["pageInfo"]["hasNextPage"]:
170+
more_nodes = self.get_fulfillment_line_items(
171+
fulfillment_id=item["id"],
172+
next_page = item["fulfillmentLineItems"]["pageInfo"]["endCursor"]
173+
)
174+
item["fulfillmentLineItems"] = more_nodes + initial_nodes
175+
else:
176+
item["fulfillmentLineItems"] = initial_nodes
103177

104178
if obj.get("fulfillmentOrdersForMerge"):
105179
obj["fulfillmentOrdersForMerge"] = obj["fulfillmentOrdersForMerge"]["nodes"]
@@ -286,6 +360,10 @@ def get_query(self):
286360
}
287361
}
288362
fulfillmentLineItems(first: 3) {
363+
pageInfo {
364+
hasNextPage
365+
endCursor
366+
}
289367
nodes {
290368
id
291369
quantity
@@ -313,7 +391,6 @@ def get_query(self):
313391
id
314392
}
315393
}
316-
317394
}
318395
legacyResourceId
319396
order {

0 commit comments

Comments
 (0)