コード例 #1
0
    def __create_fetch_json_records(self,
                                    records=None,
                                    record_type=None,
                                    record_names=None,
                                    references=None):
        json_records = []

        # Create JSON for records
        if records is not None:
            for record in records:
                json_records.append(record.json())

        # Create JSON for record names
        if record_names is not None:
            for record_name in record_names:
                record = Record()
                record.record_type = record_type
                record.record_name = record_name
                json_records.append(record.json())

        # Create JSON for record names
        if references is not None:
            for reference in references:
                record = Record()
                record_name = reference.record_name
                if record_name is not None and len(record_name) > 0:
                    record.record_name = record_name
                    json_records.append(record.json())

        return json_records
コード例 #2
0
    def fetch_records(self,
                      records=None,
                      record_type=None,
                      record_names=None,
                      references=None,
                      options=None):
        """Fetch one or more records."""
        # https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CloutKitWebServicesReference/LookupRecords/LookupRecords.html#//apple_ref/doc/uid/TP40015240-CH6-SW2
        json_records = self.__create_fetch_json_records(
            records, record_type, record_names, references)

        payload = {
            'records': json_records,
        }
        if options is not None:
            payload.update(options)

        result = Request.perform_request('POST',
                                         self.container,
                                         self.database_type,
                                         'records/lookup',
                                         payload,
                                         logger=self.__logger)

        if result.is_success is True:
            objects = []
            objects_json = parse(result.value, 'records')
            for object_json in objects_json:
                objects.append(Record(object_json))

            result.value = objects

        return result
コード例 #3
0
    def save_records(self,
                     records,
                     auto_fetch=False,
                     force=False,
                     options=None):
        """Save records to the database."""
        # https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CloutKitWebServicesReference/ModifyRecords/ModifyRecords.html#//apple_ref/doc/uid/TP40015240-CH2-SW9
        operations = self.__create_modify_operations(records, auto_fetch,
                                                     force)

        payload = {
            'operations': operations,
        }
        if options is not None:
            payload.update(options)

        result = Request.perform_request('POST',
                                         self.container,
                                         self.database_type,
                                         'records/modify',
                                         payload,
                                         logger=self.__logger)

        if result.is_success is True:
            objects = []
            objects_json = parse(result.value, 'records')
            for object_json in objects_json:
                objects.append(Record(object_json))

            result.value = objects

        return result
コード例 #4
0
    def fetch_changed_records(self, zone_id, options=None):
        """Fetch changed records in a given custom zone."""
        # https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CloutKitWebServicesReference/ChangeRecords/ChangeRecords.html#//apple_ref/doc/uid/TP40015240-CH7-SW1
        if self.database_type == 'private':
            return None

        payload = {
            'zoneID': zone_id,
        }
        if options is not None:
            payload.update(options)

        result = Request.perform_request('POST',
                                         self.container,
                                         'private',
                                         'records/changes',
                                         payload,
                                         logger=self.__logger)

        if result.is_success is True:
            objects = []
            objects_json = parse(result.value, 'records')
            for object_json in objects_json:
                objects.append(Record(object_json))

            more_coming = parse(result.value, 'moreComing')
            reverse = parse(result.value, 'reverse')
            sync_token = parse(result.value, 'syncToken')

            result.value = (objects, more_coming, reverse, sync_token)

        return result
コード例 #5
0
    def perform_query(self, query, continuation_marker=None, options=None):
        """Fetch records using a query."""
        # https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CloutKitWebServicesReference/QueryingRecords/QueryingRecords.html#//apple_ref/doc/uid/TP40015240-CH5-SW4
        payload = {
            'query': query.json(),
        }

        if continuation_marker is not None:
            if options is None:
                options = {}
            options['continuationMarker'] = continuation_marker

        if options is not None:
            payload.update(options)

        result = Request.perform_request('POST',
                                         self.container,
                                         self.database_type,
                                         'records/query',
                                         payload,
                                         logger=self.__logger)

        if result.is_success is True:
            objects = []
            objects_json = parse(result.value, 'records')
            for object_json in objects_json:
                objects.append(Record(object_json))
            continuation_marker = parse(result.value, 'continuationMarker')

            result.value = (objects, continuation_marker)

        return result
コード例 #6
0
ファイル: database.py プロジェクト: Baza207/CloudKitPy
    def __create_fetch_json_records(
        self,
        records=None,
        record_type=None,
        record_names=None,
        references=None
    ):
        json_records = []

        # Create JSON for records
        if records is not None:
            for record in records:
                json_records.append(record.json())

        # Create JSON for record names
        if record_names is not None:
            for record_name in record_names:
                record = Record()
                record.record_type = record_type
                record.record_name = record_name
                json_records.append(record.json())

        # Create JSON for record names
        if references is not None:
            for reference in references:
                record = Record()
                record_name = reference.record_name
                if record_name is not None and len(record_name) > 0:
                    record.record_name = record_name
                    json_records.append(record.json())

        return json_records
コード例 #7
0
    def delete_records(self, records, force=False, options=None):
        """Delete one or more records."""
        # https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CloutKitWebServicesReference/ModifyRecords/ModifyRecords.html#//apple_ref/doc/uid/TP40015240-CH2-SW9
        operation_type = 'delete'
        if force is True:
            operation_type = 'forceDelete'

        operations = []
        for record in records:
            operation = {
                'operationType': operation_type,
                'record': record.json()
            }
            operations.append(operation)

        payload = {
            'operations': operations,
        }
        if options is not None:
            payload.update(options)

        result = Request.perform_request('POST',
                                         self.container,
                                         self.database_type,
                                         'records/modify',
                                         payload,
                                         logger=self.__logger)

        if result.is_success is True:
            objects = []
            objects_json = parse(result.value, 'records')
            for object_json in objects_json:
                objects.append(Record(object_json))

            result.value = objects

        return result