Я пытаюсь преобразовать большой фрагмент кода в три меньшие функции; в результате чего я буду использовать три в последней функции [closed]

def retrieve_repository_project_id(
    blackduck_api,
    heimdall_db: HeimdallDatabase,
    repository_id: str,
    blackduck_project_name: str = None,
):
    bd_project_name = blackduck_project_name or (
        retrieve_repository_name(heimdall_db, repository_id) if repository_id else None
    )
    bd_project_id = blackduck_api.get_project_id(bd_project_name)
    update_repository_bd_project_id(heimdall_db, bd_project_name, bd_project_id)
    return bd_project_id


def total_count_for_blackduck_versions(
    service_params: dict,
    heimdall_db: HeimdallDatabase
):
    repository_id = py_.get(service_params, "repository-id")
    if not repository_id:
        raise Heimdall400Error(
            "Bad Request, repository-id was unspecified. Cancelling request due to missing request data."
        )
    blackduck_api = BlackduckApi()
    project_id = retrieve_repository_project_id(
        blackduck_api, heimdall_db, repository_id
    )
    if not project_id:
        raise Exception(f"Failed to retreve projectID for repo {repository_id}")
    project_versions = blackduck_api.get_project_versions(project_id)
    total_count = py_.get(project_versions, "totalCount", 0)
    return total_count, project_versions


def check_scm_type(
    heimdall_db: HeimdallDatabase,
    repository_id,
    project_versions
):
    repo_scm_type = retrieve_repository_field(heimdall_db, repository_id, "scm_type")

    if repo_scm_type == "GITHUB":
        delete_list = []
        open_branches_repository = retrieve_open_repository_blackduck_versions(heimdall_db, repository_id)
        active_versions = pluck(open_branches_repository, "blackduck_version_name")
        project_version_items = project_versions["items"]
        for item in project_version_items:
            item_version_name = item["versionName"]
            if item_version_name not in active_versions:
                delete_list.append(item)
    return delete_list


# TOTAL COUNT CHECK
def total_count_check(
    total_count,
    project_version_items,
    delete_list
):
    if total_count >= 19 and len(delete_list) < 6:
        project_version_items.sort(key=operator.itemgetter('createdAt'))
        for item in project_version_items:
            if item not in delete_list:
                delete_list.append(item)
            if len(delete_list) >= 1:
                break
    delete_count = len(delete_list)
    return delete_count


def delete_blackduck_version(
    delete_list,
    delete_count,
    total_count,
    blackduck_api: BlackduckApi,
    project_id
):
    for item in delete_list:
        project_version_url = py_.get(item, "_meta.href")
        version_id = py_.get(project_version_url.split("/"), '7')
        version_deleted = blackduck_api.delete_project_version(project_id, version_id)
        if version_deleted:
            logging.info(f"Project version {version_id} has been deleted sucessfully")
    return wrapped_response(200, f"You have deleted {delete_count} versions and you have {total_count- delete_count} remain" )
    # TODO PROVIDE ACCESS TO SAC USER


# def execute_blackduck_maintenance():
#     # total_count_for_blackduck_version
#     # check_scm_type
#     # total_count_check
#     # delete blackduck version

Я смущен тем, как некоторые функции могут ссылаться на другие функциональные переменные — если переменные ограничены определенной областью.

Например, project_versions создается в total_count_for_blackduck_versions и используется в другой функции с именем check_scm_type?

Любая помощь здесь будет оценена

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *