def __init__(self, service_root, session, params): self.session = session self.params = dict(params) self._service_root = service_root self.service_endpoint = ( "%s/database/1/com.apple.photos.cloud/production/private" % self._service_root) self._albums = None self.params.update({"remapEnums": True, "getCurrentSyncToken": True}) url = "%s/records/query?%s" % (self.service_endpoint, urlencode(self.params)) json_data = ('{"query":{"recordType":"CheckIndexingState"},' '"zoneID":{"zoneName":"PrimarySync"}}') request = self.session.post(url, data=json_data, headers={"Content-type": "text/plain"}) response = request.json() indexing_state = response["records"][0]["fields"]["state"]["value"] if indexing_state != "FINISHED": raise PyiCloudServiceNotActivatedException( "iCloud Photo Library not finished indexing. " "Please try again in a few minutes.") # TODO: Does syncToken ever change? # pylint: disable=fixme # self.params.update({ # 'syncToken': response['syncToken'], # 'clientInstanceId': self.params.pop('clientId') # }) self._photo_assets = {}
def _get_webservice_url(self, ws_key): """Get webservice URL, raise an exception if not exists.""" if self._webservices.get(ws_key) is None: raise PyiCloudServiceNotActivatedException( "Webservice not available", ws_key ) return self._webservices[ws_key]["url"]
def __init__(self, service_root, session, params): self.session = session self.params = dict(params) self._service_root = service_root self._service_endpoint = \ ('%s/database/1/com.apple.photos.cloud/production/private' % self._service_root) self._albums = None self.params.update({'remapEnums': True, 'getCurrentSyncToken': True}) url = ('%s/records/query?%s' % (self._service_endpoint, urlencode(self.params))) json_data = ('{"query":{"recordType":"CheckIndexingState"},' '"zoneID":{"zoneName":"PrimarySync"}}') request = self.session.post(url, data=json_data, headers={'Content-type': 'text/plain'}) response = request.json() indexing_state = response['records'][0]['fields']['state']['value'] if indexing_state != 'FINISHED': raise PyiCloudServiceNotActivatedException( 'iCloud Photo Library not finished indexing. ' 'Please try again in a few minutes.') # TODO: Does syncToken ever change? # self.params.update({ # 'syncToken': response['syncToken'], # 'clientInstanceId': self.params.pop('clientId') # }) self._photo_assets = {}
def _raise_error(self, code, reason): if (self.service.requires_2sa and reason == "Missing X-APPLE-WEBAUTH-TOKEN cookie"): raise PyiCloud2SARequiredException(self.service.user["apple_id"]) if code in ("ZONE_NOT_FOUND", "AUTHENTICATION_FAILED"): reason = ("Please log into https://icloud.com/ to manually " "finish setting up your iCloud service") api_error = PyiCloudServiceNotActivatedException(reason, code) LOGGER.error(api_error) raise (api_error) if code == "ACCESS_DENIED": reason = ( reason + ". Please wait a few minutes then try again." "The remote servers might be trying to throttle requests.") api_error = PyiCloudAPIResponseException(reason, code) LOGGER.error(api_error) raise api_error
def _raise_error(self, code, reason): if self.service.requires_2sa and \ reason == 'Missing X-APPLE-WEBAUTH-TOKEN cookie': raise PyiCloud2SARequiredException(self.service.user['apple_id']) if code == 'ZONE_NOT_FOUND' or code == 'AUTHENTICATION_FAILED': reason = 'Please log into https://icloud.com/ to manually ' \ 'finish setting up your iCloud service' api_error = PyiCloudServiceNotActivatedException(reason, code) logger.error(api_error) raise(api_error) if code == 'ACCESS_DENIED': reason = reason + '. Please wait a few minutes then try ' \ 'again. The remote servers might be trying to ' \ 'throttle requests.' api_error = PyiCloudAPIResponseException(reason, code) logger.error(api_error) raise api_error