Python 3.3 mit Dropbox-API

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
stonecold
User
Beiträge: 2
Registriert: Freitag 22. Februar 2013, 12:06

Hallo liebe Python Gemeinde,

mein Name ist Mario, ich bin neu in diesem Forum. Ich mache gerade meine ersten Gehversuche mit Python und war der Meinung, dass es sich anbietet direkt mit der aktuellsten Version also 3.3 durchzustarten.

In diesen Zusammenhang versuche ich mittels Dropbox-API auf ein Verzeichnis meiner D-Box zuzugreifen.
Die Probleme, die ich dabei gerade habe, sind ganz offensichtlich den Änderungen von Version 2 zu Version 3 geschuldet.
Natürlich wäre eine Lösung zu Version 2.7 zu wechseln, doch würde ich vorerst gerne das eigentliche Problem verstehen und evtl. sogar eine Lösung dafür finden. Folgend der betreffende Code-Teil aus der aktuellen Dropbox API session.py.

Code: Alles auswählen

...
import urllib.request, urllib.parse, urllib.error
...


   @classmethod
    def _parse_token(cls, s):
        if not s:
            raise ValueError("Invalid parameter string.")

        params = parse_qs(s, keep_blank_values=False)
        if not params:
            raise ValueError("Invalid parameter string: %r" % s)

        try:
            key = params['oauth_token'][0]
        except Exception:
            raise ValueError("'oauth_token' not found in OAuth request.")

        try:
            secret = params['oauth_token_secret'][0]
        except Exception:
            raise ValueError("'oauth_token_secret' not found in "
                             "OAuth request.")

        return OAuthToken(key, secret)

Probleme bereitet dieser Aufruf:

Code: Alles auswählen

key = params['oauth_token'][0]
Nach etwas Forschung konnte ich das Problem durch ändern des Aufrufes in

Code: Alles auswählen

key = params[b'oauth_token'][0]
beseitigen. Was genau aber habe ich da eigentlich gemacht? Was macht parse_qs?

Ist die API nicht Python 3 kompatibel? Laut Changelog hat es dafür Anpassungen in der Dropbox API gegeben.

Ist es für einen Anfänger sinnvoll, sich noch mit der 2er Version von Python zu befassen?

Danke schon mal und schöne Grüße
BlackJack

@stonecold: Ich würde mal sagen der Quelltext den Du da zeigst, wo immer der auch her ist, ist nicht für Python 3. Das sollte in der Regel auch in der Dokumentation stehen ob ein Modul für Python 3 ist oder nicht und wenn nichts da steht, würde ich erst einmal von Python 2 ausgehen.

Python 2.7 und 3.x sind *beides* die aktuellsten Versionen. Ich würde an Deiner Stelle mit 2.7 anfangen, sonst wirst Du wahrscheinlich öfter in das Problem laufen, dass es ein Modul oder Paket für 2.x gibt, welches noch nicht nach 3 portiert wurde.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

stonecold hat geschrieben:Was genau aber habe ich da eigentlich gemacht?
...
Ist es für einen Anfänger sinnvoll, sich noch mit der 2er Version von Python zu befassen?
Du auf den Umstand gestoßen, dass Strings in Python 3 standardmäßig Unicode-Strings sind, Du aber einen Byte-String brauchtest. In Python2 sind Strings per Standard Byte-Strings und Du musst explizit einen Unicode-String anlegen, wenn Du einen solchen brauchst.
Zur zweiten Frage: auch Python 2.7 ist aktuell. Neben der Standard Library werden oft aber auch zusätzliche externe Libraries verwendet; von denen sind viele noch nicht nach Python 3 portiert. Brauchst Du eine solche, musst Du z.Z. noch Python 2 einsetzen. Das scheint bei Deinem Beispiel der Fall zu sein.
stonecold
User
Beiträge: 2
Registriert: Freitag 22. Februar 2013, 12:06

Danke für eure schnellen Antworten. Ich werde mir parallel die Version 2.7 installieren und erstmal damit arbeiten. Warum gibt es 2 "aktuelle" Python Versionen? Werden beide noch über einen längeren Zeitraum weiter gepflegt?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mit Python 3.x wurde versucht die Sprache aufzuraeumen, was sich allerdings schon seit Jahren nicht durchsetzen kann, so dass derzeit 2.7 und Python 3.x weitergepflegt werden. Ob sich dies jemals aendert? Sieht fuer mich nicht so sehr danach aus.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@stonecold: Beim Schritt von 2 auf 3 wurden Veränderungen vorgenommen bei denen man alten Code nicht einfach ohne Änderungen unter 3 laufen lassen konnte. Damit sind auf einen Schlag so ziemlich alle Module und Pakete ausserhalb der Standardbibliothek „unbrauchbar” geworden. Darum war klar, dass Python 2 und 3 solange parallel weiter gepflegt werden bis so viel von den viel verwendeten Bibliotheken portiert oder durch Alternativen ersetzt sind, das ein Umstieg praktikabel ist.

Python 2 ist noch das Standardpython bei vielen Linux-Distributionen und ist auch die Python-Version, die man üblicherweise bei Webhostern zur Verfügung hat, wenn der Hoster Python anbietet.

Ich bin nicht ganz so pessimistisch wie Leonidas, rechne aber damit, dass der Umstellungsprozess noch dauern wird.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Die Situation erinnert mich etwas an WinAMP 2.x und WinAMP 3, wo sich WinAMP 3 auch nie durchsetzen konnte und am Schluss durch Winamp 5 ersetzt wurde.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten