Attempted to login using python3 on existing client and got the
traceback:

/usr/lib/python3/dist-packages/launchpadlib/credentials.py in from_string(cls, 
query_string)
    249         """Create and return a new `AccessToken` from the given 
string."""
    250         params = cgi.parse_qs(query_string, keep_blank_values=False)
--> 251         key = params['oauth_token']
    252         assert len(key) == 1, (
    253             "Query string must have exactly one oauth_token.")

KeyError: 'oauth_token'

Upgraded to:
Get:1 http://archive.ubuntu.com/ubuntu xenial-proposed/main amd64 
python3-launchpadlib all 1.10.3-3ubuntu0.1 [36.5 kB]

And that traceback is gone.

However, keyring integration is still broken:

In [1]: from launchpadlib.launchpad import Launchpad

In [2]: lp = Launchpad.login_with('just testing', 'production', version='devel')
The authorization page:
 
(https://launchpad.net/+authorize-token?oauth_token=G81S4r3H7ppz29Zr4z6r&allow_permission=DESKTOP_INTEGRATION)
should be opening in your browser. Use your browser to authorize
this program to access Launchpad on your behalf.
Waiting to hear from Launchpad about your decision...
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-469be45530f4> in <module>()
----> 1 lp = Launchpad.login_with('just testing', 'production', version='devel')

/usr/lib/python3/dist-packages/launchpadlib/launchpad.py in login_with(cls, 
application_name, service_root, launchpadlib_dir, timeout, proxy_info, 
authorization_engine, allow_access_levels, max_failed_attempts, 
credentials_file, version, consumer_name, credential_save_failed, 
credential_store)
    542             cache_path, timeout, proxy_info, authorization_engine,
    543             allow_access_levels, credential_store,
--> 544             credential_save_failed, version)
    545 
    546     @classmethod

/usr/lib/python3/dist-packages/launchpadlib/launchpad.py in 
_authorize_token_and_login(cls, consumer_name, service_root, cache, timeout, 
proxy_info, authorization_engine, allow_access_levels, credential_store, 
credential_save_failed, version)
    349             # They're not there. Acquire new credentials using the
    350             # authorization engine.
--> 351             credentials = authorization_engine(credentials, 
credential_store)
    352         else:
    353             # We acquired credentials. But, the application name

/usr/lib/python3/dist-packages/launchpadlib/credentials.py in __call__(self, 
credentials, credential_store)
    550             return None
    551         # save() invokes the callback on failure.
--> 552         credential_store.save(credentials, self.unique_consumer_id)
    553         return credentials
    554 

/usr/lib/python3/dist-packages/launchpadlib/credentials.py in save(self, 
credentials, unique_consumer_id)
    305         except Exception as e:
    306             if self.credential_save_failed is None:
--> 307                 raise e
    308             self.credential_save_failed()
    309         return credentials

/usr/lib/python3/dist-packages/launchpadlib/credentials.py in save(self, 
credentials, unique_consumer_id)
    300         """
    301         try:
--> 302             self.do_save(credentials, unique_consumer_id)
    303         except EXPLOSIVE_ERRORS:
    304             raise

/usr/lib/python3/dist-packages/launchpadlib/credentials.py in do_save(self, 
credentials, unique_key)
    382         serialized = self.B64MARKER + b64encode(serialized)
    383         keyring.set_password(
--> 384             'launchpadlib', unique_key, serialized)
    385 
    386     def do_load(self, unique_key):

/usr/lib/python3/dist-packages/keyring/core.py in set_password(service_name, 
username, password)
     46     """Set password for the user in the specified service.
     47     """
---> 48     _keyring_backend.set_password(service_name, username, password)
     49 
     50 

/usr/lib/python3/dist-packages/keyring/backends/file.py in set_password(self, 
service, username, password)
     85 
     86         # encrypt the password
---> 87         password_encrypted = self.encrypt(password.encode('utf-8'))
     88         # encode with base64
     89         password_base64 = 
base64.encodestring(password_encrypted).decode()

AttributeError: 'bytes' object has no attribute 'encode'



** Tags removed: verification-needed
** Tags added: verification-done

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1471927

Title:
  AccessToken.from_string() crashes on python3

To manage notifications about this bug go to:
https://bugs.launchpad.net/launchpadlib/+bug/1471927/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to