diff --git a/SciXPipelineUtils/scix_id.py b/SciXPipelineUtils/scix_id.py index fcc7dba..a7ccff8 100644 --- a/SciXPipelineUtils/scix_id.py +++ b/SciXPipelineUtils/scix_id.py @@ -244,8 +244,12 @@ def generate_scix_id( if type(hash_data) != dict: try: hash_data = json.loads(hash_data) + except ValueError as e: raise e + + # Use json.dumps with sort_keys=True to sort all nested dictionary keys + hash_data = json.loads(json.dumps(hash_data, sort_keys=True)) hashed_data = generate_bib_data_hash( hash_data, strip_characters=strip_characters, user_fields=user_fields ) diff --git a/tests/test_scix_id.py b/tests/test_scix_id.py index 35593d2..3b72cfb 100644 --- a/tests/test_scix_id.py +++ b/tests/test_scix_id.py @@ -68,7 +68,7 @@ def test_generate_scix_id(self): } scix_id = scixid.generate_scix_id(test_bib_data) scix_id_2 = scixid.generate_scix_id(json.dumps(test_bib_data)) - self.assertEqual(scix_id, "7SNR-3N03-VSD6") + self.assertEqual(scix_id, "9153-JA78-G9SG") self.assertEqual(scix_id, scix_id_2) def test_generate_scix_id_user_fields(self): @@ -81,7 +81,7 @@ def test_generate_scix_id_user_fields(self): user_fields = ["id"] scix_id = scixid.generate_scix_id(test_bib_data, user_fields=user_fields) scix_id_2 = scixid.generate_scix_id(test_bib_data) - self.assertEqual(scix_id, "1NMC-KCFG-RVH8") + self.assertEqual(scix_id, "3YG1-418S-68AF") self.assertNotEqual(scix_id, scix_id_2) def test_generate_scix_id_special_characters_true(self): @@ -93,7 +93,7 @@ def test_generate_scix_id_special_characters_true(self): } scix_id = scixid.generate_scix_id(test_bib_data) scix_id_2 = scixid.generate_scix_id(json.dumps(test_bib_data)) - self.assertEqual(scix_id, "7SNR-3N03-VSD6") + self.assertEqual(scix_id, "9153-JA78-G9SG") self.assertEqual(scix_id, scix_id_2) def test_generate_scix_id_special_characters_true_comparison(self): @@ -113,7 +113,7 @@ def test_generate_scix_id_special_characters_true_comparison(self): scix_id = scixid.generate_scix_id(test_bib_data) scix_id_2 = scixid.generate_scix_id(test_bib_data_2) - self.assertEqual(scix_id, "7SNR-3N03-VSD6") + self.assertEqual(scix_id, "9153-JA78-G9SG") self.assertEqual(scix_id, scix_id_2) def test_generate_scix_id_special_characters_false(self): @@ -125,7 +125,7 @@ def test_generate_scix_id_special_characters_false(self): } scix_id = scixid.generate_scix_id(test_bib_data, strip_characters=False) scix_id_2 = scixid.generate_scix_id(test_bib_data) - self.assertEqual(scix_id, "APGB-1BCS-SAG1") + self.assertEqual(scix_id, "8Z91-4S23-1KJX") self.assertNotEqual(scix_id, scix_id_2) def test_generate_scix_id_other(self): @@ -136,5 +136,5 @@ def test_generate_scix_id_other(self): "abs": ["words"], } scix_id = scixid.generate_scix_id(json.dumps(test_bib_data), hash_data_type="other") - self.assertNotEqual(scix_id, "7SNR-3N03-VSD6") + self.assertNotEqual(scix_id, "9153-JA78-G9SG") self.assertEqual(scix_id, "6N22-EN04-7GHF")