diff --git a/lightbeam/api.py b/lightbeam/api.py index f3ba6f2..27a062c 100644 --- a/lightbeam/api.py +++ b/lightbeam/api.py @@ -21,6 +21,7 @@ def __init__(self, lightbeam=None): self.lightbeam = lightbeam self.logger = self.lightbeam.logger self.config = None + self.reports_identity = False # prepares this API object by fetching some of its metadata and # setting up data and objects for further use @@ -239,6 +240,8 @@ def load_swagger_docs(self): if not response.ok: raise Exception("OpenAPI metadata URL returned status {0} ({1})".format(response.status_code, (response.content[:75] + "...") if len(response.content)>75 else response.content)) swagger = response.json() + if '"x-Ed-Fi-isIdentity":' in response.text: + self.reports_identity = True except Exception as e: self.logger.critical(f"Unable to load {endpoint_type} Swagger from API... terminating. Check API connectivity.") diff --git a/lightbeam/delete.py b/lightbeam/delete.py index 655c790..78d14e0 100644 --- a/lightbeam/delete.py +++ b/lightbeam/delete.py @@ -54,8 +54,10 @@ async def do_deletes(self, endpoint): tasks = [] # determine the fields that uniquely define a record for this endpoint - params_structure = self.lightbeam.api.get_params_for_endpoint(endpoint) - + interpolation_type = 'required' + if self.lightbeam.api.reports_identity: interpolation_type = 'identity' + params_structure = self.lightbeam.api.get_params_for_endpoint(endpoint, type=interpolation_type) + # for Descriptors, we need to fetch all Descriptor values first, then we can look up the ID for deletion if endpoint.endswith('Descriptors'): self.logger.info("fetching current descriptors from endpoint {0} ...".format(endpoint))