Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# since not reading an index isn't a deal breaker --
# everything can still be read from the file, only slower.
# Importantly, it must remain "transactionally clean", and not
# create any blocks until we're sure the block index makes
# sense.
if not fd.seekable():
return
if not len(self._internal_blocks):
return
first_block = self._internal_blocks[0]
first_block_end = first_block.end_offset
fd.seek(0, generic_io.SEEK_END)
file_size = block_end = fd.tell()
# We want to read on filesystem block boundaries. We use
# "block_end - 5" here because we need to read at least 5
# bytes in the first block.
block_start = ((block_end - 5) // fd.block_size) * fd.block_size
buff_size = block_end - block_start
content = b''
fd.seek(block_start, generic_io.SEEK_SET)
buff = fd.read(buff_size)
# Extra '\0' bytes are allowed after the ..., mainly to
# workaround poor truncation support on Windows
buff = buff.rstrip(b'\0')
content = buff
file. May be overridden by base classes to change how URIs
are resolved. This does not apply any `uri_mapping` that was
passed to the constructor.
Parameters
----------
uri : str
An absolute or relative URI to resolve against the URI of
this ASDF file.
Returns
-------
uri : str
The resolved URI.
"""
return generic_io.resolve_uri(self.uri, uri)
def _get_target(self, do_not_fill_defaults=False):
if self._target is None:
base_uri = self._base_uri
if base_uri is None:
base_uri = self._asdffile().uri
uri = generic_io.resolve_uri(base_uri, self._uri)
asdffile = self._asdffile().open_external(
uri, do_not_fill_defaults=do_not_fill_defaults)
parts = urlparse.urlparse(self._uri)
fragment = parts.fragment
self._target = resolve_fragment(asdffile.tree, fragment)
return self._target
Reads the first five bytes and looks for the ``#ASDF`` string.
Parameters
----------
fd : str, `~asdf.generic_io.GenericFile`
"""
if isinstance(fd, generic_io.InputStream):
# If it's an InputStream let ASDF deal with it.
return True
to_close = False
if isinstance(fd, AsdfFile):
return True
elif isinstance(fd, generic_io.GenericFile):
pass
else:
try:
fd = generic_io.get_file(fd, mode='r', uri=None)
if not isinstance(fd, io.IOBase):
to_close = True
except ValueError:
return False
asdf_magic = fd.read(5)
if fd.seekable():
fd.seek(0)
if to_close:
fd.close()
if asdf_magic == constants.ASDF_MAGIC:
return True
return False
def is_asdf_file(fd):
"""
Determine if fd is an ASDF file.
Reads the first five bytes and looks for the ``#ASDF`` string.
Parameters
----------
fd : str, `~asdf.generic_io.GenericFile`
"""
if isinstance(fd, generic_io.InputStream):
# If it's an InputStream let ASDF deal with it.
return True
to_close = False
if isinstance(fd, AsdfFile):
return True
elif isinstance(fd, generic_io.GenericFile):
pass
else:
try:
fd = generic_io.get_file(fd, mode='r', uri=None)
if not isinstance(fd, io.IOBase):
to_close = True
except ValueError:
return False
asdf_magic = fd.read(5)
def get_version_map(version):
version_map = _version_map.get(version)
if version_map is None:
version_map_path = resolver.DEFAULT_URL_MAPPING[0][1].replace(
'{url_suffix}', 'asdf/version_map-{0}'.format(version))
try:
with generic_io.get_file(version_map_path, 'r') as fd:
version_map = yaml.load(
fd, Loader=_yaml_base_loader)
except Exception:
raise ValueError(
"Could not load version map for version {0}".format(version))
# Separate the core tags from the rest of the standard for convenience
version_map['core'] = {}
version_map['standard'] = {}
for name, version in version_map['tags'].items():
if name.startswith('tag:stsci.edu:asdf/core'):
version_map['core'][name] = version
else:
version_map['standard'][name] = version
_version_map[version] = version_map
def to_tree(self, data, ctx):
if ctx.uri is not None:
uri = generic_io.relative_uri(ctx.uri, data._uri)
else:
uri = data._uri
return {'$ref': uri}