From 4d4f3c31c7f8c48cf739c9a2e5c9117617209550 Mon Sep 17 00:00:00 2001 From: Mario Mancino Date: Fri, 22 Aug 2014 18:42:44 +0200 Subject: [PATCH] added Contacts class --- pyicloud/services/contacts.py | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 pyicloud/services/contacts.py diff --git a/pyicloud/services/contacts.py b/pyicloud/services/contacts.py new file mode 100644 index 0000000..9208df7 --- /dev/null +++ b/pyicloud/services/contacts.py @@ -0,0 +1,49 @@ +from __future__ import absolute_import +import os +import uuid +from datetime import datetime +from calendar import monthrange + + +class ContactsService(object): + """ + The 'Contacts' iCloud service, connects to iCloud and returns contacts. + """ + def __init__(self, service_root, session, params): + self.session = session + self.params = params + self._service_root = service_root + self._contacts_endpoint = '%s/co' % self._service_root + self._contacts_refresh_url = '%s/startup' % self._contacts_endpoint + self._contacts_changeset_url = '%s/changeset' % self._contacts_endpoint + + def refresh_client(self, from_dt=None, to_dt=None): + """ + Refreshes the ContactsService endpoint, ensuring that the + contacts data is up-to-date. + """ + host = self._service_root.split('//')[1].split(':')[0] + self.session.headers.update({'host': host}) + params_contacts = dict(self.params) + params_contacts.update({ + 'clientVersion': '2.1', + 'locale': 'en_US', + 'order': 'last,first', + }) + req = self.session.get(self._contacts_refresh_url, params=params_contacts) + self.response = req.json() + params_refresh = dict(self.params) + params_refresh.update({ + 'prefToken': req.json()["prefToken"], + 'syncToken': req.json()["syncToken"], + }) + self.session.post(self._contacts_changeset_url, params=params_refresh) + req = self.session.get(self._contacts_refresh_url, params=params_contacts) + self.response = req.json() + + def all(self): + """ + Retrieves all contacts. + """ + self.refresh_client() + return self.response['contacts']