Keyerror data token (#316)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
This commit is contained in:
parent
a14a57743d
commit
42331c3e37
1 changed files with 31 additions and 11 deletions
|
@ -1,6 +1,7 @@
|
||||||
"""Drive service."""
|
"""Drive service."""
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
import io
|
import io
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
|
@ -8,6 +9,11 @@ import time
|
||||||
from re import search
|
from re import search
|
||||||
from requests import Response
|
from requests import Response
|
||||||
|
|
||||||
|
from pyicloud.exceptions import PyiCloudAPIResponseException
|
||||||
|
|
||||||
|
|
||||||
|
LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class DriveService:
|
class DriveService:
|
||||||
"""The 'Drive' iCloud service."""
|
"""The 'Drive' iCloud service."""
|
||||||
|
@ -42,6 +48,7 @@ class DriveService:
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
self._raise_if_error(request)
|
||||||
return request.json()[0]
|
return request.json()[0]
|
||||||
|
|
||||||
def get_file(self, file_id, **kwargs):
|
def get_file(self, file_id, **kwargs):
|
||||||
|
@ -52,16 +59,22 @@ class DriveService:
|
||||||
self._document_root + "/ws/com.apple.CloudDocs/download/by_id",
|
self._document_root + "/ws/com.apple.CloudDocs/download/by_id",
|
||||||
params=file_params,
|
params=file_params,
|
||||||
)
|
)
|
||||||
if not response.ok:
|
self._raise_if_error(response)
|
||||||
return None
|
response_json = response.json()
|
||||||
url = response.json()["data_token"]["url"]
|
package_token = response_json.get("package_token")
|
||||||
return self.session.get(url, params=self.params, **kwargs)
|
data_token = response_json.get("data_token")
|
||||||
|
if data_token and data_token.get("url"):
|
||||||
|
return self.session.get(data_token["url"], params=self.params, **kwargs)
|
||||||
|
if package_token and package_token.get("url"):
|
||||||
|
return self.session.get(package_token["url"], params=self.params, **kwargs)
|
||||||
|
raise KeyError("'data_token' nor 'package_token'")
|
||||||
|
|
||||||
def get_app_data(self):
|
def get_app_data(self):
|
||||||
"""Returns the app library (previously ubiquity)."""
|
"""Returns the app library (previously ubiquity)."""
|
||||||
request = self.session.get(
|
request = self.session.get(
|
||||||
self._service_root + "/retrieveAppLibraries", params=self.params
|
self._service_root + "/retrieveAppLibraries", params=self.params
|
||||||
)
|
)
|
||||||
|
self._raise_if_error(request)
|
||||||
return request.json()["items"]
|
return request.json()["items"]
|
||||||
|
|
||||||
def _get_upload_contentws_url(self, file_object):
|
def _get_upload_contentws_url(self, file_object):
|
||||||
|
@ -92,8 +105,7 @@ class DriveService:
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
if not request.ok:
|
self._raise_if_error(request)
|
||||||
return None
|
|
||||||
return (request.json()[0]["document_id"], request.json()[0]["url"])
|
return (request.json()[0]["document_id"], request.json()[0]["url"])
|
||||||
|
|
||||||
def _update_contentws(self, folder_id, sf_info, document_id, file_object):
|
def _update_contentws(self, folder_id, sf_info, document_id, file_object):
|
||||||
|
@ -131,8 +143,7 @@ class DriveService:
|
||||||
headers={"Content-Type": "text/plain"},
|
headers={"Content-Type": "text/plain"},
|
||||||
data=json.dumps(data),
|
data=json.dumps(data),
|
||||||
)
|
)
|
||||||
if not request.ok:
|
self._raise_if_error(request)
|
||||||
return None
|
|
||||||
return request.json()
|
return request.json()
|
||||||
|
|
||||||
def send_file(self, folder_id, file_object):
|
def send_file(self, folder_id, file_object):
|
||||||
|
@ -140,10 +151,8 @@ class DriveService:
|
||||||
document_id, content_url = self._get_upload_contentws_url(file_object)
|
document_id, content_url = self._get_upload_contentws_url(file_object)
|
||||||
|
|
||||||
request = self.session.post(content_url, files={file_object.name: file_object})
|
request = self.session.post(content_url, files={file_object.name: file_object})
|
||||||
if not request.ok:
|
self._raise_if_error(request)
|
||||||
return None
|
|
||||||
content_response = request.json()["singleFile"]
|
content_response = request.json()["singleFile"]
|
||||||
|
|
||||||
self._update_contentws(folder_id, content_response, document_id, file_object)
|
self._update_contentws(folder_id, content_response, document_id, file_object)
|
||||||
|
|
||||||
def create_folders(self, parent, name):
|
def create_folders(self, parent, name):
|
||||||
|
@ -164,6 +173,7 @@ class DriveService:
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
self._raise_if_error(request)
|
||||||
return request.json()
|
return request.json()
|
||||||
|
|
||||||
def rename_items(self, node_id, etag, name):
|
def rename_items(self, node_id, etag, name):
|
||||||
|
@ -183,6 +193,7 @@ class DriveService:
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
self._raise_if_error(request)
|
||||||
return request.json()
|
return request.json()
|
||||||
|
|
||||||
def move_items_to_trash(self, node_id, etag):
|
def move_items_to_trash(self, node_id, etag):
|
||||||
|
@ -202,6 +213,7 @@ class DriveService:
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
self._raise_if_error(request)
|
||||||
return request.json()
|
return request.json()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -217,6 +229,14 @@ class DriveService:
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
return self.root[key]
|
return self.root[key]
|
||||||
|
|
||||||
|
def _raise_if_error(self, response): # pylint: disable=no-self-use
|
||||||
|
if not response.ok:
|
||||||
|
api_error = PyiCloudAPIResponseException(
|
||||||
|
response.reason, response.status_code
|
||||||
|
)
|
||||||
|
LOGGER.error(api_error)
|
||||||
|
raise api_error
|
||||||
|
|
||||||
|
|
||||||
class DriveNode:
|
class DriveNode:
|
||||||
"""Drive node."""
|
"""Drive node."""
|
||||||
|
|
Loading…
Reference in a new issue