1. def create_utility_entries(utility_name, entries):
  2. """
  3. Creates a nested structure of utility entries with defensive checks.
  4. Args:
  5. utility_name (str): The name of the utility.
  6. entries (list): A list of entry dictionaries. Each entry should be a dictionary
  7. with keys like 'id', 'description', 'value', etc.
  8. Returns:
  9. dict: A dictionary representing the utility structure. Returns None if invalid input.
  10. Raises:
  11. TypeError: if utility_name is not a string or entries is not a list.
  12. ValueError: if entries contains elements that are not dictionaries.
  13. """
  14. if not isinstance(utility_name, str):
  15. raise TypeError("utility_name must be a string.")
  16. if not isinstance(entries, list):
  17. raise TypeError("entries must be a list.")
  18. utility_data = {
  19. "name": utility_name,
  20. "entries": []
  21. }
  22. for entry in entries:
  23. if not isinstance(entry, dict):
  24. raise ValueError("All entries in the list must be dictionaries.")
  25. # Defensive check for required keys (customize as needed)
  26. if 'id' not in entry or 'description' not in entry:
  27. print(f"Warning: Skipping entry due to missing 'id' or 'description': {entry}")
  28. continue # Skip this entry
  29. utility_data["entries"].append(entry)
  30. return utility_data
  31. if __name__ == '__main__':
  32. # Example Usage:
  33. try:
  34. utility = create_utility_entries("Local Power", [
  35. {"id": 1, "description": "Electricity Usage", "value": 1200},
  36. {"id": 2, "description": "Water Consumption", "value": 500},
  37. {"id": 3, "description": "Gas Usage", "value": 300},
  38. {"description": "Missing ID", "value": 100} #Example of missing id
  39. ])
  40. if utility:
  41. print(utility)
  42. except (TypeError, ValueError) as e:
  43. print(f"Error: {e}")

Add your comment