I am trying to write a small script in python to connect to BOX, but it keeps giving me this error: 'NoneType' object has no attribute 'encode'
At first I thought it was caused when I encoded the Passphrase, but it seems that's not the case. The script fails when I try to authenticate with access_token = auth.authenticate_instance(). If I run the script without that it seems to work. What could be causing this?
Thanks in advance for any help you can provide.
This is what I have:
import keyring
from boxsdk import JWTAuth
from boxsdk import Client
def read_tokens():
"""Reads authorisation tokens from keyring"""
# Use keyring to read the tokens
auth_token = keyring.get_password('Box_Auth', 'mybox@box.com')
refresh_token = keyring.get_password('Box_Refresh', 'mybox@box.com')
return auth_token, refresh_token
def store_tokens(access_token, refresh_token):
"""Callback function when Box SDK refreshes tokens"""
# Use keyring to store the tokens
keyring.set_password('Box_Auth', 'mybox@box.com', access_token)
keyring.set_password('Box_Refresh', 'mybox@box.com', refresh_token)
Passphrase = 'xxxxxxx';
my_str_as_bytes = Passphrase.encode('UTF-8','strict')
auth = JWTAuth(
client_id='xxxxxxxxxx',
client_secret='xxxxxxxx',
enterprise_id='xxxxxxx',
jwt_key_id='xxxxxxx',
rsa_private_key_file_sys_path='/home/Marketscale/keys/private_key2.pem',
rsa_private_key_passphrase=my_str_as_bytes,
store_tokens=store_tokens,
)
access_token = auth.authenticate_instance()
This is the full text of the error:
Traceback (most recent call last):
File "/home/Marketscale/Tests/JWTTest.py", line 37, in <module>
access_token = auth.authenticate_instance()
File "/home/Marketscale/.virtualenvs/myvirtualenv/lib/python3.5/site-packages/boxsdk/auth/jwt_auth.py", line 186, in authenticate_instance
return self._auth_with_jwt(self._enterprise_id, 'enterprise')
File "/home/Marketscale/.virtualenvs/myvirtualenv/lib/python3.5/site-packages/boxsdk/auth/jwt_auth.py", line 158, in _auth_with_jwt
return self.send_token_request(data, access_token=None, expect_refresh_token=False)[0]
File "/home/Marketscale/.virtualenvs/myvirtualenv/lib/python3.5/site-packages/boxsdk/auth/oauth2.py", line 298, in send_token_request
self._store_tokens(access_token, refresh_token)
File "/home/Marketscale/.virtualenvs/myvirtualenv/lib/python3.5/site-packages/boxsdk/auth/oauth2.py", line 233, in _store_tokens
self._store_tokens_callback(access_token, refresh_token)
File "/home/Marketscale/Tests/JWTTest.py", line 22, in store_tokens
keyring.set_password('Box_Refresh', 'mybox@box.com', refresh_token)
File "/home/Marketscale/.virtualenvs/myvirtualenv/lib/python3.5/site-packages/keyring/core.py", line 48, in set_password
_keyring_backend.set_password(service_name, username, password)
File "/home/Marketscale/.virtualenvs/myvirtualenv/lib/python3.5/site-packages/keyrings/alt/file_base.py", line 128, in set_password
password_encrypted = self.encrypt(password.encode('utf-8'), assoc)
AttributeError: 'NoneType' object has no attribute 'encode'