diff options
| -rwxr-xr-x | fixco_custom/models/detail_order.py | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/fixco_custom/models/detail_order.py b/fixco_custom/models/detail_order.py index 1c4c983..674f11a 100755 --- a/fixco_custom/models/detail_order.py +++ b/fixco_custom/models/detail_order.py @@ -139,6 +139,27 @@ class DetailOrder(models.Model): except Exception as e: raise UserError(_("Error extracting order ID: %s") % str(e)) + # def process_queue_item_detail(self, limit=100): + # domain = [ + # ('execute_status', '=', 'detail_order'), + # '!', + # '|', + # ('json_ginee', 'like', '"orderStatus": "PENDING_PAYMENT"'), + # ('json_ginee', 'like', '"channel":"BLIBLI_ID"'), + # ] + + # records = self.search(domain, order='create_date asc', limit=limit) + + # for i, rec in enumerate(records, 1): + # try: + # rec.execute_queue_detail() + # if i % 10 == 0: + # self.env.cr.commit() + # except Exception as e: + # _logger.error("Failed to process record %s: %s", rec.id, str(e)) + # self.env.cr.rollback() + + # self.env.cr.commit() def process_queue_item_detail(self, limit=100): domain = [ ('execute_status', '=', 'detail_order'), @@ -153,10 +174,26 @@ class DetailOrder(models.Model): for i, rec in enumerate(records, 1): try: rec.execute_queue_detail() + + # ⏳ throttle API + time.sleep(0.8) + if i % 10 == 0: self.env.cr.commit() + except Exception as e: - _logger.error("Failed to process record %s: %s", rec.id, str(e)) + msg = str(e) + + # 🎯 khusus rate limit + if '429' in msg or 'SERVICE_BUSY' in msg: + _logger.warning( + "Rate limit hit. Sleep & retry later. Record ID %s", rec.id + ) + self.env.cr.rollback() + time.sleep(5 + random.uniform(1, 3)) + break # STOP loop, jangan maksa + + _logger.error("Failed record %s: %s", rec.id, msg) self.env.cr.rollback() self.env.cr.commit() |
