Skip to content

Commit 5a97946

Browse files
Sumesh MuraliAshwin Rajeev
authored andcommitted
cleaned up
1 parent 8a17186 commit 5a97946

14 files changed

+159
-6
lines changed

.idea/.gitignore

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/Project_Default.xml

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/profiles_settings.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/selectorlib.iml

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/conf.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,3 @@
158158
'One line description of project.',
159159
'Miscellaneous'),
160160
]
161-
162-
163-

selectorlib/exceptions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
class UnsupportedItemType(Exception):
2+
pass

selectorlib/selectorlib.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import yaml
44
import inspect
55

6+
from .exceptions import UnsupportedItemType
7+
68

79
def extract_field(element, item_type, attribute=None, formatter=None):
810
if item_type == 'Text':
@@ -16,6 +18,12 @@ def extract_field(element, item_type, attribute=None, formatter=None):
1618
content = element.attrib.get(attribute)
1719
elif item_type == 'Image':
1820
content = element.attrib.get('src')
21+
else:
22+
raise UnsupportedItemType(
23+
f'Item Type "{item_type}" is not supported.'
24+
f' Supported item_types are ["Text", "Link", "HTML", "Attribute",'
25+
f' "Image"]'
26+
)
1927
if formatter:
2028
content = formatter.format(content)
2129
return content
@@ -24,6 +32,7 @@ def extract_field(element, item_type, attribute=None, formatter=None):
2432
class Extractor:
2533
"""selector class"""
2634
def __init__(self, config, formatters=None):
35+
self._validate_config(config)
2736
self.config = config
2837
if formatters:
2938
formatters = [i() if inspect.isclass(i) else i for i in formatters]
@@ -113,3 +122,17 @@ def _get_child_item(self, field_config, element):
113122
child_value = self._extract_selector(children_config[field], element)
114123
child_item[field] = child_value
115124
return child_item
125+
126+
def _validate_config(self, config):
127+
if not isinstance(config, dict):
128+
raise TypeError("Expected <dict> for config")
129+
130+
valid_field_types = {'Text', 'Link', 'HTML', 'Image', 'Attribute'}
131+
for field_name, field_config in config.items():
132+
if field_config.get('type') not in valid_field_types:
133+
raise UnsupportedItemType(
134+
f'Item Type "{field_config.get("type")}" for Field '
135+
f'"{field_name}" is not supported. Supported item_types'
136+
f' are ["Text", "Link", "HTML", "Attribute",'
137+
f' "Image"]'
138+
)

0 commit comments

Comments
 (0)