def load(self, in_stream, format=None, **kwargs): """ Import `in_stream` to the :class:`Dataset` object using the `format`. `in_stream` can be a file-like object, a string, or a bytestring. :param \\*\\*kwargs: (optional) custom configuration to the format `import_set`. """ stream = normalize_input(in_stream) if not format: # pythonlibrary.net: # 如果没有提供格式,则尝试自动检测 format = detect_format(stream) fmt = registry.get_format(format) if not hasattr(fmt, 'import_set'): raise UnsupportedFormat( 'Format {} cannot be imported.'.format(format)) if not import_set: # support to pass in the custom import_set function raise UnsupportedFormat( 'Format {} cannot be imported.'.format(format)) fmt.import_set(self, stream, **kwargs) return self
def get_format(self): """ Import and returns tablib module. """ try: # Available since tablib 1.0 from tablib.formats import registry key = self.TABLIB_MODULE.split('.')[-1].replace('_', '') return registry.get_format(key) except ImportError: return import_module(self.TABLIB_MODULE)
def test_tsv_format_detect(self): """Test TSV format detection.""" _tsv = StringIO('1\t2\t3\n' '4\t5\t6\n' '7\t8\t9\n') _bunk = StringIO( '¡¡¡¡¡¡¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' ) fmt = registry.get_format('tsv') self.assertTrue(fmt.detect(_tsv)) self.assertFalse(fmt.detect(_bunk))
def test_json_format_detect(self): """Test JSON format detection.""" _json = StringIO('[{"last_name": "Adams","age": 90,"first_name": "John"}]') _bunk = StringIO( '¡¡¡¡¡¡¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' ) fmt = registry.get_format('json') self.assertTrue(fmt.detect(_json)) self.assertFalse(fmt.detect(_bunk))
def test_csv_format_detect(self): """Test CSV format detection.""" _csv = StringIO('1,2,3\n' '4,5,6\n' '7,8,9\n') _bunk = StringIO( '¡¡¡¡¡¡¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' ) fmt = registry.get_format('csv') self.assertTrue(fmt.detect(_csv)) self.assertFalse(fmt.detect(_bunk))
def export(self, format, **kwargs): """ Export :class:`Databook` object to `format`. :param \\*\\*kwargs: (optional) custom configuration to the format `export_book`. """ fmt = registry.get_format(format) if not hasattr(fmt, 'export_book'): raise UnsupportedFormat(f'Format {format} cannot be exported.') return fmt.export_book(self, **kwargs)
def test_rst_force_grid(self): data = tablib.Dataset() data.append(self.john) data.append(self.george) data.headers = self.headers fmt = registry.get_format('rst') simple = fmt.export_set(data) grid = fmt.export_set(data, force_grid=True) self.assertNotEqual(simple, grid) self.assertNotIn('+', simple) self.assertIn('+', grid)
def test_yaml_format_detect(self): """Test YAML format detection.""" _yaml = '- {age: 90, first_name: John, last_name: Adams}' _tsv = 'foo\tbar' _bunk = ( '¡¡¡¡¡¡---///\n\n\n¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†' 'ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶') fmt = registry.get_format('yaml') self.assertTrue(fmt.detect(_yaml)) self.assertFalse(fmt.detect(_bunk)) self.assertFalse(fmt.detect(_tsv))
def test_html_format_detect(self): """Test HTML format detection.""" _html = ( '<table>\n<thead>\n<tr><th>first_name</th>\n<th>last_name</th>\n<th>gpa</th></tr>\n</thead>\n<tr><td>John</td>\n<td>Adams</td>\n<td>90</td></tr>\n<tr><td>George</td>\n<td>Washington</td>\n<td>67</td></tr>\n</table>' ) _bunk = ( '¡¡¡¡¡¡¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' ) fmt = registry.get_format('html') self.assertTrue(fmt.detect(_html)) self.assertFalse(fmt.detect(_bunk))
def load(self, in_stream, format, **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) fmt = registry.get_format(format) if not hasattr(fmt, 'import_book'): raise UnsupportedFormat( 'Format {} cannot be loaded.'.format(format)) fmt.import_book(self, in_stream, **kwargs) return self
def load(self, in_stream, format, **kwargs): """ Import `in_stream` to the :class:`Databook` object using the `format`. `in_stream` can be a file-like object, a string, or a bytestring. :param \\*\\*kwargs: (optional) custom configuration to the format `import_book`. """ stream = normalize_input(in_stream) if not format: format = detect_format(stream) fmt = registry.get_format(format) if not hasattr(fmt, 'import_book'): raise UnsupportedFormat(f'Format {format} cannot be loaded.') fmt.import_book(self, stream, **kwargs) return self
def test_csv_stream_export(self): """Verify exporting dataset object as CSV from file object.""" # Build up the csv string with headers first, followed by each row csv = '' for col in self.headers: csv += col + ',' csv = csv.strip(',') + '\r\n' for founder in self.founders: for col in founder: csv += str(col) + ',' csv = csv.strip(',') + '\r\n' frm = registry.get_format('csv') csv_stream = frm.export_stream_set(self.founders) self.assertEqual(csv, csv_stream.getvalue())
def test_rst_export_set(self): # Arrange data = tablib.Dataset() data.append(self.john) data.headers = self.headers fmt = registry.get_format("rst") # Act out1 = fmt.export_set(data) out2 = fmt.export_set_as_simple_table(data) # Assert self.assertEqual(out1, out2) self.assertEqual( out1, "========== ========= ===\n" "first_name last_name gpa\n" "========== ========= ===\n" "John Adams 90 \n" "========== ========= ===", )
def test_dbf_format_detect(self): """Test the DBF format detection.""" _dbf = ( b'\x03r\x06\x03\x03\x00\x00\x00\x81\x00\xab\x00\x00' b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' b'\x00\x00\x00FIRST_NAME\x00C\x00\x00\x00\x00P\x00\x00\x00\x00\x00' b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LAST_NAME\x00\x00C\x00' b'\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' b'\x00\x00GPA\x00\x00\x00\x00\x00\x00\x00\x00N\x00\x00\x00\x00\n' b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r') _dbf += b' John' + (b' ' * 75) _dbf += b' Adams' + (b' ' * 74) _dbf += b' 90.0000000' _dbf += b' George' + (b' ' * 73) _dbf += b' Washington' + (b' ' * 69) _dbf += b' 67.0000000' _dbf += b' Thomas' + (b' ' * 73) _dbf += b' Jefferson' + (b' ' * 70) _dbf += b' 50.0000000' _dbf += b'\x1a' _dbf = BytesIO(_dbf) _yaml = '- {age: 90, first_name: John, last_name: Adams}' _tsv = 'foo\tbar' _csv = '1,2,3\n4,5,6\n7,8,9\n' _json = '[{"last_name": "Adams","age": 90,"first_name": "John"}]' _bunk = ( '¡¡¡¡¡¡¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' ) fmt = registry.get_format('dbf') self.assertTrue(fmt.detect(_dbf)) self.assertFalse(fmt.detect(_yaml)) self.assertFalse(fmt.detect(_tsv)) self.assertFalse(fmt.detect(_csv)) self.assertFalse(fmt.detect(_json)) self.assertFalse(fmt.detect(_bunk))
def _set_in_format(self, fmt_key, in_stream, **kwargs): in_stream = normalize_input(in_stream) return registry.get_format(fmt_key).import_set(self, in_stream, **kwargs)
def _set_in_format(self, fmt_key, in_stream, **kwargs): # pythonlibrary.net: # 调用了format类的import_set方法,其具体实现要看不同的format类 in_stream = normalize_input(in_stream) return registry.get_format(fmt_key).import_set(self, in_stream, **kwargs)
def _get_in_format(self, fmt_key, **kwargs): # pythonlibrary.net: # 调用了format类的export_set方法,其具体实现要看不同的format类 return registry.get_format(fmt_key).export_set(self, **kwargs)
def _set_in_format(self, fmt_key, *args, **kwargs): return registry.get_format(fmt_key).import_set(self, *args, **kwargs)