forked from platypush/platypush
Added draft for Dropbox plugin
This commit is contained in:
parent
a43508a743
commit
a580cc93eb
1 changed files with 119 additions and 0 deletions
119
platypush/plugins/dropbox.py
Normal file
119
platypush/plugins/dropbox.py
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
from platypush.plugins import Plugin, action
|
||||||
|
|
||||||
|
|
||||||
|
class DropboxPlugin(Plugin):
|
||||||
|
"""
|
||||||
|
Plugin to manage a Dropbox account and its files and folders.
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
|
||||||
|
* **dropbox** (``pip install dropbox``)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, access_token, **kwargs):
|
||||||
|
"""
|
||||||
|
:param access_token: Dropbox API access token. You can get yours by creating an app on https://dropbox.com/developers/apps
|
||||||
|
:type access_token: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
self.access_token = access_token
|
||||||
|
self._dbx = None
|
||||||
|
|
||||||
|
def _get_instance(self):
|
||||||
|
import dropbox
|
||||||
|
|
||||||
|
if not self._dbx:
|
||||||
|
self._dbx = dropbox.Dropbox(self.access_token)
|
||||||
|
|
||||||
|
return self._dbx
|
||||||
|
|
||||||
|
@action
|
||||||
|
def get_account(self, account_id=None):
|
||||||
|
"""
|
||||||
|
Get the information about a linked Dropbox account
|
||||||
|
|
||||||
|
:param account_id: account_id. If none is specified then it will retrieve the current user's account id
|
||||||
|
:type account_id: str
|
||||||
|
|
||||||
|
:returns: dict with the following attributes:
|
||||||
|
account_id, name, email, email_verified, disabled, profile_photo_url, team_member_id
|
||||||
|
"""
|
||||||
|
|
||||||
|
dbx = self._get_instance()
|
||||||
|
|
||||||
|
if not account_id:
|
||||||
|
acc = dbx.users_get_current_account()
|
||||||
|
else:
|
||||||
|
acc = dbx.users_get_account(account_id)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'account_id': acc.account_id,
|
||||||
|
'name': acc.name.display_name,
|
||||||
|
'email': acc.email,
|
||||||
|
'email_verified': acc.email_verified,
|
||||||
|
'disabled': acc.disabled,
|
||||||
|
'profile_photo_url': acc.profile_photo_url,
|
||||||
|
'team_member_id': acc.team_member_id,
|
||||||
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
def get_usage(self):
|
||||||
|
"""
|
||||||
|
Get the amount of allocated and used remote space
|
||||||
|
|
||||||
|
:returns: dict
|
||||||
|
"""
|
||||||
|
|
||||||
|
dbx = self._get_instance()
|
||||||
|
usage = dbx.users_get_space_usage()
|
||||||
|
|
||||||
|
return {
|
||||||
|
'used': usage.used,
|
||||||
|
'allocated': usage.allocation.get_individual().allocated,
|
||||||
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
def list_files(self, folder=''):
|
||||||
|
"""
|
||||||
|
Returns the files in a folder
|
||||||
|
|
||||||
|
:param folder: Folder name (default: root)
|
||||||
|
:type folder: str
|
||||||
|
|
||||||
|
:returns: dict
|
||||||
|
"""
|
||||||
|
|
||||||
|
from dropbox.files import FolderMetadata, FileMetadata
|
||||||
|
|
||||||
|
dbx = self._get_instance()
|
||||||
|
files = dbx.files_list_folder(folder).entries
|
||||||
|
entries = []
|
||||||
|
|
||||||
|
for item in files:
|
||||||
|
entry = {
|
||||||
|
attr: getattr(item, attr)
|
||||||
|
for attr in ['id', 'name', 'path_display', 'path_lower', 'parent_shared_folder_id', 'property_groups']
|
||||||
|
}
|
||||||
|
|
||||||
|
if item.sharing_info:
|
||||||
|
entry['sharing_info'] = {
|
||||||
|
attr: getattr(item.sharing_info, attr)
|
||||||
|
for attr in ['no_access', 'parent_shared_folder_id', 'read_only', 'shared_folder_id', 'traverse_only']
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
entry['sharing_info'] = {}
|
||||||
|
|
||||||
|
if isinstance(item, FileMetadata):
|
||||||
|
entry['client_modified'] = item.client_modified.isoformat()
|
||||||
|
entry['server_modified'] = item.server_modified.isoformat()
|
||||||
|
|
||||||
|
for attr in ['content_hash', 'has_explicit_shared_members', 'is_downloadable', 'rev', 'size']:
|
||||||
|
entry[attr] = getattr(item, attr)
|
||||||
|
|
||||||
|
entries.append(entry)
|
||||||
|
|
||||||
|
return entries
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
Loading…
Reference in a new issue