Seite 1 von 1

Python 3.3 mit Dropbox-API

Verfasst: Freitag 22. Februar 2013, 14:42
von stonecold
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

Re: Python 3.3 mit Dropbox-API

Verfasst: Freitag 22. Februar 2013, 15:09
von 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.

Re: Python 3.3 mit Dropbox-API

Verfasst: Freitag 22. Februar 2013, 15:13
von kbr
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.

Re: Python 3.3 mit Dropbox-API

Verfasst: Freitag 22. Februar 2013, 17:01
von stonecold
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?

Re: Python 3.3 mit Dropbox-API

Verfasst: Freitag 22. Februar 2013, 17:20
von Leonidas
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.

Re: Python 3.3 mit Dropbox-API

Verfasst: Freitag 22. Februar 2013, 17:35
von 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.

Re: Python 3.3 mit Dropbox-API

Verfasst: Samstag 23. Februar 2013, 11:03
von Leonidas
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.