Beispiel #1
0
def file_upload(repo: Optional[str], package: Optional[str], version: str,
                filename: str):
    username, header = get_auth_header_and_username()
    if not username:
        return
    if not repo:
        repo = repositories.select_from_available_repo(subject=username)
    if not package:
        package = packages_core.select_from_available_packages(
            subject=username, repo=repo)
    file_path: str = filename
    if os.path.isabs(file_path):
        filename = os.path.basename(file_path)

    url = get_url(f"/content/{username}/{repo}/{package}/{version}/{filename}")
    try:
        with open(file_path, "br") as file:
            data = file.read()
            headers = {
                "x-bintray-publish": "1",
                "content-type": "application/octet-stream",
                "x-bintray-override": "1",
            }
            headers.update(header)
            password = typer.prompt("Password", hide_input=True)
            response = httpx.put(
                url=url,
                data=data,
                headers=headers,
                auth=httpx.BasicAuth(username=username, password=password),
            )
            response_handler(response=response, return_with_out_model=True)
    except Exception as e:
        print_error(f"{e.args[0]}")
Beispiel #2
0
def file_download(
    subject: str,
    repo: Optional[str],
    package: Optional[str],
    version: Optional[str],
    file_name: Optional[str],
    path_to_save: str,
):
    if not repo:
        repo = repositories.select_from_available_repo(subject=subject)
    if not package:
        package = packages_core.select_from_available_packages(subject=subject,
                                                               repo=repo)
    if not version:
        version = select_from_available_versions(subject=subject,
                                                 repo=repo,
                                                 package=package,
                                                 filename=file_name)

    if not file_name:
        file_name = select_from_available_files(subject=subject,
                                                repo=repo,
                                                package=package,
                                                version=version)
    url = get_url(f"/{subject}/{repo}/{package}/{version}/{file_name}")
    response = httpx.get(url=url)
    if response.status_code == 200:
        path = os.path.join(path_to_save, file_name)
        with open(path, "bw") as file:
            file.write(response.content)
        print_message(f"file saved to {path}")
    else:
        print_error(response.text)
Beispiel #3
0
def get_auth_header_and_username(
) -> Optional[Tuple[Optional[str], Optional[dict]]]:
    username = get_username()
    token: str = keyring.get_password("pax.express", username=username)
    if token:
        return username, {"Authorization": f"Bearer {token}"}
    print_error("Please login!")
    return None, None
Beispiel #4
0
def add_scope(users_username: str):
    username, headers = get_auth_header_and_username()
    if not username:
        exit(1)
    scopes = get_valid_scopes()
    if not scopes:
        print_error("No Scope has been selected!")
        exit(1)
    url = get_url(f"/v1/authorization/user/{users_username}/scopes/add")
    body = AddUserScopesBodyModel(scopes=scopes)
    response = httpx.post(url=url, headers=headers, json=body.dict())
    response_handler(response=response, return_model=UserScopeAddResponseModel)
Beispiel #5
0
def select_from_available_repo(subject: str) -> str:
    repos = get_repos(subject=subject, is_internal_call=True)
    if not repos:
        print_error("No repository has been created!")
        exit(1)
    repo = select_available_options(
        name="repo",
        choices=[item["name"] for item in repos],
        message="Select the repository",
    )
    if not repo:
        exit(1)
    return repo["repo"]
Beispiel #6
0
def register(email: str, username: str, password: str):
    url: str = get_url(url=f"/user/register")
    try:
        body = UserRegisterBodyModel(
            username=username,
            email=EmailStr(email),
            password=password,
        )
        response = httpx.post(url=url, json=body.dict())
        response_handler(response=response,
                         return_model=UserRegisterResponseModel)
    except ValidationError:
        print_error("Check your inputs")
