コード例 #1
0
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
コード例 #2
0
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)))
コード例 #3
0
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()
コード例 #4
0
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
コード例 #5
0
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()
コード例 #6
0
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
コード例 #7
0
def _get_accs(wf, value_name):
    gitlab_accounts = json.loads(get_wf_variable(wf, value_name, default="{}"))
    return gitlab_accounts