Skip to content

Commit 8d38902

Browse files
committed
Changes all manually raised exception to be child of PyODataException
This is to better handle permissive parsing as otherwise we could be catching unwanted exceptions. Test were updated to expect different exceptions.
1 parent 844e357 commit 8d38902

11 files changed

+134
-132
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1818
- Support for TypeDefinition in OData v4 - Martin Miksik
1919
- Add V4 to pyodata cmd interface - Martin Miksik
2020
- Permissive parsing for TypeDefinition
21+
- Changes all manually raised exception to be child of PyODataException - Martin Miksik
2122

2223
### Changed
2324
- Implementation and naming schema of `from_etree` - Martin Miksik

pyodata/model/build_functions.py

+13-18
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def build_struct_type(config: Config, type_node, typ, schema=None):
6464
stp = build_element(StructTypeProperty, config, entity_type_property_node=proprty)
6565

6666
if stp.name in stype._properties:
67-
raise KeyError('{0} already has property {1}'.format(stype, stp.name))
67+
raise PyODataParserError('{0} already has property {1}'.format(stype, stp.name))
6868

6969
stype._properties[stp.name] = stp
7070

@@ -81,7 +81,7 @@ def build_struct_type(config: Config, type_node, typ, schema=None):
8181
def build_complex_type(config: Config, type_node, schema=None):
8282
try:
8383
return build_element(StructType, config, type_node=type_node, typ=ComplexType, schema=schema)
84-
except (PyODataException, KeyError, AttributeError) as ex:
84+
except PyODataException as ex:
8585
config.err_policy(ParserError.COMPLEX_TYPE).resolve(ex)
8686
return NullType(type_node.get('Name'))
8787

@@ -98,12 +98,12 @@ def build_entity_type(config: Config, type_node, schema=None):
9898
navp = build_element('NavigationTypeProperty', config, node=proprty)
9999

100100
if navp.name in etype._nav_properties:
101-
raise KeyError('{0} already has navigation property {1}'.format(etype, navp.name))
101+
raise PyODataParserError('{0} already has navigation property {1}'.format(etype, navp.name))
102102

103103
etype._nav_properties[navp.name] = navp
104104

105105
return etype
106-
except (KeyError, AttributeError) as ex:
106+
except (PyODataParserError, AttributeError) as ex:
107107
config.err_policy(ParserError.ENTITY_TYPE).resolve(ex)
108108
return NullType(type_node.get('Name'))
109109

@@ -160,29 +160,24 @@ def build_value_helper(config, target, annotation_node, schema):
160160
value_helper._parameters.append(param)
161161

162162
try:
163-
try:
164-
value_helper.entity_set = schema.entity_set(
165-
value_helper.collection_path, namespace=value_helper.element_namespace)
166-
except KeyError:
167-
raise RuntimeError(f'Entity Set {value_helper.collection_path} '
168-
f'for {value_helper} does not exist')
169-
163+
value_helper.entity_set = schema.entity_set(
164+
value_helper.collection_path, namespace=value_helper.element_namespace)
170165
try:
171166
vh_type = schema.typ(value_helper.proprty_entity_type_name,
172167
namespace=value_helper.element_namespace)
173-
except KeyError:
174-
raise RuntimeError(f'Target Type {value_helper.proprty_entity_type_name} '
175-
f'of {value_helper} does not exist')
168+
except PyODataModelError:
169+
raise PyODataParserError(f'Target Type {value_helper.proprty_entity_type_name} '
170+
f'of {value_helper} does not exist')
176171

177172
try:
178173
target_proprty = vh_type.proprty(value_helper.proprty_name)
179-
except KeyError:
180-
raise RuntimeError(f'Target Property {value_helper.proprty_name} '
181-
f'of {vh_type} as defined in {value_helper} does not exist')
174+
except PyODataModelError:
175+
raise PyODataParserError(f'Target Property {value_helper.proprty_name} '
176+
f'of {vh_type} as defined in {value_helper} does not exist')
182177

183178
value_helper.proprty = target_proprty
184179
target_proprty.value_helper = value_helper
185-
except (RuntimeError, PyODataModelError) as ex:
180+
except (PyODataModelError, PyODataParserError) as ex:
186181
config.err_policy(ParserError.ANNOTATION).resolve(ex)
187182

188183

0 commit comments

Comments
 (0)