fix: potential errors when fetching response status in invoice processing

This commit is contained in:
2026-07-31 10:51:17 +08:00
parent cdd4ae9083
commit fd7289f589
+30 -26
View File
@@ -382,16 +382,16 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
if (category := categories.get(o := item['category_id'])) is None: if (category := categories.get(o := item['category_id'])) is None:
if 'error' in (category := fetch(f'{base}/categories/{o}.json?api_token={profile.token}')): if 'error' in (category := fetch(f'{base}/categories/{o}.json?api_token={profile.token}')):
error = category['error'] error = dict.get(category, 'error')
code = category['code'] response = dict.get(category, 'status')
logger.warning("Error while fetching field 'category' (code: %s, message: %s); skipping", code, error) logger.warning("Error while fetching field 'category' (status: %s, message: %s); skipping", response, error)
continue continue
if (client := clients.get(o := item['client_id'])) is None: if (client := clients.get(o := item['client_id'])) is None:
if 'error' in (client := fetch(f'{base}/clients/{o}.json?api_token={profile.token}')): if 'error' in (client := fetch(f'{base}/clients/{o}.json?api_token={profile.token}')):
error = client['error'] error = dict.get(category, 'error')
code = client['code'] response = dict.get(category, 'status')
logger.warning("Error while fetching field 'client' (code: %s, message: %s); skipping", code, error) logger.warning("Error while fetching field 'client' (status: %s, message: %s); skipping", response, error)
continue continue
identity = client['shortcut'] if client['company'] else profile.person identity = client['shortcut'] if client['company'] else profile.person
@@ -446,6 +446,10 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
status = Status.STANDBY status = Status.STANDBY
continue continue
if sheet.max_row < 2:
logger.warning("No data; skipping")
continue
try: try:
filename = f'Order-Import-{profile.name}-{datetime.now().strftime('%Y%m%d-%H%M%S-%f')}.xlsx' filename = f'Order-Import-{profile.name}-{datetime.now().strftime('%Y%m%d-%H%M%S-%f')}.xlsx'
file = Path(parameters['directory']).joinpath(filename) file = Path(parameters['directory']).joinpath(filename)
@@ -475,25 +479,6 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
click(".mm-outside.mm-select-dropdown ul li:nth-child(%d) span" % (1 if options.get('draft') else 6)) click(".mm-outside.mm-select-dropdown ul li:nth-child(%d) span" % (1 if options.get('draft') else 6))
locate(".big-file-upload input", wait=False).send_keys(str(file)) locate(".big-file-upload input", wait=False).send_keys(str(file))
click(".product-import-img-footer button") click(".product-import-img-footer button")
while not flow.react(Wait, Sleep):
try:
err = locate(".mm-tbody table tbody tr:nth-child(1) td:nth-child(5) .okki-space-item:nth-child(1) button", wait=False)
ok = locate(".mm-tbody table tbody tr:nth-child(1) td:nth-child(3) a", wait=False)
break
except: pass
try: click(".product-import-img-footer button.mm-button__primary", wait=False)
except: pass
try: click(".list-header-wrap button", wait=False)
except: pass
if err.get_attribute('disabled') is None:
click(err, condition=None)
logger.warning('Incomplete import detected; downloading 1 related document')
flow.react(Sleep)
click(ok, condition=None)
flow.react(Sleep)
logger.info('Done') logger.info('Done')
except Skip: except Skip:
pass pass
@@ -504,6 +489,25 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
status = Status.STANDBY status = Status.STANDBY
continue continue
while not flow.react(Wait, Sleep):
try:
err = locate(".mm-tbody table tbody tr:nth-child(1) td:nth-child(5) .okki-space-item:nth-child(1) button", wait=False)
break
except: pass
try: click(".product-import-img-footer button.mm-button__primary", wait=False)
except: pass
try: click(".list-header-wrap button", wait=False)
except: pass
if err.get_attribute('disabled') is None:
click(err, condition=None)
logger.warning('Incomplete import detected; downloading 1 related document')
flow.react(Sleep)
try: click(".mm-tbody table tbody tr:nth-child(1) td:nth-child(3) a", wait=False)
except: continue
flow.react(Sleep)
class Parse: class Parse:
def __init__(self, url: str): def __init__(self, url: str):
from urllib.parse import urlsplit, parse_qs from urllib.parse import urlsplit, parse_qs
@@ -640,7 +644,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
try: try:
flow.react(Wait) flow.react(Wait)
label = locate("label.paas-form-item-label") label = locate("label.paas-form-item-label")
dropdown = locate("#rc_select_1") dropdown = locate("label.paas-form-item-label[title='商机'] + div input")
for iteration in count(1): for iteration in count(1):
dropdown.click() dropdown.click()