Beispiel #7
0
def select_from_available_packages(subject: str, repo: str):
    packages = get_all_packages(
        subject=subject,
        repo=repo,
        is_internal_call=True,
        start_pos=None,
        start_name=None,
    )
    if not packages:
        print_error("No packages has been created!")
        exit(1)
    package = select_available_options(
        name="package",
        choices=[package["name"] for package in packages],
        message="Select the package",
    )
    if not package:
        exit(1)
    return package["package"]
Beispiel #8
0
def files_search(
    subject: str,
    repo: Optional[str],
    name: Optional[str] = None,
    sha1: Optional[str] = None,
    start_pos: Optional[str] = None,
    create_after: Optional[datetime.datetime] = None,
):
    if not repo:
        repo = repositories.select_from_available_repo(subject=subject)
    url = get_url(f"/search/file")
    params = {"subject": subject, "repo": repo}
    if name and sha1:
        print_error("cant search name and sha1 at the same time")
        return
    if name:
        params.update({"name": name})
    if sha1:
        params.update({"sha1": sha1})
    response = httpx.get(url=url, params=params)
    response_handler(response=response, return_with_out_model=True)
Beispiel #9
0
def select_from_available_files(subject: str, repo: str, package: str,
                                version: str):
    files = get_package_file(
        subject=subject,
        repo=repo,
        package=package,
        version=version,
        include_unpublished=1,
        is_internal_call=True,
    )
    if not files:
        print_error("No files have been uploaded!")
        exit(1)
    selected_file = select_available_options(
        name="file",
        message="Select the file",
        choices=[item["name"] for item in files if item["version"] == version],
    )
    if not selected_file:
        print_error("No file has been selected!")
        exit(1)
    return selected_file["file"]
Beispiel #10
0
def select_from_available_versions(subject: str, repo: str, package: str,
                                   filename: Optional[str]) -> Optional[str]:
    files = get_versions_file(
        subject=subject,
        package=package,
        repo=repo,
        include_unpublished=1,
        is_internal_call=True,
    )
    if not files:
        print_error("No versions have been created!")
        exit(1)
    selected_version = select_available_options(
        name="version",
        message="Select the version",
        choices=[item["version"] for item in files] if not filename else
        [item["version"] for item in files if item["name"] == filename],
    )
    if not selected_version:
        print_error("No version has been selected!")
        exit(1)
    return selected_version["version"]
Beispiel #11
0
def login(email: str, password: str, as_admin: bool = False):
    url: str = get_url(f"/user/login")
    try:
        data = {"username": email, "password": password}
        if as_admin:
            scopes = get_valid_scopes()
            if not scopes:
                print_error("No Scope has been selected!")
                exit(1)
            scopes = " ".join(scopes)
            data.update({"scope": scopes})
        response = httpx.post(url=url, data=data)

        if response.status_code == 200:
            modeled_response = UserLoginResponseModel(**response.json())
            keyring.set_password("pax.express", modeled_response.username,
                                 modeled_response.access_token)
            save_username(username=modeled_response.username)
            print_message(
                "You have successfully logged in\nYour login will expire after [red bold]30[/] Minutes"
            )
            return
        elif response.status_code == 406:
            if response.json()["detail"].get("legal_documents"):
                show_available_legal_documents_list(
                    filter_by_legal_document_id=response.json()["detail"].get(
                        "legal_documents"),
                    username=response.json()["detail"].get("username"),
                    password=password,
                )

                login(email=email, password=password)

            pass
        else:
            print_error(response.text)
            return
    except ValidationError:
        print_error("Check your inputs")
Beispiel #12
0
def get_username(is_logout: bool = False) -> Optional[str]:
    try:
        with open(pax_info_file_path, "r") as f:
            info = yaml.safe_load(f)
            username = info.get("username", None)
            if username:
                return username
            else:
                print_error("Please login!")
    except FileNotFoundError as ex:
        if not is_logout:
            username = typer.prompt("Username")
            # check if token exist for this username
            # if token exist, save username in .pax_info
            token: str = keyring.get_password("pax.express", username=username)
            if token:
                save_username(username)
                return username
            else:
                print_error("Please login!")
        else:
            print_error("Please login!")