From 69aa0a28c775ee0218f58b27d92143210b1f3c1e Mon Sep 17 00:00:00 2001 From: Michael James Date: Sun, 14 Oct 2018 15:55:05 -0600 Subject: [PATCH] logic cleanup --- awips/UsageArgumentParser.py | 5 ++++- .../gfe/db/objects/TimeConstraints.py | 18 ++++++++++++------ .../com/raytheon/uf/common/time/DataTime.py | 9 +++------ 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/awips/UsageArgumentParser.py b/awips/UsageArgumentParser.py index ddc07ed..f7bd0dc 100644 --- a/awips/UsageArgumentParser.py +++ b/awips/UsageArgumentParser.py @@ -1,5 +1,4 @@ ## -## # # SOFTWARE HISTORY # @@ -18,6 +17,7 @@ from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.gfe.db.objects i TIME_FORMAT = "%Y%m%d_%H%M" + class UsageArgumentParser(argparse.ArgumentParser): """ A subclass of ArgumentParser that overrides error() to print the @@ -28,6 +28,7 @@ class UsageArgumentParser(argparse.ArgumentParser): self.print_help() sys.exit(2) + ## Custom actions for ArgumentParser objects ## class StoreDatabaseIDAction(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): @@ -37,6 +38,7 @@ class StoreDatabaseIDAction(argparse.Action): else: parser.error("DatabaseID [" + values + "] not a valid identifier") + class AppendParmNameAndLevelAction(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): tx = ParmID.parmNameAndLevel(values) @@ -49,6 +51,7 @@ class AppendParmNameAndLevelAction(argparse.Action): else: setattr(namespace, self.dest, [comp]) + class StoreTimeAction(argparse.Action): """ argparse.Action subclass to validate GFE formatted time strings diff --git a/dynamicserialize/dstypes/com/raytheon/uf/common/dataplugin/gfe/db/objects/TimeConstraints.py b/dynamicserialize/dstypes/com/raytheon/uf/common/dataplugin/gfe/db/objects/TimeConstraints.py index b433035..b90a74d 100644 --- a/dynamicserialize/dstypes/com/raytheon/uf/common/dataplugin/gfe/db/objects/TimeConstraints.py +++ b/dynamicserialize/dstypes/com/raytheon/uf/common/dataplugin/gfe/db/objects/TimeConstraints.py @@ -22,12 +22,7 @@ class TimeConstraints(object): if duration == 0 and repeatInterval == 0 and startTime == 0: self.valid = True; else: - if repeatInterval <= 0 or repeatInterval > DAY \ - or DAY % repeatInterval != 0 \ - or repeatInterval < duration \ - or startTime < 0 or startTime > DAY \ - or duration < 0 or duration > DAY: - + if self.isInvalidInterval(repeatInterval, duration, startTime): logging.warning("Bad init values for TimeConstraints: ", self); self.valid = False; duration = 0; @@ -81,3 +76,14 @@ class TimeConstraints(object): def getStartTime(self): return self.startTime + + def isInvalidInterval(self, interval, duration, startTime): + if interval <= 0 or interval > DAY or interval < duration: + return False + if startTime < 0 or startTime > DAY: + return False + if duration < 0 or duration > DAY: + return False + if DAY % interval != 0: + return False + return True diff --git a/dynamicserialize/dstypes/com/raytheon/uf/common/time/DataTime.py b/dynamicserialize/dstypes/com/raytheon/uf/common/time/DataTime.py index 42593dd..12589ac 100644 --- a/dynamicserialize/dstypes/com/raytheon/uf/common/time/DataTime.py +++ b/dynamicserialize/dstypes/com/raytheon/uf/common/time/DataTime.py @@ -1,6 +1,3 @@ -# # -# # - # File auto-generated against equivalent DynamicSerialize Java class # and then modified post-generation to add additional features to better # match Java implementation. @@ -20,6 +17,7 @@ # 05/26/16 2416 rjpeter Added str based constructor. # 08/02/16 2416 tgurney Forecast time regex bug fix, # plus misc cleanup +# import calendar @@ -43,6 +41,7 @@ FORECAST_PATTERN_STR=r'(?:[ _]\((\d+)(?::(\d{1,2}))?\))?' VALID_PERIOD_PATTERN_STR=r'(?:\['+ REFTIME_PATTERN_STR + '--' + REFTIME_PATTERN_STR + r'\])?' STR_PATTERN=re.compile(REFTIME_PATTERN_STR + FORECAST_PATTERN_STR + VALID_PERIOD_PATTERN_STR) + class DataTime(object): def __init__(self, refTime=None, fcstTime=None, validPeriod=None): @@ -89,14 +88,12 @@ class DataTime(object): + str(refTime)) groups = match.groups() - rDate = groups[0] - rTime = groups[1] rMillis = groups[2] or 0 fcstTimeHr = groups[3] fcstTimeMin = groups[4] periodStart = groups[5], groups[6], (groups[7] or 0) periodEnd = groups[8], groups[9], (groups[10] or 0) - self.refTime = self._getTimeAsEpochMillis(rDate, rTime, rMillis) + self.refTime = self._getTimeAsEpochMillis(groups[0], groups[1], rMillis) if fcstTimeHr is not None: self.fcstTime = int(fcstTimeHr) * 3600