def update_query(self, query_id, name=None, filter=None, **kwargs):
        """Update existing query in device query service.

        .. code-block:: python

            q = api.get_query(...)
            q.filter["custom_attributes"]["foo"] = {
                "$eq": "bar"
            }
            new_q = api.update_query(
                query_id = q.id,
                name = "new name",
                filter = q.filter
            )

        :param str query_id: Existing query ID to update (Required)
        :param str name: name of query
        :param dict filter: query properties to apply
        :return: the newly updated query object.
        :rtype: Query
        """
        # Get urlencoded query attribute
        filter_obj = filters.legacy_filter_formatter(
            dict(filter=filter),
            Device._get_attributes_map()) if filter else None

        query_map = Query._create_request_map(kwargs)
        body = DeviceQueryPostPutRequest(name=name,
                                         query=filter_obj['filter'],
                                         **query_map)
        api = self._get_api(device_directory.DefaultApi)
        return Query(api.device_query_update(query_id, body))
    def add_query(self, name, filter, **kwargs):
        """Add a new query to device query service.

        .. code-block:: python

            f = api.add_query(
                name = "Query name",
                filter = {
                    "device_id": {"$eq": "01234"},
                    custom_attributes = {
                        "foo": {"$eq": "bar"}
                    }
                }
            )
            print(f.created_at)

        :param str name: Name of query (Required)
        :param dict filter: Filter properties to apply (Required)
        :param return: The newly created query object.
        :return: the newly created query object
        :rtype: Query
        """
        # Ensure we have the correct types and get the new query object
        filter_obj = filters.legacy_filter_formatter(
            dict(filter=filter),
            Device._get_attributes_map()) if filter else None
        query_map = Query._create_request_map(kwargs)
        # Create the DeviceQuery object
        f = DeviceQuery(name=name, query=filter_obj['filter'], **query_map)
        api = self._get_api(device_directory.DefaultApi)
        return Query(api.device_query_create(f))
Esempio n. 3
0
    def update_campaign(self,
                        campaign_object=None,
                        campaign_id=None,
                        **kwargs):
        """Update an update campaign.

        :param :class:`Campaign` campaign_object: Campaign object to update (Required)
        :return: updated campaign object
        :rtype: Campaign
        """
        api = self._get_api(update_service.DefaultApi)
        if campaign_object:
            campaign_id = campaign_object.id
            campaign_object = campaign_object._create_patch_request()
        else:
            campaign_object = Campaign._create_request_map(kwargs)
        if 'device_filter' in campaign_object:
            campaign_object["device_filter"] = filters.legacy_filter_formatter(
                dict(filter=campaign_object["device_filter"]),
                Device._get_attributes_map())['filter']
        if 'when' in campaign_object:
            # FIXME: randomly validating an input here is a sure route to nasty surprises elsewhere
            campaign_object['when'] = force_utc(campaign_object['when'])
        return Campaign(
            api.update_campaign_update(campaign_id=campaign_id,
                                       campaign=campaign_object))
Esempio n. 4
0
    def add_campaign(self, name, device_filter, **kwargs):
        """Add new update campaign.

        Add an update campaign with a name and device filtering. Example:

        .. code-block:: python

            device_api, update_api = DeviceDirectoryAPI(), UpdateAPI()

            # Get a filter to use for update campaign
            query_obj = device_api.get_query(query_id="MYID")

            # Create the campaign
            new_campaign = update_api.add_campaign(
                name="foo",
                device_filter=query_obj.filter
            )

        :param str name: Name of the update campaign (Required)
        :param str device_filter: The device filter to use (Required)
        :param str manifest_id: ID of the manifest with description of the update
        :param str description: Description of the campaign
        :param int scheduled_at: The timestamp at which update campaign is scheduled to start
        :param str state: The state of the campaign. Values:
            "draft", "scheduled", "devicefetch", "devicecopy", "publishing",
            "deploying", "deployed", "manifestremoved", "expired"
        :return: newly created campaign object
        :rtype: Campaign
        """
        device_filter = filters.legacy_filter_formatter(
            dict(filter=device_filter),
            Device._get_attributes_map()
        )
        campaign = Campaign._create_request_map(kwargs)
        if 'when' in campaign:
            campaign['when'] = force_utc(campaign['when'])
        body = UpdateCampaignPostRequest(
            name=name,
            device_filter=device_filter['filter'],
            **campaign)
        api = self._get_api(update_service.DefaultApi)
        return Campaign(api.update_campaign_create(body))
    def update_query(self, query_id, name=None, filter=None, **kwargs):
        """Update existing query in device query service.

        .. code-block:: python

            q = api.get_query(...)
            q.filter["custom_attributes"]["foo"] = {
                "$eq": "bar"
            }
            new_q = api.update_query(
                query_id = q.id,
                name = "new name",
                filter = q.filter
            )

        :param str query_id: Existing query ID to update (Required)
        :param str name: name of query
        :param dict filter: query properties to apply
        :return: the newly updated query object.
        :rtype: Query
        """
        # Get urlencoded query attribute
        filter_obj = filters.legacy_filter_formatter(
            dict(filter=filter),
            Device._get_attributes_map()
        ) if filter else None

        query_map = Query._create_request_map(kwargs)

        # The filter option is optional on update but DeviceQueryPostPutRequest sets it None, which is invalid.
        # Manually create a resource body without the filter parameter if only the name is provided.
        if filter is None:
            body = {"name": name}
        else:
            body = DeviceQueryPostPutRequest(name=name, query=filter_obj['filter'], **query_map)

        api = self._get_api(device_directory.DefaultApi)
        return Query(api.device_query_update(query_id, body))