Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_import_attribute_import_error():
with pytest.raises((ImportError, AttributeError)):
helpers.import_attribute('tabulator.bad_name')
def test_import_attribute():
assert helpers.import_attribute('tabulator.helpers') == helpers
_params = dict(headers=1)
format = __resource.get("format")
if format == "txt":
# datapackage-pipelines processing requires having a header row
# for txt format we add a single "data" column
_params["headers"] = ["data"]
_params["custom_parsers"] = {"txt": TXTParser}
_params["allow_html"] = True
else:
if format is None:
_, format = tabulator.helpers.detect_scheme_and_format(__url)
if format in tabulator.config.SUPPORTED_COMPRESSION:
format = None
else:
try:
parser_cls = tabulator.helpers.import_attribute(tabulator.config.PARSERS[format])
except KeyError:
logging.error("Unknown format %r", format)
raise
_params.update(
dict(x for x in __resource.items()
if x[0] in parser_cls.options))
_params.update(
dict(x for x in __resource.items()
if x[0] in {'headers', 'scheme', 'encoding', 'sample_size', 'allow_html',
'force_strings', 'force_parse', 'skip_rows', 'compression',
'http_timeout'}))
if isinstance(_params.get('skip_rows'), int): # Backwards compatibility
_params['skip_rows'] = list(range(1, _params.get('skip_rows') + 1))
if format is not None:
_params['format'] = format
compression = type
else:
scheme = self.__scheme
format = self.__format
# Initiate loader
self.__loader = None
if scheme is not None:
loader_class = self.__custom_loaders.get(scheme)
if loader_class is None:
if scheme not in config.LOADERS:
message = 'Scheme "%s" is not supported' % scheme
raise exceptions.SchemeError(message)
loader_path = config.LOADERS[scheme]
if loader_path:
loader_class = helpers.import_attribute(loader_path)
if loader_class is not None:
loader_options = helpers.extract_options(options, loader_class.options)
if compression and 'http_stream' in loader_class.options:
loader_options['http_stream'] = False
self.__loader = loader_class(
bytes_sample_size=self.__bytes_sample_size,
**loader_options)
# Zip compression
if compression == 'zip' and six.PY3:
source = self.__loader.load(source, mode='b')
with zipfile.ZipFile(source) as archive:
name = archive.namelist()[0]
if 'filename' in options.keys():
name = options['filename']
del options['filename']
elif compression:
message = 'Compression "%s" is not supported for your Python version'
raise exceptions.TabulatorException(message % compression)
# Attach stats to the loader
if getattr(self.__loader, 'attach_stats', None):
self.__stats = {'size': 0, 'hash': ''}
getattr(self.__loader, 'attach_stats')(self.__stats)
# Initiate parser
parser_class = self.__custom_parsers.get(format)
if parser_class is None:
if format not in config.PARSERS:
message = 'Format "%s" is not supported' % format
raise exceptions.FormatError(message)
parser_class = helpers.import_attribute(config.PARSERS[format])
parser_options = helpers.extract_options(options, parser_class.options)
self.__parser = parser_class(self.__loader,
force_parse=self.__force_parse,
**parser_options)
# Bad options
if options:
message = 'Not supported option(s) "%s" for scheme "%s" and format "%s"'
message = message % (', '.join(options), scheme, format)
warnings.warn(message, UserWarning)
# Open and setup
self.__parser.open(source, encoding=self.__encoding)
self.__extract_sample()
self.__extract_headers()
if not self.__allow_html:
"""
# Get encoding/format
if encoding is None:
encoding = config.DEFAULT_ENCODING
if format is None:
_, format = helpers.detect_scheme_and_format(target)
# Prepare writer class
writer_class = self.__custom_writers.get(format)
if writer_class is None:
if format not in config.WRITERS:
message = 'Format "%s" is not supported' % format
raise exceptions.FormatError(message)
writer_class = helpers.import_attribute(config.WRITERS[format])
# Prepare writer options
writer_options = helpers.extract_options(options, writer_class.options)
if options:
message = 'Not supported options "%s" for format "%s"'
message = message % (', '.join(options), format)
raise exceptions.TabulatorException(message)
# Write data to target
writer = writer_class(**writer_options)
writer.write(self.iter(), target, headers=self.headers, encoding=encoding)