def get_folders(self, **kwargs): folder_id = kwargs.get('folder_id') if folder_id is None: return [{ 'id': '0', 'path': '/', 'addon': 'box', 'kind': 'folder', 'name': '/ (Full Box)', 'urls': { # 'folders': node.api_url_for('box_folder_list', folderId=0), 'folders': api_v2_url('nodes/{}/addons/box/folders/'.format( self.owner._id), params={'id': '0'}) } }] try: Provider(self.external_account).refresh_oauth_key() client = BoxClient(self.external_account.oauth_key) except BoxClientException: raise HTTPError(http.FORBIDDEN) try: metadata = client.get_folder(folder_id) except BoxClientException: raise HTTPError(http.NOT_FOUND) except MaxRetryError: raise HTTPError(http.BAD_REQUEST) # Raise error if folder was deleted if metadata.get('is_deleted'): raise HTTPError(http.NOT_FOUND) folder_path = '/'.join( [x['name'] for x in metadata['path_collection']['entries']] + [metadata['name']]) return [{ 'addon': 'box', 'kind': 'folder', 'id': item['id'], 'name': item['name'], 'path': os.path.join(folder_path, item['name']).replace('All Files', ''), 'urls': { 'folders': api_v2_url('nodes/{}/addons/box/folders/'.format( self.owner._id), params={'id': item['id']}) } } for item in metadata['item_collection']['entries'] if item['type'] == 'folder']
def get_folders(self, **kwargs): folder_id = kwargs.get('folder_id') if folder_id is None: return [{ 'id': '0', 'path': '/', 'addon': 'box', 'kind': 'folder', 'name': '/ (Full Box)', 'urls': { # 'folders': node.api_url_for('box_folder_list', folderId=0), 'folders': api_v2_url('nodes/{}/addons/box/folders/'.format(self.owner._id), params={'id': '0'} ) } }] try: Provider(self.external_account).refresh_oauth_key() client = BoxClient(self.external_account.oauth_key) except BoxClientException: raise HTTPError(http.FORBIDDEN) try: metadata = client.get_folder(folder_id) except BoxClientException: raise HTTPError(http.NOT_FOUND) except MaxRetryError: raise HTTPError(http.BAD_REQUEST) # Raise error if folder was deleted if metadata.get('is_deleted'): raise HTTPError(http.NOT_FOUND) folder_path = '/'.join( [ x['name'] for x in metadata['path_collection']['entries'] ] + [metadata['name']] ) return [ { 'addon': 'box', 'kind': 'folder', 'id': item['id'], 'name': item['name'], 'path': os.path.join(folder_path, item['name']).replace('All Files', ''), 'urls': { 'folders': api_v2_url('nodes/{}/addons/box/folders/'.format(self.owner._id), params={'id': item['id']} ) } } for item in metadata['item_collection']['entries'] if item['type'] == 'folder' ]
def _update_folder_data(self): if self.folder_id is None: return None if not self._folder_data: try: Box(self.external_account).refresh_oauth_key() client = BoxClient(self.external_account.oauth_key) self._folder_data = client.get_folder(self.folder_id) except BoxClientException: return self.folder_name = self._folder_data['name'] self.folder_path = '/'.join( [x['name'] for x in self._folder_data['path_collection']['entries']] + [self._folder_data['name']] ) self.save()
def _folder_data(self, folder_id): # Split out from set_folder for ease of testing, due to # outgoing requests. Should only be called by set_folder try: Provider(self.external_account).refresh_oauth_key(force=True) except InvalidGrantError: raise exceptions.InvalidAuthError() try: client = BoxClient(self.external_account.oauth_key) folder_data = client.get_folder(self.folder_id) except BoxClientException: raise exceptions.InvalidFolderError() folder_name = folder_data['name'].replace('All Files', '') or '/ (Full Box)' folder_path = '/'.join( [x['name'] for x in folder_data['path_collection']['entries'] if x['name']] + [folder_data['name']] ).replace('All Files', '') or '/' return folder_name, folder_path