def add_account(wf): query = wf.args[-1] account_name = get_wf_variable(wf, "account") var_data = get_wf_variable(wf, "var_data") action = get_wf_variable(wf, "action") logger.debug("add_account vars: account {}, var_data {}, action {}".format( account_name, var_data, action)) if action == ACCOUNTS_ACTIONS.flush_ongoing: del_temp_accounts(wf) account_name = None exist_gitlab_accounts = Accounts(get_accounts(wf)) on_going_add = Account(get_temp_accounts(wf)) logger.debug("add_account accounts: exists {}, ongoing_add {}".format( exist_gitlab_accounts, on_going_add)) if action == ACCOUNTS_ACTIONS.save_account_settings: exist_gitlab_accounts.add_acc(on_going_add) save_accounts(wf, exist_gitlab_accounts) del_temp_accounts(wf) notify("Account '{}' has been saved".format(on_going_add.name)) return wf if account_name and not on_going_add.name: on_going_add.name = account_name if on_going_add.name in exist_gitlab_accounts.as_dict().keys(): it = wf.add_item( title="You've entered not uniq account name", subtitle="Try again", icon=ICON_ERROR, ) it.setvar(VARIABLES.cmd, ACCOUNTS_MANAGE_CMD.CMD_ADD_ACCOUNT.name) del_temp_accounts(wf) return wf do_account_action(wf, on_going_add, action, var_data) wf = process_account_creation(wf, query, on_going_add) it = wf.add_item( title="Start from beginning", subtitle="Just forgot already entered data about '{}' account".format( on_going_add.name), valid=True) it.setvar(VARIABLES.cmd, ACCOUNTS_MANAGE_CMD.CMD_ADD_ACCOUNT.name) it.setvar(VARIABLES.action, ACCOUNTS_ACTIONS.flush_ongoing) return wf
def load_all_projects(wf): log.debug('start updating the cache') wf = Workflow3() all_accounts = None try: all_accounts = Accounts(get_accounts(wf)) except PasswordNotFound: # API key has not yet been set notify("WARNING", "No API key saved") log.error('No API key saved') log.debug('loading accounts...') if not all_accounts: # just paste gitlab url to the variables page and token to the keychain and start using the workflow url = get_wf_variable(wf, "gitlab_url") token = get_wf_variable(wf, "gitlab_token") all_accounts = Account({ "simple_account": { "url": url, "token": token, "project_membership": "true", "project_visibility": "internal", } }) log.info('Removing cache: {}'.format(DATA_FILE)) # if os.path.exists(DATA_FILE): # return try: os.remove(DATA_FILE) except: pass result = [] for acc_name, acc_settings in all_accounts.dict.items(): log.info('base api url is: {url}; api token is: {token_name}'.format( url=acc_settings.url, token_name=acc_settings.token)) result.extend(get_all_pages(wf, account=acc_settings)) with open(DATA_FILE, 'w+') as fp: json.dump(result, fp) notify( "Cache was updated", "Was loaded {projects} projects from all gitlab instances".format( projects=len(result)))
def main(wf): """Generates and shows repo-related links e.g. 'Pipelines' or 'Commits'""" project_url = get_wf_variable("project_url") if not project_url: wf.add_item( title="No one project was chosen", valid=True, icon=ICON_WARNING, ) wf.send_feedback() return urls_path_to_add = { 'Files': 'tree/master', 'Commits': 'commits/master', 'Branches': 'branches', 'Tags': 'tags', 'Pipelines': 'pipelines' } for name, path in urls_path_to_add.items(): web_url = "{}/{}".format(project_url, path) it = wf.add_item( title=name, subtitle=web_url, valid=True, icon=ICON_WEB, ) it.setvar("web_url", web_url) wf.send_feedback()
def account_settings(wf): wf = Workflow3() gitlab_accounts = Accounts(get_accounts(wf)) account = gitlab_accounts.get_acc(get_wf_variable(wf, VARIABLES.account)) action = get_wf_variable(wf, VARIABLES.action) acc_setting = get_wf_variable(wf, VARIABLES.acc_setting) var_data = get_wf_variable(wf, VARIABLES.var_data) query = wf.args[-1] logger.debug("var_data: {} action: {} acc_setting: {} query: {}".format( var_data, action, acc_setting, query)) logger.debug("action: {}, account: {}".format(action, account)) if account: if action == ACCOUNTS_ACTIONS.get_account_settings: wf = get_account_settings(wf, account) if acc_setting: if action == ACCOUNTS_ACTIONS.save_account_settings: if acc_setting == "token": wf.save_password(account.name, var_data) else: account.update_setting(acc_setting, var_data) gitlab_accounts.update_acc(account) save_accounts(wf, gitlab_accounts) notify("Account '{}' setting '{}' has been changed".format( account.name, acc_setting)) return wf elif action == ACCOUNTS_ACTIONS.update_account_settings: if acc_setting == "url": query = get_validated_url(query) it = wf.add_item( title="Changing '{}', enter to save new value".format( acc_setting), subtitle="Please check new value: '{}'".format(query), valid=True) it.setvar(VARIABLES.action, ACCOUNTS_ACTIONS.save_account_settings) it.setvar(VARIABLES.acc_setting, acc_setting) it.setvar(VARIABLES.var_data, query) else: return list_accounts(wf) return wf
def main(wf): ssh_url_to_repo = get_wf_variable("ssh_url_to_repo") http_url_to_repo = get_wf_variable("http_url_to_repo") wf.add_item( title='Clone by SSH', subtitle=ssh_url_to_repo, arg=ssh_url_to_repo, valid=True, icon=ICON_TERM, ) wf.add_item( title='Clone by HTTPS', subtitle=http_url_to_repo, arg=http_url_to_repo, valid=True, icon=ICON_TERM, ) wf.send_feedback()
def del_account(wf): account = get_wf_variable(wf, "account") action = get_wf_variable(wf, "action") logger.debug("action: {}, account: {}".format(action, account)) if action == ACCOUNTS_ACTIONS.del_account and account: exists_accounts = get_accounts(wf) exists_accounts.pop(account) wf.delete_password(account) save_accounts(wf, exists_accounts) notify("Account '{}' has been deleted".format(account)) wf.add_item( title="Account '{}' has been deleted".format(account), valid=False, ) else: wf = get_accounts_list( wf, cmd_var=ACCOUNTS_MANAGE_CMD.CMD_DEL_ACCOUNT.name, action_var=ACCOUNTS_ACTIONS.del_account, ) return wf
def _get_accs(wf, value_name): gitlab_accounts = json.loads(get_wf_variable(wf, value_name, default="{}")) return gitlab_accounts