Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Module can be used for creation and/or uploading both pixls and piexpert designs in all available languages
- """
- import json
- import os
- import argparse
- import time
- import traceback
- import Locators
- from selenium import webdriver
- from selenium.webdriver.common.by import By
- from webfeatures import set_up
- from webfeatures import get_elem_or_null
- from webfeatures import create_piexpert
- from webfeatures import delete_all_designs
- from webfeatures import wait_for_loading
- from webfeatures import time_string
- from webfeatures import login
- from webfeatures import click
- from webfeatures import hover_element
- __author__ = 'achubarov'
- def download_and_rename(wdriver, directory, tab_name, language, script):
- """
- Download and rename files, using js-script from design page
- :param wdriver: webdriver
- :param directory: directory to download to
- :param tab_name: name of tab to download from
- :param language: current piexpert language
- :param script: script to execute
- """
- # get current number of files in directory
- files_num = len(os.listdir(directory))
- # execute script
- wdriver.execute_script(script)
- # wait for downloading starts
- t1 = time.time()
- while len(os.listdir(directory)) - files_num != 2 and time.time() - t1 < 5.0:
- continue
- # wait for downloading finish
- last = '.part'
- while ".part" in last:
- try:
- files = [os.path.join(directory, file) for file in os.listdir(directory)]
- files.sort(key=os.path.getmtime, reverse=True)
- last = os.path.join(directory, files[0])
- time.sleep(0.1)
- except FileNotFoundError:
- break
- time.sleep(1)
- files = [os.path.join(directory, file) for file in os.listdir(directory)]
- files.sort(key=os.path.getmtime, reverse=True)
- last = os.path.join(directory, files[0])
- # rename downloaded file
- #new_name = os.path.join(directory, '_'.join([tab_name, language, last.split('\\')[-1]]))
- new_name = os.path.join(directory, '_'.join([last.split('\\')[-1], tab[key], language]))
- try:
- os.rename(last, new_name)
- except FileExistsError:
- print("error on rename{file}".format(file=new_name))
- os.rename(last, new_name + '1')
- if __name__ == '__main__':
- # Parsing JSON configuration file
- json_file = r'create-all-reports-config.json'
- try:
- with open(json_file) as file:
- json_data = json.load(file)
- except FileNotFoundError:
- print("JSON file wasn't found on specified location")
- exit(-1)
- default_site = json_data["url"]
- default_user = json_data["user"]["login"]
- default_password = json_data["user"]["password"]
- default_report = json_data["reportDirectoryPath"]
- default_download = json_data["downloadDirectoryPath"]
- default_fp = json_data["firefoxProfile"]
- default_languages = json_data["languages"]
- # if anywhere (in JSON or in CLI) boolean is True -- it will results as true for script
- # Possible CL arguments for parser
- parser = argparse.ArgumentParser(add_help=True,
- description='Arguments for script')
- parser.add_argument('-s', '--site',
- default=default_site,
- type=str,
- help='Address to log in')
- parser.add_argument('-u', '--user',
- default=default_user,
- type=str,
- help='User for log in')
- parser.add_argument('-p', '--password',
- default=default_password,
- type=str,
- help='Password for log in')
- parser.add_argument('--download-dir',
- default=default_download,
- type=str,
- help='Download directory (full path only)')
- parser.add_argument('--report-dir',
- default=default_report,
- type=str,
- help='Report directory (full path only)')
- parser.add_argument('--ff-profile',
- default=default_fp,
- type=str,
- action="store",
- help='path to firefox profile, set up for downloading without confirm')
- parser.add_argument('--optimization',
- action="store_true",
- help='Flag for optimization in piexpert\'s designs')
- parser.add_argument('--creation-only',
- action="store_true",
- help='Flag for only creation of designs, without any downloads')
- parser.add_argument('--delete-all',
- action="store_true",
- help='Delete all designs after completion')
- parser.add_argument('-l', '--languages',
- nargs='+',
- choices=['en', 'ru', 'zh_hans', 'zh_hant', 'ja', 'ko'],
- default=default_languages,
- help='Languages for exports')
- group = parser.add_mutually_exclusive_group()
- group.add_argument('--piexpert-only',
- action="store_true",
- help='Only creates all piexpert\'s exports')
- group.add_argument('--pixls-only',
- action="store_true",
- help='Only creates all pixls\' exports')
- args = parser.parse_args()
- if args.languages:
- languages = set(args.languages)
- else:
- languages = ['en', 'ru', 'zh_hans', 'zh_hant', 'ja', 'ko']
- if not os.path.exists(args.report_dir):
- os.makedirs(args.report_dir)
- output_file = open((args.report_dir + '\\report_all_designs{time.tm_hour:02d}_{time.tm_min:02d}_'
- '{time.tm_mday:02d}_{time.tm_mon:02d}_'
- '{time.tm_year}.txt'.format(time=time.localtime())), 'w')
- output_file.write('Started.\n{time}\n'.format(time=time_string()))
- dateTimeStamp = time.strftime('%Y.%m.%d %H.%M.%S')
- try:
- for lang in languages:
- output_file.write('Language: {lang}\n'.format(lang=lang))
- # create download directory
- download_dir = args.download_dir + '\\download_' + lang + '_' + dateTimeStamp
- if not os.path.exists(download_dir) and not (args.creation_only or json_data["creation-only"]):
- os.makedirs(download_dir)
- # Configure firefox profile
- fp = webdriver.FirefoxProfile(args.ff_profile)
- fp.set_preference('browser.download.folderList', 2)
- fp.set_preference('browser.download.manager.showWhenStarting', False)
- fp.set_preference('browser.download.dir', download_dir)
- fp.set_preference('browser.helperApps.neverAsk.saveToDisk',
- 'application/x-zip, text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
- driver = set_up(fp=fp, implicitly_wait_timeout=60)
- login(driver, site=args.site, user=args.user, password=args.password)
- lang_locator = (By.ID, "switchLangTo_{language}".format(language=lang))
- lang_elem = get_elem_or_null(driver, lang_locator)
- if lang_elem:
- click(driver, lang_locator, sleep_time=1)
- wait_for_loading(driver)
- # Counting all available designs
- click(driver, Locators.IndexPage.NEW_DESIGN)
- links = driver.find_elements(By.XPATH, "//a[contains(@class,'npw-treeleaf')]")
- total_num = len(links)
- output_file.write('Total versions for {lang} should be {num}\n'.format(lang=lang, num=total_num))
- if not (args.pixls_only or json_data["pixls-only"]):
- for link_num in range(total_num):
- links = driver.find_elements(By.XPATH, "//a[contains(@class,'npw-treeleaf')]")
- parent_link = links[link_num].find_element(By.XPATH, '../../..')
- links[link_num].click()
- if driver.find_element(*Locators.DesignCreation.PIEXPERT).is_enabled():
- family_name = ''.join([parent_link.find_element(By.TAG_NAME, "p").text, ' >> ', links[link_num].text])
- output_file.write('{num}. {family}\n'.format(num=link_num + 1, family=family_name))
- click(driver, Locators.DesignCreation.PIEXPERT, expl_wait=2)
- print('{num}. {family}'.format(num=link_num + 1, family=family_name))
- else:
- continue
- create_piexpert(driver, va_list=[(5, 1)], opt=args.optimization or json_data["optimization"])
- if not (args.creation_only or json_data["creation-only"]):
- # all to PDF
- download_and_rename(driver, download_dir, 'all_tabs', lang, "allTabsExport(1);")
- tabs = driver.find_elements(By.XPATH, "//div[@id='designTabs']/ul/li/a")
- for tab in tabs:
- tab.click()
- wait_for_loading(driver)
- # XLS
- download_and_rename(driver, download_dir, tab.text, lang, "currTabExport(1);")
- # PDF
- download_and_rename(driver, download_dir, tab.text, lang, "currTabExport(2);")
- # RTF
- download_and_rename(driver, download_dir, tab.text, lang, "currTabExport(3);")
- driver.get(args.site)
- # driver.execute_script("closeDesign();")
- wait_for_loading(driver)
- click(driver, Locators.IndexPage.NEW_DESIGN)
- wait_for_loading(driver)
- if not (args.piexpert_only or json_data["piexpert-only"]):
- for link_num in range(total_num):
- links = driver.find_elements(By.XPATH, "//a[contains(@class,'npw-treeleaf')]")
- parent_link = links[link_num].find_element(By.XPATH, '../../..')
- family_name = ''.join([parent_link.find_element(By.TAG_NAME, "p").text,
- ' >> ',
- links[link_num].text])
- print(family_name)
- if len(driver.window_handles) > 1:
- driver.switch_to_window(driver.window_handles[0])
- output_file.write('{num}. {family}\n'.format(num=link_num + 1, family=family_name))
- links[link_num].click()
- wait_for_loading(driver)
- click(driver, Locators.DesignCreation.PIXLS)
- wait_for_loading(driver)
- if not (args.creation_only or json_data["creation-only"]):
- # all to PDF
- download_and_rename(driver, download_dir, 'all_tabs', lang, "allTabsExport(1);")
- tabs = driver.find_elements(By.XPATH, "//div[@id='designTabs']/ul/li/a")
- for tab in tabs:
- tab.click()
- wait_for_loading(driver)
- # XLS
- download_and_rename(driver, download_dir, tab.text, lang, "currTabExport(1);")
- # PDF
- download_and_rename(driver, download_dir, tab.text, lang, "currTabExport(2);")
- # RTF
- download_and_rename(driver, download_dir, tab.text, lang, "currTabExport(3);")
- driver.get(args.site)
- # driver.execute_script("closeDesign();")
- wait_for_loading(driver)
- click(driver, Locators.IndexPage.NEW_DESIGN)
- wait_for_loading(driver)
- # Cleaning up
- if args.delete_all or json_data["delete-all"]:
- click(driver, Locators.DesignCreation.CANCEL)
- delete_all_designs(driver)
- driver.quit()
- output_file.write('Finished.\n{time}\n'.format(time=time_string()))
- output_file.close()
- except:
- # driver.quit()
- output_file.write('Error occurred!\n')
- traceback.print_exc(file=output_file)
- output_file.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement