GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — fix(serialization-text): propagate errors on malformed scalar parsing · microsoft/kiota-python@b90a043

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
  • packages/serialization/text
    • kiota_serialization_text
      • text_parse_node.py
    • tests/unit
      • test_text_parse_node.py
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎packages/serialization/text/kiota_serialization_text/text_parse_node.py‎

Copy file name to clipboardExpand all lines: packages/serialization/text/kiota_serialization_text/text_parse_node.py
+10-34Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,7 @@ def get_int_value(self) -> Optional[int]:
7070
int: The integer value of the node
7171
"""
7272
if self._text:
73-
try:
74-
return int(self._text)
75-
except ValueError:
76-
return None
73+
return int(self._text)
7774
return None
7875

7976
def get_float_value(self) -> Optional[float]:
@@ -82,10 +79,7 @@ def get_float_value(self) -> Optional[float]:
8279
float: The floating point value of the node
8380
"""
8481
if self._text:
85-
try:
86-
return float(self._text)
87-
except ValueError:
88-
return None
82+
return float(self._text)
8983
return None
9084

9185
def get_uuid_value(self) -> Optional[UUID]:
@@ -94,10 +88,7 @@ def get_uuid_value(self) -> Optional[UUID]:
9488
UUID: The UUID value of the node
9589
"""
9690
if self._text:
97-
try:
98-
return UUID(self._text)
99-
except ValueError:
100-
return None
91+
return UUID(self._text)
10192
return None
10293

10394
def get_datetime_value(self) -> Optional[datetime]:
@@ -107,10 +98,7 @@ def get_datetime_value(self) -> Optional[datetime]:
10798
"""
10899
datetime_str = self.get_str_value()
109100
if datetime_str:
110-
try:
111-
return datetime_from_iso_format_compat(datetime_str)
112-
except (ValueError, TypeError):
113-
return None
101+
return datetime_from_iso_format_compat(datetime_str)
114102
return None
115103

116104
def get_timedelta_value(self) -> Optional[timedelta]:
@@ -120,10 +108,7 @@ def get_timedelta_value(self) -> Optional[timedelta]:
120108
"""
121109
datetime_str = self.get_str_value()
122110
if datetime_str:
123-
try:
124-
return parse_timedelta_string(datetime_str)
125-
except (ValueError, TypeError):
126-
return None
111+
return parse_timedelta_string(datetime_str)
127112
return None
128113

129114
def get_date_value(self) -> Optional[date]:
@@ -133,10 +118,7 @@ def get_date_value(self) -> Optional[date]:
133118
"""
134119
datetime_str = self.get_str_value()
135120
if datetime_str:
136-
try:
137-
return date.fromisoformat(datetime_str)
138-
except (ValueError, TypeError):
139-
return None
121+
return date.fromisoformat(datetime_str)
140122
return None
141123

142124
def get_time_value(self) -> Optional[time]:
@@ -146,10 +128,7 @@ def get_time_value(self) -> Optional[time]:
146128
"""
147129
datetime_str = self.get_str_value()
148130
if datetime_str:
149-
try:
150-
return time_from_iso_format_compat(datetime_str)
151-
except (ValueError, TypeError):
152-
return None
131+
return time_from_iso_format_compat(datetime_str)
153132
return None
154133

155134
def get_collection_of_primitive_values(self, primitive_type: type[T]) -> list[T]:
@@ -192,7 +171,7 @@ def get_enum_value(self, enum_class: K) -> Optional[K]:
192171
try:
193172
return enum_class[camel_case_key] # type: ignore
194173
except KeyError:
195-
return None
174+
raise Exception(f'Invalid key: {camel_case_key} for enum {enum_class}.')
196175
return None
197176

198177
def get_object_value(self, factory: ParsableFactory[U]) -> U:
@@ -210,11 +189,8 @@ def get_bytes_value(self) -> Optional[bytes]:
210189
base64_string = self.get_str_value()
211190
if base64_string is None:
212191
return None
213-
try:
214-
base64_bytes = base64_string.encode("utf-8")
215-
return base64.b64decode(base64_bytes, validate=True)
216-
except Exception:
217-
return None
192+
base64_bytes = base64_string.encode("utf-8")
193+
return base64.b64decode(base64_bytes)
218194

219195
def get_on_before_assign_field_values(self) -> Optional[Callable[[Parsable], None]]:
220196
"""Gets the callback called before the node is deserialized.
Collapse file

‎packages/serialization/text/tests/unit/test_text_parse_node.py‎

