Skip to content

Commit

Permalink
increased requests parser coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
roedoejet committed Feb 1, 2019
1 parent 15e1dd0 commit d9ffafd
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 7 deletions.
7 changes: 5 additions & 2 deletions mtd/parsers/request_parser.py
Expand Up @@ -2,7 +2,7 @@
import requests
from jsonschema.exceptions import ValidationError
from mtd.parsers import json_parser, xml_parser
from mtd.exceptions import RequestException, UnsupportedFiletypeError
from mtd.exceptions import RequestException, MissingResourceError, UnsupportedFiletypeError
from mtd.parsers.utils import ResourceManifest
from json.decoder import JSONDecodeError
from lxml import etree
Expand All @@ -19,7 +19,10 @@ class Parser(BaseParser):
def __init__(self, manifest: ResourceManifest, resource_path: str):
self.manifest = manifest
self.type = "json"
res = requests.get(resource_path)
try:
res = requests.get(resource_path)
except:
raise MissingResourceError(f"{resource_path}")
if res.status_code >= 200 and res.status_code < 300:
if "xml" in res.headers['content-type']:
self.type = "xml"
Expand Down
2 changes: 1 addition & 1 deletion mtd/tests/__init__.py
Expand Up @@ -65,7 +65,7 @@ def emit(self, record):
'word': 'rød'}
]

SAMPLE_DATA_OBJ = [
SAMPLE_DATA_OBJ_BLANK = [
{
'audio': [{'speaker': 'AP', 'filename': 'ap_red.mp3'}, {'speaker': 'AR', 'filename': 'ar_red.mp3'}],
'definition': 'red',
Expand Down
2 changes: 1 addition & 1 deletion mtd/tests/run.py
Expand Up @@ -32,7 +32,7 @@
loader.loadTestsFromTestCase(test)
# for test in [JsonParserTest]
# for test in (CsvParserTest, PsvParserTest, TsvParserTest, XlsxParserTest)
for test in [XlsxParserTest]
for test in [RequestsParserTest]
# for test in (CsvParserTest, DictParserTest, JsonParserTest, PsvParserTest, RequestsParserTest, TsvParserTest, XlsxParserTest, XmlParserTest)
]

Expand Down
21 changes: 20 additions & 1 deletion mtd/tests/test_request_parser.py
Expand Up @@ -4,6 +4,7 @@
from mtd.tests.test_data import json as json_path, xml as xml_path
from unittest import TestCase
from mtd.parsers import parse
from mtd.exceptions import MissingResourceError, RequestException, UnsupportedFiletypeError

class RequestsParserTest(TestCase):
def setUp(self):
Expand Down Expand Up @@ -44,4 +45,22 @@ def test_data_obj_matches_json_sample(self):
for data in self.json_data:
parsed_data = parse(self.json_manifest, data[0])
parsed_data_obj = parsed_data['data'].to_dict(orient='records')
self.assertEqual(data[2], parsed_data_obj)
self.assertEqual(data[2], parsed_data_obj)

def test_no_connection(self):
'''Check can't connect to site
'''
with self.assertRaises(MissingResourceError):
parse(self.json_manifest, 'https://foo.bar')

def test_404(self):
'''Test returns request exception from 404
'''
with self.assertRaises(RequestException):
parse(self.json_manifest, 'https://www.google.com/foobar1')

def test_bad_format(self):
'''Check non-json/xml returns unsupported format error
'''
with self.assertRaises(UnsupportedFiletypeError):
parse(self.json_manifest, 'https://google.com')
4 changes: 2 additions & 2 deletions mtd/tests/test_xlsx_parser.py
@@ -1,5 +1,5 @@
from mtd.tests.test_data import xlsx
from mtd.tests import SAMPLE_DATA_DF, SAMPLE_DATA_OBJ
from mtd.tests import SAMPLE_DATA_DF, SAMPLE_DATA_OBJ_BLANK
import os
from unittest import TestCase
from mtd.parsers import parse
Expand All @@ -25,7 +25,7 @@ def test_data_obj_matches_sample(self):
'''
parsed_data = parse(self.manifest, self.data)
parsed_data_obj = parsed_data['data'].to_dict(orient='records')
self.assertEqual(SAMPLE_DATA_OBJ, parsed_data_obj)
self.assertEqual(SAMPLE_DATA_OBJ_BLANK, parsed_data_obj)

def test_missing_sheet(self):
'''Check error raised for missing sheet in 'location'
Expand Down

0 comments on commit d9ffafd

Please sign in to comment.