• @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)
  • Thanks @mikael -- I will give that a shot and report back.

  • Forgot to reply to close this out: using the get_image version as suggested by @mikael did the trick, at least in terms of saving a second or so in runtime (which is noticeable). Thanks all!

  • @felciano, looks like this pure Python lib should do the job, although dev looks to be stalled and you might need to apply some of the pull requests yourself if you want specific features.

  • @cvp No problem. I thought maybe your question was intended for @mikeno.

  • @felciano, I have personally used Apple Shortcuts for these types of tasks. At a quick look, they seem to have a rich set Dropbox commands, not sure about Google Sheets, maybe via calling a URL?

    Could be done in Pythonista as well, although I have no ready code for you.

Internal error.

Oops! Looks like something went wrong!