def test_hash(self): ar1 = AnonymizeResult(self.test_dataset, self.test_risk_profile, self.test_anon_metrics, 'ANONYMOUS') ar2 = AnonymizeResult(self.test_dataset, self.test_risk_profile, self.test_anon_metrics, 'ANONYMOUS') test_set = {ar1, ar2} self.assertEqual(1, len(test_set))
def test_create_from_response_payload(self): ar1 = AnonymizeResult._from_response(self.test_dataset, self.test_risk_profile, self.raw_metrics, 'ANONYMOUS') ar2 = AnonymizeResult(self.test_dataset, self.test_risk_profile, self.test_anon_metrics, 'ANONYMOUS') self.assertEqual(ar1, ar2)
def test_equaltiy(self): ar1 = AnonymizeResult(self.test_dataset, self.test_risk_profile, self.test_anon_metrics, 'ANONYMOUS') ar2 = AnonymizeResult(self.test_dataset, self.test_risk_profile, self.test_anon_metrics, 'ANONYMOUS') self.assertEqual(ar1, ar2) ar2._dataset = Dataset([["data", "data2"]]) self.assertNotEqual(ar1, ar2)
def _anonymize_result(self, response): """ Creates the result to be delivered back to the caller :param response: :return: """ json_string = response.text response_dict = json.loads(json_string) attributes = self._attributes(response_dict) dataset = Dataset(response_dict["anonymizeResult"]["data"], attributes) risk_profile = RiskProfile(response_dict["riskProfile"]) anon_status = response_dict["anonymizeResult"]["anonymizationStatus"] anonymization_metrics = response_dict["anonymizeResult"]["metrics"] return AnonymizeResult._from_response(dataset, risk_profile, anonymization_metrics, anon_status)
def setUp(self): self.test_data = [['id', 'name'], ['0', 'Viktor'], ['1', 'Jerry']] self.test_attribute_type_mapping = { 'id': AttributeType.IDENTIFYING, 'name': AttributeType.QUASIIDENTIFYING } self.test_dataset = Dataset(self.test_data, self.test_attribute_type_mapping) self.risk_profile_response = { "reIdentificationRisk": { "measures": { "measure_value": "[%]", "Prosecutor_attacker_success_rate": "98.72", "records_affected_by_highest_prosecutor_risk": "97.46000000000001", "sample_uniques": "97.46000000000001", "estimated_prosecutor_risk": "100.0", "population_model": "PITMAN", "highest_journalist_risk": "100.0", "records_affected_by_lowest_risk": "0.06", "estimated_marketer_risk": "98.72000000000001", "Journalist_attacker_success_rate": "98.72", "highest_prosecutor_risk": "100.0", "estimated_journalist_risk": "100.0", "lowest_risk": "33.33333333333333", "Marketer_attacker_success_rate": "98.72", "average_prosecutor_risk": "98.72000000000001", "records_affected_by_highest_journalist_risk": "97.46000000000001", "population_uniques": "39.64593493418713", "quasi_identifiers": [ "Innvandrerbakgrunn", "Ytelse", "Innsatsgruppe", "Ledighetsstatus" ] } }, "distributionOfRisk": { "riskIntervalList": [{ "interval": "]50,100]", "recordsWithRiskWithinInteval": 0.9746, "recordsWithMaxmalRiskWithinInterval": 1.0 }, { "interval": "]33.4,50]", "recordsWithRiskWithinInteval": 0.0248, "recordsWithMaxmalRiskWithinInterval": 0.0254 }, { "interval": "]25,33.4]", "recordsWithRiskWithinInteval": 0.0006, "recordsWithMaxmalRiskWithinInterval": 0.0006 }, { "interval": "]20,25]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]16.7,20]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]14.3,16.7]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]12.5,14.3]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]10,12.5]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]9,10]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]8,9]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]7,8]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]6,7]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]5,6]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]4,5]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]3,4]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]2,3]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]1,2]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]0.1,1]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]0.01,0.1]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]0.001,0.01]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]0.0001,0.001]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]1e-5,0.0001]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]1e-6,1e-5]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }, { "interval": "]0,1e-6]", "recordsWithRiskWithinInteval": 0.0, "recordsWithMaxmalRiskWithinInterval": 0.0 }] } } self.test_riskprofile = RiskProfile(self.risk_profile_response) self.test_anonymize_result = AnonymizeResult(self.test_data, self.test_riskprofile, self.test_metrics)
def test_anonymization_metrics(self): ar = AnonymizeResult(self.test_dataset, self.test_risk_profile, self.test_anon_metrics, 'ANONYMOUS') anonymization_metrics = ar.anonymization_metrics self.assertIsNotNone(anonymization_metrics) self.assertEqual(self.test_anon_metrics, anonymization_metrics)
def test_risk_profile(self): ar = AnonymizeResult(self.test_dataset, self.test_risk_profile, self.test_anon_metrics, 'ANONYMOUS') risk_profile = ar.risk_profile self.assertIsNotNone(risk_profile) self.assertEqual(self.test_risk_profile, risk_profile)
def test_dataset(self): ar = AnonymizeResult(self.test_dataset, self.test_risk_profile, self.test_anon_metrics, 'ANONYMOUS') dataset = ar.dataset self.assertIsNotNone(dataset) self.assertEqual(self.test_dataset, dataset)
def test_init(self): AnonymizeResult(self.test_dataset, self.test_risk_profile, self.test_anon_metrics, 'ANONYMOUS')