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))
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))
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))