update: bump 'common' version 0.1.20
This commit is contained in:
@@ -36,15 +36,15 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
unique = identity()
|
unique = identity()
|
||||||
parameters = vars(args)
|
parameters = vars(args)
|
||||||
http = PoolManager()
|
http = PoolManager()
|
||||||
sp = ServiceProvider.default()
|
sp = ServiceProvider(ServiceProvider.Options())
|
||||||
|
|
||||||
try:
|
try:
|
||||||
sp.set('context', lambda: { 'parameters': parameters })
|
sp.set('context', lambda: { 'parameters': parameters })
|
||||||
driver.get(sp.run())
|
driver.get(sp.run())
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.critical('Unable to load starup page', exc_info=e)
|
logger.critical('Unable to load starup page', exc_info=e)
|
||||||
return 2
|
return 2
|
||||||
|
|
||||||
try:
|
try:
|
||||||
driver.switch_to.new_window('tab')
|
driver.switch_to.new_window('tab')
|
||||||
driver.set_page_load_timeout(parameters['timeout'])
|
driver.set_page_load_timeout(parameters['timeout'])
|
||||||
@@ -52,14 +52,14 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
except TimeoutException:
|
except TimeoutException:
|
||||||
logger.warning('Timeout')
|
logger.warning('Timeout')
|
||||||
driver.execute_script("window.stop();")
|
driver.execute_script("window.stop();")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
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'), watch=False)
|
||||||
account = str(parameters['account'])
|
account = str(parameters['account'])
|
||||||
password = str(parameters['password'])
|
password = str(parameters['password'])
|
||||||
logger.info('Logging in as %s (%s)', account.split('@', 1).pop(0).capitalize(), account)
|
logger.info('Logging in as %s (%s)', account.split('@', 1).pop(0).capitalize(), account)
|
||||||
|
|
||||||
locate("input.account").send_keys(account)
|
locate("input.account").send_keys(account)
|
||||||
locate("input#password").send_keys(password)
|
locate("input#password").send_keys(password)
|
||||||
click("input.agree-checkbox")
|
click("input.agree-checkbox")
|
||||||
@@ -68,7 +68,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.critical('Unable to login to %s', parameters['url'], exc_info=e)
|
logger.critical('Unable to login to %s', parameters['url'], exc_info=e)
|
||||||
return 3
|
return 3
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
locate("#container", wait=False)
|
locate("#container", wait=False)
|
||||||
@@ -78,7 +78,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
break
|
break
|
||||||
except:
|
except:
|
||||||
sleep(3)
|
sleep(3)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
if not (buttons := driver.find_elements(By.CSS_SELECTOR, ".export-actions .okki-btn-primary")): raise ValueError()
|
if not (buttons := driver.find_elements(By.CSS_SELECTOR, ".export-actions .okki-btn-primary")): raise ValueError()
|
||||||
@@ -86,7 +86,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
break
|
break
|
||||||
except:
|
except:
|
||||||
sleep(1)
|
sleep(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
verified = False
|
verified = False
|
||||||
button = locate(".filter-actions .okki-btn-primary")
|
button = locate(".filter-actions .okki-btn-primary")
|
||||||
@@ -96,7 +96,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.critical("Error while setting up button listeners", exc_info=e)
|
logger.critical("Error while setting up button listeners", exc_info=e)
|
||||||
return 4
|
return 4
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
for index in count(0):
|
for index in count(0):
|
||||||
@@ -111,7 +111,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
except:
|
except:
|
||||||
sleep(1)
|
sleep(1)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not verified:
|
if not verified:
|
||||||
try:
|
try:
|
||||||
locate(".safe-verify-dialog:not([style*='display: none']) .mm-modal-content .mm-modal-body input").send_keys(parameters['password'])
|
locate(".safe-verify-dialog:not([style*='display: none']) .mm-modal-content .mm-modal-body input").send_keys(parameters['password'])
|
||||||
@@ -119,7 +119,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
verified = True
|
verified = True
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
sleep(1)
|
sleep(1)
|
||||||
@@ -128,12 +128,12 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
if (filename := cell.text) != '--': break
|
if (filename := cell.text) != '--': break
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
logger.info('New task: %s', filename)
|
logger.info('New task: %s', filename)
|
||||||
download = locate(".business-export-wrap section:nth-child(3) table tbody tr:first-child td:last-child a")
|
download = locate(".business-export-wrap section:nth-child(3) table tbody tr:first-child td:last-child a")
|
||||||
href = download.get_attribute('href')
|
href = download.get_attribute('href')
|
||||||
|
|
||||||
response = http.request("GET", href)
|
response = http.request("GET", href)
|
||||||
text = response.data.decode(parameters['encoding']).splitlines()
|
text = response.data.decode(parameters['encoding']).splitlines()
|
||||||
data = csv.reader(text)
|
data = csv.reader(text)
|
||||||
@@ -141,7 +141,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.critical('Unable to load input data', exc_info=e)
|
logger.critical('Unable to load input data', exc_info=e)
|
||||||
return 6
|
return 6
|
||||||
|
|
||||||
try:
|
try:
|
||||||
file = Path('template.xlsx').resolve()
|
file = Path('template.xlsx').resolve()
|
||||||
template = openpyxl.load_workbook(file)
|
template = openpyxl.load_workbook(file)
|
||||||
@@ -151,42 +151,42 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.critical('Unable to load template excel', exc_info=e)
|
logger.critical('Unable to load template excel', exc_info=e)
|
||||||
return 7
|
return 7
|
||||||
|
|
||||||
def preprocess(data: str):
|
def preprocess(data: str):
|
||||||
try: return float(data)
|
try: return float(data)
|
||||||
except ValueError: pass
|
except ValueError: pass
|
||||||
|
|
||||||
try: return int(data)
|
try: return int(data)
|
||||||
except ValueError: pass
|
except ValueError: pass
|
||||||
|
|
||||||
return data.lstrip("'")
|
return data.lstrip("'")
|
||||||
|
|
||||||
for row in data:
|
for row in data:
|
||||||
for index, name in enumerate(header):
|
for index, name in enumerate(header):
|
||||||
names = template.defined_names
|
names = template.defined_names
|
||||||
if name not in names: continue
|
if name not in names: continue
|
||||||
|
|
||||||
for _, coord in names[name].destinations:
|
for _, coord in names[name].destinations:
|
||||||
value = preprocess(row[index])
|
value = preprocess(row[index])
|
||||||
source[coord] = value
|
source[coord] = value
|
||||||
|
|
||||||
sheet = template.copy_worksheet(source)
|
sheet = template.copy_worksheet(source)
|
||||||
sheet.title = "COPY"
|
sheet.title = "COPY"
|
||||||
logger.debug('%s', sheet.title)
|
logger.debug('%s', sheet.title)
|
||||||
|
|
||||||
if not len(template.worksheets) > 1:
|
if not len(template.worksheets) > 1:
|
||||||
logger.error('Invalid input')
|
logger.error('Invalid input')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
template.remove(source)
|
template.remove(source)
|
||||||
template.save(output)
|
template.save(output)
|
||||||
|
|
||||||
data = base64.b64encode(output.getbuffer())
|
data = base64.b64encode(output.getbuffer())
|
||||||
text = data.decode('ascii')
|
text = data.decode('ascii')
|
||||||
mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
||||||
href = f"data:{mime};base64,{text}"
|
href = f"data:{mime};base64,{text}"
|
||||||
filename = filename.replace('.csv', '.xlsx')
|
filename = filename.replace('.csv', '.xlsx')
|
||||||
|
|
||||||
driver.switch_to.new_window('tab')
|
driver.switch_to.new_window('tab')
|
||||||
driver.execute_script(
|
driver.execute_script(
|
||||||
"""
|
"""
|
||||||
@@ -198,7 +198,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
filename,
|
filename,
|
||||||
href
|
href
|
||||||
)
|
)
|
||||||
|
|
||||||
if parameters['open']:
|
if parameters['open']:
|
||||||
try:
|
try:
|
||||||
path = Path(parameters['directory']) / filename
|
path = Path(parameters['directory']) / filename
|
||||||
@@ -206,7 +206,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
Popen(['start', str(path)], shell=True)
|
Popen(['start', str(path)], shell=True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning('Unable to open exported excel file at %s', str(path), exc_info=e)
|
logger.warning('Unable to open exported excel file at %s', str(path), exc_info=e)
|
||||||
|
|
||||||
driver.close()
|
driver.close()
|
||||||
driver.switch_to.window(driver.window_handles[1])
|
driver.switch_to.window(driver.window_handles[1])
|
||||||
logger.info('Done')
|
logger.info('Done')
|
||||||
@@ -217,7 +217,7 @@ if __name__ == '__main__':
|
|||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
level = logging.getLevelNamesMapping().get(args.log_level, 'INFO')
|
level = logging.getLevelNamesMapping().get(args.log_level, 'INFO')
|
||||||
logger.setLevel(level)
|
logger.setLevel(level)
|
||||||
|
|
||||||
opts = Options()
|
opts = Options()
|
||||||
opts.enable_downloads = True
|
opts.enable_downloads = True
|
||||||
opts.add_argument('--deny-permission-prompts')
|
opts.add_argument('--deny-permission-prompts')
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user