datavalue 0.1.12__py3-none-any.whl → 0.1.13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59,17 +59,28 @@ class PrimitiveData:
59
59
 
60
60
  # Public methods
61
61
  def to_dict(self) -> dict:
62
+ normalized_possible = None
63
+ if self.possible_values is not None:
64
+ normalized_possible = []
65
+ for item in self.possible_values:
66
+ if isinstance(item, PrimitiveData):
67
+ normalized_possible.append(item.to_dict())
68
+ elif isinstance(item, type):
69
+ normalized_possible.append({"__class__": item.__name__})
70
+ else:
71
+ normalized_possible.append(item)
72
+
62
73
  return {
63
- "DATA_TYPE":self.data_type.__name__ if hasattr(self.data_type, '__name__') else str(self.data_type),
64
- "VALUE":self.value,
65
- "MAXIMUM_LENGTH":self.maximum_length,
66
- "MINIMUM_LENGTH":self.minimum_length,
67
- "MAXIMUM_SIZE":self.maximum_size,
68
- "MINIMUM_SIZE":self.minimum_size,
69
- "POSSIBLE_VALUES":self.possible_values if self.possible_values is not None else None,
70
- "REGULAR_EXPRESSION":self.regular_expression,
71
- "DATA_CLASS":self.data_class,
72
- "__type__":"PrimitiveData"
74
+ "DATA_TYPE": self.data_type.__name__ if hasattr(self.data_type, '__name__') else str(self.data_type),
75
+ "VALUE": self.value,
76
+ "MAXIMUM_LENGTH": self.maximum_length,
77
+ "MINIMUM_LENGTH": self.minimum_length,
78
+ "MAXIMUM_SIZE": self.maximum_size,
79
+ "MINIMUM_SIZE": self.minimum_size,
80
+ "POSSIBLE_VALUES": normalized_possible,
81
+ "REGULAR_EXPRESSION": self.regular_expression,
82
+ "DATA_CLASS": self.data_class,
83
+ "__type__": "PrimitiveData"
73
84
  }
74
85
 
75
86
  def to_json(self) -> str:
@@ -77,36 +88,45 @@ class PrimitiveData:
77
88
 
78
89
  @classmethod
79
90
  def from_dict(cls, data: dict) -> 'PrimitiveData':
80
- # Expected keys definition
81
91
  expected_keys = {
82
92
  "DATA_TYPE", "VALUE", "MAXIMUM_LENGTH", "MINIMUM_LENGTH",
83
93
  "MAXIMUM_SIZE", "MINIMUM_SIZE", "POSSIBLE_VALUES",
84
94
  "REGULAR_EXPRESSION", "DATA_CLASS", "__type__"
85
95
  }
86
96
 
87
- # Verify unknown keys on the table
88
97
  unknown_keys = set(data.keys()) - expected_keys
89
98
  if unknown_keys:
90
99
  raise ValueError(f"Unknown keys in data structure: {unknown_keys}")
91
100
 
92
101
  # Secure type mapping
93
102
  type_mapping = {
94
- "str": str,
95
- "int": int,
96
- "float": float,
97
- "bool": bool,
98
- "bytes": bytes,
99
- "bytearray": bytearray,
100
- "NoneType": type(None)
103
+ "str": str, "int": int, "float": float, "bool": bool,
104
+ "bytes": bytes, "bytearray": bytearray, "NoneType": type(None)
101
105
  }
102
106
 
103
107
  type_str = data.get("DATA_TYPE")
104
108
  real_type = type_mapping.get(type_str)
105
109
 
106
110
  if real_type is None and type_str != "None":
107
- raise TypeError(f"Unsupported or unsafe data type for deserialization: {type_str}")
111
+ raise TypeError(f"Unsupported or unsafe data type: {type_str}")
112
+
113
+ # --- NORMALIZACIÓN DE POSSIBLE_VALUES (DESERIALIZACIÓN) ---
114
+ raw_possible = data.get("POSSIBLE_VALUES")
115
+ possible_values = None
116
+ if raw_possible is not None:
117
+ possible_values = []
118
+ for item in raw_possible:
119
+ if isinstance(item, dict):
120
+ if item.get("__type__") == "PrimitiveData":
121
+ possible_values.append(cls.from_dict(item))
122
+ elif "__class__" in item:
123
+ possible_values.append(type_mapping.get(item["__class__"]))
124
+ else:
125
+ possible_values.append(item)
126
+ else:
127
+ possible_values.append(item)
128
+ # ----------------------------------------------------------
108
129
 
109
- # return instance result
110
130
  return cls(
111
131
  data_type=real_type,
112
132
  value=data.get("VALUE"),
@@ -114,7 +134,7 @@ class PrimitiveData:
114
134
  minimum_length=data.get("MINIMUM_LENGTH"),
115
135
  maximum_size=data.get("MAXIMUM_SIZE"),
116
136
  minimum_size=data.get("MINIMUM_SIZE"),
117
- possible_values=data.get("POSSIBLE_VALUES"),
137
+ possible_values=possible_values,
118
138
  regular_expression=data.get("REGULAR_EXPRESSION"),
119
139
  data_class=data.get("DATA_CLASS", False)
120
140
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datavalue
3
- Version: 0.1.12
3
+ Version: 0.1.13
4
4
  Summary: Librería de tipos de datos primitivos y complejos
5
5
  Author: Specter
6
6
  Requires-Python: >=3.10
@@ -1,9 +1,9 @@
1
1
  datavalue/__init__.py,sha256=-JBKpLEehjnezX3sTbpnB2px3izjHxZ_IEL_40iRHMM,112
2
2
  datavalue/classes/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
3
3
  datavalue/classes/complex_data.py,sha256=fYBl-whK1MUivzoDI0aCXD1yfRPIMK-Pu9jlxQTtxiQ,10951
4
- datavalue/classes/primitive_data.py,sha256=Tb0S76ot5x66XLeqR-4f6ynqt60LcCHN_ydFsmn6co0,8050
4
+ datavalue/classes/primitive_data.py,sha256=Cm5DvIrKWM6LWETl06zK1v4JZWkw5DaXPMow9VTHeZU,9072
5
5
  datavalue/exceptions/__init__.py,sha256=T9X1N0kAv6RNTuTNQR7aTAxxvF25ihMsrtZGD-QZrBI,361
6
- datavalue-0.1.12.dist-info/METADATA,sha256=rsEauafgjSgy5ktB-N1PpYxTRwmVSbusjfE_Yhr6oec,1598
7
- datavalue-0.1.12.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
8
- datavalue-0.1.12.dist-info/top_level.txt,sha256=tVZ_--yYzvlZ2XTCkdORn4KKL7BwXPZUOVpL6PBJaRY,10
9
- datavalue-0.1.12.dist-info/RECORD,,
6
+ datavalue-0.1.13.dist-info/METADATA,sha256=gD38QSnBU94KbSBEFN1QgIEEdrzG6nJzQugy3nSKZEY,1598
7
+ datavalue-0.1.13.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
8
+ datavalue-0.1.13.dist-info/top_level.txt,sha256=tVZ_--yYzvlZ2XTCkdORn4KKL7BwXPZUOVpL6PBJaRY,10
9
+ datavalue-0.1.13.dist-info/RECORD,,