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

Offen
#492 4 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
25/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
python
Bereich
api

Rechercherichtung

Start with the v2 re-exports in the b2sdk/v2 package and the Bucket class it exposes, then compare them with the implementation under b2sdk/_internal. Check whether B2Api.get_bucket_by_name() returns the same class the public Bucket name points to, and reproduce the ls(latest_only=True) call. Done means the returned object passes the b2.Bucket annotation and ls() runs, or the import path that causes the mismatch is documented. Read the four comments first, since the maintainers may already have explained the cause.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

more-information-needed
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)
Vorherrschende Sprache
Python
Sterne
214
Forks
68
Ø Merge
51 Min.
Gemergte PRs (30 T.)
6

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus Backblaze/b2-sdk-python

Alle Issues in Backblaze/b2-sdk-python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.