diff --git a/README.md b/README.md index 7c94e3e..5cf1f4b 100644 --- a/README.md +++ b/README.md @@ -183,6 +183,16 @@ refresh_session = client.drive_refresh_session(item_id) close_session = client.drive_close_session(item_id) ``` +#### Download the contents of a specific item +``` +contents_bytes = client.drive_download_contents(item_id) +``` + +#### Get a Drive item resource +``` +drive_item_dict = client.drive_get_item(item_id) +``` + #### Get worksheets ``` get_worksheets = client.excel_get_worksheets(item_id) @@ -254,4 +264,4 @@ update_range = client.excel_update_range(item_id, worksheets_id) ## Tests ``` test/test.py -``` \ No newline at end of file +``` diff --git a/microsoftgraph/client.py b/microsoftgraph/client.py index 32868fe..c480dce 100644 --- a/microsoftgraph/client.py +++ b/microsoftgraph/client.py @@ -483,6 +483,22 @@ def drive_close_session(self, item_id, **kwargs): url = "https://graph.microsoft.com/beta/me/drive/items/{0}/workbook/closeSession".format(item_id) return self._post(url, **kwargs) + @token_required + def drive_download_contents(self, item_id, params=None, **kwargs): + url = "https://graph.microsoft.com/beta/me/drive/items/{0}/content".format(item_id) + return self._get(url, params=params, **kwargs) + + @token_required + def drive_get_item(self, item_id, params=None, **kwargs): + url = "https://graph.microsoft.com/beta/me/drive/items/{0}".format(item_id) + return self._get(url, params=params, **kwargs) + + @token_required + def drive_upload_item(self, item_id, params=None, **kwargs): + url = "https://graph.microsoft.com/beta/me/drive/items/{0}/content".format(item_id) + kwargs['headers'] = {'Content-Type': 'text/plain'} + return self._put(url, params=params, **kwargs) + # Excel @token_required def excel_get_worksheets(self, item_id, params=None, **kwargs): @@ -600,7 +616,7 @@ def _parse(self, response): if 'application/json' in response.headers['Content-Type']: r = response.json() else: - r = response.text + r = response.content if status_code in (200, 201, 202): return r elif status_code == 204: @@ -648,4 +664,9 @@ def _parse(self, response): elif status_code == 509: raise exceptions.BandwidthLimitExceeded(r) else: + if r['error']['innerError']['code'] == 'lockMismatch': + # File is currently locked due to being open in the web browser + # while attempting to reupload a new version to the drive. + # Thus temporarily unavailable. + raise exceptions.ServiceUnavailable(r) raise exceptions.UnknownError(r)