Skip to content
Snippets Groups Projects
Commit 238966c0 authored by Austin Sanders's avatar Austin Sanders
Browse files

Added logic to skip conversion from str to datetime

parent 08d7045f
No related branches found
No related tags found
No related merge requests found
......@@ -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
......@@ -97,10 +98,6 @@ def generate_serial_number(label):
serial_entry = search_translation[serial_entry]
elif '*' in search_translation.keys() and search_translation['*'] != '*':
serial_entry = search_translation['*']
try:
serial_entry = serial_entry.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3]
except:
pass
serial_number.append(serial_entry)
except:
pass
......@@ -114,13 +111,69 @@ class SerialNumberDecoder(pvl.decoder.PVLDecoder):
serial number. Inherits from the PVLDecoder in planetarypy's pvl module.
"""
def cast_unquoted_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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment