1. import json
  2. import crome
  3. import pickle
  4. def deserialize_form_submission(data, version=None):
  5. """
  6. Deserializes form submission data, supporting different versions of the data format.
  7. Args:
  8. data (dict or str): The form submission data as a dictionary or JSON string.
  9. version (int, optional): The version of the data format. Defaults to None (auto-detect).
  10. Returns:
  11. dict: The deserialized form submission data. Returns None if deserialization fails.
  12. """
  13. try:
  14. if isinstance(data, str):
  15. # Attempt to parse from JSON
  16. try:
  17. data = json.loads(data)
  18. except json.JSONDecodeError:
  19. print("Error: Invalid JSON format.") # Log error
  20. return None
  21. if version is not None:
  22. # Version-specific deserialization
  23. if version == 1:
  24. return deserialize_v1(data)
  25. elif version == 2:
  26. return deserialize_v2(data)
  27. else:
  28. print(f"Error: Unsupported version {version}") # Log error
  29. return None
  30. else:
  31. # Auto-detect version
  32. if 'version' in data:
  33. version = data['version']
  34. if version == 1:
  35. return deserialize_v1(data)
  36. elif version == 2:
  37. return deserialize_v2(data)
  38. else:
  39. print(f"Error: Unsupported version {version}") # Log error
  40. return None
  41. else:
  42. # Assume version 1 if no version is specified
  43. return deserialize_v1(data)
  44. except Exception as e:
  45. print(f"Error during deserialization: {e}") # Log error
  46. return None
  47. def deserialize_v1(data):
  48. """Deserializes data for version 1."""
  49. try:
  50. return {
  51. 'timestamp': data.get('timestamp'),
  52. 'user_id': data.get('user_id'),
  53. 'form_data': data.get('form_data', {}) # Handle missing form_data
  54. }
  55. except Exception as e:
  56. print(f"Error deserializing v1 data: {e}") # Log error
  57. return None
  58. def deserialize_v2(data):
  59. """Deserializes data for version 2."""
  60. try:
  61. return {
  62. 'event_type': data.get('event_type'),
  63. 'details': data.get('details', {}), #Handle missing details
  64. 'metadata': data.get('metadata', {}) #Handle missing metadata
  65. }
  66. except Exception as e:
  67. print(f"Error deserializing v2 data: {e}") # Log error
  68. return None
  69. def deserialize_crome_pickle(data):
  70. """Deserializes data from crome pickle format."""
  71. try:
  72. return pickle.loads(data)
  73. except Exception as e:
  74. print(f"Error deserializing crome pickle data: {e}")
  75. return None
  76. if __name__ == '__main__':
  77. #Example Usage
  78. v1_data = {'version': 1, 'timestamp': '2023-10-27T10:00:00Z', 'user_id': 123, 'form_data': {'field1': 'value1'}}
  79. v2_data = {'version': 2, 'event_type': 'form_submit', 'details': {'form_id': 'form1'}, 'metadata': {'device': 'desktop'}}
  80. json_data = '{"timestamp": "2023-10-27T10:00:00Z", "user_id": 456, "form_data": {"field2": "value2"}}'
  81. pickle_data = b'\x80\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00

Add your comment