Source code for kalasiris.k_funcs
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Provides kalasiris *_k functions*.
The kalasiris *_k functions* provide some syntactic sugar to make
calling the ISIS programs just that much easier. For example here
are two ways to do the same thing::
import kalasiris as isis
cube_file = 'some.cub'
keyval = isis.getkey(cube_file, grpname='Instrument',
keyword='InstrumentId').stdout.strip()
k_keyval = isis.getkey_k(cube_file, 'Instrument', 'InstrumentId')
And the values of ``keyval`` and ``k_keyval`` are identical, its
just that the *_k function* version is a little more compact.
Each of the *_k functions* implements their modifications a
little differently, so make sure to read their documentation.
"""
# Copyright 2019-2020, Ross A. Beyer (rbeyer@seti.org)
#
# Reuse is permitted under the terms of the license.
# The AUTHORS file and the LICENSE file are at the
# top level of this library.
import tempfile
import os
from pathlib import Path
import kalasiris as isis
[docs]
def getkey_k(cube: os.PathLike, group: str, key: str) -> str:
"""Simplified calling for getkey.
No default parameters are needed, and it directly returns a string.
"""
return isis.getkey(cube, grpname=group, keyword=key).stdout.strip()
[docs]
def hi2isis_k(*args, **kwargs):
"""Creates a default name for the to= cube.
If the FROM file has the name ``foo.img``, then the output will
be ``foo.cub``.
"""
if not any(k.startswith("t") for k in kwargs.keys()):
from_path = Path()
if len(args) > 0 and not str(args[0]).endswith("__"):
from_path = Path(args[0])
else:
for k, v in kwargs.items():
if k.startswith("f"):
from_path = Path(v)
break
kwargs.setdefault("to", from_path.with_suffix(".cub"))
return isis.hi2isis(*args, **kwargs)
[docs]
def hist_k(*args, **kwargs) -> str:
"""Returns the contents of the file created by ISIS hist as a string.
If there is a TO= parameter in the arguments, ``hist_k()`` will
create the file, and return its contents as a string
"""
to_pathlike = None
for k, v in kwargs.items():
if "to" == k or "to_" == k:
to_pathlike = v
f = None
if not to_pathlike:
f = tempfile.NamedTemporaryFile(mode="w+")
kwargs["to"] = f.name
isis.hist(*args, **kwargs)
if not f:
f = open(to_pathlike, "r")
contents = f.read()
f.close()
return contents
[docs]
def cubeit_k(fromlist: list, **kwargs):
"""Takes a list of paths to cubes to operate cubeit on,
rather than having the user create a text list.
"""
with isis.fromlist.temp(fromlist) as f:
kwargs["fromlist"] = f
cp = isis.cubeit(**kwargs)
return cp
[docs]
def stats_k(*args, **kwargs) -> dict:
"""Returns the result of running ISIS stats as a Python Dictionary.
If there are TO=, FORMAT=, or APPEND= parameters, ``stats_k`` will
perform the file-based activities that ``stats`` normally would,
and also return the Python Dictionary.
"""
# We could use the pvl library to parse the returned text, but
# that would involve a dependency, and since the format is so
# simple, we'll just parse it directly here.
stats_text = isis.stats(*args, **kwargs).stdout
d = dict()
for line in filter(lambda x: "=" in x, stats_text.splitlines()):
(k, equals, v) = line.partition("=")
if "Group" in k:
continue
d[k.strip()] = v.strip()
return d