Skip to content

Commit a881fe5

Browse files
authored
VED-303: Delete existing hash fields not present in the new mapping. (#603)
1 parent 6d381b4 commit a881fe5

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

redis_sync/src/redis_cacher.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,14 @@ def upload(bucket_name: str, file_key: str) -> dict:
3030
k: json.dumps(v) if isinstance(v, list) else v
3131
for k, v in mapping.items()
3232
}
33+
existing_mapping = redis_client.hgetall(key)
34+
logger.info("Existing mapping for %s: %s", key, existing_mapping)
3335
redis_client.hmset(key, safe_mapping)
36+
logger.info("New mapping for %s: %s", key, safe_mapping)
37+
fields_to_delete = [k for k in existing_mapping if k not in safe_mapping]
38+
if fields_to_delete:
39+
redis_client.hdel(key, fields_to_delete)
40+
logger.info("Deleted mapping fields for %s: %s", key, fields_to_delete)
3441

3542
return {"status": "success", "message": f"File {file_key} uploaded to Redis cache."}
3643
except Exception:

redis_sync/tests/test_redis_cacher.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,29 @@ def test_upload(self):
3939

4040
self.mock_s3_reader.read.assert_called_once_with(bucket_name, file_key)
4141
self.mock_transform_map.assert_called_once_with(mock_data, file_key)
42-
self.mock_redis_client.hmset.assert_called()
42+
self.mock_redis_client.hmset.assert_any_call("vacc_to_diseases", {"b": "c"})
43+
self.mock_redis_client.hmset.assert_any_call("diseases_to_vacc", {"c": "b"})
44+
self.mock_redis_client.hdel.assert_not_called()
45+
self.assertEqual(result, {"status": "success", "message": f"File {file_key} uploaded to Redis cache."})
46+
47+
def test_deletes_extra_fields(self):
48+
mock_data = {"input_key": "input_val"}
49+
mock_transformed_data = {
50+
"hash_name": {"transformed_key": "transformed_val"},
51+
}
52+
53+
self.mock_s3_reader.read = unittest.mock.Mock()
54+
self.mock_s3_reader.read.return_value = mock_data
55+
self.mock_transform_map.return_value = mock_transformed_data
56+
self.mock_redis_client.hgetall.return_value = {"old_key": "old_val"}
57+
58+
bucket_name = "bucket"
59+
file_key = "file-key"
60+
result = RedisCacher.upload(bucket_name, file_key)
61+
62+
self.mock_s3_reader.read.assert_called_once_with(bucket_name, file_key)
63+
self.mock_transform_map.assert_called_once_with(mock_data, file_key)
64+
self.mock_redis_client.hgetall.assert_called_once_with("hash_name")
65+
self.mock_redis_client.hmset.assert_called_once_with("hash_name", {"transformed_key": "transformed_val"})
66+
self.mock_redis_client.hdel.assert_called_once_with("hash_name", ["old_key"])
4367
self.assertEqual(result, {"status": "success", "message": f"File {file_key} uploaded to Redis cache."})

0 commit comments

Comments
 (0)