diff options
| author | Kenneth Reitz <me@kennethreitz.org> | 2016-02-07 10:43:38 -0500 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.org> | 2016-02-07 10:43:38 -0500 |
| commit | e51c4faec7113e82afb933fea734adb5939d7df7 (patch) | |
| tree | dbabbf95f8deaee83f8f69a26f34920051072940 | |
| parent | f7fc3244ee19d5e56bb9ed45f7fda7f1d576d358 (diff) | |
| download | tablib-e51c4faec7113e82afb933fea734adb5939d7df7.tar.gz | |
smarter detect_format function
| -rw-r--r-- | tablib/__init__.py | 2 | ||||
| -rw-r--r-- | tablib/core.py | 67 | ||||
| -rwxr-xr-x | test_tablib.py | 10 |
3 files changed, 32 insertions, 47 deletions
diff --git a/tablib/__init__.py b/tablib/__init__.py index 65d1e13..8518082 100644 --- a/tablib/__init__.py +++ b/tablib/__init__.py @@ -1,7 +1,7 @@ """ Tablib. """ from tablib.core import ( - Databook, Dataset, detect, import_set, import_book, + Databook, Dataset, detect_format, import_set, import_book, InvalidDatasetType, InvalidDimensions, UnsupportedFormat, __version__ ) diff --git a/tablib/core.py b/tablib/core.py index 7deb277..306afe7 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -241,7 +241,6 @@ class Dataset(object): def __str__(self): return self.__unicode__() - # --------- # Internals # --------- @@ -431,17 +430,25 @@ class Dataset(object): except TypeError: return 0 - def import_(self, format, in_stream, **kwargs): + + def load(self, in_stream, format=None, **kwargs): """ Import `in_stream` to the :class:`Dataset` object using the `format`. :param \*\*kwargs: (optional) custom configuration to the format `import_set`. """ + + if not format: + format = detect_format(in_stream) + export_set, import_set = self._formats.get(format, (None, None)) if not import_set: - raise UnsupportedFormat + raise UnsupportedFormat('Format {0} cannot be imported.'.format(format)) import_set(self, in_stream, **kwargs) + return self + + def export(self, format, **kwargs): """ @@ -451,7 +458,7 @@ class Dataset(object): """ export_set, import_set = self._formats.get(format, (None, None)) if not export_set: - raise UnsupportedFormat + raise UnsupportedFormat('Format {0} cannot be exported.'.format(format)) return export_set(self, **kwargs) @@ -1097,17 +1104,22 @@ class Databook(object): """The number of the :class:`Dataset` objects within :class:`Databook`.""" return len(self._datasets) - def import_(self, format, in_stream, **kwargs): + def load(self, format, in_stream, **kwargs): """ Import `in_stream` to the :class:`Databook` object using the `format`. :param \*\*kwargs: (optional) custom configuration to the format `import_book`. """ + + if not format: + format = detect_format(in_stream) + export_book, import_book = self._formats.get(format, (None, None)) if not import_book: - raise UnsupportedFormat + raise UnsupportedFormat('Format {0} cannot be loaded.'.format(format)) import_book(self, in_stream, **kwargs) + return self def export(self, format, **kwargs): """ @@ -1117,57 +1129,30 @@ class Databook(object): """ export_book, import_book = self._formats.get(format, (None, None)) if not export_book: - raise UnsupportedFormat + raise UnsupportedFormat('Format {0} cannot be exported.'.format(format)) return export_book(self, **kwargs) -def detect(stream): - """Return (format, stream) of given stream.""" +def detect_format(stream): + """Return format name of given stream.""" for fmt in formats.available: try: if fmt.detect(stream): - return (fmt, stream) + return fmt.title except AttributeError: pass - return (None, stream) - def import_set(stream, format=None, **kwargs): """Return dataset of given stream.""" - if format: - format = get_formatter(format) - else: - format, stream = detect(stream) - - data = Dataset() - try: - format.import_set(data, stream, **kwargs) - return data - except AttributeError: - return None + + return Dataset().load(stream, format, **kwargs) def import_book(stream, format=None, **kwargs): """Return dataset of given stream.""" - if format: - format = get_formatter(format) - else: - format, stream = detect(stream) - - databook = Databook() - try: - format.import_book(databook, stream, **kwargs) - return databook - except AttributeError: - return None - - -def get_formatter(format): - for item in formats.available: - if item.title == format: - return item - raise UnsupportedFormat(format) + + return Databook().load(stream, format, **kwargs) class InvalidDatasetType(Exception): diff --git a/test_tablib.py b/test_tablib.py index f929367..f7f7036 100755 --- a/test_tablib.py +++ b/test_tablib.py @@ -716,11 +716,11 @@ class TablibTestCase(unittest.TestCase): _tsv = '1\t2\t3\n4\t5\t6\n7\t8\t9\n' _bunk = '¡¡¡¡¡¡---///\n\n\n¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' - self.assertEqual(tablib.detect(_yaml)[0], tablib.formats.yaml) - self.assertEqual(tablib.detect(_csv)[0], tablib.formats.csv) - self.assertEqual(tablib.detect(_tsv)[0], tablib.formats.tsv) - self.assertEqual(tablib.detect(_json)[0], tablib.formats.json) - self.assertEqual(tablib.detect(_bunk)[0], None) + self.assertEqual(tablib.detect_format(_yaml), 'yaml') + self.assertEqual(tablib.detect_format(_csv), 'csv') + self.assertEqual(tablib.detect_format(_tsv), 'tsv') + self.assertEqual(tablib.detect_format(_json), 'json') + self.assertEqual(tablib.detect_format(_bunk), None) def test_transpose(self): |