Copy file name to clipboardExpand all lines: packages/serialization/text/tests/unit/test_text_parse_node.py
+53-19Lines changed: 53 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -152,47 +152,81 @@ def test_get_bytes_value_none():
152152
assert parse_node.get_bytes_value() is None
153153

154154

155-
@pytest.mark.parametrize("invalid_b64", ["not-base64!!!", "!!!!", "T!Q=="])
156-
def test_get_bytes_value_invalid_base64_returns_none(invalid_b64):
157-
parse_node = TextParseNode(invalid_b64)
158-
assert parse_node.get_bytes_value() is None
155+
def test_get_bytes_value_invalid_base64_raises():
156+
parse_node = TextParseNode("not-base64!!!")
157+
with pytest.raises(Exception):
158+
parse_node.get_bytes_value()
159159

160160

161-
def test_get_int_value_invalid_returns_none():
161+
def test_get_int_value_invalid_raises():
162162
parse_node = TextParseNode("not-an-int")
163-
assert parse_node.get_int_value() is None
163+
with pytest.raises(ValueError):
164+
parse_node.get_int_value()
164165

165166

166-
def test_get_float_value_invalid_returns_none():
167+
def test_get_float_value_invalid_raises():
167168
parse_node = TextParseNode("not-a-float")
168-
assert parse_node.get_float_value() is None
169+
with pytest.raises(ValueError):
170+
parse_node.get_float_value()
169171

170172

171-
def test_get_uuid_value_invalid_returns_none():
173+
def test_get_uuid_value_invalid_raises():
172174
parse_node = TextParseNode("not-a-uuid")
173-
assert parse_node.get_uuid_value() is None
175+
with pytest.raises(ValueError):
176+
parse_node.get_uuid_value()
174177

175178

176-
def test_get_datetime_value_invalid_returns_none():
179+
def test_get_datetime_value_invalid_raises():
177180
parse_node = TextParseNode("not-a-datetime")
178-
assert parse_node.get_datetime_value() is None
181+
with pytest.raises(ValueError):
182+
parse_node.get_datetime_value()
179183

180184

181-
def test_get_timedelta_value_invalid_returns_none():
185+
def test_get_timedelta_value_invalid_raises():
182186
parse_node = TextParseNode("not-a-timedelta")
183-
assert parse_node.get_timedelta_value() is None
187+
with pytest.raises(Exception):
188+
parse_node.get_timedelta_value()
184189

185190

186-
def test_get_date_value_invalid_returns_none():
191+
def test_get_date_value_invalid_raises():
187192
parse_node = TextParseNode("not-a-date")
188-
assert parse_node.get_date_value() is None
193+
with pytest.raises(ValueError):
194+
parse_node.get_date_value()
189195

190196

191-
def test_get_time_value_invalid_returns_none():
197+
def test_get_time_value_invalid_raises():
192198
parse_node = TextParseNode("not-a-time")
193-
assert parse_node.get_time_value() is None
199+
with pytest.raises(ValueError):
200+
parse_node.get_time_value()
194201

195202

196-
def test_get_enum_value_unknown_returns_none():
203+
def test_get_enum_value_unknown_raises():
197204
parse_node = TextParseNode("unknown_location")
205+
with pytest.raises(Exception):
206+
parse_node.get_enum_value(OfficeLocation)
207+
208+
209+
def test_get_scalars_empty_text_returns_none():
210+
parse_node = TextParseNode("")
211+
assert parse_node.get_int_value() is None
212+
assert parse_node.get_float_value() is None
213+
assert parse_node.get_uuid_value() is None
214+
assert parse_node.get_datetime_value() is None
215+
assert parse_node.get_timedelta_value() is None
216+
assert parse_node.get_date_value() is None
217+
assert parse_node.get_time_value() is None
218+
assert parse_node.get_enum_value(OfficeLocation) is None
219+
220+
221+
def test_get_scalars_none_text_returns_none():
222+
parse_node = TextParseNode(None)
223+
assert parse_node.get_str_value() is None
224+
assert parse_node.get_bytes_value() is None
225+
assert parse_node.get_int_value() is None
226+
assert parse_node.get_float_value() is None
227+
assert parse_node.get_uuid_value() is None
228+
assert parse_node.get_datetime_value() is None
229+
assert parse_node.get_timedelta_value() is None
230+
assert parse_node.get_date_value() is None
231+
assert parse_node.get_time_value() is None
198232
assert parse_node.get_enum_value(OfficeLocation) is None

0 commit comments

Comments
0 (0)
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.