@felciano There appear to be 2 issues.
Dropbox version 11.7.0 crashes when using the appex module. The keychain module does not work with the appex module.You will need to use Dropbox 6.4.0 and you will need to store your refresh_token somewhere else besides keychain.
You can modify dropboxlogin like this:
#refresh_token = keychain.get_password('dropbox', 'refresh_token') refresh_token = "your_refresh_token"You can then remove the dropbox folders from site-packages-3 or try this script which removes site-packages-3 from sys.path when running from a share sheet and temporarily reverts back to dropbox 6.4.0.
import sys import appex import console print('file', appex.get_file_path()) def test(): print(sys.path[1]) if appex.is_running_extension(): # if share sheet sys.path.remove(sys.path[1]) # remove site-packages-3 from sys.path import dropbox print('dropbox version', str(dropbox.__version__)) import dropboxlogin dropbox_client = dropboxlogin.get_client() print('Getting account info...') account_info = dropbox_client.users_get_current_account() print('linked account:', account_info) test()If you are just trying to upload a file from a share sheet, this script does not use the dropbox module:
import sys, os, json, shutil import appex import console import keychain import requests from requests.auth import HTTPBasicAuth app_key = "your_app_key" app_secret = "your_app_secret" refresh_token = "your_refresh_token" def dropbox_token(refresh_token): data = {'refresh_token': refresh_token, 'grant_type': 'refresh_token'} try: r = requests.post('https://api.dropbox.com/oauth2/token', data=data, auth = HTTPBasicAuth(app_key, app_secret)) result = r.json() except: print(str(sys.exc_info())) return { 'refresh_token': None, 'access_token': None, 'error': {'.tag': str(sys.exc_info())} } #print('dbx:', result) return result def upload_file(source_filename, path): with open(source_filename, 'rb') as f: data = f.read() parms = {} parms['path'] = path parms['mode'] = 'overwrite' print (json.dumps(parms)) headers = {'Authorization': 'Bearer %s' % (access_token,),'Dropbox-API-Arg': json.dumps(parms),'Content-Type': 'application/octet-stream' } url = 'https://content.dropboxapi.com/2/files/upload' try: r = requests.post(url, stream=True, headers=headers, data=data) except: print("Exception requests: %s" % str(sys.exc_info())) result = r.json() return result local_path = os.path.expanduser('~/Documents/tmp') access_token = dropbox_token(refresh_token)['access_token'] files = appex.get_file_paths() if files != None and files != []: for i in range(len(files)): print('Input path: %s' % files[i]) basename = os.path.basename(files[i]) filename=os.path.join(local_path, basename) shutil.copy(files[i], filename) upload_file(basename, '/remote/dropbox/path/' + basename)