Compare commits

..
7 Commits
Author SHA1 Message Date
Break27 123df61930 fix: clearer error reporting 2026-08-21 17:15:58 +08:00
Break27 83a3d9a10c fix: clearer error reporting 2026-08-21 17:02:06 +08:00
Break27 7d670eee21 fix: clearer error reporting 2026-08-21 16:55:06 +08:00
Break27 b682211d22 fix: crm web frontend breaking update 2026-08-21 15:55:02 +08:00
Break27 f8c0f7280e fix: indentation 2026-08-14 14:13:22 +08:00
Break27 c326df934e update: bump 'common' version to 0.1.21 2026-08-14 14:10:45 +08:00
Break27 87c2632909 fix: waiting for spins 2026-08-14 14:08:54 +08:00
2 changed files with 19 additions and 8 deletions
+17 -6
View File
@@ -116,7 +116,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
driver.execute_script("window.stop();") driver.execute_script("window.stop();")
setup(driver, parameters) setup(driver, parameters)
until(lambda x: 'loginProgress' in x.find_element(By.TAG_NAME, "body").get_attribute('class'), watch=False) until(lambda x: 'loginProgress' in x.find_element(By.TAG_NAME, "body").get_attribute('class'))
logger.info('Waiting for authentication...') logger.info('Waiting for authentication...')
if (account := parameters['account']) and (password := parameters['password']): if (account := parameters['account']) and (password := parameters['password']):
@@ -181,7 +181,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
sleep(parameters['interval']) sleep(parameters['interval'])
file = Path(parameters['directory']).joinpath(filename) file = Path(parameters['directory']).joinpath(filename)
until(lambda _: file.exists(), watch=False) until(lambda _: file.exists())
p = ProductInfo(file) p = ProductInfo(file)
driver.close() driver.close()
driver.switch_to.window(driver.window_handles[0]) driver.switch_to.window(driver.window_handles[0])
@@ -211,6 +211,11 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
@classmethod @classmethod
def perform(cls): def perform(cls):
if status == Status.RUNNING: if status == Status.RUNNING:
try:
if driver.find_elements(By.CSS_SELECTOR, ".okki-spin"):
sleep(parameters['interval'])
return True
except: pass
t1.start() t1.start()
return False return False
@@ -257,6 +262,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
profile = None profile = None
progress = { 'task': '' } progress = { 'task': '' }
selection = 0 selection = 0
errors = set()
sp.add(pairs=[ (k.lower(), v) for k, v in flow ]) sp.add(pairs=[ (k.lower(), v) for k, v in flow ])
sp.set('actions', lambda: flow.capabilities()) sp.set('actions', lambda: flow.capabilities())
@@ -275,6 +281,8 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
name = options.pop('profile') name = options.pop('profile')
profile = next(filter(lambda o: o.name == name, profiles)) profile = next(filter(lambda o: o.name == name, profiles))
except (IndexError, KeyError): except (IndexError, KeyError):
logger.error('Operation failed:\n\n%s' % ', '.join(errors)) if errors else None
errors.clear()
logger.info('Done') logger.info('Done')
status = Status.READY status = Status.READY
continue continue
@@ -326,6 +334,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
if len(data) == 0: if len(data) == 0:
logger.warning('Server returned an empty response') logger.warning('Server returned an empty response')
errors.add(profile.name)
continue continue
logger.info('Initializing Workbook...') logger.info('Initializing Workbook...')
@@ -453,6 +462,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
if sheet.max_row < 2: if sheet.max_row < 2:
logger.warning("No data; skipping") logger.warning("No data; skipping")
errors.add(profile.name)
continue continue
try: try:
@@ -480,9 +490,9 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
driver.get(WEBURL % 'order/importOrder') driver.get(WEBURL % 'order/importOrder')
click(".product-import-img-box .import-img-radio:nth-child(2) .mm-radio-group > label:nth-child(2) .mm-radio-input", condition=None) click(".product-import-img-box .import-img-radio:nth-child(2) .mm-radio-group > label:nth-child(2) .mm-radio-input", condition=None)
click(".product-import-img-box .mm-selector-rendered") click(".import-order-item .okki-select")
click(".mm-outside.mm-select-dropdown ul li:nth-child(%d) span" % (1 if options.get('draft') else 6)) click(".okki-select-dropdown .rc-virtual-list-holder-inner > div:nth-child(%d)" % (1 if options.get('draft') else 6))
locate(".big-file-upload input", wait=False).send_keys(str(file)) locate(".import-order-item .big-file-upload input", wait=False).send_keys(str(file))
click(".product-import-img-footer button") click(".product-import-img-footer button")
logger.info('Done') logger.info('Done')
except Skip: except Skip:
@@ -512,7 +522,8 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
flow.react(Sleep) flow.react(Sleep)
if ok is None: if ok is None:
logger.warning('Nothing to do; skipping') logger.warning('Data import failed completely; skipping')
errors.add(profile.name)
continue continue
click(ok, condition=None) click(ok, condition=None)
BIN
View File
Binary file not shown.