260 lines
9.2 KiB
Python
260 lines
9.2 KiB
Python
from decouple import config
|
|
|
|
from benedict.dicts.io import IODict
|
|
|
|
from .test_io_dict import io_dict_test_case
|
|
|
|
|
|
class io_dict_xls_test_case(io_dict_test_case):
|
|
"""
|
|
This class describes an IODict / xls test case.
|
|
"""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(io_dict_xls_test_case, self).__init__(*args, **kwargs)
|
|
self._extensions = [
|
|
"xlsx",
|
|
"xlsm",
|
|
"xls",
|
|
]
|
|
|
|
def test_from_xls_with_valid_file_valid_content(self):
|
|
expected_dict = {
|
|
"values": [
|
|
{
|
|
"mon": 10,
|
|
"tue": 11,
|
|
"wed": 12,
|
|
"thu": 13,
|
|
"fri": 14,
|
|
"sat": 15,
|
|
"sun": 16,
|
|
},
|
|
{
|
|
"mon": 20,
|
|
"tue": 21,
|
|
"wed": 22,
|
|
"thu": 23,
|
|
"fri": 24,
|
|
"sat": 25,
|
|
"sun": 26,
|
|
},
|
|
{
|
|
"mon": 30,
|
|
"tue": 31,
|
|
"wed": 32,
|
|
"thu": 33,
|
|
"fri": 34,
|
|
"sat": 35,
|
|
"sun": 36,
|
|
},
|
|
]
|
|
}
|
|
for extension in self._extensions:
|
|
with self.subTest(
|
|
msg=f"test_from_xls_({extension})_with_valid_file_valid_content"
|
|
):
|
|
filepath = self.input_path(f"valid-content.{extension}")
|
|
# static method
|
|
d = IODict.from_xls(filepath)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
# constructor explicit format
|
|
d = IODict(filepath, format=extension)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
# constructor implicit format
|
|
d = IODict(filepath)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
|
|
def test_from_xls_with_valid_url_valid_content(self):
|
|
expected_dict = {
|
|
"values": [
|
|
{
|
|
"mon": 10,
|
|
"tue": 11,
|
|
"wed": 12,
|
|
"thu": 13,
|
|
"fri": 14,
|
|
"sat": 15,
|
|
"sun": 16,
|
|
},
|
|
{
|
|
"mon": 20,
|
|
"tue": 21,
|
|
"wed": 22,
|
|
"thu": 23,
|
|
"fri": 24,
|
|
"sat": 25,
|
|
"sun": 26,
|
|
},
|
|
{
|
|
"mon": 30,
|
|
"tue": 31,
|
|
"wed": 32,
|
|
"thu": 33,
|
|
"fri": 34,
|
|
"sat": 35,
|
|
"sun": 36,
|
|
},
|
|
]
|
|
}
|
|
for extension in self._extensions:
|
|
with self.subTest(
|
|
msg=f"test_from_xls_({extension})_with_valid_url_valid_content"
|
|
):
|
|
# url = f"https://github.com/fabiocaccamo/python-benedict/raw/s3/tests/dicts/io/input/valid-content.{extension}"
|
|
url = f"https://github.com/fabiocaccamo/python-benedict/raw/master/tests/dicts/io/input/valid-content.{extension}"
|
|
# static method
|
|
d = IODict.from_xls(url)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
# constructor explicit format
|
|
d = IODict(url, format=extension)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
# constructor implicit format
|
|
d = IODict(url)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
|
|
def test_from_xls_with_valid_s3_url_valid_content(self):
|
|
aws_access_key_id = config("AWS_ACCESS_KEY_ID", default=None)
|
|
aws_secret_access_key = config("AWS_SECRET_ACCESS_KEY", default=None)
|
|
if not all([aws_access_key_id, aws_secret_access_key]):
|
|
# don't use s3 on GH CI
|
|
return
|
|
s3_options = {
|
|
"aws_access_key_id": aws_access_key_id,
|
|
"aws_secret_access_key": aws_secret_access_key,
|
|
}
|
|
expected_dict = {
|
|
"values": [
|
|
{
|
|
"mon": 10,
|
|
"tue": 11,
|
|
"wed": 12,
|
|
"thu": 13,
|
|
"fri": 14,
|
|
"sat": 15,
|
|
"sun": 16,
|
|
},
|
|
{
|
|
"mon": 20,
|
|
"tue": 21,
|
|
"wed": 22,
|
|
"thu": 23,
|
|
"fri": 24,
|
|
"sat": 25,
|
|
"sun": 26,
|
|
},
|
|
{
|
|
"mon": 30,
|
|
"tue": 31,
|
|
"wed": 32,
|
|
"thu": 33,
|
|
"fri": 34,
|
|
"sat": 35,
|
|
"sun": 36,
|
|
},
|
|
]
|
|
}
|
|
for extension in self._extensions:
|
|
with self.subTest(
|
|
msg=f"test_from_xls_({extension})_with_valid_s3_url_valid_content"
|
|
):
|
|
url = f"s3://python-benedict/valid-content.{extension}"
|
|
# static method
|
|
d = IODict.from_xls(url, s3_options=s3_options)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
# constructor explicit format
|
|
d = IODict(url, format=extension, s3_options=s3_options)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
# constructor implicit format
|
|
d = IODict(url, s3_options=s3_options)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
|
|
def test_from_xls_with_valid_file_valid_content_custom_sheet_by_index_and_columns(
|
|
self,
|
|
):
|
|
expected_dict = {
|
|
"values": [
|
|
{
|
|
"name": "Red",
|
|
"hex": "#FF0000",
|
|
},
|
|
{
|
|
"name": "Green",
|
|
"hex": "#00FF00",
|
|
},
|
|
{
|
|
"name": "Blue",
|
|
"hex": "#0000FF",
|
|
},
|
|
]
|
|
}
|
|
for extension in self._extensions:
|
|
with self.subTest(
|
|
msg=f"test_from_xls_({extension})_with_valid_file_valid_content_custom_sheet_by_index_and_columns"
|
|
):
|
|
filepath = self.input_path(f"valid-content.{extension}")
|
|
# static method
|
|
d = IODict.from_xls(
|
|
filepath,
|
|
sheet=1,
|
|
columns=["name", "hex"],
|
|
columns_row=False,
|
|
)
|
|
self.assertTrue(isinstance(d, dict))
|
|
self.assertEqual(d, expected_dict)
|
|
|
|
def test_from_xls_with_invalid_file(self):
|
|
for extension in self._extensions:
|
|
with self.subTest(
|
|
msg=f"test_from_xls_({extension})_with_valid_file_valid_content"
|
|
):
|
|
filepath = self.input_path(f"invalid-file.{extension}")
|
|
# static method
|
|
with self.assertRaises(ValueError):
|
|
IODict.from_xls(filepath)
|
|
# constructor explicit format
|
|
with self.assertRaises(ValueError):
|
|
IODict(filepath, format=extension)
|
|
# constructor implicit format
|
|
with self.assertRaises(ValueError):
|
|
IODict(filepath)
|
|
|
|
def test_from_xls_with_valid_url_invalid_content(self):
|
|
for extension in self._extensions:
|
|
with self.subTest(
|
|
msg=f"test_from_xls_({extension})_with_valid_url_invalid_content"
|
|
):
|
|
url = "https://github.com/fabiocaccamo/python-benedict"
|
|
# static method
|
|
with self.assertRaises(ValueError):
|
|
IODict.from_xls(url)
|
|
# constructor explicit format
|
|
with self.assertRaises(ValueError):
|
|
IODict(url, format=extension)
|
|
# constructor implicit format
|
|
with self.assertRaises(ValueError):
|
|
IODict(url)
|
|
|
|
def test_from_xls_with_invalid_url(self):
|
|
for extension in self._extensions:
|
|
with self.subTest(msg=f"test_from_xls_({extension})_with_invalid_url"):
|
|
url = "https://github.com/fabiocaccamo/python-benedict-invalid"
|
|
# static method
|
|
with self.assertRaises(ValueError):
|
|
IODict.from_xls(url)
|
|
# constructor explicit format
|
|
with self.assertRaises(ValueError):
|
|
IODict(url, format=extension)
|
|
# constructor implicit format
|
|
with self.assertRaises(ValueError):
|
|
IODict(url)
|