1. import re
  2. from collections import defaultdict
  3. def group_response_headers(headers):
  4. """
  5. Groups response headers for isolated environments and performs basic sanity checks.
  6. Args:
  7. headers (dict): A dictionary of response headers.
  8. Returns:
  9. dict: A dictionary where keys are environment names and values are lists of headers
  10. specific to that environment. Returns an empty dictionary if input is invalid.
  11. """
  12. if not isinstance(headers, dict):
  13. return {}
  14. environments = defaultdict(list)
  15. # Define environment-specific header patterns. Can be extended.
  16. environment_patterns = {
  17. "dev": r"X-Dev-.*", #headers starting with X-Dev-
  18. "staging": r"X-Staging-.*", # headers starting with X-Staging-
  19. "prod": r"X-Prod-.*", #headers starting with X-Prod-
  20. }
  21. for key, value in headers.items():
  22. if isinstance(value, str): #process only string header values
  23. for env, pattern in environment_patterns.items():
  24. if re.match(pattern, key):
  25. environments[env].append(key)
  26. break # Only assign to one environment
  27. # Sanity check: Ensure each environment has at least one header.
  28. filtered_environments = {k: v for k, v in environments.items() if v}
  29. return filtered_environments
  30. if __name__ == '__main__':
  31. #Example Usage
  32. headers1 = {
  33. "Content-Type": "application/json",
  34. "X-Dev-Debug": "enabled",
  35. "X-Staging-Feature": "new",
  36. "Server": "nginx",
  37. }
  38. grouped_headers1 = group_response_headers(headers1)
  39. print(grouped_headers1)
  40. headers2 = {
  41. "Content-Type": "application/json",
  42. "X-Prod-Security": "high"
  43. }
  44. grouped_headers2 = group_response_headers(headers2)
  45. print(grouped_headers2)
  46. headers3 = {}
  47. grouped_headers3 = group_response_headers(headers3)
  48. print(grouped_headers3)
  49. headers4 = "not a dictionary"
  50. grouped_headers4 = group_response_headers(headers4)
  51. print(grouped_headers4)

Add your comment