Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
patrickwasp opened this issue May 6, 2024 · 2 comments
Labels
more-information-needed More information is needed

Comments

@patrickwasp
Copy link

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)
@mjurbanski-reef
Copy link
Contributor

This looks type checker specific and not like a runtime problem that will prevent you from running your application.
The recommended workaround right now is to disable type checking in such cases.

It is unlikely this issue is specific to b2sdk>=2, as this is more of problem of IDE understanding ApiVer modules and wrappers which are in b2sdk for a long time already.

While we do try to use type hints, we currently cannot declare that it will work properly with all of type checkers available for Python.
If you wish for your type checker of choice to be supported, please make sure to report the exact version and way of running it, that way we will be able to see how much interests is there in support such configuration among b2 users community.

@mlech-reef mlech-reef added the more-information-needed More information is needed label Dec 18, 2024
@olzhasar-reef
Copy link
Contributor

@patrickwasp are you still experiencing this issue?
I tried to reproduce it using both the recent sdk version and the one you specified (2.1), but wasn't able to.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
more-information-needed More information is needed
Projects
None yet
Development

No branches or pull requests

4 participants