def __call__(self): self.task.logger.info("Pending") response = self._get_response() if self.status != "Failed": try: return self._process_response(response) except Exception as e: raise MetadataParseError( f"Could not process MDAPI response: {str(e)}", response=response)
def test_finalize_result_mdapi_error(job_factory): job = job_factory(org_id="00Dxxxxxxxxxxxxxxx") response = MagicMock(text="text") try: with finalize_result(job): raise MetadataParseError("MDAPI error", response=response) except MetadataParseError: pass assert job.status == job.Status.failed assert job.exception == "MDAPI error\ntext"
def _process_response(self, response): metadata = [] tags = [ "createdById", "createdByName", "createdDate", "fileName", "fullName", "id", "lastModifiedById", "lastModifiedByName", "lastModifiedDate", "manageableState", "namespacePrefix", "type", ] # These tags will be interpreted into dates parse_dates = ["createdDate", "lastModifiedDate"] for result in parseString( response.content).getElementsByTagName("result"): result_data = {} # Parse fields for tag in tags: result_data[tag] = self._get_element_value(result, tag) # Parse dates for key in parse_dates: if result_data[key]: try: result_data[key] = parse_api_datetime(result_data[key]) except Exception as e: raise MetadataParseError( "Could not parse a datetime in the MDAPI response: {}, {}" .format(str(e), str(result)), response=response, ) metadata.append(result_data) self.metadata[self.metadata_type].extend(metadata) return self.metadata
def test_finalize_result_mdapi_error(job_factory, caplog): job = job_factory( org_id="00Dxxxxxxxxxxxxxxx", plan__version__product__title="Test Product", plan__version__label="1.0", ) response = MagicMock(text="text") try: with finalize_result(job): raise MetadataParseError("MDAPI error", response=response) except MetadataParseError: pass assert job.status == job.Status.failed assert "finalize_result" in job.exception # includes traceback assert "MDAPI error\ntext" in job.exception log_record = next(r for r in caplog.records if "errored" in r.message) assert log_record.message == f"Job {job.id} errored" assert log_record.context["event"] == "job" assert log_record.context["context"] == "test-product/1.0/sample-plan" assert log_record.context["status"] == "error" assert "duration" in log_record.context