Commit 1c23dd90 authored by AustinSanders's avatar AustinSanders Committed by GitHub
Browse files

Merge pull request #155 from AustinSanders/master

Updated for PVL 1.0
parents e3b3b557 57496f9b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -55,8 +55,8 @@ after_success:
  - source deactivate
  - conda install -q conda-build anaconda-client
  - conda config --set anaconda_upload no
  - conda build recipe -q
  - builddir=(`conda build recipe --output`)
  - travis_wait conda build recipe -q
  - travis_wait builddir=(`conda build recipe --output`)
  - |
    if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
      anaconda -t="$CONDA_UPLOAD_TOKEN" upload $builddir --force;
+14 −14
Original line number Diff line number Diff line
@@ -148,7 +148,7 @@ def to_isis(obj, path, mode='wb', version=2,
                                         buffer_header_size, points_bytes,
                                         creation_date, modified_date)

        store.write(header)
        store.write(header.encode('utf-8'))

class IsisStore(object):
    """
@@ -292,8 +292,8 @@ class IsisStore(object):
        """
        Parameters
        ----------
        data : str
               to be written to the file
        data : bytes
               Encoded header to be written to the file
        offset : int
                 The byte offset into the output binary
        """
@@ -461,7 +461,7 @@ class IsisStore(object):
           An ISIS compliant PVL header object
        """

        encoder = pvl.encoder.IsisCubeLabelEncoder
        encoder = pvl.encoder.ISISEncoder(end_delimiter=False)

        header_bytes = buffer_header_size
        points_start_byte = HEADERSTARTBYTE + buffer_header_size
@@ -489,4 +489,4 @@ class IsisStore(object):
                 )
        ])

        return pvl.dumps(header, cls=encoder)
        return pvl.dumps(header, encoder=encoder)
+2 −2
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ class Spectral_Profiler(object):
                         "^SP_SPECTRUM_REF1", "^SP_SPECTRUM_QA", "^L2D_RESULT_ARRAY",
                         "^SP_SPECTRUM_RAD"]:
                    continue
                if isinstance(v, pvl._collections.Units):
                if isinstance(v, pvl.collections.Quantity):
                    k = "{}_{}".format(k, v.units)
                    v = v.value
                keys.append(k)
+1 −1
Original line number Diff line number Diff line
@@ -239,7 +239,7 @@ class Tes(object):
            with open(var_file, "rb") as var:
                buffer = var.read()
                def process_rad(index):
                    if index is -1:
                    if index == -1:
                        return None

                    length = np.frombuffer(buffer[index:index+2], dtype='>u2')[0]
+67 −9
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ import warnings

import pvl
from pvl.collections import PVLModule
from itertools import chain

import plio
from plio.data import get_data
@@ -70,7 +71,7 @@ def generate_serial_number(label):
       The ISIS compatible serial number
    """
    if not isinstance(label, PVLModule):
        label = pvl.load(label, cls=SerialNumberDecoder)
        label = pvl.load(label, decoder=SerialNumberDecoder())
    # Get the translation information
    translation = get_isis_translation(label)

@@ -99,6 +100,7 @@ def generate_serial_number(label):
            serial_number.append(serial_entry)
        except:
            pass

    return '/'.join(serial_number)


@@ -108,13 +110,69 @@ class SerialNumberDecoder(pvl.decoder.PVLDecoder):
    serial number. Inherits from the PVLDecoder in planetarypy's pvl module.
    """

    def cast_unquoated_string(self, value):
    def decode_simple_value(self, value: str):
        """Returns a Python object based on *value*, assuming
        that *value* can be decoded as a PVL Simple Value::

         <Simple-Value> ::= (<Numeric> | <String>)

         Modified from https://pvl.readthedocs.io/en/stable/_modules/pvl/decoder.html#PVLDecoder.decode_simple_value
         Modification entails stripping datetime from list of functions.
        """
        Overrides the parent class's method so that any un-quoted string type value found in the
        parsed pvl will just return the original value. This is needed so that keyword values
        are not re-formatted from what is originally in the ISIS cube label.
        for d in (
            self.decode_quoted_string,
            self.decode_non_decimal,
            self.decode_decimal,
        ):
            try:
                return d(value)
            except ValueError:
                pass

        if value.casefold() == self.grammar.none_keyword.casefold():
            return None

        if value.casefold() == self.grammar.true_keyword.casefold():
            return True

        if value.casefold() == self.grammar.false_keyword.casefold():
            return False

        return self.decode_unquoted_string(value)

    def decode_unquoted_string(self, value: str) -> str:
        """Returns a Python ``str`` if *value* can be decoded
        as an unquoted string, based on this decoder's grammar.
        Raises a ValueError otherwise.

        Note: This affects value types that are recognized as null, boolean, number, datetime,
        et at.
        Modified from: https://pvl.readthedocs.io/en/stable/_modules/pvl/decoder.html#PVLDecoder.decode_unquoted_string
        Modification entails removal of decode_datetime call
        """
        return value.decode('utf-8')
        for coll in (
            ("a comment", chain.from_iterable(self.grammar.comments)),
            ("some whitespace", self.grammar.whitespace),
            ("a special character", self.grammar.reserved_characters),
        ):
            for item in coll[1]:
                if item in value:
                    raise ValueError(
                        "Expected a Simple Value, but encountered "
                        f'{coll[0]} in "{self}": "{item}".'
                    )

        agg_keywords = self.grammar.aggregation_keywords.items()
        for kw in chain.from_iterable(agg_keywords):
            if kw.casefold() == value.casefold():
                raise ValueError(
                    "Expected a Simple Value, but encountered "
                    f'an aggregation keyword: "{value}".'
                )

        for es in self.grammar.end_statements:
            if es.casefold() == value.casefold():
                raise ValueError(
                    "Expected a Simple Value, but encountered "
                    f'an End-Statement: "{value}".'
                )

        return str(value)
Loading