def retrieve_latest( self, id: Union[int, List[int]] = None, external_id: Union[str, List[str]] = None, before: Union[int, str, datetime] = None, ) -> Union[Datapoints, DatapointsList]: """`Get the latest datapoint for one or more time series <https://docs.cognite.com/api/v1/#operation/getLatest>`_ Args: id (Union[int, List[int]]: Id or list of ids. external_id (Union[str, List[str]): External id or list of external ids. before: Union[int, str, datetime]: Get latest datapoint before this time. Returns: Union[Datapoints, DatapointsList]: A Datapoints object containing the requested data, or a list of such objects. Examples: Getting the latest datapoint in a time series. This method returns a Datapoints object, so the datapoint will be the first element:: >>> from cognite.client import CogniteClient >>> c = CogniteClient() >>> res = c.datapoints.retrieve_latest(id=1)[0] You can also get the first datapoint before a specific time:: >>> from cognite.client import CogniteClient >>> c = CogniteClient() >>> res = c.datapoints.retrieve_latest(id=1, before="2d-ago")[0] If you need the latest datapoint for multiple time series simply give a list of ids. Note that we are using external ids here, but either will work:: >>> from cognite.client import CogniteClient >>> c = CogniteClient() >>> res = c.datapoints.retrieve_latest(external_id=["abc", "def"]) >>> latest_abc = res[0][0] >>> latest_def = res[1][0] """ before = cognite.client.utils._time.timestamp_to_ms(before) if before else None all_ids = self._process_ids(id, external_id, wrap_ids=True) is_single_id = self._is_single_identifier(id, external_id) if before: for id in all_ids: id.update({"before": before}) tasks = [ {"url_path": self._RESOURCE_PATH + "/latest", "json": {"items": chunk}} for chunk in utils._auxiliary.split_into_chunks(all_ids, self._RETRIEVE_LATEST_LIMIT) ] tasks_summary = utils._concurrency.execute_tasks_concurrently( self._post, tasks, max_workers=self._config.max_workers ) if tasks_summary.exceptions: raise tasks_summary.exceptions[0] res = tasks_summary.joined_results(lambda res: res.json()["items"]) if is_single_id: return Datapoints._load(res[0], cognite_client=self._cognite_client) return DatapointsList._load(res, cognite_client=self._cognite_client)
def retrieve_latest( self, id: Union[int, List[int]] = None, external_id: Union[str, List[str]] = None, before: Union[int, str, datetime] = None, ) -> Union[Datapoints, DatapointsList]: """Get the latest datapoint for one or more time series Args: id (Union[int, List[int]]: Id or list of ids. external_id (Union[str, List[str]): External id or list of external ids. before: Union[int, str, datetime]: Get latest datapoint before this time. Returns: Union[Datapoints, DatapointsList]: A Datapoints object containing the requested data, or a list of such objects. Examples: Getting the latest datapoint in a time series. This method returns a Datapoints object, so the datapoint will be the first element:: >>> from cognite.client import CogniteClient >>> c = CogniteClient() >>> res = c.datapoints.retrieve_latest(id=1)[0] You can also get the first datapoint before a specific time:: >>> from cognite.client import CogniteClient >>> c = CogniteClient() >>> res = c.datapoints.retrieve_latest(id=1, before="2d-ago")[0] If you need the latest datapoint for multiple time series simply give a list of ids. Note that we are using external ids here, but either will work:: >>> from cognite.client import CogniteClient >>> c = CogniteClient() >>> res = c.datapoints.retrieve_latest(external_id=["abc", "def"]) >>> latest_abc = res[0][0] >>> latest_def = res[1][0] """ before = cognite.client.utils._time.timestamp_to_ms(before) if before else None all_ids = self._process_ids(id, external_id, wrap_ids=True) is_single_id = self._is_single_identifier(id, external_id) if before: for id in all_ids: id.update({"before": before}) res = self._post(url_path=self._RESOURCE_PATH + "/latest", json={"items": all_ids}).json()["items"] if is_single_id: return Datapoints._load(res[0], cognite_client=self._cognite_client) return DatapointsList._load(res, cognite_client=self._cognite_client)