Skip to content

"TypeError: Argument of type 'Bucket' cannot be assigned to parameter of type 'Bucket' in b2sdk.v2" #492

@patrickwasp

Description

@patrickwasp

Issue Description

When attempting to use the ls() method on a Bucket object obtained from b2sdk.v2.B2Api.get_bucket_by_name(), I encountered a TypeError stating that the Bucket argument type is incompatible with the expected 'Bucket' parameter type. It appears that get_bucket_by_name() may be returning an internal SDK type not intended for direct use, despite being accessed through the public API.

Steps to Reproduce

  1. Setup a basic environment with b2sdk.v2 configured with valid Backblaze B2 credentials.
  2. Fetch a Bucket using B2Api.get_bucket_by_name().
  3. Attempt to list directories or files using the Bucket.ls() method.
  4. Observe the TypeError related to incompatible type assignment.

Expected Behavior

The Bucket object returned from get_bucket_by_name() should be fully compatible with other methods expecting a Bucket type as defined in the b2sdk.v2 public API.

Actual Behavior

A TypeError is raised suggesting type incompatibility, indicating possible exposure of internal types in what should be a public API method.

Environment

  • Python version: 3.12
  • b2sdk version: 2.1

Additional Context

This issue seems to stem from recent changes in the SDK where non-api packages were moved to b2sdk._internal as noted in the changelog for version 2.0.0. It would be helpful to confirm whether get_bucket_by_name() should return a type from b2sdk.v2 or if there's a recommended workaround for this type mismatch.

import b2sdk.v2 as b2

def get_bucket():
    info = b2.InMemoryAccountInfo()
    b2_api = b2.B2Api(info)
    b2_api.authorize_account("production", settings.BACKBLAZE_KEY_ID, settings.BACKBLAZE_APPLICATION_KEY)
    return b2_api.get_bucket_by_name(settings.BACKBLAZE_BUCKET_NAME)

def list_directories(bucket: b2.Bucket):
    try:
        for file_version, folder_name in bucket.ls(latest_only=True):
            print(folder_name)
    except TypeError as e:
        print(f"TypeError: {str(e)}")

# Example
bucket = get_bucket()
list_directories(bucket)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions