The Core API is the underlying interface for all of our official Dropbox mobile apps and our SDKs. This document describes the Python interface to the Core API. For information about the underlying HTTP endpoints, please visit the Core API HTTP documentation.
This class lets you make Dropbox API calls. You'll need to obtain an OAuth 2 access token first. You can get an access token using either DropboxOAuth2Flow or DropboxOAuth2FlowNoRedirect.
All of the API call methods can raise a dropbox.rest.ErrorResponse exception if the server returns a non-200 or invalid HTTP response. Note that a 401 return status at any point indicates that the access token you're using is no longer valid and the user must be put through the OAuth 2 authorization flow again.
DropboxClient(oauth2_access_token, locale=None, rest_client=None)
Construct a DropboxClient instance.
request(target, params=None, method='POST', content_server=False, notification_server=False)
An internal method that builds the url, headers, and params for a Dropbox API request. It is exposed if you need to make API calls not implemented in this library or if you need to debug requests.
account_info()
Retrieve information about the user's account.
A dictionary containing account information.
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#account-info
disable_access_token()
Disable the access token that this DropboxClient is using. If this call succeeds, further API calls using this object will fail.
create_oauth2_access_token()
If this DropboxClient was created with an OAuth 1 access token, this method can be used to create an equivalent OAuth 2 access token. This can be used to upgrade your app's existing access tokens from OAuth 1 to OAuth 2.
Example:
from dropbox.client import DropboxClient from dropbox.session import DropboxSession session = DropboxSession(APP_KEY, APP_SECRET) access_key, access_secret = '123abc', 'xyz456' # Previously obtained OAuth 1 credentials session.set_token(access_key, access_secret) client = DropboxClient(session) token = client.create_oauth2_access_token() # Optionally, create a new client using the new token new_client = DropboxClient(token)
get_chunked_uploader(file_obj, length)
Creates a ChunkedUploader to upload the given file-like object.
The expected use of this function is as follows:
bigFile = open("data.txt", 'rb') uploader = myclient.get_chunked_uploader(bigFile, size) print "uploading: ", size while uploader.offset < size: try: upload = uploader.upload_chunked() except rest.ErrorResponse, e: # perform error handling and retry logic uploader.finish('/bigFile.txt')
The SDK leaves the error handling and retry logic to the developer to implement, as the exact requirements will depend on the application involved.
upload_chunk(file_obj, length=None, offset=0, upload_id=None)
Uploads a single chunk of data from a string or file-like object. The majority of users should use the ChunkedUploader object, which provides a simpler interface to the chunked_upload API endpoint.
A dictionary containing the keys:
commit_chunked_upload(full_path, upload_id, overwrite=False, parent_rev=None)
Commit the previously uploaded chunks for the given path.
A dictionary containing the metadata of the newly committed file.
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#commit-chunked-upload
put_file(full_path, file_obj, overwrite=False, parent_rev=None)
Upload a file.
A typical use case would be as follows:
f = open('working-draft.txt', 'rb') response = client.put_file('/magnum-opus.txt', f) print "uploaded:", response
which would return the metadata of the uploaded file, similar to:
{ 'bytes': 77, 'icon': 'page_white_text', 'is_dir': False, 'mime_type': 'text/plain', 'modified': 'Wed, 20 Jul 2011 22:04:50 +0000', 'path': '/magnum-opus.txt', 'rev': '362e2029684fe', 'revision': 221922, 'root': 'dropbox', 'size': '77 bytes', 'thumb_exists': False }
A dictionary containing the metadata of the newly uploaded file.
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#files-put
A dropbox.rest.ErrorResponse with an HTTP status of:
get_file(from_path, rev=None, start=None, length=None)
Download a file.
Example:
out = open('magnum-opus.txt', 'wb') with client.get_file('/magnum-opus.txt') as f: out.write(f.read())
which would download the file magnum-opus.txt and write the contents into the file magnum-opus.txt on the local filesystem.
A dropbox.rest.ErrorResponse with an HTTP status of:
get_file_and_metadata(from_path, rev=None)
Download a file alongwith its metadata.
Acts as a thin wrapper around get_file() (see get_file() comments for more details)
A typical usage looks like this:
out = open('magnum-opus.txt', 'wb') f, metadata = client.get_file_and_metadata('/magnum-opus.txt') with f: out.write(f.read())
A pair of (response, metadata):
A dropbox.rest.ErrorResponse with an HTTP status of:
delta(cursor=None, path_prefix=None, include_media_info=False)
A way of letting you keep up with changes to files and folders in a user's Dropbox. You can periodically call delta() to get a list of "delta entries", which are instructions on how to update your local state to match the server's state.
A dict with four keys:
Delta Entries: Each entry is a 2-item list of one of following forms:
- [path, metadata]: Indicates that there is a file/folder at the given path. You should add the entry to your local path. (The metadata value is the same as what would be returned by the metadata() call.)
- If the new entry includes parent folders that don't yet exist in your local state, create those parent folders in your local state. You will eventually get entries for those parent folders.
- If the new entry is a file, replace whatever your local state has at path with the new entry.
- If the new entry is a folder, check what your local state has at path. If it's a file, replace it with the new entry. If it's a folder, apply the new metadata to the folder, but do not modify the folder's children.
- [path, None]: Indicates that there is no file/folder at the path on Dropbox. To update your local state to match, delete whatever is at path, including any children (you will sometimes also get "delete" delta entries for the children, but this is not guaranteed). If your local state doesn't have anything at path, ignore this entry.
Remember: Dropbox treats file names in a case-insensitive but case-preserving way. To facilitate this, the path strings above are lower-cased versions of the actual path. The metadata dicts have the original, case-preserved path.
longpoll_delta(cursor, timeout=None)
A long-poll endpoint to wait for changes on an account. In conjunction with delta(), this call gives you a low-latency way to monitor an account for file changes.
Note that this call goes to api-notify.dropbox.com instead of api.dropbox.com.
Unlike most other API endpoints, this call does not require OAuth authentication. The passed-in cursor can only be acquired via an authenticated call to delta().
The connection will block until there are changes available or a timeout occurs. The response will be a dictionary that looks like the following example:
{"changes": false, "backoff": 60}
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#longpoll-delta
A dropbox.rest.ErrorResponse with an HTTP status of:
create_copy_ref(from_path)
Creates and returns a copy ref for a specific file. The copy ref can be used to instantly copy that file to the Dropbox of another account.
A dictionary that looks like the following example:
{"expires": "Fri, 31 Jan 2042 21:01:05 +0000", "copy_ref": "z1X6ATl6aWtzOGq0c3g5Ng"}
add_copy_ref(copy_ref, to_path)
Adds the file referenced by the copy ref to the specified path
file_copy(from_path, to_path)
Copy a file or folder to a new location.
A dictionary containing the metadata of the new copy of the file or folder.
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#fileops-copy
A dropbox.rest.ErrorResponse with an HTTP status of:
file_create_folder(path)
Create a folder.
A dictionary containing the metadata of the newly created folder.
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#fileops-create-folder
A dropbox.rest.ErrorResponse with an HTTP status of:
file_delete(path)
Delete a file or folder.
A dictionary containing the metadata of the just deleted file.
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#fileops-delete
A dropbox.rest.ErrorResponse with an HTTP status of:
file_move(from_path, to_path)
Move a file or folder to a new location.
A dictionary containing the metadata of the new copy of the file or folder.
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#fileops-move
A dropbox.rest.ErrorResponse with an HTTP status of:
metadata(path, list=True, file_limit=25000, hash=None, rev=None, include_deleted=False, include_media_info=False)
Retrieve metadata for a file or folder.
A typical use would be:
folder_metadata = client.metadata('/') print "metadata:", folder_metadata
which would return the metadata of the root folder. This will look something like:
{ 'bytes': 0, 'contents': [ { 'bytes': 0, 'icon': 'folder', 'is_dir': True, 'modified': 'Thu, 25 Aug 2011 00:03:15 +0000', 'path': '/Sample Folder', 'rev': '803beb471', 'revision': 8, 'root': 'dropbox', 'size': '0 bytes', 'thumb_exists': False }, { 'bytes': 77, 'icon': 'page_white_text', 'is_dir': False, 'mime_type': 'text/plain', 'modified': 'Wed, 20 Jul 2011 22:04:50 +0000', 'path': '/magnum-opus.txt', 'rev': '362e2029684fe', 'revision': 221922, 'root': 'dropbox', 'size': '77 bytes', 'thumb_exists': False } ], 'hash': 'efdac89c4da886a9cece1927e6c22977', 'icon': 'folder', 'is_dir': True, 'path': '/', 'root': 'app_folder', 'size': '0 bytes', 'thumb_exists': False }
In this example, the root folder contains two things: Sample Folder, which is a folder, and /magnum-opus.txt, which is a text file 77 bytes long
A dictionary containing the metadata of the file or folder (and contained files if appropriate).
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#metadata
A dropbox.rest.ErrorResponse with an HTTP status of:
thumbnail(from_path, size='m', format='JPEG')
Download a thumbnail for an image.
A dropbox.rest.ErrorResponse with an HTTP status of:
thumbnail_and_metadata(from_path, size='m', format='JPEG')
Download a thumbnail for an image alongwith its metadata.
Acts as a thin wrapper around thumbnail() (see thumbnail() comments for more details)
A pair of (response, metadata):
A dropbox.rest.ErrorResponse with an HTTP status of:
search(path, query, file_limit=1000, include_deleted=False)
Search folder for filenames matching query.
A dropbox.rest.ErrorResponse with an HTTP status of:
revisions(path, rev_limit=1000)
Retrieve revisions of a file.
A list of the metadata of all matching files (up to rev_limit entries).
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#revisions
A dropbox.rest.ErrorResponse with an HTTP status of:
restore(path, rev)
Restore a file to a previous revision.
A dictionary containing the metadata of the newly restored file.
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#restore
A dropbox.rest.ErrorResponse with an HTTP status of:
media(path)
Get a temporary unauthenticated URL for a media file.
All of Dropbox's API methods require OAuth, which may cause problems in situations where an application expects to be able to hit a URL multiple times (for example, a media player seeking around a video file). This method creates a time-limited URL that can be accessed without any authentication, and returns that to you, along with an expiration time.
A dictionary that looks like the following example:
{'url': 'https://dl.dropboxusercontent.com/1/view/abcdefghijk/example', 'expires': 'Thu, 16 Sep 2011 01:01:25 +0000'}
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#media
A dropbox.rest.ErrorResponse with an HTTP status of:
share(path, short_url=True)
Create a shareable link to a file or folder.
Shareable links created on Dropbox are time-limited, but don't require any authentication, so they can be given out freely. The time limit should allow at least a day of shareability, though users have the ability to disable a link from their account if they like.
A dictionary that looks like the following example:
{'url': u'https://db.tt/c0mFuu1Y', 'expires': 'Tue, 01 Jan 2030 00:00:00 +0000'}
For a detailed description of what this call returns, visit: https://www.dropbox.com/developers/core/docs#shares
A dropbox.rest.ErrorResponse with an HTTP status of:
Contains the logic around a chunked upload, which uploads a large file to Dropbox via the /chunked_upload endpoint.
upload_chunked(chunk_size=4194304)
Uploads data from this ChunkedUploader's file_obj in chunks, until an error occurs. Throws an exception when an error occurs, and can be called again to resume the upload.
finish(path, overwrite=False, parent_rev=None)
Commits the bytes uploaded by this ChunkedUploader to a file in the users dropbox.
OAuth 2 authorization helper. Use this for web apps.
OAuth 2 has a two-step authorization process. The first step is having the user authorize your app. The second involves getting an OAuth 2 access token from Dropbox.
Example:
from dropbox.client import DropboxOAuth2Flow, DropboxClient def get_dropbox_auth_flow(web_app_session): redirect_uri = "https://my-web-server.org/dropbox-auth-finish" return DropboxOAuth2Flow(APP_KEY, APP_SECRET, redirect_uri, web_app_session, "dropbox-auth-csrf-token") # URL handler for /dropbox-auth-start def dropbox_auth_start(web_app_session, request): authorize_url = get_dropbox_auth_flow(web_app_session).start() redirect_to(authorize_url) # URL handler for /dropbox-auth-finish def dropbox_auth_finish(web_app_session, request): try: access_token, user_id, url_state = \ get_dropbox_auth_flow(web_app_session).finish(request.query_params) except DropboxOAuth2Flow.BadRequestException, e: http_status(400) except DropboxOAuth2Flow.BadStateException, e: # Start the auth flow again. redirect_to("/dropbox-auth-start") except DropboxOAuth2Flow.CsrfException, e: http_status(403) except DropboxOAuth2Flow.NotApprovedException, e: flash('Not approved? Why not?') return redirect_to("/home") except DropboxOAuth2Flow.ProviderException, e: logger.log("Auth error: %s" % (e,)) http_status(403)
DropboxOAuth2Flow(consumer_key, consumer_secret, redirect_uri, session, csrf_token_session_key, locale=None, rest_client=None)
Construct an instance.
start(url_state=None)
Starts the OAuth 2 authorization process.
This function builds an "authorization URL". You should redirect your user's browser to this URL, which will give them an opportunity to grant your app access to their Dropbox account. When the user completes this process, they will be automatically redirected to the redirect_uri you passed in to the constructor.
This function will also save a CSRF token to session[csrf_token_session_key] (as provided to the constructor). This CSRF token will be checked on finish() to prevent request forgery.
finish(query_params)
Call this after the user has visited the authorize URL (see start()), approved your app and was redirected to your redirect URI.
OAuth 2 authorization helper for apps that can't provide a redirect URI (such as the command-line example apps).
Example:
from dropbox.client import DropboxOAuth2FlowNoRedirect, DropboxClient from dropbox import rest as dbrest auth_flow = DropboxOAuth2FlowNoRedirect(APP_KEY, APP_SECRET) authorize_url = auth_flow.start() print "1. Go to: " + authorize_url print "2. Click \"Allow\" (you might have to log in first)." print "3. Copy the authorization code." auth_code = raw_input("Enter the authorization code here: ").strip() try: access_token, user_id = auth_flow.finish(auth_code) except dbrest.ErrorResponse, e: print('Error: %s' % (e,)) return c = DropboxClient(access_token)
DropboxOAuth2FlowNoRedirect(consumer_key, consumer_secret, locale=None, rest_client=None)
Construct an instance.
start()
Starts the OAuth 2 authorization process.
finish(code)
If the user approves your app, they will be presented with an "authorization code". Have the user copy/paste that authorization code into your app and then call this method to get an access token.
A class with all static methods to perform JSON REST requests that is used internally by the Dropbox Client API. It provides just enough gear to make requests and get responses as JSON data (when applicable). All requests happen over SSL.
request(*n, **kw)
Perform a REST request and parse the response.
GET(*n, **kw)
Perform a GET request using RESTClient.request().
POST(*n, **kw)
Perform a POST request using RESTClient.request().
PUT(*n, **kw)
Perform a PUT request using RESTClient.request().
Responses to requests can come in the form of RESTResponse. These are thin wrappers around the socket file descriptor. read() and close() are implemented. It is important to call close() to return the connection back to the connection pool to be reused. If a connection is not closed by the caller it may leak memory. The object makes a best-effort attempt upon destruction to call close(), but it's still best to explicitly call close().
read(amt=None)
Read data off the underlying socket.
close()
Closes the underlying socket.
getheaders()
Returns a dictionary of the response headers.
getheader(name, default=None)
Returns a given response header.
Exception raised when DropboxClient exeriences a problem.
For example, this is raised when the server returns an unexpected non-200 HTTP response.
status
HTTP response status (an int).
reason
HTTP response reason (a string).
headers
HTTP response headers (a list of (header, value) tuples).
body
HTTP response body (string or JSON dict).
error_msg
Error message for developer (optional).
user_error_msg
Error message for end user (optional).
A light wrapper for socket.error that adds some more information.