mirror of
https://github.com/Unidata/python-awips.git
synced 2025-02-23 14:57:56 -05:00
Deleting old .bak files
This commit is contained in:
parent
b15787129d
commit
26e109effb
124 changed files with 0 additions and 11456 deletions
|
@ -1,69 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Pure python logging mechanism for logging to AlertViz from
|
|
||||||
# pure python (ie not JEP). DO NOT USE IN PYTHON CALLED
|
|
||||||
# FROM JAVA.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 08/18/10 njensen Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
import logging
|
|
||||||
import NotificationMessage
|
|
||||||
|
|
||||||
class AlertVizHandler(logging.Handler):
|
|
||||||
|
|
||||||
def __init__(self, host='localhost', port=61999, category='LOCAL', source='ANNOUNCER', level=logging.NOTSET):
|
|
||||||
logging.Handler.__init__(self, level)
|
|
||||||
self._category = category
|
|
||||||
self._host = host
|
|
||||||
self._port = port
|
|
||||||
self._source = source
|
|
||||||
|
|
||||||
def emit(self, record):
|
|
||||||
"Implements logging.Handler's interface. Record argument is a logging.LogRecord."
|
|
||||||
priority = None
|
|
||||||
if record.levelno >= 50:
|
|
||||||
priority = 'CRITICAL'
|
|
||||||
elif record.levelno >= 40:
|
|
||||||
priority = 'SIGNIFICANT'
|
|
||||||
elif record.levelno >= 30:
|
|
||||||
priority = 'PROBLEM'
|
|
||||||
elif record.levelno >= 20:
|
|
||||||
priority = 'EVENTA'
|
|
||||||
elif record.levelno >= 10:
|
|
||||||
priority = 'EVENTB'
|
|
||||||
else:
|
|
||||||
priority = 'VERBOSE'
|
|
||||||
|
|
||||||
msg = self.format(record)
|
|
||||||
|
|
||||||
notify = NotificationMessage.NotificationMessage(self._host, self._port, msg, priority, self._category, self._source)
|
|
||||||
notify.send()
|
|
||||||
|
|
|
@ -1,107 +0,0 @@
|
||||||
# #
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
# #
|
|
||||||
|
|
||||||
#
|
|
||||||
# Functions for converting between the various "Java" dynamic serialize types
|
|
||||||
# used by EDEX to the native python time datetime.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/24/15 #4480 dgilling Initial Creation.
|
|
||||||
#
|
|
||||||
|
|
||||||
import datetime
|
|
||||||
import time
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.java.util import Date
|
|
||||||
from dynamicserialize.dstypes.java.sql import Timestamp
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.time import TimeRange
|
|
||||||
|
|
||||||
|
|
||||||
MAX_TIME = pow(2, 31) - 1
|
|
||||||
MICROS_IN_SECOND = 1000000
|
|
||||||
|
|
||||||
|
|
||||||
def convertToDateTime(timeArg):
|
|
||||||
"""
|
|
||||||
Converts the given object to a python datetime object. Supports native
|
|
||||||
python representations like datetime and struct_time, but also
|
|
||||||
the dynamicserialize types like Date and Timestamp. Raises TypeError
|
|
||||||
if no conversion can be performed.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
timeArg: a python object representing a date and time. Supported
|
|
||||||
types include datetime, struct_time, float, int, long and the
|
|
||||||
dynamicserialize types Date and Timestamp.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A datetime that represents the same date/time as the passed in object.
|
|
||||||
"""
|
|
||||||
if isinstance(timeArg, datetime.datetime):
|
|
||||||
return timeArg
|
|
||||||
elif isinstance(timeArg, time.struct_time):
|
|
||||||
return datetime.datetime(*timeArg[:6])
|
|
||||||
elif isinstance(timeArg, float):
|
|
||||||
# seconds as float, should be avoided due to floating point errors
|
|
||||||
totalSecs = long(timeArg)
|
|
||||||
micros = int((timeArg - totalSecs) * MICROS_IN_SECOND)
|
|
||||||
return _convertSecsAndMicros(totalSecs, micros)
|
|
||||||
elif isinstance(timeArg, (int, long)):
|
|
||||||
# seconds as integer
|
|
||||||
totalSecs = timeArg
|
|
||||||
return _convertSecsAndMicros(totalSecs, 0)
|
|
||||||
elif isinstance(timeArg, (Date, Timestamp)):
|
|
||||||
totalSecs = timeArg.getTime()
|
|
||||||
return _convertSecsAndMicros(totalSecs, 0)
|
|
||||||
else:
|
|
||||||
objType = str(type(timeArg))
|
|
||||||
raise TypeError("Cannot convert object of type " + objType + " to datetime.")
|
|
||||||
|
|
||||||
def _convertSecsAndMicros(seconds, micros):
|
|
||||||
if seconds < MAX_TIME:
|
|
||||||
rval = datetime.datetime.utcfromtimestamp(seconds)
|
|
||||||
else:
|
|
||||||
extraTime = datetime.timedelta(seconds=(seconds - MAX_TIME))
|
|
||||||
rval = datetime.datetime.utcfromtimestamp(MAX_TIME) + extraTime
|
|
||||||
return rval.replace(microsecond=micros)
|
|
||||||
|
|
||||||
def constructTimeRange(*args):
|
|
||||||
"""
|
|
||||||
Builds a python dynamicserialize TimeRange object from the given
|
|
||||||
arguments.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
args*: must be a TimeRange or a pair of objects that can be
|
|
||||||
converted to a datetime via convertToDateTime().
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A TimeRange.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if len(args) == 1 and isinstance(args[0], TimeRange):
|
|
||||||
return args[0]
|
|
||||||
if len(args) != 2:
|
|
||||||
raise TypeError("constructTimeRange takes exactly 2 arguments, " + str(len(args)) + " provided.")
|
|
||||||
startTime = convertToDateTime(args[0])
|
|
||||||
endTime = convertToDateTime(args[1])
|
|
||||||
return TimeRange(startTime, endTime)
|
|
|
@ -1,178 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
from string import Template
|
|
||||||
|
|
||||||
import ctypes
|
|
||||||
import stomp
|
|
||||||
import socket
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
import threading
|
|
||||||
import xml.etree.ElementTree as ET
|
|
||||||
|
|
||||||
import ThriftClient
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.alertviz import AlertVizRequest
|
|
||||||
from dynamicserialize import DynamicSerializationManager
|
|
||||||
|
|
||||||
#
|
|
||||||
# Provides a capability of constructing notification messages and sending
|
|
||||||
# them to a STOMP data source.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 09/30/08 chammack Initial Creation.
|
|
||||||
# 11/03/10 5849 cjeanbap Moved to awips package from
|
|
||||||
# com.raytheon.uf.tools.cli
|
|
||||||
# 01/07/11 5645 cjeanbap Added audio file to Status Message.
|
|
||||||
# 05/27/11 3050 cjeanbap Added if-statement to check Priority
|
|
||||||
# value
|
|
||||||
#
|
|
||||||
class NotificationMessage:
|
|
||||||
|
|
||||||
priorityMap = {
|
|
||||||
0: 'CRITICAL',
|
|
||||||
1: 'SIGNIFICANT',
|
|
||||||
2: 'PROBLEM',
|
|
||||||
3: 'EVENTA',
|
|
||||||
4: 'EVENTB',
|
|
||||||
5: 'VERBOSE'}
|
|
||||||
|
|
||||||
def __init__(self, host='localhost', port=61999, message='', priority='PROBLEM', category="LOCAL", source="ANNOUNCER", audioFile="NONE"):
|
|
||||||
self.host = host
|
|
||||||
self.port = port
|
|
||||||
self.message = message
|
|
||||||
self.audioFile = audioFile
|
|
||||||
self.source = source
|
|
||||||
self.category = category
|
|
||||||
|
|
||||||
priorityInt = None
|
|
||||||
|
|
||||||
try:
|
|
||||||
priorityInt = int(priority)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if priorityInt is None:
|
|
||||||
#UFStatus.java contains mapping of Priority to Logging level mapping
|
|
||||||
if priority == 'CRITICAL' or priority == 'FATAL':
|
|
||||||
priorityInt = int(0)
|
|
||||||
elif priority == 'SIGNIFICANT' or priority == 'ERROR':
|
|
||||||
priorityInt = int(1)
|
|
||||||
elif priority == 'PROBLEM' or priority == 'WARN':
|
|
||||||
priorityInt = int(2)
|
|
||||||
elif priority == 'EVENTA' or priority == 'INFO':
|
|
||||||
priorityInt = int(3)
|
|
||||||
elif priority == 'EVENTB':
|
|
||||||
priorityInt = int(4)
|
|
||||||
elif priority == 'VERBOSE' or priority == 'DEBUG':
|
|
||||||
priorityInt = int(5)
|
|
||||||
|
|
||||||
if (priorityInt < 0 or priorityInt > 5):
|
|
||||||
print "Error occurred, supplied an invalid Priority value: " + str(priorityInt)
|
|
||||||
print "Priority values are 0, 1, 2, 3, 4 and 5."
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if priorityInt is not None:
|
|
||||||
self.priority = self.priorityMap[priorityInt]
|
|
||||||
else:
|
|
||||||
self.priority = priority
|
|
||||||
|
|
||||||
def connection_timeout(self, connection):
|
|
||||||
if (connection is not None and not connection.is_connected()):
|
|
||||||
print "Connection Retry Timeout"
|
|
||||||
for tid, tobj in threading._active.items():
|
|
||||||
if tobj.name is "MainThread":
|
|
||||||
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(SystemExit))
|
|
||||||
if res != 0 and res != 1:
|
|
||||||
# problem, reset state
|
|
||||||
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, 0)
|
|
||||||
|
|
||||||
def send(self):
|
|
||||||
# depending on the value of the port number indicates the distribution
|
|
||||||
# of the message to AlertViz
|
|
||||||
# 9581 is global distribution thru ThriftClient to Edex
|
|
||||||
# 61999 is local distribution
|
|
||||||
if (self.port == 61999):
|
|
||||||
# use stomp.py
|
|
||||||
conn = stomp.Connection(host_and_ports=[(self.host, self.port)])
|
|
||||||
timeout = threading.Timer(5.0, self.connection_timeout, [conn])
|
|
||||||
|
|
||||||
try:
|
|
||||||
timeout.start();
|
|
||||||
conn.start()
|
|
||||||
finally:
|
|
||||||
timeout.cancel()
|
|
||||||
|
|
||||||
conn.connect()
|
|
||||||
|
|
||||||
sm = ET.Element("statusMessage")
|
|
||||||
sm.set("machine", socket.gethostname())
|
|
||||||
sm.set("priority", self.priority)
|
|
||||||
sm.set("category", self.category)
|
|
||||||
sm.set("sourceKey", self.source)
|
|
||||||
sm.set("audioFile", self.audioFile)
|
|
||||||
msg = ET.SubElement(sm, "message")
|
|
||||||
msg.text = self.message
|
|
||||||
details = ET.SubElement(sm, "details")
|
|
||||||
msg = ET.tostring(sm, "UTF-8")
|
|
||||||
|
|
||||||
try :
|
|
||||||
conn.send(msg, destination='/queue/messages')
|
|
||||||
time.sleep(2)
|
|
||||||
finally:
|
|
||||||
conn.stop()
|
|
||||||
else:
|
|
||||||
# use ThriftClient
|
|
||||||
alertVizRequest = createRequest(self.message, self.priority, self.source, self.category, self.audioFile)
|
|
||||||
thriftClient = ThriftClient.ThriftClient(self.host, self.port, "/services")
|
|
||||||
|
|
||||||
serverResponse = None
|
|
||||||
try:
|
|
||||||
serverResponse = thriftClient.sendRequest(alertVizRequest)
|
|
||||||
except Exception, ex:
|
|
||||||
print "Caught exception submitting AlertVizRequest: ", str(ex)
|
|
||||||
|
|
||||||
if (serverResponse != "None"):
|
|
||||||
print "Error occurred submitting Notification Message to AlertViz receiver: ", serverResponse
|
|
||||||
sys.exit(1)
|
|
||||||
else:
|
|
||||||
print "Response: " + str(serverResponse)
|
|
||||||
|
|
||||||
def createRequest(message, priority, source, category, audioFile):
|
|
||||||
obj = AlertVizRequest()
|
|
||||||
|
|
||||||
obj.setMachine(socket.gethostname())
|
|
||||||
obj.setPriority(priority)
|
|
||||||
obj.setCategory(category)
|
|
||||||
obj.setSourceKey(source)
|
|
||||||
obj.setMessage(message)
|
|
||||||
if (audioFile is not None):
|
|
||||||
obj.setAudioFile(audioFile)
|
|
||||||
else:
|
|
||||||
obj.setAudioFile('\0')
|
|
||||||
|
|
||||||
return obj
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,97 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
#
|
|
||||||
# Provides a Python-based interface for subscribing to qpid queues and topics.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 11/17/10 njensen Initial Creation.
|
|
||||||
# 08/15/13 2169 bkowal Optionally gzip decompress any data that is read.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
import qpid
|
|
||||||
import zlib
|
|
||||||
|
|
||||||
from Queue import Empty
|
|
||||||
from qpid.exceptions import Closed
|
|
||||||
|
|
||||||
class QpidSubscriber:
|
|
||||||
|
|
||||||
def __init__(self, host='127.0.0.1', port=5672, decompress=False):
|
|
||||||
self.host = host
|
|
||||||
self.port = port
|
|
||||||
self.decompress = decompress;
|
|
||||||
socket = qpid.util.connect(host, port)
|
|
||||||
self.__connection = qpid.connection.Connection(sock=socket, username='guest', password='guest')
|
|
||||||
self.__connection.start()
|
|
||||||
self.__session = self.__connection.session(str(qpid.datatypes.uuid4()))
|
|
||||||
self.subscribed = True
|
|
||||||
|
|
||||||
def topicSubscribe(self, topicName, callback):
|
|
||||||
# if the queue is edex.alerts, set decompress to true always for now to
|
|
||||||
# maintain compatibility with existing python scripts.
|
|
||||||
if (topicName == 'edex.alerts'):
|
|
||||||
self.decompress = True
|
|
||||||
|
|
||||||
print "Establishing connection to broker on", self.host
|
|
||||||
queueName = topicName + self.__session.name
|
|
||||||
self.__session.queue_declare(queue=queueName, exclusive=True, auto_delete=True, arguments={'qpid.max_count':100, 'qpid.policy_type':'ring'})
|
|
||||||
self.__session.exchange_bind(exchange='amq.topic', queue=queueName, binding_key=topicName)
|
|
||||||
self.__innerSubscribe(queueName, callback)
|
|
||||||
|
|
||||||
def __innerSubscribe(self, serverQueueName, callback):
|
|
||||||
local_queue_name = 'local_queue_' + serverQueueName
|
|
||||||
queue = self.__session.incoming(local_queue_name)
|
|
||||||
self.__session.message_subscribe(serverQueueName, destination=local_queue_name)
|
|
||||||
queue.start()
|
|
||||||
print "Connection complete to broker on", self.host
|
|
||||||
|
|
||||||
while self.subscribed:
|
|
||||||
try:
|
|
||||||
message = queue.get(timeout=10)
|
|
||||||
content = message.body
|
|
||||||
self.__session.message_accept(qpid.datatypes.RangedSet(message.id))
|
|
||||||
if (self.decompress):
|
|
||||||
print "Decompressing received content"
|
|
||||||
try:
|
|
||||||
# http://stackoverflow.com/questions/2423866/python-decompressing-gzip-chunk-by-chunk
|
|
||||||
d = zlib.decompressobj(16+zlib.MAX_WBITS)
|
|
||||||
content = d.decompress(content)
|
|
||||||
except:
|
|
||||||
# decompression failed, return the original content
|
|
||||||
pass
|
|
||||||
callback(content)
|
|
||||||
except Empty:
|
|
||||||
pass
|
|
||||||
except Closed:
|
|
||||||
self.close()
|
|
||||||
|
|
||||||
def close(self):
|
|
||||||
self.subscribed = False
|
|
||||||
try:
|
|
||||||
self.__session.close(timeout=10)
|
|
||||||
except:
|
|
||||||
pass
|
|
|
@ -1,101 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
import httplib
|
|
||||||
from dynamicserialize import DynamicSerializationManager
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.serialization.comm.response import ServerErrorResponse
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.serialization import SerializableExceptionWrapper
|
|
||||||
|
|
||||||
#
|
|
||||||
# Provides a Python-based interface for executing Thrift requests.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 09/20/10 dgilling Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
class ThriftClient:
|
|
||||||
|
|
||||||
# How to call this constructor:
|
|
||||||
# 1. Pass in all arguments separately (e.g.,
|
|
||||||
# ThriftClient.ThriftClient("localhost", 9581, "/services"))
|
|
||||||
# will return a Thrift client pointed at http://localhost:9581/services.
|
|
||||||
# 2. Pass in all arguments through the host string (e.g.,
|
|
||||||
# ThriftClient.ThriftClient("localhost:9581/services"))
|
|
||||||
# will return a Thrift client pointed at http://localhost:9581/services.
|
|
||||||
# 3. Pass in host/port arguments through the host string (e.g.,
|
|
||||||
# ThriftClient.ThriftClient("localhost:9581", "/services"))
|
|
||||||
# will return a Thrift client pointed at http://localhost:9581/services.
|
|
||||||
def __init__(self, host, port=9581, uri="/services"):
|
|
||||||
hostParts = host.split("/", 1)
|
|
||||||
if (len(hostParts) > 1):
|
|
||||||
hostString = hostParts[0]
|
|
||||||
self.__uri = "/" + hostParts[1]
|
|
||||||
self.__httpConn = httplib.HTTPConnection(hostString)
|
|
||||||
else:
|
|
||||||
if (port is None):
|
|
||||||
self.__httpConn = httplib.HTTPConnection(host)
|
|
||||||
else:
|
|
||||||
self.__httpConn = httplib.HTTPConnection(host, port)
|
|
||||||
|
|
||||||
self.__uri = uri
|
|
||||||
|
|
||||||
self.__dsm = DynamicSerializationManager.DynamicSerializationManager()
|
|
||||||
|
|
||||||
def sendRequest(self, request, uri="/thrift"):
|
|
||||||
message = self.__dsm.serializeObject(request)
|
|
||||||
|
|
||||||
self.__httpConn.connect()
|
|
||||||
self.__httpConn.request("POST", self.__uri + uri, message)
|
|
||||||
|
|
||||||
response = self.__httpConn.getresponse()
|
|
||||||
if (response.status != 200):
|
|
||||||
raise ThriftRequestException("Unable to post request to server")
|
|
||||||
|
|
||||||
rval = self.__dsm.deserializeBytes(response.read())
|
|
||||||
self.__httpConn.close()
|
|
||||||
|
|
||||||
# let's verify we have an instance of ServerErrorResponse
|
|
||||||
# IF we do, through an exception up to the caller along
|
|
||||||
# with the original Java stack trace
|
|
||||||
# ELSE: we have a valid response and pass it back
|
|
||||||
try:
|
|
||||||
forceError = rval.getException()
|
|
||||||
raise ThriftRequestException(forceError)
|
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return rval
|
|
||||||
|
|
||||||
|
|
||||||
class ThriftRequestException(Exception):
|
|
||||||
def __init__(self, value):
|
|
||||||
self.parameter = value
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return repr(self.parameter)
|
|
||||||
|
|
||||||
|
|
|
@ -1,108 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
# ----------------------------------------------------------------------------
|
|
||||||
# This software is in the public domain, furnished "as is", without technical
|
|
||||||
# support, and with no warranty, express or implied, as to its usefulness for
|
|
||||||
# any purpose.
|
|
||||||
#
|
|
||||||
# offsetTime.py
|
|
||||||
# Handles Displaced Real Time for various applications
|
|
||||||
#
|
|
||||||
# Author: hansen/romberg
|
|
||||||
# ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
import string
|
|
||||||
import time
|
|
||||||
|
|
||||||
# Given the timeStr, return the offset (in seconds)
|
|
||||||
# from the current time.
|
|
||||||
# Also return the launchStr i.e. Programs launched from this
|
|
||||||
# offset application will use the launchStr as the -z argument.
|
|
||||||
# The offset will be positive for time in the future,
|
|
||||||
# negative for time in the past.
|
|
||||||
#
|
|
||||||
# May still want it to be normalized to the most recent midnight.
|
|
||||||
#
|
|
||||||
# NOTES about synchronizing:
|
|
||||||
# --With synchronizing on, the "current time" for all processes started
|
|
||||||
# within a given hour will be the same.
|
|
||||||
# This guarantees that GFE's have the same current time and ISC grid
|
|
||||||
# time stamps are syncrhonized and can be exchanged.
|
|
||||||
# Formatters launched from the GFE in this mode will be synchronized as
|
|
||||||
# well by setting the launchStr to use the time difference format
|
|
||||||
# (YYYYMMDD_HHMM,YYYYMMDD_HHMM).
|
|
||||||
# --This does not solve the problem in the general case.
|
|
||||||
# For example, if someone starts the GFE at 12:59 and someone
|
|
||||||
# else starts it at 1:01, they will have different offsets and
|
|
||||||
# current times.
|
|
||||||
# --With synchronizing off, when the process starts, the current time
|
|
||||||
# matches the drtTime in the command line. However, with synchronizing
|
|
||||||
# on, the current time will be offset by the fraction of the hour at
|
|
||||||
# which the process was started. Examples:
|
|
||||||
# Actual Starting time: 20040617_1230
|
|
||||||
# drtTime 20040616_0000
|
|
||||||
# Synchronizing off:
|
|
||||||
# GFE Spatial Editor at StartUp: 20040616_0000
|
|
||||||
# Synchronizing on:
|
|
||||||
# GFE Spatial Editor at StartUp: 20040616_0030
|
|
||||||
#
|
|
||||||
def determineDrtOffset(timeStr):
|
|
||||||
launchStr = timeStr
|
|
||||||
# Check for time difference
|
|
||||||
if timeStr.find(",") >=0:
|
|
||||||
times = timeStr.split(",")
|
|
||||||
t1 = makeTime(times[0])
|
|
||||||
t2 = makeTime(times[1])
|
|
||||||
#print "time offset", t1-t2, (t1-t2)/3600
|
|
||||||
return t1-t2, launchStr
|
|
||||||
# Check for synchronized mode
|
|
||||||
synch = 0
|
|
||||||
if timeStr[0] == "S":
|
|
||||||
timeStr = timeStr[1:]
|
|
||||||
synch = 1
|
|
||||||
drt_t = makeTime(timeStr)
|
|
||||||
#print "input", year, month, day, hour, minute
|
|
||||||
gm = time.gmtime()
|
|
||||||
cur_t = time.mktime(gm)
|
|
||||||
|
|
||||||
# Synchronize to most recent hour
|
|
||||||
# i.e. "truncate" cur_t to most recent hour.
|
|
||||||
#print "gmtime", gm
|
|
||||||
if synch:
|
|
||||||
cur_t = time.mktime((gm[0], gm[1], gm[2], gm[3], 0, 0, 0, 0, 0))
|
|
||||||
curStr = '%4s%2s%2s_%2s00\n' % (`gm[0]`,`gm[1]`,`gm[2]`,`gm[3]`)
|
|
||||||
curStr = curStr.replace(' ','0')
|
|
||||||
launchStr = timeStr + "," + curStr
|
|
||||||
|
|
||||||
#print "drt, cur", drt_t, cur_t
|
|
||||||
offset = drt_t - cur_t
|
|
||||||
#print "offset", offset, offset/3600, launchStr
|
|
||||||
return int(offset), launchStr
|
|
||||||
|
|
||||||
def makeTime(timeStr):
|
|
||||||
year = string.atoi(timeStr[0:4])
|
|
||||||
month = string.atoi(timeStr[4:6])
|
|
||||||
day = string.atoi(timeStr[6:8])
|
|
||||||
hour = string.atoi(timeStr[9:11])
|
|
||||||
minute = string.atoi(timeStr[11:13])
|
|
||||||
# Do not use daylight savings because gmtime is not in daylight
|
|
||||||
# savings time.
|
|
||||||
return time.mktime((year, month, day, hour, minute, 0, 0, 0, 0))
|
|
||||||
|
|
|
@ -1,215 +0,0 @@
|
||||||
# #
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
# #
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Published interface for awips.dataaccess package
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 12/10/12 njensen Initial Creation.
|
|
||||||
# Feb 14, 2013 1614 bsteffen refactor data access framework
|
|
||||||
# to use single request.
|
|
||||||
# 04/10/13 1871 mnash move getLatLonCoords to JGridData and add default args
|
|
||||||
# 05/29/13 2023 dgilling Hook up ThriftClientRouter.
|
|
||||||
# 03/03/14 2673 bsteffen Add ability to query only ref times.
|
|
||||||
# 07/22/14 3185 njensen Added optional/default args to newDataRequest
|
|
||||||
# 07/30/14 3185 njensen Renamed valid identifiers to optional
|
|
||||||
# Apr 26, 2015 4259 njensen Updated for new JEP API
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
THRIFT_HOST = "edex"
|
|
||||||
USING_NATIVE_THRIFT = False
|
|
||||||
|
|
||||||
if sys.modules.has_key('jep'):
|
|
||||||
# intentionally do not catch if this fails to import, we want it to
|
|
||||||
# be obvious that something is configured wrong when running from within
|
|
||||||
# Java instead of allowing false confidence and fallback behavior
|
|
||||||
import JepRouter
|
|
||||||
router = JepRouter
|
|
||||||
else:
|
|
||||||
from awips.dataaccess import ThriftClientRouter
|
|
||||||
router = ThriftClientRouter.ThriftClientRouter(THRIFT_HOST)
|
|
||||||
USING_NATIVE_THRIFT = True
|
|
||||||
|
|
||||||
|
|
||||||
def getAvailableTimes(request, refTimeOnly=False):
|
|
||||||
"""
|
|
||||||
Get the times of available data to the request.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: the IDataRequest to get data for
|
|
||||||
refTimeOnly: optional, use True if only unique refTimes should be
|
|
||||||
returned (without a forecastHr)
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of DataTimes
|
|
||||||
"""
|
|
||||||
return router.getAvailableTimes(request, refTimeOnly)
|
|
||||||
|
|
||||||
def getGridData(request, times=[]):
|
|
||||||
"""
|
|
||||||
Gets the grid data that matches the request at the specified times. Each
|
|
||||||
combination of parameter, level, and dataTime will be returned as a
|
|
||||||
separate IGridData.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: the IDataRequest to get data for
|
|
||||||
times: a list of DataTimes, a TimeRange, or None if the data is time
|
|
||||||
agnostic
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of IGridData
|
|
||||||
"""
|
|
||||||
return router.getGridData(request, times)
|
|
||||||
|
|
||||||
def getGeometryData(request, times=[]):
|
|
||||||
"""
|
|
||||||
Gets the geometry data that matches the request at the specified times.
|
|
||||||
Each combination of geometry, level, and dataTime will be returned as a
|
|
||||||
separate IGeometryData.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: the IDataRequest to get data for
|
|
||||||
times: a list of DataTimes, a TimeRange, or None if the data is time
|
|
||||||
agnostic
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of IGeometryData
|
|
||||||
"""
|
|
||||||
return router.getGeometryData(request, times)
|
|
||||||
|
|
||||||
def getAvailableLocationNames(request):
|
|
||||||
"""
|
|
||||||
Gets the available location names that match the request without actually
|
|
||||||
requesting the data.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: the request to find matching location names for
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of available location names.
|
|
||||||
"""
|
|
||||||
return router.getAvailableLocationNames(request)
|
|
||||||
|
|
||||||
def getAvailableParameters(request):
|
|
||||||
"""
|
|
||||||
Gets the available parameters names that match the request without actually
|
|
||||||
requesting the data.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: the request to find matching parameter names for
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of available parameter names.
|
|
||||||
"""
|
|
||||||
return router.getAvailableParameters(request)
|
|
||||||
|
|
||||||
def getAvailableLevels(request):
|
|
||||||
"""
|
|
||||||
Gets the available levels that match the request without actually
|
|
||||||
requesting the data.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
request: the request to find matching levels for
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of available levels.
|
|
||||||
"""
|
|
||||||
return router.getAvailableLevels(request)
|
|
||||||
|
|
||||||
def getRequiredIdentifiers(datatype):
|
|
||||||
"""
|
|
||||||
Gets the required identifiers for this datatype. These identifiers
|
|
||||||
must be set on a request for the request of this datatype to succeed.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
datatype: the datatype to find required identifiers for
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of required identifiers
|
|
||||||
"""
|
|
||||||
return router.getRequiredIdentifiers(datatype)
|
|
||||||
|
|
||||||
def getOptionalIdentifiers(datatype):
|
|
||||||
"""
|
|
||||||
Gets the optional identifiers for this datatype.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
datatype: the datatype to find optional identifiers for
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of optional identifiers
|
|
||||||
"""
|
|
||||||
return router.getOptionalIdentifiers(datatype)
|
|
||||||
|
|
||||||
def newDataRequest(datatype=None, **kwargs):
|
|
||||||
""""
|
|
||||||
Creates a new instance of IDataRequest suitable for the runtime environment.
|
|
||||||
All args are optional and exist solely for convenience.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
datatype: the datatype to create a request for
|
|
||||||
parameters: a list of parameters to set on the request
|
|
||||||
levels: a list of levels to set on the request
|
|
||||||
locationNames: a list of locationNames to set on the request
|
|
||||||
envelope: an envelope to limit the request
|
|
||||||
**kwargs: any leftover kwargs will be set as identifiers
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a new IDataRequest
|
|
||||||
"""
|
|
||||||
return router.newDataRequest(datatype, **kwargs)
|
|
||||||
|
|
||||||
def getSupportedDatatypes():
|
|
||||||
"""
|
|
||||||
Gets the datatypes that are supported by the framework
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of supported datatypes
|
|
||||||
"""
|
|
||||||
return router.getSupportedDatatypes()
|
|
||||||
|
|
||||||
|
|
||||||
def changeEDEXHost(newHostName):
|
|
||||||
"""
|
|
||||||
Changes the EDEX host the Data Access Framework is communicating with. Only
|
|
||||||
works if using the native Python client implementation, otherwise, this
|
|
||||||
method will throw a TypeError.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
newHostHame: the EDEX host to connect to
|
|
||||||
"""
|
|
||||||
if USING_NATIVE_THRIFT:
|
|
||||||
global THRIFT_HOST
|
|
||||||
THRIFT_HOST = newHostName
|
|
||||||
global router
|
|
||||||
router = ThriftClientRouter.ThriftClientRouter(THRIFT_HOST)
|
|
||||||
else:
|
|
||||||
raise TypeError("Cannot call changeEDEXHost when using JepRouter.")
|
|
|
@ -1,57 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
#
|
|
||||||
# Implements IData for use by native Python clients to the Data Access
|
|
||||||
# Framework.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/03/13 dgilling Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
from awips.dataaccess import IData
|
|
||||||
|
|
||||||
class PyData(IData):
|
|
||||||
|
|
||||||
def __init__(self, dataRecord):
|
|
||||||
self.__time = dataRecord.getTime()
|
|
||||||
self.__level = dataRecord.getLevel()
|
|
||||||
self.__locationName = dataRecord.getLocationName()
|
|
||||||
self.__attributes = dataRecord.getAttributes()
|
|
||||||
|
|
||||||
def getAttribute(self, key):
|
|
||||||
return self.__attributes[key]
|
|
||||||
|
|
||||||
def getAttributes(self):
|
|
||||||
return self.__attributes.keys()
|
|
||||||
|
|
||||||
def getDataTime(self):
|
|
||||||
return self.__time
|
|
||||||
|
|
||||||
def getLevel(self):
|
|
||||||
return self.__level
|
|
||||||
|
|
||||||
def getLocationName(self):
|
|
||||||
return self.__locationName
|
|
|
@ -1,79 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
#
|
|
||||||
# Implements IGeometryData for use by native Python clients to the Data Access
|
|
||||||
# Framework.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/03/13 dgilling Initial Creation.
|
|
||||||
# 01/06/14 #2537 bsteffen Share geometry WKT.
|
|
||||||
# 03/19/14 #2882 dgilling Raise an exception when getNumber()
|
|
||||||
# is called for data that is not a
|
|
||||||
# numeric Type.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
from awips.dataaccess import IGeometryData
|
|
||||||
from awips.dataaccess import PyData
|
|
||||||
|
|
||||||
class PyGeometryData(IGeometryData, PyData.PyData):
|
|
||||||
|
|
||||||
def __init__(self, geoDataRecord, geometry):
|
|
||||||
PyData.PyData.__init__(self, geoDataRecord)
|
|
||||||
self.__geometry = geometry
|
|
||||||
self.__dataMap = {}
|
|
||||||
tempDataMap = geoDataRecord.getDataMap()
|
|
||||||
for key, value in tempDataMap.items():
|
|
||||||
self.__dataMap[key] = (value[0], value[1], value[2])
|
|
||||||
|
|
||||||
def getGeometry(self):
|
|
||||||
return self.__geometry
|
|
||||||
|
|
||||||
def getParameters(self):
|
|
||||||
return self.__dataMap.keys()
|
|
||||||
|
|
||||||
def getString(self, param):
|
|
||||||
value = self.__dataMap[param][0]
|
|
||||||
return str(value)
|
|
||||||
|
|
||||||
def getNumber(self, param):
|
|
||||||
value = self.__dataMap[param][0]
|
|
||||||
t = self.getType(param)
|
|
||||||
if t == 'INT':
|
|
||||||
return int(value)
|
|
||||||
elif t == 'LONG':
|
|
||||||
return long(value)
|
|
||||||
elif t == 'FLOAT':
|
|
||||||
return float(value)
|
|
||||||
elif t == 'DOUBLE':
|
|
||||||
return float(value)
|
|
||||||
else:
|
|
||||||
raise TypeError("Data for parameter " + param + " is not a numeric type.")
|
|
||||||
|
|
||||||
def getUnit(self, param):
|
|
||||||
return self.__dataMap[param][2]
|
|
||||||
|
|
||||||
def getType(self, param):
|
|
||||||
return self.__dataMap[param][1]
|
|
|
@ -1,283 +0,0 @@
|
||||||
# #
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
# #
|
|
||||||
|
|
||||||
#
|
|
||||||
# Classes for retrieving soundings based on gridded data from the Data Access
|
|
||||||
# Framework
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/24/15 #4480 dgilling Initial Creation.
|
|
||||||
#
|
|
||||||
|
|
||||||
from collections import defaultdict
|
|
||||||
from shapely.geometry import Point
|
|
||||||
|
|
||||||
from awips import DateTimeConverter
|
|
||||||
from awips.dataaccess import DataAccessLayer
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.time import DataTime
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.level import Level
|
|
||||||
|
|
||||||
|
|
||||||
def getSounding(modelName, weatherElements, levels, samplePoint, refTime=None, timeRange=None):
|
|
||||||
""""
|
|
||||||
Performs a series of Data Access Framework requests to retrieve a sounding object
|
|
||||||
based on the specified request parameters.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
modelName: the grid model datasetid to use as the basis of the sounding.
|
|
||||||
weatherElements: a list of parameters to return in the sounding.
|
|
||||||
levels: a list of levels to sample the given weather elements at
|
|
||||||
samplePoint: a lat/lon pair to perform the sampling of data at.
|
|
||||||
refTime: (optional) the grid model reference time to use for the sounding.
|
|
||||||
If not specified, the latest ref time in the system will be used.
|
|
||||||
timeRange: (optional) a TimeRange to specify which forecast hours to use.
|
|
||||||
If not specified, will default to all forecast hours.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A _SoundingCube instance, which acts a 3-tiered dictionary, keyed
|
|
||||||
by DataTime, then by level and finally by weather element. If no
|
|
||||||
data is available for the given request parameters, None is returned.
|
|
||||||
"""
|
|
||||||
|
|
||||||
(locationNames, parameters, levels, envelope, refTime, timeRange) = \
|
|
||||||
__sanitizeInputs(modelName, weatherElements, levels, samplePoint, refTime, timeRange)
|
|
||||||
|
|
||||||
requestArgs = { 'datatype' : 'grid',
|
|
||||||
'locationNames' : locationNames,
|
|
||||||
'parameters' : parameters,
|
|
||||||
'levels' : levels,
|
|
||||||
'envelope' : envelope,
|
|
||||||
}
|
|
||||||
|
|
||||||
req = DataAccessLayer.newDataRequest(**requestArgs)
|
|
||||||
|
|
||||||
forecastHours = __determineForecastHours(req, refTime, timeRange)
|
|
||||||
if not forecastHours:
|
|
||||||
return None
|
|
||||||
|
|
||||||
response = DataAccessLayer.getGeometryData(req, forecastHours)
|
|
||||||
soundingObject = _SoundingCube(response)
|
|
||||||
|
|
||||||
return soundingObject
|
|
||||||
|
|
||||||
def setEDEXHost(host):
|
|
||||||
"""
|
|
||||||
Changes the EDEX host the Data Access Framework is communicating with.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
host: the EDEX host to connect to
|
|
||||||
"""
|
|
||||||
|
|
||||||
if host:
|
|
||||||
DataAccessLayer.changeEDEXHost(str(host))
|
|
||||||
|
|
||||||
def __sanitizeInputs(modelName, weatherElements, levels, samplePoint, refTime, timeRange):
|
|
||||||
locationNames = [str(modelName)]
|
|
||||||
parameters = __buildStringList(weatherElements)
|
|
||||||
levels = __buildStringList(levels)
|
|
||||||
envelope = Point(samplePoint)
|
|
||||||
if refTime is not None:
|
|
||||||
refTime = DataTime(refTime=DateTimeConverter.convertToDateTime(refTime))
|
|
||||||
if timeRange is not None:
|
|
||||||
timeRange = DateTimeConverter.constructTimeRange(*timeRange)
|
|
||||||
return (locationNames, parameters, levels, envelope, refTime, timeRange)
|
|
||||||
|
|
||||||
def __determineForecastHours(request, refTime, timeRange):
|
|
||||||
dataTimes = DataAccessLayer.getAvailableTimes(request, False)
|
|
||||||
timesGen = [(DataTime(refTime=dataTime.getRefTime()), dataTime) for dataTime in dataTimes]
|
|
||||||
dataTimesMap = defaultdict(list)
|
|
||||||
for baseTime, dataTime in timesGen:
|
|
||||||
dataTimesMap[baseTime].append(dataTime)
|
|
||||||
|
|
||||||
if refTime is None:
|
|
||||||
refTime = max(dataTimesMap.keys())
|
|
||||||
|
|
||||||
forecastHours = dataTimesMap[refTime]
|
|
||||||
if timeRange is None:
|
|
||||||
return forecastHours
|
|
||||||
else:
|
|
||||||
return [forecastHour for forecastHour in forecastHours if timeRange.contains(forecastHour.getValidPeriod())]
|
|
||||||
|
|
||||||
def __buildStringList(param):
|
|
||||||
if __notStringIter(param):
|
|
||||||
return [str(item) for item in param]
|
|
||||||
else:
|
|
||||||
return [str(param)]
|
|
||||||
|
|
||||||
def __notStringIter(iterable):
|
|
||||||
if not isinstance(iterable, basestring):
|
|
||||||
try:
|
|
||||||
iter(iterable)
|
|
||||||
return True
|
|
||||||
except TypeError:
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class _SoundingCube(object):
|
|
||||||
"""
|
|
||||||
The top-level sounding object returned when calling SoundingsSupport.getSounding.
|
|
||||||
|
|
||||||
This object acts as a 3-tiered dict which is keyed by time then level
|
|
||||||
then parameter name. Calling times() will return all valid keys into this
|
|
||||||
object.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, geometryDataObjects):
|
|
||||||
self._dataDict = {}
|
|
||||||
self._sortedTimes = []
|
|
||||||
if geometryDataObjects:
|
|
||||||
for geometryData in geometryDataObjects:
|
|
||||||
dataTime = geometryData.getDataTime()
|
|
||||||
level = geometryData.getLevel()
|
|
||||||
for parameter in geometryData.getParameters():
|
|
||||||
self.__addItem(parameter, dataTime, level, geometryData.getNumber(parameter))
|
|
||||||
|
|
||||||
def __addItem(self, parameter, dataTime, level, value):
|
|
||||||
timeLayer = self._dataDict.get(dataTime, _SoundingTimeLayer(dataTime))
|
|
||||||
self._dataDict[dataTime] = timeLayer
|
|
||||||
timeLayer._addItem(parameter, level, value)
|
|
||||||
if dataTime not in self._sortedTimes:
|
|
||||||
self._sortedTimes.append(dataTime)
|
|
||||||
self._sortedTimes.sort()
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
|
||||||
return self._dataDict[key]
|
|
||||||
|
|
||||||
def __len__(self):
|
|
||||||
return len(self._dataDict)
|
|
||||||
|
|
||||||
def times(self):
|
|
||||||
"""
|
|
||||||
Returns the valid times for this sounding.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A list containing the valid DataTimes for this sounding in order.
|
|
||||||
"""
|
|
||||||
return self._sortedTimes
|
|
||||||
|
|
||||||
|
|
||||||
class _SoundingTimeLayer(object):
|
|
||||||
"""
|
|
||||||
The second-level sounding object returned when calling SoundingsSupport.getSounding.
|
|
||||||
|
|
||||||
This object acts as a 2-tiered dict which is keyed by level then parameter
|
|
||||||
name. Calling levels() will return all valid keys into this
|
|
||||||
object. Calling time() will return the DataTime for this particular layer.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, dataTime):
|
|
||||||
self._dataTime = dataTime
|
|
||||||
self._dataDict = {}
|
|
||||||
|
|
||||||
def _addItem(self, parameter, level, value):
|
|
||||||
asString = str(level)
|
|
||||||
levelLayer = self._dataDict.get(asString, _SoundingTimeAndLevelLayer(self._dataTime, asString))
|
|
||||||
levelLayer._addItem(parameter, value)
|
|
||||||
self._dataDict[asString] = levelLayer
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
|
||||||
asString = str(key)
|
|
||||||
if asString in self._dataDict:
|
|
||||||
return self._dataDict[asString]
|
|
||||||
else:
|
|
||||||
raise KeyError("Level " + str(key) + " is not a valid level for this sounding.")
|
|
||||||
|
|
||||||
def __len__(self):
|
|
||||||
return len(self._dataDict)
|
|
||||||
|
|
||||||
def time(self):
|
|
||||||
"""
|
|
||||||
Returns the DataTime for this sounding cube layer.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
The DataTime for this sounding layer.
|
|
||||||
"""
|
|
||||||
return self._dataTime
|
|
||||||
|
|
||||||
def levels(self):
|
|
||||||
"""
|
|
||||||
Returns the valid levels for this sounding.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A list containing the valid levels for this sounding in order of
|
|
||||||
closest to surface to highest from surface.
|
|
||||||
"""
|
|
||||||
sortedLevels = [Level(level) for level in self._dataDict.keys()]
|
|
||||||
sortedLevels.sort()
|
|
||||||
return [str(level) for level in sortedLevels]
|
|
||||||
|
|
||||||
|
|
||||||
class _SoundingTimeAndLevelLayer(object):
|
|
||||||
"""
|
|
||||||
The bottom-level sounding object returned when calling SoundingsSupport.getSounding.
|
|
||||||
|
|
||||||
This object acts as a dict which is keyed by parameter name. Calling
|
|
||||||
parameters() will return all valid keys into this object. Calling time()
|
|
||||||
will return the DataTime for this particular layer. Calling level() will
|
|
||||||
return the level for this layer.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, time, level):
|
|
||||||
self._time = time
|
|
||||||
self._level = level
|
|
||||||
self._parameters = {}
|
|
||||||
|
|
||||||
def _addItem(self, parameter, value):
|
|
||||||
self._parameters[parameter] = value
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
|
||||||
return self._parameters[key]
|
|
||||||
|
|
||||||
def __len__(self):
|
|
||||||
return len(self._parameters)
|
|
||||||
|
|
||||||
def level(self):
|
|
||||||
"""
|
|
||||||
Returns the level for this sounding cube layer.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
The level for this sounding layer.
|
|
||||||
"""
|
|
||||||
return self._level
|
|
||||||
|
|
||||||
def parameters(self):
|
|
||||||
"""
|
|
||||||
Returns the valid parameters for this sounding.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A list containing the valid parameter names.
|
|
||||||
"""
|
|
||||||
return list(self._parameters.keys())
|
|
||||||
|
|
||||||
def time(self):
|
|
||||||
"""
|
|
||||||
Returns the DataTime for this sounding cube layer.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
The DataTime for this sounding layer.
|
|
||||||
"""
|
|
||||||
return self._time
|
|
|
@ -1,176 +0,0 @@
|
||||||
# #
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
# #
|
|
||||||
|
|
||||||
#
|
|
||||||
# Routes requests to the Data Access Framework through Python Thrift.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 05/21/13 #2023 dgilling Initial Creation.
|
|
||||||
# 01/06/14 #2537 bsteffen Share geometry WKT.
|
|
||||||
# 03/03/14 #2673 bsteffen Add ability to query only ref times.
|
|
||||||
# 07/22/14 #3185 njensen Added optional/default args to newDataRequest
|
|
||||||
# 07/23/14 #3185 njensen Added new methods
|
|
||||||
# 07/30/14 #3185 njensen Renamed valid identifiers to optional
|
|
||||||
# 06/30/15 #4569 nabowle Use hex WKB for geometries.
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
import numpy
|
|
||||||
import shapely.wkb
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.impl import DefaultDataRequest
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetAvailableLocationNamesRequest
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetAvailableTimesRequest
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetGeometryDataRequest
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetGridDataRequest
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetAvailableParametersRequest
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetAvailableLevelsRequest
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetRequiredIdentifiersRequest
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetOptionalIdentifiersRequest
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.request import GetSupportedDatatypesRequest
|
|
||||||
|
|
||||||
from awips import ThriftClient
|
|
||||||
from awips.dataaccess import PyGeometryData
|
|
||||||
from awips.dataaccess import PyGridData
|
|
||||||
|
|
||||||
|
|
||||||
class ThriftClientRouter(object):
|
|
||||||
|
|
||||||
def __init__(self, host='localhost'):
|
|
||||||
self._client = ThriftClient.ThriftClient(host)
|
|
||||||
|
|
||||||
def getAvailableTimes(self, request, refTimeOnly):
|
|
||||||
timesRequest = GetAvailableTimesRequest()
|
|
||||||
timesRequest.setRequestParameters(request)
|
|
||||||
timesRequest.setRefTimeOnly(refTimeOnly)
|
|
||||||
response = self._client.sendRequest(timesRequest)
|
|
||||||
return response
|
|
||||||
|
|
||||||
def getGridData(self, request, times):
|
|
||||||
gridDataRequest = GetGridDataRequest()
|
|
||||||
gridDataRequest.setRequestParameters(request)
|
|
||||||
# if we have an iterable times instance, then the user must have asked
|
|
||||||
# for grid data with the List of DataTime objects
|
|
||||||
# else, we assume it was a single TimeRange that was meant for the
|
|
||||||
# request
|
|
||||||
try:
|
|
||||||
iter(times)
|
|
||||||
gridDataRequest.setRequestedTimes(times)
|
|
||||||
except TypeError:
|
|
||||||
gridDataRequest.setRequestedPeriod(times)
|
|
||||||
response = self._client.sendRequest(gridDataRequest)
|
|
||||||
|
|
||||||
locSpecificData = {}
|
|
||||||
locNames = response.getSiteNxValues().keys()
|
|
||||||
for location in locNames:
|
|
||||||
nx = response.getSiteNxValues()[location]
|
|
||||||
ny = response.getSiteNyValues()[location]
|
|
||||||
latData = numpy.reshape(numpy.array(response.getSiteLatGrids()[location]), (nx, ny))
|
|
||||||
lonData = numpy.reshape(numpy.array(response.getSiteLonGrids()[location]), (nx, ny))
|
|
||||||
locSpecificData[location] = (nx, ny, (lonData, latData))
|
|
||||||
|
|
||||||
retVal = []
|
|
||||||
for gridDataRecord in response.getGridData():
|
|
||||||
locationName = gridDataRecord.getLocationName()
|
|
||||||
locData = locSpecificData[locationName]
|
|
||||||
retVal.append(PyGridData.PyGridData(gridDataRecord, locData[0], locData[1], locData[2]))
|
|
||||||
return retVal
|
|
||||||
|
|
||||||
def getGeometryData(self, request, times):
|
|
||||||
geoDataRequest = GetGeometryDataRequest()
|
|
||||||
geoDataRequest.setRequestParameters(request)
|
|
||||||
# if we have an iterable times instance, then the user must have asked
|
|
||||||
# for geometry data with the List of DataTime objects
|
|
||||||
# else, we assume it was a single TimeRange that was meant for the
|
|
||||||
# request
|
|
||||||
try:
|
|
||||||
iter(times)
|
|
||||||
geoDataRequest.setRequestedTimes(times)
|
|
||||||
except TypeError:
|
|
||||||
geoDataRequest.setRequestedPeriod(times)
|
|
||||||
response = self._client.sendRequest(geoDataRequest)
|
|
||||||
geometries = []
|
|
||||||
for wkb in response.getGeometryWKBs():
|
|
||||||
# convert the wkb to a bytearray with only positive values
|
|
||||||
byteArrWKB = bytearray(map(lambda x: x % 256,wkb.tolist()))
|
|
||||||
# convert the bytearray to a byte string and load it.
|
|
||||||
geometries.append(shapely.wkb.loads(str(byteArrWKB)))
|
|
||||||
|
|
||||||
retVal = []
|
|
||||||
for geoDataRecord in response.getGeoData():
|
|
||||||
geom = geometries[geoDataRecord.getGeometryWKBindex()]
|
|
||||||
retVal.append(PyGeometryData.PyGeometryData(geoDataRecord, geom))
|
|
||||||
return retVal
|
|
||||||
|
|
||||||
def getAvailableLocationNames(self, request):
|
|
||||||
locNamesRequest = GetAvailableLocationNamesRequest()
|
|
||||||
locNamesRequest.setRequestParameters(request)
|
|
||||||
response = self._client.sendRequest(locNamesRequest)
|
|
||||||
return response
|
|
||||||
|
|
||||||
def getAvailableParameters(self, request):
|
|
||||||
paramReq = GetAvailableParametersRequest()
|
|
||||||
paramReq.setRequestParameters(request)
|
|
||||||
response = self._client.sendRequest(paramReq)
|
|
||||||
return response
|
|
||||||
|
|
||||||
def getAvailableLevels(self, request):
|
|
||||||
levelReq = GetAvailableLevelsRequest()
|
|
||||||
levelReq.setRequestParameters(request)
|
|
||||||
response = self._client.sendRequest(levelReq)
|
|
||||||
return response
|
|
||||||
|
|
||||||
def getRequiredIdentifiers(self, datatype):
|
|
||||||
idReq = GetRequiredIdentifiersRequest()
|
|
||||||
idReq.setDatatype(datatype)
|
|
||||||
response = self._client.sendRequest(idReq)
|
|
||||||
return response
|
|
||||||
|
|
||||||
def getOptionalIdentifiers(self, datatype):
|
|
||||||
idReq = GetOptionalIdentifiersRequest()
|
|
||||||
idReq.setDatatype(datatype)
|
|
||||||
response = self._client.sendRequest(idReq)
|
|
||||||
return response
|
|
||||||
|
|
||||||
def newDataRequest(self, datatype, parameters=[], levels=[], locationNames = [], envelope=None, **kwargs):
|
|
||||||
req = DefaultDataRequest()
|
|
||||||
if datatype:
|
|
||||||
req.setDatatype(datatype)
|
|
||||||
if parameters:
|
|
||||||
req.setParameters(*parameters)
|
|
||||||
if levels:
|
|
||||||
req.setLevels(*levels)
|
|
||||||
if locationNames:
|
|
||||||
req.setLocationNames(*locationNames)
|
|
||||||
if envelope:
|
|
||||||
req.setEnvelope(envelope)
|
|
||||||
if kwargs:
|
|
||||||
# any args leftover are assumed to be identifiers
|
|
||||||
req.identifiers = kwargs
|
|
||||||
return req
|
|
||||||
|
|
||||||
def getSupportedDatatypes(self):
|
|
||||||
response = self._client.sendRequest(GetSupportedDatatypesRequest())
|
|
||||||
return response
|
|
|
@ -1,353 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# __init__.py for awips.dataaccess package
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 12/10/12 njensen Initial Creation.
|
|
||||||
# Feb 14, 2013 1614 bsteffen refactor data access framework
|
|
||||||
# to use single request.
|
|
||||||
# Apr 09, 2013 1871 njensen Add doc strings
|
|
||||||
# Jun 03, 2013 2023 dgilling Add getAttributes to IData, add
|
|
||||||
# getLatLonGrids() to IGridData.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
import abc
|
|
||||||
|
|
||||||
class IDataRequest(object):
|
|
||||||
"""
|
|
||||||
An IDataRequest to be submitted to the DataAccessLayer to retrieve data.
|
|
||||||
"""
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def setDatatype(self, datatype):
|
|
||||||
"""
|
|
||||||
Sets the datatype of the request.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
datatype: A string of the datatype, such as "grid", "radar", "gfe", "obs"
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def addIdentifier(self, key, value):
|
|
||||||
"""
|
|
||||||
Adds an identifier to the request. Identifiers are specific to the
|
|
||||||
datatype being requested.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
key: the string key of the identifier
|
|
||||||
value: the value of the identifier
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def setParameters(self, params):
|
|
||||||
"""
|
|
||||||
Sets the parameters of data to request.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
params: a list of strings of parameters to request
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def setLevels(self, levels):
|
|
||||||
"""
|
|
||||||
Sets the levels of data to request. Not all datatypes support levels.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
levels: a list of strings of level abbreviations to request
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def setEnvelope(self, env):
|
|
||||||
"""
|
|
||||||
Sets the envelope of the request. If supported by the datatype factory,
|
|
||||||
the data returned for the request will be constrained to only the data
|
|
||||||
within the envelope.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
env: a shapely geometry
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def setLocationNames(self, locationNames):
|
|
||||||
"""
|
|
||||||
Sets the location names of the request.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
locationNames: a list of strings of location names to request
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getDatatype(self):
|
|
||||||
"""
|
|
||||||
Gets the datatype of the request
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the datatype set on the request
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getIdentifiers(self):
|
|
||||||
"""
|
|
||||||
Gets the identifiers on the request
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a dictionary of the identifiers
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getLevels(self):
|
|
||||||
"""
|
|
||||||
Gets the levels on the request
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of the levels
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getLocationNames(self):
|
|
||||||
"""
|
|
||||||
Gets the location names on the request
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of the location names
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getEnvelope(self):
|
|
||||||
"""
|
|
||||||
Gets the envelope on the request
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a rectangular shapely geometry
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class IData(object):
|
|
||||||
"""
|
|
||||||
An IData representing data returned from the DataAccessLayer.
|
|
||||||
"""
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getAttribute(self, key):
|
|
||||||
"""
|
|
||||||
Gets an attribute of the data.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
key: the key of the attribute
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the value of the attribute
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getAttributes(self):
|
|
||||||
"""
|
|
||||||
Gets the valid attributes for the data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of the attribute names
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getDataTime(self):
|
|
||||||
"""
|
|
||||||
Gets the data time of the data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the data time of the data, or None if no time is associated
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getLevel(self):
|
|
||||||
"""
|
|
||||||
Gets the level of the data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the level of the data, or None if no level is associated
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getLocationName(self, param):
|
|
||||||
"""
|
|
||||||
Gets the location name of the data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the location name of the data, or None if no location name is
|
|
||||||
associated
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class IGridData(IData):
|
|
||||||
"""
|
|
||||||
An IData representing grid data that is returned by the DataAccessLayer.
|
|
||||||
"""
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getParameter(self):
|
|
||||||
"""
|
|
||||||
Gets the parameter of the data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the parameter of the data
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getUnit(self):
|
|
||||||
"""
|
|
||||||
Gets the unit of the data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the string abbreviation of the unit, or None if no unit is associated
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getRawData(self):
|
|
||||||
"""
|
|
||||||
Gets the grid data as a numpy array.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a numpy array of the data
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getLatLonCoords(self):
|
|
||||||
"""
|
|
||||||
Gets the lat/lon coordinates of the grid data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a tuple where the first element is a numpy array of lons, and the
|
|
||||||
second element is a numpy array of lats
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class IGeometryData(IData):
|
|
||||||
"""
|
|
||||||
An IData representing geometry data that is returned by the DataAccessLayer.
|
|
||||||
"""
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getGeometry(self):
|
|
||||||
"""
|
|
||||||
Gets the geometry of the data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a shapely geometry
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getParameters(self):
|
|
||||||
"""Gets the parameters of the data.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a list of strings of the parameter names
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getString(self, param):
|
|
||||||
"""
|
|
||||||
Gets the string value of the specified param.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
param: the string name of the param
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the string value of the param
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getNumber(self, param):
|
|
||||||
"""
|
|
||||||
Gets the number value of the specified param.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
param: the string name of the param
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the number value of the param
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getUnit(self, param):
|
|
||||||
"""
|
|
||||||
Gets the unit of the specified param.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
param: the string name of the param
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
the string abbreviation of the unit of the param
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getType(self, param):
|
|
||||||
"""
|
|
||||||
Gets the type of the param.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
param: the string name of the param
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
a string of the type of the parameter, such as
|
|
||||||
"STRING", "INT", "LONG", "FLOAT", or "DOUBLE"
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
|
@ -1,111 +0,0 @@
|
||||||
#===============================================================================
|
|
||||||
# qpidingest.py
|
|
||||||
#
|
|
||||||
# @author: Aaron Anderson
|
|
||||||
# @organization: NOAA/WDTB OU/CIMMS
|
|
||||||
# @version: 1.0 02/19/2010
|
|
||||||
# @requires: QPID Python Client available from http://qpid.apache.org/download.html
|
|
||||||
# The Python Client is located under Single Component Package/Client
|
|
||||||
#
|
|
||||||
# From the README.txt Installation Instructions
|
|
||||||
# = INSTALLATION =
|
|
||||||
# Extract the release archive into a directory of your choice and set
|
|
||||||
# your PYTHONPATH accordingly:
|
|
||||||
#
|
|
||||||
# tar -xzf qpid-python-<version>.tar.gz -C <install-prefix>
|
|
||||||
# export PYTHONPATH=<install-prefix>/qpid-<version>/python
|
|
||||||
#
|
|
||||||
# ***EDEX and QPID must be running for this module to work***
|
|
||||||
#
|
|
||||||
# DESCRIPTION:
|
|
||||||
# This module is used to connect to QPID and send messages to the external.dropbox queue
|
|
||||||
# which tells EDEX to ingest a data file from a specified path. This avoids having to copy
|
|
||||||
# a data file into an endpoint. Each message also contains a header which is used to determine
|
|
||||||
# which plugin should be used to decode the file. Each plugin has an xml file located in
|
|
||||||
# $EDEX_HOME/data/utility/edex_static/base/distribution that contains regular expressions
|
|
||||||
# that the header is compared to. When the header matches one of these regular expressions
|
|
||||||
# the file is decoded with that plugin. If you make changes to one of these xml files you
|
|
||||||
# must restart EDEX for the changes to take effect.
|
|
||||||
#
|
|
||||||
# NOTE: If the message is being sent but you do not see it being ingested in the EDEX log
|
|
||||||
# check the xml files to make sure the header you are passing matches one of the regular
|
|
||||||
# expressions. Beware of spaces, some regular expressions require spaces while others use
|
|
||||||
# a wildcard character so a space is optional. It seems you are better off having the space
|
|
||||||
# as this will be matched to both patterns. For the file in the example below,
|
|
||||||
# 20100218_185755_SAUS46KLOX.metar, I use SAUS46 KLOX as the header to make sure it matches.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# EXAMPLE:
|
|
||||||
# Simple example program:
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# import qpidingest
|
|
||||||
# #Tell EDEX to ingest a metar file from data_store. The filepath is
|
|
||||||
# #/data_store/20100218/metar/00/standard/20100218_005920_SAUS46KSEW.metar
|
|
||||||
#
|
|
||||||
# conn=qpidingest.IngestViaQPID() #defaults to localhost port 5672
|
|
||||||
#
|
|
||||||
# #If EDEX is not on the local machine you can make the connection as follows
|
|
||||||
# #conn=qpidingest.IngestViaQPID(host='<MACHINE NAME>',port=<PORT NUMBER>)
|
|
||||||
#
|
|
||||||
# conn.sendmessage('/data_store/20100218/metar/18/standard/20100218_185755_SAUS46KLOX.metar','SAUS46 KLOX')
|
|
||||||
# conn.close()
|
|
||||||
#-------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# ....
|
|
||||||
# 06/13/2013 DR 16242 D. Friedman Add Qpid authentication info
|
|
||||||
# 03/06/2014 DR 17907 D. Friedman Workaround for issue QPID-5569
|
|
||||||
#
|
|
||||||
#===============================================================================
|
|
||||||
|
|
||||||
import qpid
|
|
||||||
from qpid.util import connect
|
|
||||||
from qpid.connection import Connection
|
|
||||||
from qpid.datatypes import Message, uuid4
|
|
||||||
|
|
||||||
QPID_USERNAME = 'guest'
|
|
||||||
QPID_PASSWORD = 'guest'
|
|
||||||
|
|
||||||
class IngestViaQPID:
|
|
||||||
def __init__(self, host='localhost', port=5672):
|
|
||||||
'''
|
|
||||||
Connect to QPID and make bindings to route message to external.dropbox queue
|
|
||||||
@param host: string hostname of computer running EDEX and QPID (default localhost)
|
|
||||||
@param port: integer port used to connect to QPID (default 5672)
|
|
||||||
'''
|
|
||||||
|
|
||||||
try:
|
|
||||||
#
|
|
||||||
self.socket = connect(host, port)
|
|
||||||
self.connection = Connection (sock=self.socket, username=QPID_USERNAME, password=QPID_PASSWORD)
|
|
||||||
self.connection.start()
|
|
||||||
self.session = self.connection.session(str(uuid4()))
|
|
||||||
self.session.exchange_bind(exchange='amq.direct', queue='external.dropbox', binding_key='external.dropbox')
|
|
||||||
print 'Connected to Qpid'
|
|
||||||
except:
|
|
||||||
print 'Unable to connect to Qpid'
|
|
||||||
|
|
||||||
def sendmessage(self, filepath, header):
|
|
||||||
'''
|
|
||||||
This function sends a message to the external.dropbox queue providing the path
|
|
||||||
to the file to be ingested and a header to determine the plugin to be used to
|
|
||||||
decode the file.
|
|
||||||
@param filepath: string full path to file to be ingested
|
|
||||||
@param header: string header used to determine plugin decoder to use
|
|
||||||
'''
|
|
||||||
props = self.session.delivery_properties(routing_key='external.dropbox')
|
|
||||||
head = self.session.message_properties(application_headers={'header':header},
|
|
||||||
user_id=QPID_USERNAME) # For issue QPID-5569. Fixed in Qpid 0.27
|
|
||||||
self.session.message_transfer(destination='amq.direct', message=Message(props, head, filepath))
|
|
||||||
|
|
||||||
def close(self):
|
|
||||||
'''
|
|
||||||
After all messages are sent call this function to close connection and make sure
|
|
||||||
there are no threads left open
|
|
||||||
'''
|
|
||||||
self.session.close(timeout=10)
|
|
||||||
print 'Connection to Qpid closed'
|
|
|
@ -1,934 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
"""Stomp Protocol Connectivity
|
|
||||||
|
|
||||||
This provides basic connectivity to a message broker supporting the 'stomp' protocol.
|
|
||||||
At the moment ACK, SEND, SUBSCRIBE, UNSUBSCRIBE, BEGIN, ABORT, COMMIT, CONNECT and DISCONNECT operations
|
|
||||||
are supported.
|
|
||||||
|
|
||||||
This changes the previous version which required a listener per subscription -- now a listener object
|
|
||||||
just calls the 'addlistener' method and will receive all messages sent in response to all/any subscriptions.
|
|
||||||
(The reason for the change is that the handling of an 'ack' becomes problematic unless the listener mechanism
|
|
||||||
is decoupled from subscriptions).
|
|
||||||
|
|
||||||
Note that you must 'start' an instance of Connection to begin receiving messages. For example:
|
|
||||||
|
|
||||||
conn = stomp.Connection([('localhost', 62003)], 'myuser', 'mypass')
|
|
||||||
conn.start()
|
|
||||||
|
|
||||||
Meta-Data
|
|
||||||
---------
|
|
||||||
Author: Jason R Briggs
|
|
||||||
License: http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
Start Date: 2005/12/01
|
|
||||||
Last Revision Date: $Date: 2008/09/11 00:16 $
|
|
||||||
|
|
||||||
Notes/Attribution
|
|
||||||
-----------------
|
|
||||||
* uuid method courtesy of Carl Free Jr:
|
|
||||||
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/213761
|
|
||||||
* patch from Andreas Schobel
|
|
||||||
* patches from Julian Scheid of Rising Sun Pictures (http://open.rsp.com.au)
|
|
||||||
* patch from Fernando
|
|
||||||
* patches from Eugene Strulyov
|
|
||||||
|
|
||||||
Updates
|
|
||||||
-------
|
|
||||||
* 2007/03/31 : (Andreas Schobel) patch to fix newlines problem in ActiveMQ 4.1
|
|
||||||
* 2007/09 : (JRB) updated to get stomp.py working in Jython as well as Python
|
|
||||||
* 2007/09/05 : (Julian Scheid) patch to allow sending custom headers
|
|
||||||
* 2007/09/18 : (JRB) changed code to use logging instead of just print. added logger for jython to work
|
|
||||||
* 2007/09/18 : (Julian Scheid) various updates, including:
|
|
||||||
- change incoming message handling so that callbacks are invoked on the listener not only for MESSAGE, but also for
|
|
||||||
CONNECTED, RECEIPT and ERROR frames.
|
|
||||||
- callbacks now get not only the payload but any headers specified by the server
|
|
||||||
- all outgoing messages now sent via a single method
|
|
||||||
- only one connection used
|
|
||||||
- change to use thread instead of threading
|
|
||||||
- sends performed on the calling thread
|
|
||||||
- receiver loop now deals with multiple messages in one received chunk of data
|
|
||||||
- added reconnection attempts and connection fail-over
|
|
||||||
- changed defaults for "user" and "passcode" to None instead of empty string (fixed transmission of those values)
|
|
||||||
- added readline support
|
|
||||||
* 2008/03/26 : (Fernando) added cStringIO for faster performance on large messages
|
|
||||||
* 2008/09/10 : (Eugene) remove lower() on headers to support case-sensitive header names
|
|
||||||
* 2008/09/11 : (JRB) fix incompatibilities with RabbitMQ, add wait for socket-connect
|
|
||||||
* 2008/10/28 : (Eugene) add jms map (from stomp1.1 ideas)
|
|
||||||
* 2008/11/25 : (Eugene) remove superfluous (incorrect) locking code
|
|
||||||
* 2009/02/05 : (JRB) remove code to replace underscores with dashes in header names (causes a problem in rabbit-mq)
|
|
||||||
* 2009/03/29 : (JRB) minor change to add logging config file
|
|
||||||
(JRB) minor change to add socket timeout, suggested by Israel
|
|
||||||
* 2009/04/01 : (Gavin) patch to change md5 to hashlib (for 2.6 compatibility)
|
|
||||||
* 2009/04/02 : (Fernando Ciciliati) fix overflow bug when waiting too long to connect to the broker
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import hashlib
|
|
||||||
import math
|
|
||||||
import random
|
|
||||||
import re
|
|
||||||
import socket
|
|
||||||
import sys
|
|
||||||
import thread
|
|
||||||
import threading
|
|
||||||
import time
|
|
||||||
import types
|
|
||||||
import xml.dom.minidom
|
|
||||||
from cStringIO import StringIO
|
|
||||||
|
|
||||||
#
|
|
||||||
# stomp.py version number
|
|
||||||
#
|
|
||||||
_version = 1.8
|
|
||||||
|
|
||||||
|
|
||||||
def _uuid( *args ):
|
|
||||||
"""
|
|
||||||
uuid courtesy of Carl Free Jr:
|
|
||||||
(http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/213761)
|
|
||||||
"""
|
|
||||||
|
|
||||||
t = long( time.time() * 1000 )
|
|
||||||
r = long( random.random() * 100000000000000000L )
|
|
||||||
|
|
||||||
try:
|
|
||||||
a = socket.gethostbyname( socket.gethostname() )
|
|
||||||
except:
|
|
||||||
# if we can't get a network address, just imagine one
|
|
||||||
a = random.random() * 100000000000000000L
|
|
||||||
data = str(t) + ' ' + str(r) + ' ' + str(a) + ' ' + str(args)
|
|
||||||
md5 = hashlib.md5()
|
|
||||||
md5.update(data)
|
|
||||||
data = md5.hexdigest()
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
class DevNullLogger(object):
|
|
||||||
"""
|
|
||||||
dummy logging class for environments without the logging module
|
|
||||||
"""
|
|
||||||
def log(self, msg):
|
|
||||||
print msg
|
|
||||||
|
|
||||||
def devnull(self, msg):
|
|
||||||
pass
|
|
||||||
|
|
||||||
debug = devnull
|
|
||||||
info = devnull
|
|
||||||
warning = log
|
|
||||||
error = log
|
|
||||||
critical = log
|
|
||||||
exception = log
|
|
||||||
|
|
||||||
def isEnabledFor(self, lvl):
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# add logging if available
|
|
||||||
#
|
|
||||||
try:
|
|
||||||
import logging
|
|
||||||
import logging.config
|
|
||||||
logging.config.fileConfig("stomp.log.conf")
|
|
||||||
log = logging.getLogger('root')
|
|
||||||
except:
|
|
||||||
log = DevNullLogger()
|
|
||||||
|
|
||||||
|
|
||||||
class ConnectionClosedException(Exception):
|
|
||||||
"""
|
|
||||||
Raised in the receiver thread when the connection has been closed
|
|
||||||
by the server.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class NotConnectedException(Exception):
|
|
||||||
"""
|
|
||||||
Raised by Connection.__send_frame when there is currently no server
|
|
||||||
connection.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class ConnectionListener(object):
|
|
||||||
"""
|
|
||||||
This class should be used as a base class for objects registered
|
|
||||||
using Connection.add_listener().
|
|
||||||
"""
|
|
||||||
def on_connecting(self, host_and_port):
|
|
||||||
"""
|
|
||||||
Called by the STOMP connection once a TCP/IP connection to the
|
|
||||||
STOMP server has been established or re-established. Note that
|
|
||||||
at this point, no connection has been established on the STOMP
|
|
||||||
protocol level. For this, you need to invoke the "connect"
|
|
||||||
method on the connection.
|
|
||||||
|
|
||||||
\param host_and_port a tuple containing the host name and port
|
|
||||||
number to which the connection has been established.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def on_connected(self, headers, body):
|
|
||||||
"""
|
|
||||||
Called by the STOMP connection when a CONNECTED frame is
|
|
||||||
received, that is after a connection has been established or
|
|
||||||
re-established.
|
|
||||||
|
|
||||||
\param headers a dictionary containing all headers sent by the
|
|
||||||
server as key/value pairs.
|
|
||||||
|
|
||||||
\param body the frame's payload. This is usually empty for
|
|
||||||
CONNECTED frames.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def on_disconnected(self):
|
|
||||||
"""
|
|
||||||
Called by the STOMP connection when a TCP/IP connection to the
|
|
||||||
STOMP server has been lost. No messages should be sent via
|
|
||||||
the connection until it has been reestablished.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def on_message(self, headers, body):
|
|
||||||
"""
|
|
||||||
Called by the STOMP connection when a MESSAGE frame is
|
|
||||||
received.
|
|
||||||
|
|
||||||
\param headers a dictionary containing all headers sent by the
|
|
||||||
server as key/value pairs.
|
|
||||||
|
|
||||||
\param body the frame's payload - the message body.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def on_receipt(self, headers, body):
|
|
||||||
"""
|
|
||||||
Called by the STOMP connection when a RECEIPT frame is
|
|
||||||
received, sent by the server if requested by the client using
|
|
||||||
the 'receipt' header.
|
|
||||||
|
|
||||||
\param headers a dictionary containing all headers sent by the
|
|
||||||
server as key/value pairs.
|
|
||||||
|
|
||||||
\param body the frame's payload. This is usually empty for
|
|
||||||
RECEIPT frames.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def on_error(self, headers, body):
|
|
||||||
"""
|
|
||||||
Called by the STOMP connection when an ERROR frame is
|
|
||||||
received.
|
|
||||||
|
|
||||||
\param headers a dictionary containing all headers sent by the
|
|
||||||
server as key/value pairs.
|
|
||||||
|
|
||||||
\param body the frame's payload - usually a detailed error
|
|
||||||
description.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class Connection(object):
|
|
||||||
"""
|
|
||||||
Represents a STOMP client connection.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self,
|
|
||||||
host_and_ports = [ ('localhost', 61613) ],
|
|
||||||
user = None,
|
|
||||||
passcode = None,
|
|
||||||
prefer_localhost = True,
|
|
||||||
try_loopback_connect = True,
|
|
||||||
reconnect_sleep_initial = 0.1,
|
|
||||||
reconnect_sleep_increase = 0.5,
|
|
||||||
reconnect_sleep_jitter = 0.1,
|
|
||||||
reconnect_sleep_max = 60.0):
|
|
||||||
"""
|
|
||||||
Initialize and start this connection.
|
|
||||||
|
|
||||||
\param host_and_ports
|
|
||||||
a list of (host, port) tuples.
|
|
||||||
|
|
||||||
\param prefer_localhost
|
|
||||||
if True and the local host is mentioned in the (host,
|
|
||||||
port) tuples, try to connect to this first
|
|
||||||
|
|
||||||
\param try_loopback_connect
|
|
||||||
if True and the local host is found in the host
|
|
||||||
tuples, try connecting to it using loopback interface
|
|
||||||
(127.0.0.1)
|
|
||||||
|
|
||||||
\param reconnect_sleep_initial
|
|
||||||
|
|
||||||
initial delay in seconds to wait before reattempting
|
|
||||||
to establish a connection if connection to any of the
|
|
||||||
hosts fails.
|
|
||||||
|
|
||||||
\param reconnect_sleep_increase
|
|
||||||
|
|
||||||
factor by which the sleep delay is increased after
|
|
||||||
each connection attempt. For example, 0.5 means
|
|
||||||
to wait 50% longer than before the previous attempt,
|
|
||||||
1.0 means wait twice as long, and 0.0 means keep
|
|
||||||
the delay constant.
|
|
||||||
|
|
||||||
\param reconnect_sleep_max
|
|
||||||
|
|
||||||
maximum delay between connection attempts, regardless
|
|
||||||
of the reconnect_sleep_increase.
|
|
||||||
|
|
||||||
\param reconnect_sleep_jitter
|
|
||||||
|
|
||||||
random additional time to wait (as a percentage of
|
|
||||||
the time determined using the previous parameters)
|
|
||||||
between connection attempts in order to avoid
|
|
||||||
stampeding. For example, a value of 0.1 means to wait
|
|
||||||
an extra 0%-10% (randomly determined) of the delay
|
|
||||||
calculated using the previous three parameters.
|
|
||||||
"""
|
|
||||||
|
|
||||||
sorted_host_and_ports = []
|
|
||||||
sorted_host_and_ports.extend(host_and_ports)
|
|
||||||
|
|
||||||
# If localhost is preferred, make sure all (host, port) tuples
|
|
||||||
# that refer to the local host come first in the list
|
|
||||||
if prefer_localhost:
|
|
||||||
def is_local_host(host):
|
|
||||||
return host in Connection.__localhost_names
|
|
||||||
|
|
||||||
sorted_host_and_ports.sort(lambda x, y: (int(is_local_host(y[0]))
|
|
||||||
- int(is_local_host(x[0]))))
|
|
||||||
|
|
||||||
# If the user wishes to attempt connecting to local ports
|
|
||||||
# using the loopback interface, for each (host, port) tuple
|
|
||||||
# referring to a local host, add an entry with the host name
|
|
||||||
# replaced by 127.0.0.1 if it doesn't exist already
|
|
||||||
loopback_host_and_ports = []
|
|
||||||
if try_loopback_connect:
|
|
||||||
for host_and_port in sorted_host_and_ports:
|
|
||||||
if is_local_host(host_and_port[0]):
|
|
||||||
port = host_and_port[1]
|
|
||||||
if (not ("127.0.0.1", port) in sorted_host_and_ports
|
|
||||||
and not ("localhost", port) in sorted_host_and_ports):
|
|
||||||
loopback_host_and_ports.append(("127.0.0.1", port))
|
|
||||||
|
|
||||||
# Assemble the final, possibly sorted list of (host, port) tuples
|
|
||||||
self.__host_and_ports = []
|
|
||||||
self.__host_and_ports.extend(loopback_host_and_ports)
|
|
||||||
self.__host_and_ports.extend(sorted_host_and_ports)
|
|
||||||
|
|
||||||
self.__recvbuf = ''
|
|
||||||
|
|
||||||
self.__listeners = [ ]
|
|
||||||
|
|
||||||
self.__reconnect_sleep_initial = reconnect_sleep_initial
|
|
||||||
self.__reconnect_sleep_increase = reconnect_sleep_increase
|
|
||||||
self.__reconnect_sleep_jitter = reconnect_sleep_jitter
|
|
||||||
self.__reconnect_sleep_max = reconnect_sleep_max
|
|
||||||
|
|
||||||
self.__connect_headers = {}
|
|
||||||
if user is not None and passcode is not None:
|
|
||||||
self.__connect_headers['login'] = user
|
|
||||||
self.__connect_headers['passcode'] = passcode
|
|
||||||
|
|
||||||
self.__socket = None
|
|
||||||
self.__current_host_and_port = None
|
|
||||||
|
|
||||||
self.__receiver_thread_exit_condition = threading.Condition()
|
|
||||||
self.__receiver_thread_exited = False
|
|
||||||
|
|
||||||
#
|
|
||||||
# Manage the connection
|
|
||||||
#
|
|
||||||
|
|
||||||
def start(self):
|
|
||||||
"""
|
|
||||||
Start the connection. This should be called after all
|
|
||||||
listeners have been registered. If this method is not called,
|
|
||||||
no frames will be received by the connection.
|
|
||||||
"""
|
|
||||||
self.__running = True
|
|
||||||
self.__attempt_connection()
|
|
||||||
thread.start_new_thread(self.__receiver_loop, ())
|
|
||||||
|
|
||||||
def stop(self):
|
|
||||||
"""
|
|
||||||
Stop the connection. This is equivalent to calling
|
|
||||||
disconnect() but will do a clean shutdown by waiting for the
|
|
||||||
receiver thread to exit.
|
|
||||||
"""
|
|
||||||
self.disconnect()
|
|
||||||
|
|
||||||
self.__receiver_thread_exit_condition.acquire()
|
|
||||||
if not self.__receiver_thread_exited:
|
|
||||||
self.__receiver_thread_exit_condition.wait()
|
|
||||||
self.__receiver_thread_exit_condition.release()
|
|
||||||
|
|
||||||
def get_host_and_port(self):
|
|
||||||
"""
|
|
||||||
Return a (host, port) tuple indicating which STOMP host and
|
|
||||||
port is currently connected, or None if there is currently no
|
|
||||||
connection.
|
|
||||||
"""
|
|
||||||
return self.__current_host_and_port
|
|
||||||
|
|
||||||
def is_connected(self):
|
|
||||||
try:
|
|
||||||
return self.__socket is not None and self.__socket.getsockname()[1] != 0
|
|
||||||
except socket.error:
|
|
||||||
return False
|
|
||||||
|
|
||||||
#
|
|
||||||
# Manage objects listening to incoming frames
|
|
||||||
#
|
|
||||||
|
|
||||||
def add_listener(self, listener):
|
|
||||||
self.__listeners.append(listener)
|
|
||||||
|
|
||||||
def remove_listener(self, listener):
|
|
||||||
self.__listeners.remove(listener)
|
|
||||||
|
|
||||||
#
|
|
||||||
# STOMP transmissions
|
|
||||||
#
|
|
||||||
|
|
||||||
def subscribe(self, headers={}, **keyword_headers):
|
|
||||||
self.__send_frame_helper('SUBSCRIBE', '', self.__merge_headers([headers, keyword_headers]), [ 'destination' ])
|
|
||||||
|
|
||||||
def unsubscribe(self, headers={}, **keyword_headers):
|
|
||||||
self.__send_frame_helper('UNSUBSCRIBE', '', self.__merge_headers([headers, keyword_headers]), [ ('destination', 'id') ])
|
|
||||||
|
|
||||||
def send(self, message='', headers={}, **keyword_headers):
|
|
||||||
if '\x00' in message:
|
|
||||||
content_length_headers = {'content-length': len(message)}
|
|
||||||
else:
|
|
||||||
content_length_headers = {}
|
|
||||||
self.__send_frame_helper('SEND', message, self.__merge_headers([headers,
|
|
||||||
keyword_headers,
|
|
||||||
content_length_headers]), [ 'destination' ])
|
|
||||||
|
|
||||||
def ack(self, headers={}, **keyword_headers):
|
|
||||||
self.__send_frame_helper('ACK', '', self.__merge_headers([headers, keyword_headers]), [ 'message-id' ])
|
|
||||||
|
|
||||||
def begin(self, headers={}, **keyword_headers):
|
|
||||||
use_headers = self.__merge_headers([headers, keyword_headers])
|
|
||||||
if not 'transaction' in use_headers.keys():
|
|
||||||
use_headers['transaction'] = _uuid()
|
|
||||||
self.__send_frame_helper('BEGIN', '', use_headers, [ 'transaction' ])
|
|
||||||
return use_headers['transaction']
|
|
||||||
|
|
||||||
def abort(self, headers={}, **keyword_headers):
|
|
||||||
self.__send_frame_helper('ABORT', '', self.__merge_headers([headers, keyword_headers]), [ 'transaction' ])
|
|
||||||
|
|
||||||
def commit(self, headers={}, **keyword_headers):
|
|
||||||
self.__send_frame_helper('COMMIT', '', self.__merge_headers([headers, keyword_headers]), [ 'transaction' ])
|
|
||||||
|
|
||||||
def connect(self, headers={}, **keyword_headers):
|
|
||||||
if keyword_headers.has_key('wait') and keyword_headers['wait']:
|
|
||||||
while not self.is_connected(): time.sleep(0.1)
|
|
||||||
del keyword_headers['wait']
|
|
||||||
self.__send_frame_helper('CONNECT', '', self.__merge_headers([self.__connect_headers, headers, keyword_headers]), [ ])
|
|
||||||
|
|
||||||
def disconnect(self, headers={}, **keyword_headers):
|
|
||||||
self.__send_frame_helper('DISCONNECT', '', self.__merge_headers([self.__connect_headers, headers, keyword_headers]), [ ])
|
|
||||||
self.__running = False
|
|
||||||
if hasattr(socket, 'SHUT_RDWR'):
|
|
||||||
self.__socket.shutdown(socket.SHUT_RDWR)
|
|
||||||
if self.__socket:
|
|
||||||
self.__socket.close()
|
|
||||||
self.__current_host_and_port = None
|
|
||||||
|
|
||||||
# ========= PRIVATE MEMBERS =========
|
|
||||||
|
|
||||||
|
|
||||||
# List of all host names (unqualified, fully-qualified, and IP
|
|
||||||
# addresses) that refer to the local host (both loopback interface
|
|
||||||
# and external interfaces). This is used for determining
|
|
||||||
# preferred targets.
|
|
||||||
__localhost_names = [ "localhost",
|
|
||||||
"127.0.0.1",
|
|
||||||
socket.gethostbyname(socket.gethostname()),
|
|
||||||
socket.gethostname(),
|
|
||||||
socket.getfqdn(socket.gethostname()) ]
|
|
||||||
#
|
|
||||||
# Used to parse STOMP header lines in the format "key:value",
|
|
||||||
#
|
|
||||||
__header_line_re = re.compile('(?P<key>[^:]+)[:](?P<value>.*)')
|
|
||||||
|
|
||||||
#
|
|
||||||
# Used to parse the STOMP "content-length" header lines,
|
|
||||||
#
|
|
||||||
__content_length_re = re.compile('^content-length[:]\\s*(?P<value>[0-9]+)', re.MULTILINE)
|
|
||||||
|
|
||||||
def __merge_headers(self, header_map_list):
|
|
||||||
"""
|
|
||||||
Helper function for combining multiple header maps into one.
|
|
||||||
|
|
||||||
Any underscores ('_') in header names (keys) will be replaced by dashes ('-').
|
|
||||||
"""
|
|
||||||
headers = {}
|
|
||||||
for header_map in header_map_list:
|
|
||||||
for header_key in header_map.keys():
|
|
||||||
headers[header_key] = header_map[header_key]
|
|
||||||
return headers
|
|
||||||
|
|
||||||
def __convert_dict(self, payload):
|
|
||||||
"""
|
|
||||||
Encode python dictionary as <map>...</map> structure.
|
|
||||||
"""
|
|
||||||
|
|
||||||
xmlStr = "<map>\n"
|
|
||||||
for key in payload:
|
|
||||||
xmlStr += "<entry>\n"
|
|
||||||
xmlStr += "<string>%s</string>" % key
|
|
||||||
xmlStr += "<string>%s</string>" % payload[key]
|
|
||||||
xmlStr += "</entry>\n"
|
|
||||||
xmlStr += "</map>"
|
|
||||||
|
|
||||||
return xmlStr
|
|
||||||
|
|
||||||
def __send_frame_helper(self, command, payload, headers, required_header_keys):
|
|
||||||
"""
|
|
||||||
Helper function for sending a frame after verifying that a
|
|
||||||
given set of headers are present.
|
|
||||||
|
|
||||||
\param command the command to send
|
|
||||||
|
|
||||||
\param payload the frame's payload
|
|
||||||
|
|
||||||
\param headers a dictionary containing the frame's headers
|
|
||||||
|
|
||||||
\param required_header_keys a sequence enumerating all
|
|
||||||
required header keys. If an element in this sequence is itself
|
|
||||||
a tuple, that tuple is taken as a list of alternatives, one of
|
|
||||||
which must be present.
|
|
||||||
|
|
||||||
\throws ArgumentError if one of the required header keys is
|
|
||||||
not present in the header map.
|
|
||||||
"""
|
|
||||||
for required_header_key in required_header_keys:
|
|
||||||
if type(required_header_key) == tuple:
|
|
||||||
found_alternative = False
|
|
||||||
for alternative in required_header_key:
|
|
||||||
if alternative in headers.keys():
|
|
||||||
found_alternative = True
|
|
||||||
if not found_alternative:
|
|
||||||
raise KeyError("Command %s requires one of the following headers: %s" % (command, str(required_header_key)))
|
|
||||||
elif not required_header_key in headers.keys():
|
|
||||||
raise KeyError("Command %s requires header %r" % (command, required_header_key))
|
|
||||||
self.__send_frame(command, headers, payload)
|
|
||||||
|
|
||||||
def __send_frame(self, command, headers={}, payload=''):
|
|
||||||
"""
|
|
||||||
Send a STOMP frame.
|
|
||||||
"""
|
|
||||||
if type(payload) == dict:
|
|
||||||
headers["transformation"] = "jms-map-xml"
|
|
||||||
payload = self.__convert_dict(payload)
|
|
||||||
|
|
||||||
if self.__socket is not None:
|
|
||||||
frame = '%s\n%s\n%s\x00' % (command,
|
|
||||||
reduce(lambda accu, key: accu + ('%s:%s\n' % (key, headers[key])), headers.keys(), ''),
|
|
||||||
payload)
|
|
||||||
self.__socket.sendall(frame)
|
|
||||||
log.debug("Sent frame: type=%s, headers=%r, body=%r" % (command, headers, payload))
|
|
||||||
else:
|
|
||||||
raise NotConnectedException()
|
|
||||||
|
|
||||||
def __receiver_loop(self):
|
|
||||||
"""
|
|
||||||
Main loop listening for incoming data.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
try:
|
|
||||||
threading.currentThread().setName("StompReceiver")
|
|
||||||
while self.__running:
|
|
||||||
log.debug('starting receiver loop')
|
|
||||||
|
|
||||||
if self.__socket is None:
|
|
||||||
break
|
|
||||||
|
|
||||||
try:
|
|
||||||
try:
|
|
||||||
for listener in self.__listeners:
|
|
||||||
if hasattr(listener, 'on_connecting'):
|
|
||||||
listener.on_connecting(self.__current_host_and_port)
|
|
||||||
|
|
||||||
while self.__running:
|
|
||||||
frames = self.__read()
|
|
||||||
|
|
||||||
for frame in frames:
|
|
||||||
(frame_type, headers, body) = self.__parse_frame(frame)
|
|
||||||
log.debug("Received frame: result=%r, headers=%r, body=%r" % (frame_type, headers, body))
|
|
||||||
frame_type = frame_type.lower()
|
|
||||||
if frame_type in [ 'connected',
|
|
||||||
'message',
|
|
||||||
'receipt',
|
|
||||||
'error' ]:
|
|
||||||
for listener in self.__listeners:
|
|
||||||
if hasattr(listener, 'on_%s' % frame_type):
|
|
||||||
eval('listener.on_%s(headers, body)' % frame_type)
|
|
||||||
else:
|
|
||||||
log.debug('listener %s has no such method on_%s' % (listener, frame_type))
|
|
||||||
else:
|
|
||||||
log.warning('Unknown response frame type: "%s" (frame length was %d)' % (frame_type, len(frame)))
|
|
||||||
finally:
|
|
||||||
try:
|
|
||||||
self.__socket.close()
|
|
||||||
except:
|
|
||||||
pass # ignore errors when attempting to close socket
|
|
||||||
self.__socket = None
|
|
||||||
self.__current_host_and_port = None
|
|
||||||
except ConnectionClosedException:
|
|
||||||
if self.__running:
|
|
||||||
log.error("Lost connection")
|
|
||||||
# Notify listeners
|
|
||||||
for listener in self.__listeners:
|
|
||||||
if hasattr(listener, 'on_disconnected'):
|
|
||||||
listener.on_disconnected()
|
|
||||||
# Clear out any half-received messages after losing connection
|
|
||||||
self.__recvbuf = ''
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
except:
|
|
||||||
log.exception("An unhandled exception was encountered in the stomp receiver loop")
|
|
||||||
|
|
||||||
finally:
|
|
||||||
self.__receiver_thread_exit_condition.acquire()
|
|
||||||
self.__receiver_thread_exited = True
|
|
||||||
self.__receiver_thread_exit_condition.notifyAll()
|
|
||||||
self.__receiver_thread_exit_condition.release()
|
|
||||||
|
|
||||||
def __read(self):
|
|
||||||
"""
|
|
||||||
Read the next frame(s) from the socket.
|
|
||||||
"""
|
|
||||||
fastbuf = StringIO()
|
|
||||||
while self.__running:
|
|
||||||
try:
|
|
||||||
c = self.__socket.recv(1024)
|
|
||||||
except:
|
|
||||||
c = ''
|
|
||||||
if len(c) == 0:
|
|
||||||
raise ConnectionClosedException
|
|
||||||
fastbuf.write(c)
|
|
||||||
if '\x00' in c:
|
|
||||||
break
|
|
||||||
self.__recvbuf += fastbuf.getvalue()
|
|
||||||
fastbuf.close()
|
|
||||||
result = []
|
|
||||||
|
|
||||||
if len(self.__recvbuf) > 0 and self.__running:
|
|
||||||
while True:
|
|
||||||
pos = self.__recvbuf.find('\x00')
|
|
||||||
if pos >= 0:
|
|
||||||
frame = self.__recvbuf[0:pos]
|
|
||||||
preamble_end = frame.find('\n\n')
|
|
||||||
if preamble_end >= 0:
|
|
||||||
content_length_match = Connection.__content_length_re.search(frame[0:preamble_end])
|
|
||||||
if content_length_match:
|
|
||||||
content_length = int(content_length_match.group('value'))
|
|
||||||
content_offset = preamble_end + 2
|
|
||||||
frame_size = content_offset + content_length
|
|
||||||
if frame_size > len(frame):
|
|
||||||
# Frame contains NUL bytes, need to
|
|
||||||
# read more
|
|
||||||
if frame_size < len(self.__recvbuf):
|
|
||||||
pos = frame_size
|
|
||||||
frame = self.__recvbuf[0:pos]
|
|
||||||
else:
|
|
||||||
# Haven't read enough data yet,
|
|
||||||
# exit loop and wait for more to
|
|
||||||
# arrive
|
|
||||||
break
|
|
||||||
result.append(frame)
|
|
||||||
self.__recvbuf = self.__recvbuf[pos+1:]
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def __transform(self, body, transType):
|
|
||||||
"""
|
|
||||||
Perform body transformation. Currently, the only supported transformation is
|
|
||||||
'jms-map-xml', which converts a map into python dictionary. This can be extended
|
|
||||||
to support other transformation types.
|
|
||||||
|
|
||||||
The body has the following format:
|
|
||||||
<map>
|
|
||||||
<entry>
|
|
||||||
<string>name</string>
|
|
||||||
<string>Dejan</string>
|
|
||||||
</entry>
|
|
||||||
<entry>
|
|
||||||
<string>city</string>
|
|
||||||
<string>Belgrade</string>
|
|
||||||
</entry>
|
|
||||||
</map>
|
|
||||||
|
|
||||||
(see http://docs.codehaus.org/display/STOMP/Stomp+v1.1+Ideas)
|
|
||||||
"""
|
|
||||||
|
|
||||||
if transType != 'jms-map-xml':
|
|
||||||
return body
|
|
||||||
|
|
||||||
try:
|
|
||||||
entries = {}
|
|
||||||
doc = xml.dom.minidom.parseString(body)
|
|
||||||
rootElem = doc.documentElement
|
|
||||||
for entryElem in rootElem.getElementsByTagName("entry"):
|
|
||||||
pair = []
|
|
||||||
for node in entryElem.childNodes:
|
|
||||||
if not isinstance(node, xml.dom.minidom.Element): continue
|
|
||||||
pair.append(node.firstChild.nodeValue)
|
|
||||||
assert len(pair) == 2
|
|
||||||
entries[pair[0]] = pair[1]
|
|
||||||
return entries
|
|
||||||
except Exception, ex:
|
|
||||||
# unable to parse message. return original
|
|
||||||
return body
|
|
||||||
|
|
||||||
|
|
||||||
def __parse_frame(self, frame):
|
|
||||||
"""
|
|
||||||
Parse a STOMP frame into a (frame_type, headers, body) tuple,
|
|
||||||
where frame_type is the frame type as a string (e.g. MESSAGE),
|
|
||||||
headers is a map containing all header key/value pairs, and
|
|
||||||
body is a string containing the frame's payload.
|
|
||||||
"""
|
|
||||||
preamble_end = frame.find('\n\n')
|
|
||||||
preamble = frame[0:preamble_end]
|
|
||||||
preamble_lines = preamble.split('\n')
|
|
||||||
body = frame[preamble_end+2:]
|
|
||||||
|
|
||||||
# Skip any leading newlines
|
|
||||||
first_line = 0
|
|
||||||
while first_line < len(preamble_lines) and len(preamble_lines[first_line]) == 0:
|
|
||||||
first_line += 1
|
|
||||||
|
|
||||||
# Extract frame type
|
|
||||||
frame_type = preamble_lines[first_line]
|
|
||||||
|
|
||||||
# Put headers into a key/value map
|
|
||||||
headers = {}
|
|
||||||
for header_line in preamble_lines[first_line+1:]:
|
|
||||||
header_match = Connection.__header_line_re.match(header_line)
|
|
||||||
if header_match:
|
|
||||||
headers[header_match.group('key')] = header_match.group('value')
|
|
||||||
|
|
||||||
if 'transformation' in headers:
|
|
||||||
body = self.__transform(body, headers['transformation'])
|
|
||||||
|
|
||||||
return (frame_type, headers, body)
|
|
||||||
|
|
||||||
def __attempt_connection(self):
|
|
||||||
"""
|
|
||||||
Try connecting to the (host, port) tuples specified at construction time.
|
|
||||||
"""
|
|
||||||
|
|
||||||
sleep_exp = 1
|
|
||||||
while self.__running and self.__socket is None:
|
|
||||||
for host_and_port in self.__host_and_ports:
|
|
||||||
try:
|
|
||||||
log.debug("Attempting connection to host %s, port %s" % host_and_port)
|
|
||||||
self.__socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
||||||
self.__socket.settimeout(None)
|
|
||||||
self.__socket.connect(host_and_port)
|
|
||||||
self.__current_host_and_port = host_and_port
|
|
||||||
log.info("Established connection to host %s, port %s" % host_and_port)
|
|
||||||
break
|
|
||||||
except socket.error:
|
|
||||||
self.__socket = None
|
|
||||||
if type(sys.exc_info()[1]) == types.TupleType:
|
|
||||||
exc = sys.exc_info()[1][1]
|
|
||||||
else:
|
|
||||||
exc = sys.exc_info()[1]
|
|
||||||
log.warning("Could not connect to host %s, port %s: %s" % (host_and_port[0], host_and_port[1], exc))
|
|
||||||
|
|
||||||
if self.__socket is None:
|
|
||||||
sleep_duration = (min(self.__reconnect_sleep_max,
|
|
||||||
((self.__reconnect_sleep_initial / (1.0 + self.__reconnect_sleep_increase))
|
|
||||||
* math.pow(1.0 + self.__reconnect_sleep_increase, sleep_exp)))
|
|
||||||
* (1.0 + random.random() * self.__reconnect_sleep_jitter))
|
|
||||||
sleep_end = time.time() + sleep_duration
|
|
||||||
log.debug("Sleeping for %.1f seconds before attempting reconnect" % sleep_duration)
|
|
||||||
while self.__running and time.time() < sleep_end:
|
|
||||||
time.sleep(0.2)
|
|
||||||
|
|
||||||
if sleep_duration < self.__reconnect_sleep_max:
|
|
||||||
sleep_exp += 1
|
|
||||||
|
|
||||||
#
|
|
||||||
# command line testing
|
|
||||||
#
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
# If the readline module is available, make command input easier
|
|
||||||
try:
|
|
||||||
import readline
|
|
||||||
def stomp_completer(text, state):
|
|
||||||
commands = [ 'subscribe', 'unsubscribe',
|
|
||||||
'send', 'ack',
|
|
||||||
'begin', 'abort', 'commit',
|
|
||||||
'connect', 'disconnect'
|
|
||||||
]
|
|
||||||
for command in commands[state:]:
|
|
||||||
if command.startswith(text):
|
|
||||||
return "%s " % command
|
|
||||||
return None
|
|
||||||
|
|
||||||
readline.parse_and_bind("tab: complete")
|
|
||||||
readline.set_completer(stomp_completer)
|
|
||||||
readline.set_completer_delims("")
|
|
||||||
except ImportError:
|
|
||||||
pass # ignore unavailable readline module
|
|
||||||
|
|
||||||
class StompTester(object):
|
|
||||||
def __init__(self, host='localhost', port=61613, user='', passcode=''):
|
|
||||||
self.c = Connection([(host, port)], user, passcode)
|
|
||||||
self.c.add_listener(self)
|
|
||||||
self.c.start()
|
|
||||||
|
|
||||||
def __print_async(self, frame_type, headers, body):
|
|
||||||
print "\r \r",
|
|
||||||
print frame_type
|
|
||||||
for header_key in headers.keys():
|
|
||||||
print '%s: %s' % (header_key, headers[header_key])
|
|
||||||
print
|
|
||||||
print body
|
|
||||||
print '> ',
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
def on_connecting(self, host_and_port):
|
|
||||||
self.c.connect(wait=True)
|
|
||||||
|
|
||||||
def on_disconnected(self):
|
|
||||||
print "lost connection"
|
|
||||||
|
|
||||||
def on_message(self, headers, body):
|
|
||||||
self.__print_async("MESSAGE", headers, body)
|
|
||||||
|
|
||||||
def on_error(self, headers, body):
|
|
||||||
self.__print_async("ERROR", headers, body)
|
|
||||||
|
|
||||||
def on_receipt(self, headers, body):
|
|
||||||
self.__print_async("RECEIPT", headers, body)
|
|
||||||
|
|
||||||
def on_connected(self, headers, body):
|
|
||||||
self.__print_async("CONNECTED", headers, body)
|
|
||||||
|
|
||||||
def ack(self, args):
|
|
||||||
if len(args) < 3:
|
|
||||||
self.c.ack(message_id=args[1])
|
|
||||||
else:
|
|
||||||
self.c.ack(message_id=args[1], transaction=args[2])
|
|
||||||
|
|
||||||
def abort(self, args):
|
|
||||||
self.c.abort(transaction=args[1])
|
|
||||||
|
|
||||||
def begin(self, args):
|
|
||||||
print 'transaction id: %s' % self.c.begin()
|
|
||||||
|
|
||||||
def commit(self, args):
|
|
||||||
if len(args) < 2:
|
|
||||||
print 'expecting: commit <transid>'
|
|
||||||
else:
|
|
||||||
print 'committing %s' % args[1]
|
|
||||||
self.c.commit(transaction=args[1])
|
|
||||||
|
|
||||||
def disconnect(self, args):
|
|
||||||
try:
|
|
||||||
self.c.disconnect()
|
|
||||||
except NotConnectedException:
|
|
||||||
pass # ignore if no longer connected
|
|
||||||
|
|
||||||
def send(self, args):
|
|
||||||
if len(args) < 3:
|
|
||||||
print 'expecting: send <destination> <message>'
|
|
||||||
else:
|
|
||||||
self.c.send(destination=args[1], message=' '.join(args[2:]))
|
|
||||||
|
|
||||||
def sendtrans(self, args):
|
|
||||||
if len(args) < 3:
|
|
||||||
print 'expecting: sendtrans <destination> <transid> <message>'
|
|
||||||
else:
|
|
||||||
self.c.send(destination=args[1], message="%s\n" % ' '.join(args[3:]), transaction=args[2])
|
|
||||||
|
|
||||||
def subscribe(self, args):
|
|
||||||
if len(args) < 2:
|
|
||||||
print 'expecting: subscribe <destination> [ack]'
|
|
||||||
elif len(args) > 2:
|
|
||||||
print 'subscribing to "%s" with acknowledge set to "%s"' % (args[1], args[2])
|
|
||||||
self.c.subscribe(destination=args[1], ack=args[2])
|
|
||||||
else:
|
|
||||||
print 'subscribing to "%s" with auto acknowledge' % args[1]
|
|
||||||
self.c.subscribe(destination=args[1], ack='auto')
|
|
||||||
|
|
||||||
def unsubscribe(self, args):
|
|
||||||
if len(args) < 2:
|
|
||||||
print 'expecting: unsubscribe <destination>'
|
|
||||||
else:
|
|
||||||
print 'unsubscribing from "%s"' % args[1]
|
|
||||||
self.c.unsubscribe(destination=args[1])
|
|
||||||
|
|
||||||
if len(sys.argv) > 5:
|
|
||||||
print 'USAGE: stomp.py [host] [port] [user] [passcode]'
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if len(sys.argv) >= 2:
|
|
||||||
host = sys.argv[1]
|
|
||||||
else:
|
|
||||||
host = "localhost"
|
|
||||||
if len(sys.argv) >= 3:
|
|
||||||
port = int(sys.argv[2])
|
|
||||||
else:
|
|
||||||
port = 61613
|
|
||||||
|
|
||||||
if len(sys.argv) >= 5:
|
|
||||||
user = sys.argv[3]
|
|
||||||
passcode = sys.argv[4]
|
|
||||||
else:
|
|
||||||
user = None
|
|
||||||
passcode = None
|
|
||||||
|
|
||||||
st = StompTester(host, port, user, passcode)
|
|
||||||
try:
|
|
||||||
while True:
|
|
||||||
line = raw_input("\r> ")
|
|
||||||
if not line or line.lstrip().rstrip() == '':
|
|
||||||
continue
|
|
||||||
elif 'quit' in line or 'disconnect' in line:
|
|
||||||
break
|
|
||||||
split = line.split()
|
|
||||||
command = split[0]
|
|
||||||
if not command.startswith("on_") and hasattr(st, command):
|
|
||||||
getattr(st, command)(split)
|
|
||||||
else:
|
|
||||||
print 'unrecognized command'
|
|
||||||
finally:
|
|
||||||
st.disconnect(None)
|
|
||||||
|
|
||||||
|
|
|
@ -1,99 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 03/09/11 njensen Initial Creation.
|
|
||||||
# 08/15/13 2169 bkowal Decompress data read from the queue
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
import time, sys
|
|
||||||
import threading
|
|
||||||
|
|
||||||
import dynamicserialize
|
|
||||||
|
|
||||||
TIME_TO_SLEEP = 300
|
|
||||||
|
|
||||||
class ListenThread(threading.Thread):
|
|
||||||
|
|
||||||
def __init__(self, hostname, portNumber, topicName):
|
|
||||||
self.hostname = hostname
|
|
||||||
self.portNumber = portNumber
|
|
||||||
self.topicName = topicName
|
|
||||||
self.nMessagesReceived = 0
|
|
||||||
self.waitSecond = 0
|
|
||||||
self.stopped = False
|
|
||||||
threading.Thread.__init__(self)
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
from awips import QpidSubscriber
|
|
||||||
self.qs = QpidSubscriber.QpidSubscriber(self.hostname, self.portNumber, True)
|
|
||||||
self.qs.topicSubscribe(self.topicName, self.receivedMessage)
|
|
||||||
|
|
||||||
def receivedMessage(self, msg):
|
|
||||||
print "Received message"
|
|
||||||
self.nMessagesReceived += 1
|
|
||||||
if self.waitSecond == 0:
|
|
||||||
fmsg = open('/tmp/rawMessage', 'w')
|
|
||||||
fmsg.write(msg)
|
|
||||||
fmsg.close()
|
|
||||||
|
|
||||||
while self.waitSecond < TIME_TO_SLEEP and not self.stopped:
|
|
||||||
if self.waitSecond % 60 == 0:
|
|
||||||
print time.strftime('%H:%M:%S'), "Sleeping and stuck in not so infinite while loop"
|
|
||||||
self.waitSecond += 1
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
print time.strftime('%H:%M:%S'), "Received", self.nMessagesReceived, "messages"
|
|
||||||
|
|
||||||
def stop(self):
|
|
||||||
print "Stopping"
|
|
||||||
self.stopped = True
|
|
||||||
self.qs.close()
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
print "Starting up at", time.strftime('%H:%M:%S')
|
|
||||||
|
|
||||||
topic = 'edex.alerts'
|
|
||||||
host = 'localhost'
|
|
||||||
port = 5672
|
|
||||||
|
|
||||||
thread = ListenThread(host, port, topic)
|
|
||||||
try:
|
|
||||||
thread.start()
|
|
||||||
while True:
|
|
||||||
time.sleep(3)
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
pass
|
|
||||||
finally:
|
|
||||||
thread.stop()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -1,303 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# python-awips documentation build configuration file, created by
|
|
||||||
# sphinx-quickstart on Tue Mar 15 15:59:23 2016.
|
|
||||||
#
|
|
||||||
# This file is execfile()d with the current directory set to its
|
|
||||||
# containing dir.
|
|
||||||
#
|
|
||||||
# Note that not all possible configuration values are present in this
|
|
||||||
# autogenerated file.
|
|
||||||
#
|
|
||||||
# All configuration values have a default; values that are commented out
|
|
||||||
# serve to show the default.
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
||||||
#sys.path.insert(0, os.path.abspath('.'))
|
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
||||||
sys.path.insert(0, os.path.abspath('.'))
|
|
||||||
sys.path.insert(0, os.path.abspath('../..'))
|
|
||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
|
||||||
#needs_sphinx = '1.0'
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
||||||
# ones.
|
|
||||||
extensions = [
|
|
||||||
'sphinx.ext.autodoc',
|
|
||||||
'sphinx.ext.intersphinx',
|
|
||||||
'sphinx.ext.viewcode'
|
|
||||||
# 'notebook_gen_sphinxext'
|
|
||||||
]
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
|
||||||
templates_path = ['_templates']
|
|
||||||
|
|
||||||
# The suffix(es) of source filenames.
|
|
||||||
# You can specify multiple suffix as a list of string:
|
|
||||||
# source_suffix = ['.rst', '.md']
|
|
||||||
source_suffix = '.rst'
|
|
||||||
|
|
||||||
# The encoding of source files.
|
|
||||||
#source_encoding = 'utf-8-sig'
|
|
||||||
|
|
||||||
# The master toctree document.
|
|
||||||
master_doc = 'index'
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
project = u'python-awips'
|
|
||||||
copyright = u'2016, Unidata'
|
|
||||||
author = u'Unidata'
|
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
|
||||||
# |version| and |release|, also used in various other places throughout the
|
|
||||||
# built documents.
|
|
||||||
#
|
|
||||||
# The short X.Y version.
|
|
||||||
version = u'0.9.3'
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
||||||
# for a list of supported languages.
|
|
||||||
#
|
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
|
||||||
# Usually you set "language" from the command line for these cases.
|
|
||||||
language = None
|
|
||||||
|
|
||||||
# There are two options for replacing |today|: either, you set today to some
|
|
||||||
# non-false value, then it is used:
|
|
||||||
#today = ''
|
|
||||||
# Else, today_fmt is used as the format for a strftime call.
|
|
||||||
#today_fmt = '%B %d, %Y'
|
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
|
||||||
# directories to ignore when looking for source files.
|
|
||||||
exclude_patterns = []
|
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all
|
|
||||||
# documents.
|
|
||||||
#default_role = None
|
|
||||||
|
|
||||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
|
||||||
#add_function_parentheses = True
|
|
||||||
|
|
||||||
# If true, the current module name will be prepended to all description
|
|
||||||
# unit titles (such as .. function::).
|
|
||||||
#add_module_names = True
|
|
||||||
|
|
||||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
|
||||||
# output. They are ignored by default.
|
|
||||||
#show_authors = False
|
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
|
||||||
pygments_style = 'sphinx'
|
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
|
||||||
#modindex_common_prefix = []
|
|
||||||
|
|
||||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
|
||||||
#keep_warnings = False
|
|
||||||
|
|
||||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
|
||||||
todo_include_todos = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output ----------------------------------------------
|
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
||||||
# a list of builtin themes.
|
|
||||||
#html_theme = 'alabaster'
|
|
||||||
html_theme = 'sphinx_rtd_theme'
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
|
||||||
# further. For a list of options available for each theme, see the
|
|
||||||
# documentation.
|
|
||||||
#html_theme_options = {}
|
|
||||||
|
|
||||||
# Add any paths that contain custom themes here, relative to this directory.
|
|
||||||
#html_theme_path = []
|
|
||||||
|
|
||||||
# The name for this set of Sphinx documents. If None, it defaults to
|
|
||||||
# "<project> v<release> documentation".
|
|
||||||
#html_title = None
|
|
||||||
|
|
||||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
|
||||||
#html_short_title = None
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top
|
|
||||||
# of the sidebar.
|
|
||||||
#html_logo = None
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to use as a favicon of
|
|
||||||
# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
|
||||||
# pixels large.
|
|
||||||
#html_favicon = None
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
||||||
html_static_path = ['_static']
|
|
||||||
|
|
||||||
# Add any extra paths that contain custom files (such as robots.txt or
|
|
||||||
# .htaccess) here, relative to this directory. These files are copied
|
|
||||||
# directly to the root of the documentation.
|
|
||||||
#html_extra_path = []
|
|
||||||
|
|
||||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
|
||||||
# using the given strftime format.
|
|
||||||
#html_last_updated_fmt = '%b %d, %Y'
|
|
||||||
|
|
||||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
|
||||||
# typographically correct entities.
|
|
||||||
#html_use_smartypants = True
|
|
||||||
|
|
||||||
# Custom sidebar templates, maps document names to template names.
|
|
||||||
#html_sidebars = {}
|
|
||||||
|
|
||||||
# Additional templates that should be rendered to pages, maps page names to
|
|
||||||
# template names.
|
|
||||||
#html_additional_pages = {}
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#html_domain_indices = True
|
|
||||||
|
|
||||||
# If false, no index is generated.
|
|
||||||
#html_use_index = True
|
|
||||||
|
|
||||||
# If true, the index is split into individual pages for each letter.
|
|
||||||
#html_split_index = False
|
|
||||||
|
|
||||||
# If true, links to the reST sources are added to the pages.
|
|
||||||
#html_show_sourcelink = True
|
|
||||||
|
|
||||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
|
||||||
#html_show_sphinx = True
|
|
||||||
|
|
||||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
|
||||||
#html_show_copyright = True
|
|
||||||
|
|
||||||
# If true, an OpenSearch description file will be output, and all pages will
|
|
||||||
# contain a <link> tag referring to it. The value of this option must be the
|
|
||||||
# base URL from which the finished HTML is served.
|
|
||||||
#html_use_opensearch = ''
|
|
||||||
|
|
||||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
|
||||||
#html_file_suffix = None
|
|
||||||
|
|
||||||
# Language to be used for generating the HTML full-text search index.
|
|
||||||
# Sphinx supports the following languages:
|
|
||||||
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
|
|
||||||
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
|
|
||||||
#html_search_language = 'en'
|
|
||||||
|
|
||||||
# A dictionary with options for the search language support, empty by default.
|
|
||||||
# Now only 'ja' uses this config value
|
|
||||||
#html_search_options = {'type': 'default'}
|
|
||||||
|
|
||||||
# The name of a javascript file (relative to the configuration directory) that
|
|
||||||
# implements a search results scorer. If empty, the default will be used.
|
|
||||||
#html_search_scorer = 'scorer.js'
|
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
|
||||||
htmlhelp_basename = 'python-awipsdoc'
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
|
||||||
|
|
||||||
latex_elements = {
|
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
|
||||||
#'papersize': 'letterpaper',
|
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
|
||||||
#'pointsize': '10pt',
|
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
|
||||||
#'preamble': '',
|
|
||||||
|
|
||||||
# Latex figure (float) alignment
|
|
||||||
#'figure_align': 'htbp',
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
|
||||||
# (source start file, target name, title,
|
|
||||||
# author, documentclass [howto, manual, or own class]).
|
|
||||||
latex_documents = [
|
|
||||||
(master_doc, 'python-awips.tex', u'python-awips Documentation',
|
|
||||||
u'Unidata', 'manual'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
|
||||||
# the title page.
|
|
||||||
#latex_logo = None
|
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
|
||||||
# not chapters.
|
|
||||||
#latex_use_parts = False
|
|
||||||
|
|
||||||
# If true, show page references after internal links.
|
|
||||||
#latex_show_pagerefs = False
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
#latex_show_urls = False
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
#latex_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#latex_domain_indices = True
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for manual page output ---------------------------------------
|
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
|
||||||
# (source start file, name, description, authors, manual section).
|
|
||||||
man_pages = [
|
|
||||||
(master_doc, 'python-awips', u'python-awips Documentation',
|
|
||||||
[author], 1)
|
|
||||||
]
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
#man_show_urls = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output -------------------------------------------
|
|
||||||
|
|
||||||
# Grouping the document tree into Texinfo files. List of tuples
|
|
||||||
# (source start file, target name, title, author,
|
|
||||||
# dir menu entry, description, category)
|
|
||||||
texinfo_documents = [
|
|
||||||
(master_doc, 'python-awips', u'python-awips Documentation',
|
|
||||||
author, 'python-awips', 'One line description of project.',
|
|
||||||
'Miscellaneous'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
#texinfo_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#texinfo_domain_indices = True
|
|
||||||
|
|
||||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
|
||||||
#texinfo_show_urls = 'footnote'
|
|
||||||
|
|
||||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
|
||||||
#texinfo_no_detailmenu = False
|
|
||||||
|
|
||||||
# Set up mapping for other projects' docs
|
|
||||||
intersphinx_mapping = {
|
|
||||||
'matplotlib': ('http://matplotlib.org/', None),
|
|
||||||
'metpy': ('http://docs.scipy.org/doc/metpy/', None),
|
|
||||||
'numpy': ('http://docs.scipy.org/doc/numpy/', None),
|
|
||||||
'scipy': ('http://docs.scipy.org/doc/scipy/reference/', None),
|
|
||||||
'pint': ('http://pint.readthedocs.org/en/stable/', None),
|
|
||||||
'python': ('http://docs.python.org', None)
|
|
||||||
}
|
|
|
@ -1,69 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# A port of the Java DynamicSerializeManager. Should be used to read/write
|
|
||||||
# DynamicSerialize binary data.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/09/10 njensen Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
from thrift.transport import TTransport
|
|
||||||
import SelfDescribingBinaryProtocol, ThriftSerializationContext
|
|
||||||
|
|
||||||
class DynamicSerializationManager:
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.transport = None
|
|
||||||
|
|
||||||
def _deserialize(self, ctx):
|
|
||||||
return ctx.deserializeMessage()
|
|
||||||
|
|
||||||
def deserializeBytes(self, bytes):
|
|
||||||
ctx = self._buildSerializationContext(bytes)
|
|
||||||
ctx.readMessageStart()
|
|
||||||
obj = self._deserialize(ctx)
|
|
||||||
ctx.readMessageEnd()
|
|
||||||
return obj
|
|
||||||
|
|
||||||
def _buildSerializationContext(self, bytes=None):
|
|
||||||
self.transport = TTransport.TMemoryBuffer(bytes)
|
|
||||||
protocol = SelfDescribingBinaryProtocol.SelfDescribingBinaryProtocol(self.transport)
|
|
||||||
return ThriftSerializationContext.ThriftSerializationContext(self, protocol)
|
|
||||||
|
|
||||||
def serializeObject(self, obj):
|
|
||||||
ctx = self._buildSerializationContext()
|
|
||||||
ctx.writeMessageStart("dynamicSerialize")
|
|
||||||
self._serialize(ctx, obj)
|
|
||||||
ctx.writeMessageEnd()
|
|
||||||
return self.transport.getvalue()
|
|
||||||
|
|
||||||
def _serialize(self, ctx, obj):
|
|
||||||
ctx.serializeMessage(obj)
|
|
|
@ -1,420 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# A port of the Java ThriftSerializationContext, used for reading/writing
|
|
||||||
# DynamicSerialize objects to/from thrift.
|
|
||||||
#
|
|
||||||
# For serialization, it has no knowledge of the expected types in other
|
|
||||||
# languages, it is instead all based on inspecting the types of the objects
|
|
||||||
# passed to it. Therefore, ensure the types of python objects and primitives
|
|
||||||
# match what they should be in the destination language.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/09/10 njensen Initial Creation.
|
|
||||||
# 06/12/13 #2099 dgilling Implement readObject() and
|
|
||||||
# writeObject().
|
|
||||||
# Apr 24, 2015 4425 nabowle Add Double support
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
from thrift.Thrift import TType
|
|
||||||
import inspect, sys, types
|
|
||||||
import dynamicserialize
|
|
||||||
from dynamicserialize import dstypes, adapters
|
|
||||||
import SelfDescribingBinaryProtocol
|
|
||||||
import numpy
|
|
||||||
|
|
||||||
dsObjTypes = {}
|
|
||||||
|
|
||||||
def buildObjMap(module):
|
|
||||||
if module.__dict__.has_key('__all__'):
|
|
||||||
for i in module.__all__:
|
|
||||||
name = module.__name__ + '.' + i
|
|
||||||
__import__(name)
|
|
||||||
buildObjMap(sys.modules[name])
|
|
||||||
else:
|
|
||||||
clzName = module.__name__[module.__name__.rfind('.') + 1:]
|
|
||||||
clz = module.__dict__[clzName]
|
|
||||||
tname = module.__name__
|
|
||||||
tname = tname.replace('dynamicserialize.dstypes.', '')
|
|
||||||
dsObjTypes[tname] = clz
|
|
||||||
|
|
||||||
buildObjMap(dstypes)
|
|
||||||
|
|
||||||
pythonToThriftMap = {
|
|
||||||
types.StringType: TType.STRING,
|
|
||||||
types.IntType: TType.I32,
|
|
||||||
types.LongType: TType.I64,
|
|
||||||
types.ListType: TType.LIST,
|
|
||||||
types.DictionaryType: TType.MAP,
|
|
||||||
type(set([])): TType.SET,
|
|
||||||
types.FloatType: SelfDescribingBinaryProtocol.FLOAT,
|
|
||||||
#types.FloatType: TType.DOUBLE,
|
|
||||||
types.BooleanType: TType.BOOL,
|
|
||||||
types.InstanceType: TType.STRUCT,
|
|
||||||
types.NoneType: TType.VOID,
|
|
||||||
numpy.float32: SelfDescribingBinaryProtocol.FLOAT,
|
|
||||||
numpy.int32: TType.I32,
|
|
||||||
numpy.ndarray: TType.LIST,
|
|
||||||
numpy.object_: TType.STRING, # making an assumption here
|
|
||||||
numpy.string_: TType.STRING,
|
|
||||||
numpy.float64: TType.DOUBLE,
|
|
||||||
numpy.int16: TType.I16,
|
|
||||||
numpy.int8: TType.BYTE,
|
|
||||||
numpy.int64: TType.I64
|
|
||||||
}
|
|
||||||
|
|
||||||
primitiveSupport = (TType.BYTE, TType.I16, TType.I32, TType.I64, SelfDescribingBinaryProtocol.FLOAT, TType.DOUBLE)
|
|
||||||
|
|
||||||
class ThriftSerializationContext(object):
|
|
||||||
|
|
||||||
def __init__(self, serializationManager, selfDescribingBinaryProtocol):
|
|
||||||
self.serializationManager = serializationManager
|
|
||||||
self.protocol = selfDescribingBinaryProtocol
|
|
||||||
self.typeDeserializationMethod = {
|
|
||||||
TType.STRING: self.protocol.readString,
|
|
||||||
TType.I16: self.protocol.readI16,
|
|
||||||
TType.I32: self.protocol.readI32,
|
|
||||||
TType.LIST: self._deserializeArray,
|
|
||||||
TType.MAP: self._deserializeMap,
|
|
||||||
TType.SET: self._deserializeSet,
|
|
||||||
SelfDescribingBinaryProtocol.FLOAT: self.protocol.readFloat,
|
|
||||||
TType.BYTE: self.protocol.readByte,
|
|
||||||
TType.I64: self.protocol.readI64,
|
|
||||||
TType.DOUBLE: self.protocol.readDouble,
|
|
||||||
TType.BOOL: self.protocol.readBool,
|
|
||||||
TType.STRUCT: self.deserializeMessage,
|
|
||||||
TType.VOID: lambda: None
|
|
||||||
}
|
|
||||||
self.typeSerializationMethod = {
|
|
||||||
TType.STRING: self.protocol.writeString,
|
|
||||||
TType.I16: self.protocol.writeI16,
|
|
||||||
TType.I32: self.protocol.writeI32,
|
|
||||||
TType.LIST: self._serializeArray,
|
|
||||||
TType.MAP: self._serializeMap,
|
|
||||||
TType.SET: self._serializeSet,
|
|
||||||
SelfDescribingBinaryProtocol.FLOAT: self.protocol.writeFloat,
|
|
||||||
TType.BYTE: self.protocol.writeByte,
|
|
||||||
TType.I64: self.protocol.writeI64,
|
|
||||||
TType.DOUBLE: self.protocol.writeDouble,
|
|
||||||
TType.BOOL: self.protocol.writeBool,
|
|
||||||
TType.STRUCT: self.serializeMessage,
|
|
||||||
TType.VOID: lambda x: None
|
|
||||||
}
|
|
||||||
self.listDeserializationMethod = {
|
|
||||||
TType.BYTE: self.protocol.readI8List,
|
|
||||||
TType.I16: self.protocol.readI16List,
|
|
||||||
TType.I32: self.protocol.readI32List,
|
|
||||||
TType.I64: self.protocol.readI64List,
|
|
||||||
SelfDescribingBinaryProtocol.FLOAT: self.protocol.readF32List,
|
|
||||||
TType.DOUBLE: self.protocol.readF64List
|
|
||||||
}
|
|
||||||
self.listSerializationMethod = {
|
|
||||||
TType.BYTE: self.protocol.writeI8List,
|
|
||||||
TType.I16: self.protocol.writeI16List,
|
|
||||||
TType.I32: self.protocol.writeI32List,
|
|
||||||
TType.I64: self.protocol.writeI64List,
|
|
||||||
SelfDescribingBinaryProtocol.FLOAT: self.protocol.writeF32List,
|
|
||||||
TType.DOUBLE: self.protocol.writeF64List
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def readMessageStart(self):
|
|
||||||
msg = self.protocol.readMessageBegin()
|
|
||||||
return msg[0]
|
|
||||||
|
|
||||||
def readMessageEnd(self):
|
|
||||||
self.protocol.readMessageEnd()
|
|
||||||
|
|
||||||
def deserializeMessage(self):
|
|
||||||
name = self.protocol.readStructBegin()
|
|
||||||
name = name.replace('_', '.')
|
|
||||||
if name.isdigit():
|
|
||||||
obj = self._deserializeType(int(name))
|
|
||||||
return obj
|
|
||||||
elif adapters.classAdapterRegistry.has_key(name):
|
|
||||||
return adapters.classAdapterRegistry[name].deserialize(self)
|
|
||||||
elif name.find('$') > -1:
|
|
||||||
# it's an inner class, we're going to hope it's an enum, treat it special
|
|
||||||
fieldName, fieldType, fieldId = self.protocol.readFieldBegin()
|
|
||||||
if fieldName != '__enumValue__':
|
|
||||||
raise dynamiceserialize.SerializationException("Expected to find enum payload. Found: " + fieldName)
|
|
||||||
obj = self.protocol.readString()
|
|
||||||
self.protocol.readFieldEnd()
|
|
||||||
return obj
|
|
||||||
else:
|
|
||||||
clz = dsObjTypes[name]
|
|
||||||
obj = clz()
|
|
||||||
|
|
||||||
while self._deserializeField(name, obj):
|
|
||||||
pass
|
|
||||||
|
|
||||||
self.protocol.readStructEnd()
|
|
||||||
return obj
|
|
||||||
|
|
||||||
def _deserializeType(self, b):
|
|
||||||
if self.typeDeserializationMethod.has_key(b):
|
|
||||||
return self.typeDeserializationMethod[b]()
|
|
||||||
else:
|
|
||||||
raise dynamicserialize.SerializationException("Unsupported type value " + str(b))
|
|
||||||
|
|
||||||
|
|
||||||
def _deserializeField(self, structname, obj):
|
|
||||||
fieldName, fieldType, fieldId = self.protocol.readFieldBegin()
|
|
||||||
if fieldType == TType.STOP:
|
|
||||||
return False
|
|
||||||
elif fieldType != TType.VOID:
|
|
||||||
# if adapters.fieldAdapterRegistry.has_key(structname) and adapters.fieldAdapterRegistry[structname].has_key(fieldName):
|
|
||||||
# result = adapters.fieldAdapterRegistry[structname][fieldName].deserialize(self)
|
|
||||||
# else:
|
|
||||||
result = self._deserializeType(fieldType)
|
|
||||||
lookingFor = "set" + fieldName[0].upper() + fieldName[1:]
|
|
||||||
|
|
||||||
try:
|
|
||||||
setMethod = getattr(obj, lookingFor)
|
|
||||||
|
|
||||||
if callable(setMethod):
|
|
||||||
setMethod(result)
|
|
||||||
else:
|
|
||||||
raise dynamicserialize.SerializationException("Couldn't find setter method " + lookingFor)
|
|
||||||
except:
|
|
||||||
raise dynamicserialize.SerializationException("Couldn't find setter method " + lookingFor)
|
|
||||||
|
|
||||||
self.protocol.readFieldEnd()
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def _deserializeArray(self):
|
|
||||||
listType, size = self.protocol.readListBegin()
|
|
||||||
result = []
|
|
||||||
if size:
|
|
||||||
if listType not in primitiveSupport:
|
|
||||||
m = self.typeDeserializationMethod[listType]
|
|
||||||
result = [m() for n in xrange(size)]
|
|
||||||
else:
|
|
||||||
result = self.listDeserializationMethod[listType](size)
|
|
||||||
self.protocol.readListEnd()
|
|
||||||
return result
|
|
||||||
|
|
||||||
def _deserializeMap(self):
|
|
||||||
keyType, valueType, size = self.protocol.readMapBegin()
|
|
||||||
result = {}
|
|
||||||
for n in xrange(size):
|
|
||||||
# can't go off the type, due to java generics limitations dynamic serialize is
|
|
||||||
# serializing keys and values as void
|
|
||||||
key = self.typeDeserializationMethod[TType.STRUCT]()
|
|
||||||
value = self.typeDeserializationMethod[TType.STRUCT]()
|
|
||||||
result[key] = value
|
|
||||||
self.protocol.readMapEnd()
|
|
||||||
return result
|
|
||||||
|
|
||||||
def _deserializeSet(self):
|
|
||||||
setType, setSize = self.protocol.readSetBegin()
|
|
||||||
result = set([])
|
|
||||||
for n in xrange(setSize):
|
|
||||||
result.add(self.typeDeserializationMethod[TType.STRUCT]())
|
|
||||||
self.protocol.readSetEnd()
|
|
||||||
return result
|
|
||||||
|
|
||||||
def _lookupType(self, obj):
|
|
||||||
pyt = type(obj)
|
|
||||||
if pythonToThriftMap.has_key(pyt):
|
|
||||||
return pythonToThriftMap[pyt]
|
|
||||||
elif pyt.__module__.startswith('dynamicserialize.dstypes'):
|
|
||||||
return pythonToThriftMap[types.InstanceType]
|
|
||||||
else:
|
|
||||||
raise dynamicserialize.SerializationException("Don't know how to serialize object of type: " + str(pyt))
|
|
||||||
|
|
||||||
def serializeMessage(self, obj):
|
|
||||||
tt = self._lookupType(obj)
|
|
||||||
|
|
||||||
if tt == TType.STRUCT:
|
|
||||||
fqn = obj.__module__.replace('dynamicserialize.dstypes.', '')
|
|
||||||
if adapters.classAdapterRegistry.has_key(fqn):
|
|
||||||
# get proper class name when writing class name to serialization stream
|
|
||||||
# in case we have a special inner-class case
|
|
||||||
m = sys.modules[adapters.classAdapterRegistry[fqn].__name__]
|
|
||||||
if isinstance(m.ClassAdapter, list):
|
|
||||||
fqn = m.ClassAdapter[0]
|
|
||||||
self.protocol.writeStructBegin(fqn)
|
|
||||||
adapters.classAdapterRegistry[fqn].serialize(self, obj)
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
self.protocol.writeStructBegin(fqn)
|
|
||||||
methods = inspect.getmembers(obj, inspect.ismethod)
|
|
||||||
fid = 1
|
|
||||||
for m in methods:
|
|
||||||
methodName = m[0]
|
|
||||||
if methodName.startswith('get'):
|
|
||||||
fieldname = methodName[3].lower() + methodName[4:]
|
|
||||||
val = m[1]()
|
|
||||||
ft = self._lookupType(val)
|
|
||||||
if ft == TType.STRUCT:
|
|
||||||
fc = val.__module__.replace('dynamicserialize.dstypes.', '')
|
|
||||||
self._serializeField(fieldname, ft, fid, val)
|
|
||||||
else:
|
|
||||||
self._serializeField(fieldname, ft, fid, val)
|
|
||||||
fid += 1
|
|
||||||
self.protocol.writeFieldStop()
|
|
||||||
|
|
||||||
self.protocol.writeStructEnd()
|
|
||||||
else:
|
|
||||||
# basic types
|
|
||||||
self.protocol.writeStructBegin(str(tt))
|
|
||||||
self._serializeType(obj, tt)
|
|
||||||
self.protocol.writeStructEnd()
|
|
||||||
|
|
||||||
def _serializeField(self, fieldName, fieldType, fieldId, fieldValue):
|
|
||||||
self.protocol.writeFieldBegin(fieldName, fieldType, fieldId)
|
|
||||||
self._serializeType(fieldValue, fieldType)
|
|
||||||
self.protocol.writeFieldEnd()
|
|
||||||
|
|
||||||
def _serializeType(self, fieldValue, fieldType):
|
|
||||||
if self.typeSerializationMethod.has_key(fieldType):
|
|
||||||
return self.typeSerializationMethod[fieldType](fieldValue)
|
|
||||||
else:
|
|
||||||
raise dynamicserialize.SerializationException("Unsupported type value " + str(fieldType))
|
|
||||||
|
|
||||||
def _serializeArray(self, obj):
|
|
||||||
size = len(obj)
|
|
||||||
if size:
|
|
||||||
if type(obj) is numpy.ndarray:
|
|
||||||
t = pythonToThriftMap[obj.dtype.type]
|
|
||||||
size = obj.size
|
|
||||||
else:
|
|
||||||
t = self._lookupType(obj[0])
|
|
||||||
else:
|
|
||||||
t = TType.STRUCT
|
|
||||||
self.protocol.writeListBegin(t, size)
|
|
||||||
if t == TType.STRING:
|
|
||||||
if type(obj) is numpy.ndarray:
|
|
||||||
if len(obj.shape) == 1:
|
|
||||||
for x in obj:
|
|
||||||
s = str(x).strip()
|
|
||||||
self.typeSerializationMethod[t](s)
|
|
||||||
else:
|
|
||||||
for x in obj:
|
|
||||||
for y in x:
|
|
||||||
s = str(y).strip()
|
|
||||||
self.typeSerializationMethod[t](s)
|
|
||||||
else:
|
|
||||||
for x in obj:
|
|
||||||
s = str(x)
|
|
||||||
self.typeSerializationMethod[t](s)
|
|
||||||
elif t not in primitiveSupport:
|
|
||||||
for x in obj:
|
|
||||||
self.typeSerializationMethod[t](x)
|
|
||||||
else:
|
|
||||||
self.listSerializationMethod[t](obj)
|
|
||||||
self.protocol.writeListEnd()
|
|
||||||
|
|
||||||
|
|
||||||
def _serializeMap(self, obj):
|
|
||||||
size = len(obj)
|
|
||||||
self.protocol.writeMapBegin(TType.VOID, TType.VOID, size)
|
|
||||||
for k in obj.keys():
|
|
||||||
self.typeSerializationMethod[TType.STRUCT](k)
|
|
||||||
self.typeSerializationMethod[TType.STRUCT](obj[k])
|
|
||||||
self.protocol.writeMapEnd()
|
|
||||||
|
|
||||||
def _serializeSet(self, obj):
|
|
||||||
size = len(obj)
|
|
||||||
self.protocol.writeSetBegin(TType.VOID, size)
|
|
||||||
for x in obj:
|
|
||||||
self.typeSerializationMethod[TType.STRUCT](x)
|
|
||||||
self.protocol.writeSetEnd()
|
|
||||||
|
|
||||||
def writeMessageStart(self, name):
|
|
||||||
self.protocol.writeMessageBegin(name, TType.VOID, 0)
|
|
||||||
|
|
||||||
def writeMessageEnd(self):
|
|
||||||
self.protocol.writeMessageEnd()
|
|
||||||
|
|
||||||
def readBool(self):
|
|
||||||
return self.protocol.readBool()
|
|
||||||
|
|
||||||
def writeBool(self, b):
|
|
||||||
self.protocol.writeBool(b)
|
|
||||||
|
|
||||||
def readByte(self):
|
|
||||||
return self.protocol.readByte()
|
|
||||||
|
|
||||||
def writeByte(self, b):
|
|
||||||
self.protocol.writeByte(b)
|
|
||||||
|
|
||||||
def readDouble(self):
|
|
||||||
return self.protocol.readDouble()
|
|
||||||
|
|
||||||
def writeDouble(self, d):
|
|
||||||
self.protocol.writeDouble(d)
|
|
||||||
|
|
||||||
def readFloat(self):
|
|
||||||
return self.protocol.readFloat()
|
|
||||||
|
|
||||||
def writeFloat(self, f):
|
|
||||||
self.protocol.writeFloat(f)
|
|
||||||
|
|
||||||
def readI16(self):
|
|
||||||
return self.protocol.readI16()
|
|
||||||
|
|
||||||
def writeI16(self, i):
|
|
||||||
self.protocol.writeI16(i)
|
|
||||||
|
|
||||||
def readI32(self):
|
|
||||||
return self.protocol.readI32()
|
|
||||||
|
|
||||||
def writeI32(self, i):
|
|
||||||
self.protocol.writeI32(i)
|
|
||||||
|
|
||||||
def readI64(self):
|
|
||||||
return self.protocol.readI64()
|
|
||||||
|
|
||||||
def writeI64(self, i):
|
|
||||||
self.protocol.writeI64(i)
|
|
||||||
|
|
||||||
def readString(self):
|
|
||||||
return self.protocol.readString()
|
|
||||||
|
|
||||||
def writeString(self, s):
|
|
||||||
self.protocol.writeString(s)
|
|
||||||
|
|
||||||
def readBinary(self):
|
|
||||||
numBytes = self.protocol.readI32()
|
|
||||||
return self.protocol.readI8List(numBytes)
|
|
||||||
|
|
||||||
def readFloatArray(self):
|
|
||||||
size = self.protocol.readI32()
|
|
||||||
return self.protocol.readF32List(size)
|
|
||||||
|
|
||||||
def writeFloatArray(self, floats):
|
|
||||||
self.protocol.writeI32(len(floats))
|
|
||||||
self.protocol.writeF32List(floats)
|
|
||||||
|
|
||||||
def readObject(self):
|
|
||||||
return self.deserializeMessage()
|
|
||||||
|
|
||||||
def writeObject(self, obj):
|
|
||||||
self.serializeMessage(obj)
|
|
|
@ -1,58 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# TODO
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 08/20/10 njensen Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
]
|
|
||||||
|
|
||||||
import dstypes, adapters
|
|
||||||
import DynamicSerializationManager
|
|
||||||
|
|
||||||
class SerializationException(Exception):
|
|
||||||
|
|
||||||
def __init__(self, message=None):
|
|
||||||
self.message = message
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
if self.message:
|
|
||||||
return self.message
|
|
||||||
else:
|
|
||||||
return ""
|
|
||||||
|
|
||||||
def serialize(obj):
|
|
||||||
dsm = DynamicSerializationManager.DynamicSerializationManager()
|
|
||||||
return dsm.serializeObject(obj)
|
|
||||||
|
|
||||||
def deserialize(bytes):
|
|
||||||
dsm = DynamicSerializationManager.DynamicSerializationManager()
|
|
||||||
return dsm.deserializeBytes(bytes)
|
|
|
@ -1,57 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Adapter for java.util.EnumSet
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 07/28/11 dgilling Initial Creation.
|
|
||||||
# 12/02/13 2537 bsteffen Serialize empty enum sets.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.java.util import EnumSet
|
|
||||||
|
|
||||||
ClassAdapter = ['java.util.EnumSet', 'java.util.RegularEnumSet']
|
|
||||||
|
|
||||||
|
|
||||||
def serialize(context, set):
|
|
||||||
setSize = len(set)
|
|
||||||
context.writeI32(setSize)
|
|
||||||
context.writeString(set.getEnumClass())
|
|
||||||
for val in set:
|
|
||||||
context.writeString(val)
|
|
||||||
|
|
||||||
|
|
||||||
def deserialize(context):
|
|
||||||
setSize = context.readI32()
|
|
||||||
enumClassName = context.readString()
|
|
||||||
valList = []
|
|
||||||
for i in xrange(setSize):
|
|
||||||
valList.append(context.readString())
|
|
||||||
return EnumSet(enumClassName, valList)
|
|
|
@ -1,88 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
#
|
|
||||||
# Adapter for com.raytheon.uf.common.dataplugin.gfe.server.lock.LockTable
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 04/22/13 rjpeter Initial Creation.
|
|
||||||
# 06/12/13 #2099 dgilling Use new Lock constructor.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.gfe.server.lock import LockTable
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.gfe.server.lock import Lock
|
|
||||||
|
|
||||||
ClassAdapter = 'com.raytheon.uf.common.dataplugin.gfe.server.lock.LockTable'
|
|
||||||
|
|
||||||
def serialize(context, lockTable):
|
|
||||||
index=0
|
|
||||||
wsIds = {lockTable.getWsId().toString() : index}
|
|
||||||
index += 1
|
|
||||||
locks = lockTable.getLocks()
|
|
||||||
lockWsIdIndex = []
|
|
||||||
for lock in locks:
|
|
||||||
wsIdString = lock.getWsId().toString()
|
|
||||||
|
|
||||||
if wsIds.has_key(wsIdString):
|
|
||||||
lockWsIdIndex.append(wsIds[wsIdString])
|
|
||||||
else:
|
|
||||||
lockWsIdIndex.append(index)
|
|
||||||
wsIds[wsIdString] = index
|
|
||||||
index += 1
|
|
||||||
|
|
||||||
context.writeObject(lockTable.getParmId())
|
|
||||||
|
|
||||||
context.writeI32(index)
|
|
||||||
for wsId in sorted(wsIds, key=wsIds.get):
|
|
||||||
context.writeObject(wsId)
|
|
||||||
|
|
||||||
context.writeI32(len(locks))
|
|
||||||
for lock, wsIndex in zip(locks, lockWsIdIndex):
|
|
||||||
serializer.writeI64(lock.getStartTime())
|
|
||||||
serializer.writeI64(lock.getEndTime())
|
|
||||||
serializer.writeI32(wsIndex)
|
|
||||||
|
|
||||||
def deserialize(context):
|
|
||||||
parmId = context.readObject()
|
|
||||||
numWsIds = context.readI32()
|
|
||||||
wsIds = []
|
|
||||||
for x in xrange(numWsIds):
|
|
||||||
wsIds.append(context.readObject())
|
|
||||||
|
|
||||||
numLocks = context.readI32()
|
|
||||||
locks = []
|
|
||||||
for x in xrange(numLocks):
|
|
||||||
startTime = context.readI64()
|
|
||||||
endTime = context.readI64()
|
|
||||||
wsId = wsIds[context.readI32()]
|
|
||||||
lock = Lock(parmId, wsId, startTime, endTime)
|
|
||||||
locks.append(lock)
|
|
||||||
|
|
||||||
lockTable = LockTable()
|
|
||||||
lockTable.setParmId(parmId)
|
|
||||||
lockTable.setWsId(wsIds[0])
|
|
||||||
lockTable.setLocks(locks)
|
|
||||||
|
|
||||||
return lockTable
|
|
|
@ -1,58 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Adapter for com.raytheon.uf.common.message.WsId
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 09/16/10 dgilling Initial Creation.
|
|
||||||
# 04/25/12 545 randerso Repurposed the lockKey field as threadId
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.message import WsId
|
|
||||||
|
|
||||||
ClassAdapter = 'com.raytheon.uf.common.message.WsId'
|
|
||||||
|
|
||||||
|
|
||||||
def serialize(context, wsId):
|
|
||||||
context.writeString(wsId.toString())
|
|
||||||
|
|
||||||
def deserialize(context):
|
|
||||||
wsIdString = context.readString()
|
|
||||||
wsIdParts = wsIdString.split(":", 5)
|
|
||||||
|
|
||||||
wsId = WsId()
|
|
||||||
wsId.setNetworkId(wsIdParts[0])
|
|
||||||
wsId.setUserName(wsIdParts[1])
|
|
||||||
wsId.setProgName(wsIdParts[2])
|
|
||||||
wsId.setPid(wsIdParts[3])
|
|
||||||
wsId.setThreadId(long(wsIdParts[4]))
|
|
||||||
|
|
||||||
return wsId
|
|
||||||
|
|
|
@ -1,85 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# __init__.py for Dynamic Serialize adapters.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 08/31/10 njensen Initial Creation.
|
|
||||||
# 03/20/13 #1774 randerso Added TimeConstraintsAdapter
|
|
||||||
# 04/22/13 #1949 rjpeter Added LockTableAdapter
|
|
||||||
# 02/06/14 #2672 bsteffen Added JTSEnvelopeAdapter
|
|
||||||
# 06/22/2015 #4573 randerso Added JobProgressAdapter
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'PointAdapter',
|
|
||||||
'StackTraceElementAdapter',
|
|
||||||
'WsIdAdapter',
|
|
||||||
'CalendarAdapter',
|
|
||||||
'GregorianCalendarAdapter',
|
|
||||||
'ActiveTableModeAdapter',
|
|
||||||
'DateAdapter',
|
|
||||||
'LocalizationLevelSerializationAdapter',
|
|
||||||
'LocalizationTypeSerializationAdapter',
|
|
||||||
'GeometryTypeAdapter',
|
|
||||||
'CoordAdapter',
|
|
||||||
'TimeRangeTypeAdapter',
|
|
||||||
'ParmIDAdapter',
|
|
||||||
'DatabaseIDAdapter',
|
|
||||||
'TimestampAdapter',
|
|
||||||
'EnumSetAdapter',
|
|
||||||
'FloatBufferAdapter',
|
|
||||||
'ByteBufferAdapter',
|
|
||||||
'TimeConstraintsAdapter',
|
|
||||||
'LockTableAdapter',
|
|
||||||
'JTSEnvelopeAdapter',
|
|
||||||
'JobProgressAdapter',
|
|
||||||
]
|
|
||||||
|
|
||||||
classAdapterRegistry = {}
|
|
||||||
|
|
||||||
|
|
||||||
def getAdapterRegistry():
|
|
||||||
import sys
|
|
||||||
for x in __all__:
|
|
||||||
exec 'import ' + x
|
|
||||||
m = sys.modules['dynamicserialize.adapters.' + x]
|
|
||||||
d = m.__dict__
|
|
||||||
if d.has_key('ClassAdapter'):
|
|
||||||
if isinstance(m.ClassAdapter, list):
|
|
||||||
for clz in m.ClassAdapter:
|
|
||||||
classAdapterRegistry[clz] = m
|
|
||||||
else:
|
|
||||||
clzName = m.ClassAdapter
|
|
||||||
classAdapterRegistry[clzName] = m
|
|
||||||
else:
|
|
||||||
raise LookupError('Adapter class ' + x + ' has no ClassAdapter field ' + \
|
|
||||||
'and cannot be registered.')
|
|
||||||
|
|
||||||
|
|
||||||
getAdapterRegistry()
|
|
||||||
|
|
|
@ -1,291 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 05/22/2015 4522 randerso Initial creation (hand generated)
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import ActiveTableKey
|
|
||||||
import abc
|
|
||||||
|
|
||||||
class ActiveTableRecord(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def __init__(self):
|
|
||||||
self.key = ActiveTableKey.ActiveTableKey()
|
|
||||||
self.wmoid = None
|
|
||||||
self.pil = None
|
|
||||||
self.xxxid = None
|
|
||||||
self.countyheader = None
|
|
||||||
self.vtecstr = None
|
|
||||||
self.productClass = None
|
|
||||||
self.act = None
|
|
||||||
self.startTime = None
|
|
||||||
self.endTime = None
|
|
||||||
self.issueTime = None
|
|
||||||
self.purgeTime = None
|
|
||||||
self.ufn = None
|
|
||||||
self.geometry = None
|
|
||||||
self.forecaster = None
|
|
||||||
self.motdir = None
|
|
||||||
self.motspd = None
|
|
||||||
self.loc = None
|
|
||||||
self.rawmessage = None
|
|
||||||
self.seg = None
|
|
||||||
self.phensig = None
|
|
||||||
self.region = None
|
|
||||||
self.overviewText = None
|
|
||||||
self.segText = None
|
|
||||||
self.locationID = None
|
|
||||||
self.floodSeverity = None
|
|
||||||
self.immediateCause = None
|
|
||||||
self.floodRecordStatus = None
|
|
||||||
self.floodBegin = None
|
|
||||||
self.floodCrest = None
|
|
||||||
self.floodEnd = None
|
|
||||||
self.identifier = None
|
|
||||||
|
|
||||||
def getKey(self):
|
|
||||||
return self.key
|
|
||||||
|
|
||||||
def setKey(self, key):
|
|
||||||
self.key = key
|
|
||||||
|
|
||||||
def getWmoid(self):
|
|
||||||
return self.wmoid
|
|
||||||
|
|
||||||
def setWmoid(self, wmoid):
|
|
||||||
self.wmoid = wmoid
|
|
||||||
|
|
||||||
def getPil(self):
|
|
||||||
return self.pil
|
|
||||||
|
|
||||||
def setPil(self, pil):
|
|
||||||
self.pil = pil
|
|
||||||
|
|
||||||
def getXxxid(self):
|
|
||||||
return self.xxxid
|
|
||||||
|
|
||||||
def setXxxid(self, xxxid):
|
|
||||||
self.xxxid = xxxid
|
|
||||||
|
|
||||||
def getCountyheader(self):
|
|
||||||
return self.countyheader
|
|
||||||
|
|
||||||
def setCountyheader(self, countyheader):
|
|
||||||
self.countyheader = countyheader
|
|
||||||
|
|
||||||
def getUgcZone(self):
|
|
||||||
return self.key.getUgcZone()
|
|
||||||
|
|
||||||
def setUgcZone(self, ugcZone):
|
|
||||||
self.key.setUgcZone(ugcZone)
|
|
||||||
|
|
||||||
def getVtecstr(self):
|
|
||||||
return self.vtecstr
|
|
||||||
|
|
||||||
def setVtecstr(self, vtecstr):
|
|
||||||
self.vtecstr = vtecstr
|
|
||||||
|
|
||||||
def getProductClass(self):
|
|
||||||
return self.productClass
|
|
||||||
|
|
||||||
def setProductClass(self, productClass):
|
|
||||||
self.productClass = productClass
|
|
||||||
|
|
||||||
def getAct(self):
|
|
||||||
return self.act
|
|
||||||
|
|
||||||
def setAct(self, act):
|
|
||||||
self.act = act
|
|
||||||
|
|
||||||
def getOfficeid(self):
|
|
||||||
return self.key.getOfficeid()
|
|
||||||
|
|
||||||
def setOfficeid(self, officeid):
|
|
||||||
self.key.setOfficeid(officeid)
|
|
||||||
|
|
||||||
def getPhen(self):
|
|
||||||
return self.key.getPhen()
|
|
||||||
|
|
||||||
def setPhen(self, phen):
|
|
||||||
self.key.setPhen(phen)
|
|
||||||
|
|
||||||
def getSig(self):
|
|
||||||
return self.key.getSig()
|
|
||||||
|
|
||||||
def setSig(self, sig):
|
|
||||||
self.key.setSig(sig)
|
|
||||||
|
|
||||||
def getEtn(self):
|
|
||||||
return self.key.getEtn()
|
|
||||||
|
|
||||||
def setEtn(self, etn):
|
|
||||||
self.key.setEtn(etn)
|
|
||||||
|
|
||||||
def getStartTime(self):
|
|
||||||
return self.startTime
|
|
||||||
|
|
||||||
def setStartTime(self, startTime):
|
|
||||||
self.startTime = startTime
|
|
||||||
|
|
||||||
def getEndTime(self):
|
|
||||||
return self.endTime
|
|
||||||
|
|
||||||
def setEndTime(self, endTime):
|
|
||||||
self.endTime = endTime
|
|
||||||
|
|
||||||
def getIssueTime(self):
|
|
||||||
return self.issueTime
|
|
||||||
|
|
||||||
def setIssueTime(self, issueTime):
|
|
||||||
self.issueTime = issueTime
|
|
||||||
|
|
||||||
def getPurgeTime(self):
|
|
||||||
return self.purgeTime
|
|
||||||
|
|
||||||
def setPurgeTime(self, purgeTime):
|
|
||||||
self.purgeTime = purgeTime
|
|
||||||
|
|
||||||
def isUfn(self):
|
|
||||||
return self.ufn
|
|
||||||
|
|
||||||
def setUfn(self, ufn):
|
|
||||||
self.ufn = ufn
|
|
||||||
|
|
||||||
def getGeometry(self):
|
|
||||||
return self.geometry
|
|
||||||
|
|
||||||
def setGeometry(self, geometry):
|
|
||||||
self.geometry = geometry
|
|
||||||
|
|
||||||
def getForecaster(self):
|
|
||||||
return self.forecaster
|
|
||||||
|
|
||||||
def setForecaster(self, forecaster):
|
|
||||||
self.forecaster = forecaster
|
|
||||||
|
|
||||||
def getMotdir(self):
|
|
||||||
return self.motdir
|
|
||||||
|
|
||||||
def setMotdir(self, motdir):
|
|
||||||
self.motdir = motdir
|
|
||||||
|
|
||||||
def getMotspd(self):
|
|
||||||
return self.motspd
|
|
||||||
|
|
||||||
def setMotspd(self, motspd):
|
|
||||||
self.motspd = motspd
|
|
||||||
|
|
||||||
def getLoc(self):
|
|
||||||
return self.loc
|
|
||||||
|
|
||||||
def setLoc(self, loc):
|
|
||||||
self.loc = loc
|
|
||||||
|
|
||||||
def getRawmessage(self):
|
|
||||||
return self.rawmessage
|
|
||||||
|
|
||||||
def setRawmessage(self, rawmessage):
|
|
||||||
self.rawmessage = rawmessage
|
|
||||||
|
|
||||||
def getSeg(self):
|
|
||||||
return self.seg
|
|
||||||
|
|
||||||
def setSeg(self, seg):
|
|
||||||
self.seg = seg
|
|
||||||
|
|
||||||
def getPhensig(self):
|
|
||||||
return self.phensig
|
|
||||||
|
|
||||||
def setPhensig(self, phensig):
|
|
||||||
self.phensig = phensig
|
|
||||||
|
|
||||||
def getRegion(self):
|
|
||||||
return self.region
|
|
||||||
|
|
||||||
def setRegion(self, region):
|
|
||||||
self.region = region
|
|
||||||
|
|
||||||
def getOverviewText(self):
|
|
||||||
return self.overviewText
|
|
||||||
|
|
||||||
def setOverviewText(self, overviewText):
|
|
||||||
self.overviewText = overviewText
|
|
||||||
|
|
||||||
def getSegText(self):
|
|
||||||
return self.segText
|
|
||||||
|
|
||||||
def setSegText(self, segText):
|
|
||||||
self.segText = segText
|
|
||||||
|
|
||||||
def getLocationID(self):
|
|
||||||
return self.locationID
|
|
||||||
|
|
||||||
def setLocationID(self, locationID):
|
|
||||||
self.locationID = locationID
|
|
||||||
|
|
||||||
def getFloodSeverity(self):
|
|
||||||
return self.floodSeverity
|
|
||||||
|
|
||||||
def setFloodSeverity(self, floodSeverity):
|
|
||||||
self.floodSeverity = floodSeverity
|
|
||||||
|
|
||||||
def getImmediateCause(self):
|
|
||||||
return self.immediateCause
|
|
||||||
|
|
||||||
def setImmediateCause(self, immediateCause):
|
|
||||||
self.immediateCause = immediateCause
|
|
||||||
|
|
||||||
def getFloodRecordStatus(self):
|
|
||||||
return self.floodRecordStatus
|
|
||||||
|
|
||||||
def setFloodRecordStatus(self, floodRecordStatus):
|
|
||||||
self.floodRecordStatus = floodRecordStatus
|
|
||||||
|
|
||||||
def getFloodBegin(self):
|
|
||||||
return self.floodBegin
|
|
||||||
|
|
||||||
def setFloodBegin(self, floodBegin):
|
|
||||||
self.floodBegin = floodBegin
|
|
||||||
|
|
||||||
def getFloodCrest(self):
|
|
||||||
return self.floodCrest
|
|
||||||
|
|
||||||
def setFloodCrest(self, floodCrest):
|
|
||||||
self.floodCrest = floodCrest
|
|
||||||
|
|
||||||
def getFloodEnd(self):
|
|
||||||
return self.floodEnd
|
|
||||||
|
|
||||||
def setFloodEnd(self, floodEnd):
|
|
||||||
self.floodEnd = floodEnd
|
|
||||||
|
|
||||||
def getIdentifier(self):
|
|
||||||
return self.identifier
|
|
||||||
|
|
||||||
def setIdentifier(self, identifier):
|
|
||||||
self.identifier = identifier
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 05/22/2015 4522 randerso Changed to inherit from ActiveTableRecord
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import ActiveTableRecord
|
|
||||||
|
|
||||||
class OperationalActiveTableRecord(ActiveTableRecord.ActiveTableRecord):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(OperationalActiveTableRecord, self).__init__()
|
|
|
@ -1,34 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 05/22/2015 4522 randerso Changed to inherit from ActiveTableRecord
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import ActiveTableRecord
|
|
||||||
|
|
||||||
class PracticeActiveTableRecord(ActiveTableRecord.ActiveTableRecord):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(PracticeActiveTableRecord, self).__init__()
|
|
|
@ -1,60 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ActiveTableKey',
|
|
||||||
'ActiveTableRecord',
|
|
||||||
'ActiveTableMode',
|
|
||||||
'DumpActiveTableRequest',
|
|
||||||
'DumpActiveTableResponse',
|
|
||||||
'GetActiveTableDictRequest',
|
|
||||||
'GetActiveTableDictResponse',
|
|
||||||
'GetFourCharSitesRequest',
|
|
||||||
'GetFourCharSitesResponse',
|
|
||||||
'GetVtecAttributeRequest',
|
|
||||||
'GetVtecAttributeResponse',
|
|
||||||
'OperationalActiveTableRecord',
|
|
||||||
'PracticeActiveTableRecord',
|
|
||||||
'SendPracticeProductRequest',
|
|
||||||
'VTECChange',
|
|
||||||
'VTECTableChangeNotification',
|
|
||||||
'request',
|
|
||||||
'response'
|
|
||||||
]
|
|
||||||
|
|
||||||
from ActiveTableKey import ActiveTableKey
|
|
||||||
from ActiveTableRecord import ActiveTableRecord
|
|
||||||
from ActiveTableMode import ActiveTableMode
|
|
||||||
from DumpActiveTableRequest import DumpActiveTableRequest
|
|
||||||
from DumpActiveTableResponse import DumpActiveTableResponse
|
|
||||||
from GetActiveTableDictRequest import GetActiveTableDictRequest
|
|
||||||
from GetActiveTableDictResponse import GetActiveTableDictResponse
|
|
||||||
from GetFourCharSitesRequest import GetFourCharSitesRequest
|
|
||||||
from GetFourCharSitesResponse import GetFourCharSitesResponse
|
|
||||||
from GetVtecAttributeRequest import GetVtecAttributeRequest
|
|
||||||
from GetVtecAttributeResponse import GetVtecAttributeResponse
|
|
||||||
from OperationalActiveTableRecord import OperationalActiveTableRecord
|
|
||||||
from PracticeActiveTableRecord import PracticeActiveTableRecord
|
|
||||||
from SendPracticeProductRequest import SendPracticeProductRequest
|
|
||||||
from VTECChange import VTECChange
|
|
||||||
from VTECTableChangeNotification import VTECTableChangeNotification
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ClearPracticeVTECTableRequest',
|
|
||||||
'MergeActiveTableRequest',
|
|
||||||
'RetrieveRemoteActiveTableRequest',
|
|
||||||
'SendActiveTableRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from ClearPracticeVTECTableRequest import ClearPracticeVTECTableRequest
|
|
||||||
from MergeActiveTableRequest import MergeActiveTableRequest
|
|
||||||
from RetrieveRemoteActiveTableRequest import RetrieveRemoteActiveTableRequest
|
|
||||||
from SendActiveTableRequest import SendActiveTableRequest
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ActiveTableSharingResponse'
|
|
||||||
]
|
|
||||||
|
|
||||||
from ActiveTableSharingResponse import ActiveTableSharingResponse
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'AlertVizRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from AlertVizRequest import AlertVizRequest
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
|
|
||||||
import abc
|
|
||||||
|
|
||||||
|
|
||||||
class AbstractFailedResponse(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def __init__(self):
|
|
||||||
self.request = None
|
|
||||||
|
|
||||||
def getRequest(self):
|
|
||||||
return self.request
|
|
||||||
|
|
||||||
def setRequest(self, request):
|
|
||||||
self.request = request
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'AbstractFailedResponse',
|
|
||||||
'AuthServerErrorResponse',
|
|
||||||
'SuccessfulExecution',
|
|
||||||
'UserNotAuthorized'
|
|
||||||
]
|
|
||||||
|
|
||||||
from AbstractFailedResponse import AbstractFailedResponse
|
|
||||||
from AuthServerErrorResponse import AuthServerErrorResponse
|
|
||||||
from SuccessfulExecution import SuccessfulExecution
|
|
||||||
from UserNotAuthorized import UserNotAuthorized
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'AuthenticationData'
|
|
||||||
]
|
|
||||||
|
|
||||||
from AuthenticationData import AuthenticationData
|
|
|
@ -1,94 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
# and then modified post-generation to sub-class IDataRequest.
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 05/28/13 2023 dgilling Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
from awips.dataaccess import IDataRequest
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.com.vividsolutions.jts.geom import Envelope
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.level import Level
|
|
||||||
|
|
||||||
|
|
||||||
class DefaultDataRequest(IDataRequest):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.datatype = None
|
|
||||||
self.identifiers = {}
|
|
||||||
self.parameters = []
|
|
||||||
self.levels = []
|
|
||||||
self.locationNames = []
|
|
||||||
self.envelope = None
|
|
||||||
|
|
||||||
def setDatatype(self, datatype):
|
|
||||||
self.datatype = str(datatype)
|
|
||||||
|
|
||||||
def addIdentifier(self, key, value):
|
|
||||||
self.identifiers[key] = value
|
|
||||||
|
|
||||||
def removeIdentifier(self, key):
|
|
||||||
del self.identifiers[key]
|
|
||||||
|
|
||||||
def setParameters(self, *params):
|
|
||||||
self.parameters = map(str, params)
|
|
||||||
|
|
||||||
def setLevels(self, *levels):
|
|
||||||
self.levels = map(self.__makeLevel, levels)
|
|
||||||
|
|
||||||
def __makeLevel(self, level):
|
|
||||||
if type(level) is Level:
|
|
||||||
return level
|
|
||||||
elif type(level) is str:
|
|
||||||
return Level(level)
|
|
||||||
else:
|
|
||||||
raise TypeError("Invalid object type specified for level.")
|
|
||||||
|
|
||||||
def setEnvelope(self, env):
|
|
||||||
self.envelope = Envelope(env.envelope)
|
|
||||||
|
|
||||||
def setLocationNames(self, *locationNames):
|
|
||||||
self.locationNames = map(str, locationNames)
|
|
||||||
|
|
||||||
def getDatatype(self):
|
|
||||||
return self.datatype
|
|
||||||
|
|
||||||
def getIdentifiers(self):
|
|
||||||
return self.identifiers
|
|
||||||
|
|
||||||
def getParameters(self):
|
|
||||||
return self.parameters
|
|
||||||
|
|
||||||
def getLevels(self):
|
|
||||||
return self.levels
|
|
||||||
|
|
||||||
def getEnvelope(self):
|
|
||||||
return self.envelope
|
|
||||||
|
|
||||||
def getLocationNames(self):
|
|
||||||
return self.locationNames
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'DefaultDataRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from DefaultDataRequest import DefaultDataRequest
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
# and then modified post-generation to make it a abstract base class.
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 05/28/13 #2023 dgilling Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
import abc
|
|
||||||
|
|
||||||
|
|
||||||
class AbstractDataAccessRequest(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.requestParameters = None
|
|
||||||
|
|
||||||
def getRequestParameters(self):
|
|
||||||
return self.requestParameters
|
|
||||||
|
|
||||||
def setRequestParameters(self, requestParameters):
|
|
||||||
self.requestParameters = requestParameters
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
# and then modified post-generation to make it a abstract base class.
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 07/23/14 #3185 njensen Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
import abc
|
|
||||||
|
|
||||||
class AbstractIdentifierRequest(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.datatype = None
|
|
||||||
|
|
||||||
def getDatatype(self):
|
|
||||||
return self.datatype
|
|
||||||
|
|
||||||
def setDatatype(self, datatype):
|
|
||||||
self.datatype = datatype
|
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'AbstractDataAccessRequest',
|
|
||||||
'AbstractIdentifierRequest',
|
|
||||||
'GetAvailableLevelsRequest',
|
|
||||||
'GetAvailableLocationNamesRequest',
|
|
||||||
'GetAvailableParametersRequest',
|
|
||||||
'GetAvailableTimesRequest',
|
|
||||||
'GetGeometryDataRequest',
|
|
||||||
'GetGridDataRequest',
|
|
||||||
'GetRequiredIdentifiersRequest',
|
|
||||||
'GetSupportedDatatypesRequest',
|
|
||||||
'GetOptionalIdentifiersRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from AbstractDataAccessRequest import AbstractDataAccessRequest
|
|
||||||
from AbstractIdentifierRequest import AbstractIdentifierRequest
|
|
||||||
from GetAvailableLevelsRequest import GetAvailableLevelsRequest
|
|
||||||
from GetAvailableLocationNamesRequest import GetAvailableLocationNamesRequest
|
|
||||||
from GetAvailableParametersRequest import GetAvailableParametersRequest
|
|
||||||
from GetAvailableTimesRequest import GetAvailableTimesRequest
|
|
||||||
from GetGeometryDataRequest import GetGeometryDataRequest
|
|
||||||
from GetGridDataRequest import GetGridDataRequest
|
|
||||||
from GetRequiredIdentifiersRequest import GetRequiredIdentifiersRequest
|
|
||||||
from GetSupportedDatatypesRequest import GetSupportedDatatypesRequest
|
|
||||||
from GetOptionalIdentifiersRequest import GetOptionalIdentifiersRequest
|
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
|
|
||||||
import abc
|
|
||||||
|
|
||||||
|
|
||||||
class AbstractResponseData(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def __init__(self):
|
|
||||||
self.time = None
|
|
||||||
self.level = None
|
|
||||||
self.locationName = None
|
|
||||||
self.attributes = None
|
|
||||||
|
|
||||||
def getTime(self):
|
|
||||||
return self.time
|
|
||||||
|
|
||||||
def setTime(self, time):
|
|
||||||
self.time = time
|
|
||||||
|
|
||||||
def getLevel(self):
|
|
||||||
return self.level
|
|
||||||
|
|
||||||
def setLevel(self, level):
|
|
||||||
self.level = level
|
|
||||||
|
|
||||||
def getLocationName(self):
|
|
||||||
return self.locationName
|
|
||||||
|
|
||||||
def setLocationName(self, locationName):
|
|
||||||
self.locationName = locationName
|
|
||||||
|
|
||||||
def getAttributes(self):
|
|
||||||
return self.attributes
|
|
||||||
|
|
||||||
def setAttributes(self, attributes):
|
|
||||||
self.attributes = attributes
|
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'AbstractResponseData',
|
|
||||||
'GeometryResponseData',
|
|
||||||
'GetGeometryDataResponse',
|
|
||||||
'GetGridDataResponse',
|
|
||||||
'GridResponseData'
|
|
||||||
]
|
|
||||||
|
|
||||||
from AbstractResponseData import AbstractResponseData
|
|
||||||
from GeometryResponseData import GeometryResponseData
|
|
||||||
from GetGeometryDataResponse import GetGeometryDataResponse
|
|
||||||
from GetGridDataResponse import GetGridDataResponse
|
|
||||||
from GridResponseData import GridResponseData
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'RegionLookupRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from RegionLookupRequest import RegionLookupRequest
|
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/22/2015 4573 randerso Added svcbu package
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'GridDataHistory',
|
|
||||||
'config',
|
|
||||||
'db',
|
|
||||||
'discrete',
|
|
||||||
'grid',
|
|
||||||
'request',
|
|
||||||
'server',
|
|
||||||
'slice',
|
|
||||||
'svcbu',
|
|
||||||
'weather'
|
|
||||||
]
|
|
||||||
|
|
||||||
from GridDataHistory import GridDataHistory
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ProjectionData'
|
|
||||||
]
|
|
||||||
|
|
||||||
from ProjectionData import ProjectionData
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'DatabaseID',
|
|
||||||
'GFERecord',
|
|
||||||
'GridLocation',
|
|
||||||
'GridParmInfo',
|
|
||||||
'ParmID',
|
|
||||||
'TimeConstraints'
|
|
||||||
]
|
|
||||||
|
|
||||||
from DatabaseID import DatabaseID
|
|
||||||
from GFERecord import GFERecord
|
|
||||||
from GridLocation import GridLocation
|
|
||||||
from GridParmInfo import GridParmInfo
|
|
||||||
from ParmID import ParmID
|
|
||||||
from TimeConstraints import TimeConstraints
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'DiscreteKey'
|
|
||||||
]
|
|
||||||
|
|
||||||
from DiscreteKey import DiscreteKey
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'Grid2DByte',
|
|
||||||
'Grid2DFloat'
|
|
||||||
]
|
|
||||||
|
|
||||||
from Grid2DByte import Grid2DByte
|
|
||||||
from Grid2DFloat import Grid2DFloat
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
|
|
||||||
import abc
|
|
||||||
|
|
||||||
|
|
||||||
class AbstractGfeRequest(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def __init__(self):
|
|
||||||
self.siteID = None
|
|
||||||
self.workstationID = None
|
|
||||||
|
|
||||||
def getSiteID(self):
|
|
||||||
return self.siteID
|
|
||||||
|
|
||||||
def setSiteID(self, siteID):
|
|
||||||
self.siteID = siteID
|
|
||||||
|
|
||||||
def getWorkstationID(self):
|
|
||||||
return self.workstationID
|
|
||||||
|
|
||||||
def setWorkstationID(self, workstationID):
|
|
||||||
self.workstationID = workstationID
|
|
|
@ -1,63 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
|
|
||||||
import abc
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.gfe.server.request import GetGridRequest
|
|
||||||
|
|
||||||
|
|
||||||
class GetGridDataRequest(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def __init__(self):
|
|
||||||
self.requests = []
|
|
||||||
self.workstationID = None
|
|
||||||
self.siteID = None
|
|
||||||
|
|
||||||
def addRequest(self, gridDataReq):
|
|
||||||
if not isinstance(gridDataReq, GetGridRequest):
|
|
||||||
raise TypeError("Invalid request specified: " + str(type(gridDataReq)) + \
|
|
||||||
". Only GetGridRequests are supported.")
|
|
||||||
else:
|
|
||||||
self.requests.append(gridDataReq)
|
|
||||||
|
|
||||||
def getRequests(self):
|
|
||||||
return self.requests
|
|
||||||
|
|
||||||
def setRequests(self, requests):
|
|
||||||
del self.requests[:]
|
|
||||||
for req in requests:
|
|
||||||
self.addRequest(req)
|
|
||||||
|
|
||||||
def getWorkstationID(self):
|
|
||||||
return self.workstationID
|
|
||||||
|
|
||||||
def setWorkstationID(self, workstationID):
|
|
||||||
self.workstationID = workstationID
|
|
||||||
|
|
||||||
def getSiteID(self):
|
|
||||||
return self.siteID
|
|
||||||
|
|
||||||
def setSiteID(self, siteID):
|
|
||||||
self.siteID = siteID
|
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# Jul 15, 2015 #4013 randerso Added RsyncGridsToCWFRequest
|
|
||||||
#
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'AbstractGfeRequest',
|
|
||||||
'CommitGridsRequest',
|
|
||||||
'ConfigureTextProductsRequest',
|
|
||||||
'ExecuteIfpNetCDFGridRequest',
|
|
||||||
'ExecuteIscMosaicRequest',
|
|
||||||
'ExportGridsRequest',
|
|
||||||
'GetASCIIGridsRequest',
|
|
||||||
'GetGridDataRequest',
|
|
||||||
'GetGridInventoryRequest',
|
|
||||||
'GetLatestDbTimeRequest',
|
|
||||||
'GetLatestModelDbIdRequest',
|
|
||||||
'GetLockTablesRequest',
|
|
||||||
'GetOfficialDbNameRequest',
|
|
||||||
'GetParmListRequest',
|
|
||||||
'GetSelectTimeRangeRequest',
|
|
||||||
'GetSingletonDbIdsRequest',
|
|
||||||
'GetSiteTimeZoneInfoRequest',
|
|
||||||
'GridLocRequest',
|
|
||||||
'IscDataRecRequest',
|
|
||||||
'LockChangeRequest',
|
|
||||||
'ProcessReceivedConfRequest',
|
|
||||||
'ProcessReceivedDigitalDataRequest',
|
|
||||||
'PurgeGfeGridsRequest',
|
|
||||||
'SaveASCIIGridsRequest',
|
|
||||||
'SmartInitRequest',
|
|
||||||
'RsyncGridsToCWFRequest',
|
|
||||||
]
|
|
||||||
|
|
||||||
from AbstractGfeRequest import AbstractGfeRequest
|
|
||||||
from CommitGridsRequest import CommitGridsRequest
|
|
||||||
from ConfigureTextProductsRequest import ConfigureTextProductsRequest
|
|
||||||
from ExecuteIfpNetCDFGridRequest import ExecuteIfpNetCDFGridRequest
|
|
||||||
from ExecuteIscMosaicRequest import ExecuteIscMosaicRequest
|
|
||||||
from ExportGridsRequest import ExportGridsRequest
|
|
||||||
from GetASCIIGridsRequest import GetASCIIGridsRequest
|
|
||||||
from GetGridDataRequest import GetGridDataRequest
|
|
||||||
from GetGridInventoryRequest import GetGridInventoryRequest
|
|
||||||
from GetLatestDbTimeRequest import GetLatestDbTimeRequest
|
|
||||||
from GetLatestModelDbIdRequest import GetLatestModelDbIdRequest
|
|
||||||
from GetLockTablesRequest import GetLockTablesRequest
|
|
||||||
from GetOfficialDbNameRequest import GetOfficialDbNameRequest
|
|
||||||
from GetParmListRequest import GetParmListRequest
|
|
||||||
from GetSelectTimeRangeRequest import GetSelectTimeRangeRequest
|
|
||||||
from GetSingletonDbIdsRequest import GetSingletonDbIdsRequest
|
|
||||||
from GetSiteTimeZoneInfoRequest import GetSiteTimeZoneInfoRequest
|
|
||||||
from GridLocRequest import GridLocRequest
|
|
||||||
from IscDataRecRequest import IscDataRecRequest
|
|
||||||
from LockChangeRequest import LockChangeRequest
|
|
||||||
from ProcessReceivedConfRequest import ProcessReceivedConfRequest
|
|
||||||
from ProcessReceivedDigitalDataRequest import ProcessReceivedDigitalDataRequest
|
|
||||||
from PurgeGfeGridsRequest import PurgeGfeGridsRequest
|
|
||||||
from SaveASCIIGridsRequest import SaveASCIIGridsRequest
|
|
||||||
from SmartInitRequest import SmartInitRequest
|
|
||||||
from RsyncGridsToCWFRequest import RsyncGridsToCWFRequest
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'Lock',
|
|
||||||
'LockTable'
|
|
||||||
]
|
|
||||||
|
|
||||||
from Lock import Lock
|
|
||||||
from LockTable import LockTable
|
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
|
|
||||||
class ServerResponse(object):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.messages = None
|
|
||||||
self.payload = None
|
|
||||||
self.notifications = None
|
|
||||||
|
|
||||||
def getMessages(self):
|
|
||||||
return self.messages
|
|
||||||
|
|
||||||
def setMessages(self, messages):
|
|
||||||
self.messages = messages
|
|
||||||
|
|
||||||
def getPayload(self):
|
|
||||||
return self.payload
|
|
||||||
|
|
||||||
def setPayload(self, payload):
|
|
||||||
self.payload = payload
|
|
||||||
|
|
||||||
def getNotifications(self):
|
|
||||||
return self.notifications
|
|
||||||
|
|
||||||
def setNotifications(self, notifications):
|
|
||||||
self.notifications = notifications
|
|
||||||
|
|
||||||
def isOkay(self):
|
|
||||||
return (self.messages is None or len(self.messages) == 0)
|
|
||||||
|
|
||||||
def message(self):
|
|
||||||
if (self.isOkay()):
|
|
||||||
return ""
|
|
||||||
else:
|
|
||||||
compMessage = ""
|
|
||||||
for serverMsg in self.messages:
|
|
||||||
compMessage += serverMsg.getMessage() + "\n"
|
|
||||||
|
|
||||||
return compMessage
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.message()
|
|
||||||
|
|
||||||
def __nonzero__(self):
|
|
||||||
return self.isOkay()
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ServerMsg',
|
|
||||||
'ServerResponse'
|
|
||||||
]
|
|
||||||
|
|
||||||
from ServerMsg import ServerMsg
|
|
||||||
from ServerResponse import ServerResponse
|
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/22/2015 4573 randerso Initial creation (hand generated)
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import GfeNotification
|
|
||||||
|
|
||||||
class CombinationsFileChangedNotification(GfeNotification.GfeNotification):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(CombinationsFileChangedNotification, self).__init__()
|
|
||||||
self.combinationsFileName = None
|
|
||||||
self.whoChanged = None
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
msg = "fileName: " + str(self.combinationsFileName)
|
|
||||||
msg += '\n' + "whoChanged: " + str(self.whoChanged)
|
|
||||||
return msg
|
|
||||||
|
|
||||||
def getCombinationsFileName(self):
|
|
||||||
return self.combinationsFileName
|
|
||||||
|
|
||||||
def setCombinationsFileName(self, combinationsFileName):
|
|
||||||
self.combinationsFileName = combinationsFileName
|
|
||||||
|
|
||||||
def getWhoChanged(self):
|
|
||||||
return self.whoChanged
|
|
||||||
|
|
||||||
def setWhoChanged(self, whoChanged):
|
|
||||||
self.whoChanged = whoChanged
|
|
|
@ -1,56 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# ??/??/???? ???? njensen Modified to add __repr__
|
|
||||||
# 06/22/2015 4573 randerso Change to extend GfeNotification
|
|
||||||
# removed inventory methods
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import GfeNotification
|
|
||||||
|
|
||||||
class DBInvChangeNotification(GfeNotification.GfeNotification):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(DBInvChangeNotification, self).__init__()
|
|
||||||
self.additions = None
|
|
||||||
self.deletions = None
|
|
||||||
|
|
||||||
def getAdditions(self):
|
|
||||||
return self.additions
|
|
||||||
|
|
||||||
def setAdditions(self, additions):
|
|
||||||
self.additions = additions
|
|
||||||
|
|
||||||
def getDeletions(self):
|
|
||||||
return self.deletions
|
|
||||||
|
|
||||||
def setDeletions(self, deletions):
|
|
||||||
self.deletions = deletions
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
msg = 'Additions' + str(self.additions) + '\n'
|
|
||||||
msg += 'Deletions' + str(self.deletions)
|
|
||||||
return msg
|
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 10/07/2014 3684 randerso Manually updated to add sourceID
|
|
||||||
#
|
|
||||||
##
|
|
||||||
import abc
|
|
||||||
|
|
||||||
class GfeNotification(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def __init__(self):
|
|
||||||
self.siteID = None
|
|
||||||
self.sourceID = None
|
|
||||||
|
|
||||||
def getSiteID(self):
|
|
||||||
return self.siteID
|
|
||||||
|
|
||||||
def setSiteID(self, siteID):
|
|
||||||
self.siteID = siteID
|
|
||||||
|
|
||||||
|
|
||||||
def getSourceID(self):
|
|
||||||
return self.sourceID
|
|
||||||
|
|
||||||
def setSourceID(self, sourceID):
|
|
||||||
self.sourceID = sourceID
|
|
|
@ -1,61 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/22/2015 4573 randerso Initial creation (hand generated)
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import GfeNotification
|
|
||||||
|
|
||||||
class GridHistoryUpdateNotification(GfeNotification.GfeNotification):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(GridHistoryUpdateNotification, self).__init__()
|
|
||||||
self.parmId = None
|
|
||||||
self.workstationID = None
|
|
||||||
self.histories = None
|
|
||||||
|
|
||||||
def getParmId(self):
|
|
||||||
return self.parmId
|
|
||||||
|
|
||||||
def setParmId(self, parmId):
|
|
||||||
self.parmId = parmId
|
|
||||||
|
|
||||||
def getWorkstationID(self):
|
|
||||||
return self.workstationID
|
|
||||||
|
|
||||||
def setWorkstationID(self, workstationID):
|
|
||||||
self.workstationID = workstationID
|
|
||||||
|
|
||||||
def getHistories(self):
|
|
||||||
return self.histories
|
|
||||||
|
|
||||||
def setHistories(self, histories):
|
|
||||||
self.histories = histories
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
msg = "ParmID: " + str(self.parmId)
|
|
||||||
msg += '\n' + "Histories: " + str(self.histories)
|
|
||||||
return msg
|
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# ??/??/???? ???? njensen Modified to add __repr__
|
|
||||||
# 06/22/2015 4573 randerso Change to extend GfeNotification
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import GfeNotification
|
|
||||||
|
|
||||||
class GridUpdateNotification(GfeNotification.GfeNotification):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(GridUpdateNotification, self).__init__()
|
|
||||||
self.parmId = None
|
|
||||||
self.replacementTimeRange = None
|
|
||||||
self.workstationID = None
|
|
||||||
self.histories = None
|
|
||||||
|
|
||||||
def getParmId(self):
|
|
||||||
return self.parmId
|
|
||||||
|
|
||||||
def setParmId(self, parmId):
|
|
||||||
self.parmId = parmId
|
|
||||||
|
|
||||||
def getReplacementTimeRange(self):
|
|
||||||
return self.replacementTimeRange
|
|
||||||
|
|
||||||
def setReplacementTimeRange(self, replacementTimeRange):
|
|
||||||
self.replacementTimeRange = replacementTimeRange
|
|
||||||
|
|
||||||
def getWorkstationID(self):
|
|
||||||
return self.workstationID
|
|
||||||
|
|
||||||
def setWorkstationID(self, workstationID):
|
|
||||||
self.workstationID = workstationID
|
|
||||||
|
|
||||||
def getHistories(self):
|
|
||||||
return self.histories
|
|
||||||
|
|
||||||
def setHistories(self, histories):
|
|
||||||
self.histories = histories
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
msg = "ParmID: " + str(self.parmId)
|
|
||||||
msg += '\n' + "Replacement TimeRange: " + str(self.replacementTimeRange)
|
|
||||||
msg += '\n' + "Histories: " + str(self.histories)
|
|
||||||
return msg
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# ??/??/???? ???? njensen Modified to add __repr__
|
|
||||||
# 06/22/2015 4573 randerso Change to extend GfeNotification
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import GfeNotification
|
|
||||||
|
|
||||||
class LockNotification(GfeNotification.GfeNotification):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(LockNotification, self).__init__()
|
|
||||||
self.lockTable = None
|
|
||||||
|
|
||||||
def getLockTable(self):
|
|
||||||
return self.lockTable
|
|
||||||
|
|
||||||
def setLockTable(self, lockTable):
|
|
||||||
self.lockTable = lockTable
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return str(self.lockTable)
|
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/22/2015 4573 randerso Initial creation (hand generated)
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import GfeNotification
|
|
||||||
|
|
||||||
class ServiceBackupJobStatusNotification(GfeNotification.GfeNotification):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(ServiceBackupJobStatusNotification, self).__init__()
|
|
||||||
self.name = None
|
|
||||||
self.state = "UNKNOWN"
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
msg = "name: " + str(self.name)
|
|
||||||
msg += '\n' + "state: " + str(self.state)
|
|
||||||
return msg
|
|
||||||
|
|
||||||
def getName(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
def setName(self, name):
|
|
||||||
self.name = name
|
|
||||||
|
|
||||||
def getState(self):
|
|
||||||
return self.state
|
|
||||||
|
|
||||||
def setState(self, state):
|
|
||||||
self.state = state
|
|
|
@ -1,62 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/22/2015 4573 randerso Change to extend GfeNotification
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
import GfeNotification
|
|
||||||
|
|
||||||
class UserMessageNotification(GfeNotification.GfeNotification):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(UserMessageNotification, self).__init__()
|
|
||||||
self.category = None
|
|
||||||
self.priority = None
|
|
||||||
self.message = None
|
|
||||||
|
|
||||||
def getCategory(self):
|
|
||||||
return self.category
|
|
||||||
|
|
||||||
def setCategory(self, category):
|
|
||||||
self.category = category
|
|
||||||
|
|
||||||
def getPriority(self):
|
|
||||||
return self.priority
|
|
||||||
|
|
||||||
def setPriority(self, priority):
|
|
||||||
self.priority = priority
|
|
||||||
|
|
||||||
def getMessage(self):
|
|
||||||
return self.message
|
|
||||||
|
|
||||||
def setMessage(self, message):
|
|
||||||
self.message = message
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
msg = 'Message: ' + str(self.message) + '\n'
|
|
||||||
msg += 'Priority: ' + str(self.priority) + '\n'
|
|
||||||
msg += 'Category: ' + str(self.category) + '\n'
|
|
||||||
return msg
|
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'CombinationsFileChangedNotification',
|
|
||||||
'DBInvChangeNotification',
|
|
||||||
'GfeNotification',
|
|
||||||
'GridHistoryUpdateNotification',
|
|
||||||
'GridUpdateNotification',
|
|
||||||
'LockNotification',
|
|
||||||
'ServiceBackupJobStatusNotification',
|
|
||||||
'UserMessageNotification'
|
|
||||||
]
|
|
||||||
|
|
||||||
from CombinationsFileChangedNotification import CombinationsFileChangedNotification
|
|
||||||
from DBInvChangeNotification import DBInvChangeNotification
|
|
||||||
from GfeNotification import GfeNotification
|
|
||||||
from GridHistoryUpdateNotification import GridHistoryUpdateNotification
|
|
||||||
from GridUpdateNotification import GridUpdateNotification
|
|
||||||
from LockNotification import LockNotification
|
|
||||||
from ServiceBackupJobStatusNotification import ServiceBackupJobStatusNotification
|
|
||||||
from UserMessageNotification import UserMessageNotification
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'CommitGridRequest',
|
|
||||||
'GetGridRequest',
|
|
||||||
'LockRequest',
|
|
||||||
'LockTableRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from CommitGridRequest import CommitGridRequest
|
|
||||||
from GetGridRequest import GetGridRequest
|
|
||||||
from LockRequest import LockRequest
|
|
||||||
from LockTableRequest import LockTableRequest
|
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
import abc
|
|
||||||
|
|
||||||
|
|
||||||
class AbstractGridSlice(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def __init__(self):
|
|
||||||
self.validTime = None
|
|
||||||
self.gridParmInfo = None
|
|
||||||
self.gridDataHistory = None
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def getNumPyGrid(self):
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def getValidTime(self):
|
|
||||||
return self.validTime
|
|
||||||
|
|
||||||
def setValidTime(self, validTime):
|
|
||||||
self.validTime = validTime
|
|
||||||
|
|
||||||
def getGridParmInfo(self):
|
|
||||||
return self.gridParmInfo
|
|
||||||
|
|
||||||
def setGridParmInfo(self, gridParmInfo):
|
|
||||||
self.gridParmInfo = gridParmInfo
|
|
||||||
|
|
||||||
def getGridDataHistory(self):
|
|
||||||
return self.gridDataHistory
|
|
||||||
|
|
||||||
def setGridDataHistory(self, gridDataHistory):
|
|
||||||
self.gridDataHistory = gridDataHistory
|
|
|
@ -1,36 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'AbstractGridSlice',
|
|
||||||
'DiscreteGridSlice',
|
|
||||||
'ScalarGridSlice',
|
|
||||||
'VectorGridSlice',
|
|
||||||
'WeatherGridSlice'
|
|
||||||
]
|
|
||||||
|
|
||||||
from AbstractGridSlice import AbstractGridSlice
|
|
||||||
from DiscreteGridSlice import DiscreteGridSlice
|
|
||||||
from ScalarGridSlice import ScalarGridSlice
|
|
||||||
from VectorGridSlice import VectorGridSlice
|
|
||||||
from WeatherGridSlice import WeatherGridSlice
|
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 06/22/2015 4573 randerso Initial creation (hand generated)
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'JobProgress',
|
|
||||||
]
|
|
||||||
|
|
||||||
from JobProgress import JobProgress
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'WeatherKey',
|
|
||||||
'WeatherSubKey'
|
|
||||||
]
|
|
||||||
|
|
||||||
from WeatherKey import WeatherKey
|
|
||||||
from WeatherSubKey import WeatherSubKey
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'DeleteAllGridDataRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from DeleteAllGridDataRequest import DeleteAllGridDataRequest
|
|
||||||
|
|
|
@ -1,205 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
# and then modified post-generation to add additional features to better
|
|
||||||
# match Java implementation.
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 05/29/13 2023 dgilling Initial Creation.
|
|
||||||
# 02/12/14 2672 bsteffen Allow String constructor to parse floats.
|
|
||||||
# 06/29/15 4480 dgilling Implement __hash__, __eq__,
|
|
||||||
# __str__ and rich comparison operators.
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
import numpy
|
|
||||||
import re
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.level import MasterLevel
|
|
||||||
|
|
||||||
|
|
||||||
LEVEL_NAMING_REGEX = re.compile("^(\d*(?:\.\d*)?)(?:_(\d*(?:\.\d*)?))?([a-zA-Z]+)$")
|
|
||||||
INVALID_VALUE = numpy.float64(-999999)
|
|
||||||
|
|
||||||
class Level(object):
|
|
||||||
|
|
||||||
def __init__(self, levelString=None):
|
|
||||||
self.id = 0L
|
|
||||||
self.identifier = None
|
|
||||||
self.masterLevel = None
|
|
||||||
self.levelonevalue = INVALID_VALUE
|
|
||||||
self.leveltwovalue = INVALID_VALUE
|
|
||||||
|
|
||||||
if levelString is not None:
|
|
||||||
matcher = LEVEL_NAMING_REGEX.match(str(levelString))
|
|
||||||
if matcher is not None:
|
|
||||||
self.levelonevalue = numpy.float64(matcher.group(1))
|
|
||||||
self.masterLevel = MasterLevel.MasterLevel(matcher.group(3))
|
|
||||||
levelTwo = matcher.group(2)
|
|
||||||
if levelTwo:
|
|
||||||
self.leveltwovalue = numpy.float64(levelTwo)
|
|
||||||
|
|
||||||
def __hash__(self):
|
|
||||||
# XOR-ing the 3 items in a tuple ensures that order of the
|
|
||||||
# values matters
|
|
||||||
hashCode = hash(self.masterLevel) ^ hash(self.levelonevalue) ^ hash(self.leveltwovalue)
|
|
||||||
hashCode ^= hash((self.masterLevel, self.levelonevalue, self.leveltwovalue))
|
|
||||||
return hashCode
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
return (self.masterLevel, self.levelonevalue, self.leveltwovalue) == \
|
|
||||||
(other.masterLevel, other.levelonevalue, other.leveltwovalue)
|
|
||||||
|
|
||||||
def __ne__(self, other):
|
|
||||||
return not self.__eq__(other)
|
|
||||||
|
|
||||||
def __lt__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return NotImplemented
|
|
||||||
elif self.masterLevel.getName() != other.masterLevel.getName():
|
|
||||||
return NotImplemented
|
|
||||||
|
|
||||||
myLevel1 = self.levelonevalue
|
|
||||||
myLevel2 = self.leveltwovalue
|
|
||||||
otherLevel1 = other.levelonevalue
|
|
||||||
otherLevel2 = other.leveltwovalue
|
|
||||||
if myLevel1 == INVALID_VALUE and myLevel2 != INVALID_VALUE:
|
|
||||||
myLevel1 = myLevel2
|
|
||||||
myLevel2 = INVALID_VALUE
|
|
||||||
if otherLevel1 == INVALID_VALUE and otherLevel2 != INVALID_VALUE:
|
|
||||||
otherLevel1 = otherLevel2
|
|
||||||
otherLevel2 = INVALID_VALUE
|
|
||||||
|
|
||||||
# We default to descending order to make sorting levels from the DAF easier
|
|
||||||
compareType = self.masterLevel.getType() if self.masterLevel.getType() else "DEC"
|
|
||||||
if myLevel1 != INVALID_VALUE and otherLevel1 != INVALID_VALUE:
|
|
||||||
level1Cmp = self.__compareLevelValues(compareType, myLevel1, otherLevel1)
|
|
||||||
if level1Cmp == -1:
|
|
||||||
if myLevel2 != INVALID_VALUE and otherLevel2 != INVALID_VALUE:
|
|
||||||
level2Cmp = self.__compareLevelValues(compareType, myLevel2, otherLevel2)
|
|
||||||
return level2Cmp == -1
|
|
||||||
elif myLevel2 != INVALID_VALUE:
|
|
||||||
level2Cmp = self.__compareLevelValues(compareType, myLevel2, otherLevel1)
|
|
||||||
return level2Cmp == -1
|
|
||||||
else:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def __le__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return NotImplemented
|
|
||||||
elif self.masterLevel.getName() != other.masterLevel.getName():
|
|
||||||
return NotImplemented
|
|
||||||
|
|
||||||
return self.__lt__(other) or self.__eq__(other)
|
|
||||||
|
|
||||||
def __gt__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return NotImplemented
|
|
||||||
elif self.masterLevel.getName() != other.masterLevel.getName():
|
|
||||||
return NotImplemented
|
|
||||||
|
|
||||||
myLevel1 = self.levelonevalue
|
|
||||||
myLevel2 = self.leveltwovalue
|
|
||||||
otherLevel1 = other.levelonevalue
|
|
||||||
otherLevel2 = other.leveltwovalue
|
|
||||||
if myLevel1 == INVALID_VALUE and myLevel2 != INVALID_VALUE:
|
|
||||||
myLevel1 = myLevel2
|
|
||||||
myLevel2 = INVALID_VALUE
|
|
||||||
if otherLevel1 == INVALID_VALUE and otherLevel2 != INVALID_VALUE:
|
|
||||||
otherLevel1 = otherLevel2
|
|
||||||
otherLevel2 = INVALID_VALUE
|
|
||||||
|
|
||||||
# We default to descending order to make sorting levels from the DAF easier
|
|
||||||
compareType = self.masterLevel.getType() if self.masterLevel.getType() else "DEC"
|
|
||||||
if myLevel1 != INVALID_VALUE and otherLevel1 != INVALID_VALUE:
|
|
||||||
level1Cmp = self.__compareLevelValues(compareType, myLevel1, otherLevel1)
|
|
||||||
if level1Cmp == 1:
|
|
||||||
if myLevel2 != INVALID_VALUE and otherLevel2 != INVALID_VALUE:
|
|
||||||
level2Cmp = self.__compareLevelValues(compareType, myLevel2, otherLevel2)
|
|
||||||
return level2Cmp == 1
|
|
||||||
elif otherLevel2 != INVALID_VALUE:
|
|
||||||
level2Cmp = self.__compareLevelValues(compareType, myLevel1, otherLevel2)
|
|
||||||
return level2Cmp == 1
|
|
||||||
else:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def __ge__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return NotImplemented
|
|
||||||
elif self.masterLevel.getName() != other.masterLevel.getName():
|
|
||||||
return NotImplemented
|
|
||||||
|
|
||||||
return self.__gt__(other) or self.__eq__(other)
|
|
||||||
|
|
||||||
def __compareLevelValues(self, compareType, val1, val2):
|
|
||||||
returnVal = 0
|
|
||||||
if val1 < val2:
|
|
||||||
returnVal = -1 if compareType == 'INC' else 1
|
|
||||||
elif val2 < val1:
|
|
||||||
returnVal = 1 if compareType == 'INC' else -1
|
|
||||||
return returnVal
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
retVal = ""
|
|
||||||
if INVALID_VALUE != self.levelonevalue:
|
|
||||||
retVal += str(self.levelonevalue)
|
|
||||||
if INVALID_VALUE != self.leveltwovalue:
|
|
||||||
retVal += "_" + str(self.leveltwovalue)
|
|
||||||
retVal += str(self.masterLevel.getName())
|
|
||||||
return retVal
|
|
||||||
|
|
||||||
def getId(self):
|
|
||||||
return self.id
|
|
||||||
|
|
||||||
def setId(self, id):
|
|
||||||
self.id = id
|
|
||||||
|
|
||||||
def getMasterLevel(self):
|
|
||||||
return self.masterLevel
|
|
||||||
|
|
||||||
def setMasterLevel(self, masterLevel):
|
|
||||||
self.masterLevel = masterLevel
|
|
||||||
|
|
||||||
def getLevelonevalue(self):
|
|
||||||
return self.levelonevalue
|
|
||||||
|
|
||||||
def setLevelonevalue(self, levelonevalue):
|
|
||||||
self.levelonevalue = numpy.float64(levelonevalue)
|
|
||||||
|
|
||||||
def getLeveltwovalue(self):
|
|
||||||
return self.leveltwovalue
|
|
||||||
|
|
||||||
def setLeveltwovalue(self, leveltwovalue):
|
|
||||||
self.leveltwovalue = numpy.float64(leveltwovalue)
|
|
||||||
|
|
||||||
def getIdentifier(self):
|
|
||||||
return self.identifier
|
|
||||||
|
|
||||||
def setIdentifier(self, identifier):
|
|
||||||
self.identifier = identifier
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'Level',
|
|
||||||
'MasterLevel'
|
|
||||||
]
|
|
||||||
|
|
||||||
from Level import Level
|
|
||||||
from MasterLevel import MasterLevel
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'DataURINotificationMessage'
|
|
||||||
]
|
|
||||||
|
|
||||||
from DataURINotificationMessage import DataURINotificationMessage
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'GetRadarDataRecordRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from GetRadarDataRecordRequest import GetRadarDataRecordRequest
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'GetRadarDataRecordResponse',
|
|
||||||
'RadarDataRecord'
|
|
||||||
]
|
|
||||||
|
|
||||||
from GetRadarDataRecordResponse import GetRadarDataRecordResponse
|
|
||||||
from RadarDataRecord import RadarDataRecord
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'TextDBRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from TextDBRequest import TextDBRequest
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'SubscriptionRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from SubscriptionRequest import SubscriptionRequest
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Package definition for com.raytheon.uf.common.datastorage
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 08/31/10 njensen Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'records',
|
|
||||||
'Request',
|
|
||||||
'StorageProperties',
|
|
||||||
'StorageStatus',
|
|
||||||
]
|
|
||||||
|
|
||||||
from Request import Request
|
|
||||||
from StorageProperties import StorageProperties
|
|
||||||
from StorageStatus import StorageStatus
|
|
|
@ -1,53 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
#
|
|
||||||
# Package definition for com.raytheon.uf.common.datastorage.records
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 08/31/10 njensen Initial Creation.
|
|
||||||
# Apr 24, 2015 4425 nabowle Add DoubleDataRecord
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ByteDataRecord',
|
|
||||||
'DoubleDataRecord',
|
|
||||||
'FloatDataRecord',
|
|
||||||
'IntegerDataRecord',
|
|
||||||
'LongDataRecord',
|
|
||||||
'ShortDataRecord',
|
|
||||||
'StringDataRecord'
|
|
||||||
]
|
|
||||||
|
|
||||||
from ByteDataRecord import ByteDataRecord
|
|
||||||
from DoubleDataRecord import DoubleDataRecord
|
|
||||||
from FloatDataRecord import FloatDataRecord
|
|
||||||
from IntegerDataRecord import IntegerDataRecord
|
|
||||||
from LongDataRecord import LongDataRecord
|
|
||||||
from ShortDataRecord import ShortDataRecord
|
|
||||||
from StringDataRecord import StringDataRecord
|
|
||||||
|
|
|
@ -1,75 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
knownLevels = {"BASE": {"text" : "BASE",
|
|
||||||
"order" : 0,
|
|
||||||
"systemLevel" : True,
|
|
||||||
},
|
|
||||||
"CONFIGURED": {"text" : "CONFIGURED",
|
|
||||||
"order" : 250,
|
|
||||||
"systemLevel" : True,
|
|
||||||
},
|
|
||||||
"SITE": {"text" : "SITE",
|
|
||||||
"order" : 500,
|
|
||||||
"systemLevel" : False,
|
|
||||||
},
|
|
||||||
"USER": {"text" : "USER",
|
|
||||||
"order" : 1000,
|
|
||||||
"systemLevel" : False,
|
|
||||||
},
|
|
||||||
"UNKNOWN": {"text" : "UNKNOWN",
|
|
||||||
"order" : -1,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class LocalizationLevel(object):
|
|
||||||
|
|
||||||
def __init__(self, level, order=750, systemLevel=False):
|
|
||||||
if knownLevels.has_key(level.upper()):
|
|
||||||
self.text = level.upper()
|
|
||||||
self.order = knownLevels[self.text]["order"]
|
|
||||||
self.systemLevel = knownLevels[self.text]["systemLevel"]
|
|
||||||
else:
|
|
||||||
self.text = level.upper()
|
|
||||||
self.order = int(order)
|
|
||||||
self.systemLevel = systemLevel
|
|
||||||
|
|
||||||
def getText(self):
|
|
||||||
return self.text
|
|
||||||
|
|
||||||
def setText(self, text):
|
|
||||||
self.text = text
|
|
||||||
|
|
||||||
def getOrder(self):
|
|
||||||
return self.order
|
|
||||||
|
|
||||||
def setOrder(self, order):
|
|
||||||
self.order = int(order)
|
|
||||||
|
|
||||||
def isSystemLevel(self):
|
|
||||||
return self.systemLevel
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.__repr__()
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return str(self.text)
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'LocalizationContext',
|
|
||||||
'LocalizationLevel',
|
|
||||||
'LocalizationType',
|
|
||||||
'msgs',
|
|
||||||
'stream'
|
|
||||||
]
|
|
||||||
|
|
||||||
from LocalizationContext import LocalizationContext
|
|
||||||
from LocalizationLevel import LocalizationLevel
|
|
||||||
from LocalizationType import LocalizationType
|
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'DeleteUtilityCommand',
|
|
||||||
'DeleteUtilityResponse',
|
|
||||||
'ListResponseEntry',
|
|
||||||
'ListUtilityCommand',
|
|
||||||
'ListUtilityResponse',
|
|
||||||
'PrivilegedUtilityRequestMessage',
|
|
||||||
'UtilityRequestMessage',
|
|
||||||
'UtilityResponseMessage'
|
|
||||||
]
|
|
||||||
|
|
||||||
from DeleteUtilityCommand import DeleteUtilityCommand
|
|
||||||
from DeleteUtilityResponse import DeleteUtilityResponse
|
|
||||||
from ListResponseEntry import ListResponseEntry
|
|
||||||
from ListUtilityCommand import ListUtilityCommand
|
|
||||||
from ListUtilityResponse import ListUtilityResponse
|
|
||||||
from PrivilegedUtilityRequestMessage import PrivilegedUtilityRequestMessage
|
|
||||||
from UtilityRequestMessage import UtilityRequestMessage
|
|
||||||
from UtilityResponseMessage import UtilityResponseMessage
|
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
|
|
||||||
import abc
|
|
||||||
import os
|
|
||||||
from dynamicserialize.dstypes.com.raytheon.uf.common.plugin.nwsauth.user import User
|
|
||||||
|
|
||||||
class AbstractLocalizationStreamRequest(object):
|
|
||||||
__metaclass__ = abc.ABCMeta
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
|
||||||
def __init__(self):
|
|
||||||
self.context = None
|
|
||||||
self.fileName = None
|
|
||||||
self.myContextName = None
|
|
||||||
self.user = User()
|
|
||||||
|
|
||||||
def getContext(self):
|
|
||||||
return self.context
|
|
||||||
|
|
||||||
def setContext(self, context):
|
|
||||||
self.context = context
|
|
||||||
|
|
||||||
def getFileName(self):
|
|
||||||
return self.fileName
|
|
||||||
|
|
||||||
def setFileName(self, fileName):
|
|
||||||
if fileName[0] == os.sep:
|
|
||||||
fileName = fileName[1:]
|
|
||||||
self.fileName = fileName
|
|
||||||
|
|
||||||
def getMyContextName(self):
|
|
||||||
return self.myContextName
|
|
||||||
|
|
||||||
def setMyContextName(self, contextName):
|
|
||||||
self.myContextName = str(contextName)
|
|
||||||
|
|
||||||
def getUser(self):
|
|
||||||
return self.user
|
|
||||||
|
|
||||||
def setUser(self, user):
|
|
||||||
self.user = user
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'AbstractLocalizationStreamRequest',
|
|
||||||
'LocalizationStreamGetRequest',
|
|
||||||
'LocalizationStreamPutRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from AbstractLocalizationStreamRequest import AbstractLocalizationStreamRequest
|
|
||||||
from LocalizationStreamGetRequest import LocalizationStreamGetRequest
|
|
||||||
from LocalizationStreamPutRequest import LocalizationStreamPutRequest
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ChangeContextRequest',
|
|
||||||
'PassThroughRequest',
|
|
||||||
'diagnostic'
|
|
||||||
]
|
|
||||||
|
|
||||||
from ChangeContextRequest import ChangeContextRequest
|
|
||||||
from PassThroughRequest import PassThroughRequest
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'GetClusterMembersRequest',
|
|
||||||
'GetContextsRequest',
|
|
||||||
'StatusRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from GetClusterMembersRequest import GetClusterMembersRequest
|
|
||||||
from GetContextsRequest import GetContextsRequest
|
|
||||||
from StatusRequest import StatusRequest
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ClusterMembersResponse',
|
|
||||||
'ContextsResponse',
|
|
||||||
'StatusResponse'
|
|
||||||
]
|
|
||||||
|
|
||||||
from ClusterMembersResponse import ClusterMembersResponse
|
|
||||||
from ContextsResponse import ContextsResponse
|
|
||||||
from StatusResponse import StatusResponse
|
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
|
|
||||||
from Property import Property
|
|
||||||
|
|
||||||
class Header(object):
|
|
||||||
|
|
||||||
def __init__(self, properties=None, multimap=None):
|
|
||||||
if properties is None:
|
|
||||||
self.properties = []
|
|
||||||
else:
|
|
||||||
self.properties = properties
|
|
||||||
|
|
||||||
if multimap is not None:
|
|
||||||
for k, l in multimap.iteritems():
|
|
||||||
for v in l:
|
|
||||||
self.properties.append(Property(k, v))
|
|
||||||
|
|
||||||
def getProperties(self):
|
|
||||||
return self.properties
|
|
||||||
|
|
||||||
def setProperties(self, properties):
|
|
||||||
self.properties = properties
|
|
||||||
|
|
|
@ -1,96 +0,0 @@
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
# Modified by njensen to add __repr__
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 04/25/12 545 randerso Repurposed the lockKey field as threadId
|
|
||||||
# 06/12/13 2099 dgilling Implemented toPrettyString().
|
|
||||||
#
|
|
||||||
|
|
||||||
import struct
|
|
||||||
import socket
|
|
||||||
import os
|
|
||||||
import pwd
|
|
||||||
import thread
|
|
||||||
|
|
||||||
class WsId(object):
|
|
||||||
|
|
||||||
def __init__(self, networkId=None, userName=None, progName=None):
|
|
||||||
self.networkId = networkId
|
|
||||||
if networkId is None:
|
|
||||||
self.networkId = str(struct.unpack('<L',socket.inet_aton(socket.gethostbyname(socket.gethostname())))[0])
|
|
||||||
|
|
||||||
self.userName = userName
|
|
||||||
if userName is None:
|
|
||||||
self.userName = pwd.getpwuid(os.getuid()).pw_name
|
|
||||||
|
|
||||||
self.progName = progName
|
|
||||||
if progName is None:
|
|
||||||
self.progName = "unknown"
|
|
||||||
|
|
||||||
self.pid = os.getpid()
|
|
||||||
|
|
||||||
self.threadId = long(thread.get_ident())
|
|
||||||
|
|
||||||
def getNetworkId(self):
|
|
||||||
return self.networkId
|
|
||||||
|
|
||||||
def setNetworkId(self, networkId):
|
|
||||||
self.networkId = networkId
|
|
||||||
|
|
||||||
def getUserName(self):
|
|
||||||
return self.userName
|
|
||||||
|
|
||||||
def setUserName(self, userName):
|
|
||||||
self.userName = userName
|
|
||||||
|
|
||||||
def getProgName(self):
|
|
||||||
return self.progName
|
|
||||||
|
|
||||||
def setProgName(self, progName):
|
|
||||||
self.progName = progName
|
|
||||||
|
|
||||||
def getPid(self):
|
|
||||||
return self.pid
|
|
||||||
|
|
||||||
def setPid(self, pid):
|
|
||||||
self.pid = pid
|
|
||||||
|
|
||||||
def getThreadId(self):
|
|
||||||
return self.threadId
|
|
||||||
|
|
||||||
def setThreadId(self, threadId):
|
|
||||||
self.threadId = threadId
|
|
||||||
|
|
||||||
def toString(self):
|
|
||||||
return self.networkId + ":" + self.userName + ":" + self.progName + ":" + str(self.pid) + ":" + str(self.threadId)
|
|
||||||
|
|
||||||
def toPrettyString(self):
|
|
||||||
hostname = socket.gethostbyaddr(socket.inet_ntoa(struct.pack('<L', int(self.networkId))))[0]
|
|
||||||
return self.userName + "@" + hostname + ":" + self.progName + ":" + str(self.pid) + ":" + str(self.threadId)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.toString()
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return self.toString()
|
|
|
@ -1,47 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'Body',
|
|
||||||
'Header',
|
|
||||||
'Message',
|
|
||||||
'Property',
|
|
||||||
'WsId'
|
|
||||||
]
|
|
||||||
|
|
||||||
#
|
|
||||||
# Package definition for com.raytheon.uf.common.message
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 09/16/10 dgilling Initial Creation.
|
|
||||||
# 08/19/14 2926 bclement added Message files
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
from Body import Body
|
|
||||||
from Header import Header
|
|
||||||
from Message import Message
|
|
||||||
from Property import Property
|
|
||||||
from WsId import WsId
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'User',
|
|
||||||
'UserId'
|
|
||||||
]
|
|
||||||
|
|
||||||
from User import User
|
|
||||||
from UserId import UserId
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'NewAdaptivePlotRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from NewAdaptivePlotRequest import NewAdaptivePlotRequest
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'PointTest',
|
|
||||||
'request',
|
|
||||||
'response'
|
|
||||||
]
|
|
||||||
|
|
||||||
from PointTest import PointTest
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'CopyRequest',
|
|
||||||
'CreateDatasetRequest',
|
|
||||||
'DatasetDataRequest',
|
|
||||||
'DatasetNamesRequest',
|
|
||||||
'DeleteFilesRequest',
|
|
||||||
'DeleteRequest',
|
|
||||||
'GroupsRequest',
|
|
||||||
'RepackRequest',
|
|
||||||
'RetrieveRequest',
|
|
||||||
'StoreRequest'
|
|
||||||
]
|
|
||||||
|
|
||||||
from CopyRequest import CopyRequest
|
|
||||||
from CreateDatasetRequest import CreateDatasetRequest
|
|
||||||
from DatasetDataRequest import DatasetDataRequest
|
|
||||||
from DatasetNamesRequest import DatasetNamesRequest
|
|
||||||
from DeleteFilesRequest import DeleteFilesRequest
|
|
||||||
from DeleteRequest import DeleteRequest
|
|
||||||
from GroupsRequest import GroupsRequest
|
|
||||||
from RepackRequest import RepackRequest
|
|
||||||
from RetrieveRequest import RetrieveRequest
|
|
||||||
from StoreRequest import StoreRequest
|
|
|
@ -1,35 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'DeleteResponse',
|
|
||||||
'ErrorResponse',
|
|
||||||
'FileActionResponse',
|
|
||||||
'RetrieveResponse',
|
|
||||||
'StoreResponse'
|
|
||||||
]
|
|
||||||
|
|
||||||
from DeleteResponse import DeleteResponse
|
|
||||||
from ErrorResponse import ErrorResponse
|
|
||||||
from FileActionResponse import FileActionResponse
|
|
||||||
from RetrieveResponse import RetrieveResponse
|
|
||||||
from StoreResponse import StoreResponse
|
|
|
@ -1,41 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Package definition for com.raytheon.uf.common.serialization
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 09/21/10 njensen Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'comm',
|
|
||||||
'SerializableExceptionWrapper',
|
|
||||||
]
|
|
||||||
|
|
||||||
from SerializableExceptionWrapper import SerializableExceptionWrapper
|
|
|
@ -1,40 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Package definition for com.raytheon.uf.common.serialization.comm.response
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 09/21/10 njensen Initial Creation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ServerErrorResponse',
|
|
||||||
]
|
|
||||||
|
|
||||||
from ServerErrorResponse import ServerErrorResponse
|
|
|
@ -1,58 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# 09/10/14 #3623 randerso Manually created, do not regenerate
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
from SiteActivationNotification import SiteActivationNotification
|
|
||||||
class ClusterActivationNotification(SiteActivationNotification):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.clusterActive = False
|
|
||||||
SiteActivationNotification.__init__(self)
|
|
||||||
|
|
||||||
def isClusterActive(self):
|
|
||||||
return self.clusterActive
|
|
||||||
|
|
||||||
def setClusterActive(self, clusterActive):
|
|
||||||
self.clusterActive = clusterActive
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
s = self.modifiedSite
|
|
||||||
|
|
||||||
if self.type == 'ACTIVATE':
|
|
||||||
if self.status == 'FAILURE':
|
|
||||||
s += " has failed to activate on some or all cluster members. See logs for details"
|
|
||||||
else:
|
|
||||||
s += " has been successfully activated on all cluster members"
|
|
||||||
|
|
||||||
else:
|
|
||||||
if self.status == 'FAILURE':
|
|
||||||
s += " has failed to deactivate on some or all cluster members. See logs for details"
|
|
||||||
else:
|
|
||||||
s += " has been successfully deactivated on all cluster members"
|
|
||||||
|
|
||||||
return s
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ClusterActivationNotification',
|
|
||||||
'SiteActivationNotification',
|
|
||||||
]
|
|
||||||
|
|
||||||
from ClusterActivationNotification import ClusterActivationNotification
|
|
||||||
from SiteActivationNotification import SiteActivationNotification
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'ActivateSiteRequest',
|
|
||||||
'DeactivateSiteRequest',
|
|
||||||
'GetActiveSitesRequest',
|
|
||||||
]
|
|
||||||
|
|
||||||
from ActivateSiteRequest import ActivateSiteRequest
|
|
||||||
from DeactivateSiteRequest import DeactivateSiteRequest
|
|
||||||
from GetActiveSitesRequest import GetActiveSitesRequest
|
|
||||||
|
|
|
@ -1,226 +0,0 @@
|
||||||
# #
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
# #
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class
|
|
||||||
# and then modified post-generation to add additional features to better
|
|
||||||
# match Java implementation.
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# ??/??/?? xxxxxxxx Initial Creation.
|
|
||||||
# 05/28/13 2023 dgilling Implement __str__().
|
|
||||||
# 01/22/14 2667 bclement preserved milliseconds in string representation
|
|
||||||
# 03/03/14 2673 bsteffen allow construction using a Date for refTime
|
|
||||||
# 06/24/14 3096 mnash implement __cmp__
|
|
||||||
# 06/24/15 4480 dgilling implement __hash__ and __eq__,
|
|
||||||
# replace __cmp__ with rich comparison
|
|
||||||
# operators.
|
|
||||||
#
|
|
||||||
|
|
||||||
import calendar
|
|
||||||
import datetime
|
|
||||||
import numpy
|
|
||||||
import time
|
|
||||||
import StringIO
|
|
||||||
|
|
||||||
from dynamicserialize.dstypes.java.util import Date
|
|
||||||
from dynamicserialize.dstypes.java.util import EnumSet
|
|
||||||
|
|
||||||
from TimeRange import TimeRange
|
|
||||||
|
|
||||||
class DataTime(object):
|
|
||||||
|
|
||||||
def __init__(self, refTime=None, fcstTime=None, validPeriod=None):
|
|
||||||
self.fcstTime = int(fcstTime) if fcstTime is not None else 0
|
|
||||||
self.refTime = refTime if refTime is not None else None
|
|
||||||
if validPeriod is not None and type(validPeriod) is not TimeRange:
|
|
||||||
ValueError("Invalid validPeriod object specified for DataTime.")
|
|
||||||
self.validPeriod = validPeriod if validPeriod is not None else None
|
|
||||||
self.utilityFlags = EnumSet('com.raytheon.uf.common.time.DataTime$FLAG')
|
|
||||||
self.levelValue = numpy.float64(-1.0)
|
|
||||||
|
|
||||||
if self.refTime is not None:
|
|
||||||
if isinstance(self.refTime, datetime.datetime):
|
|
||||||
self.refTime = long(calendar.timegm(self.refTime.utctimetuple()) * 1000)
|
|
||||||
elif isinstance(self.refTime, time.struct_time):
|
|
||||||
self.refTime = long(calendar.timegm(self.refTime) * 1000)
|
|
||||||
elif hasattr(self.refTime, 'getTime'):
|
|
||||||
# getTime should be returning ms, there is no way to check this
|
|
||||||
# This is expected for java Date
|
|
||||||
self.refTime = long(self.refTime.getTime())
|
|
||||||
else:
|
|
||||||
self.refTime = long(refTime)
|
|
||||||
self.refTime = Date(self.refTime)
|
|
||||||
|
|
||||||
if self.validPeriod is None:
|
|
||||||
validTimeMillis = self.refTime.getTime() + long(self.fcstTime * 1000)
|
|
||||||
self.validPeriod = TimeRange()
|
|
||||||
self.validPeriod.setStart(validTimeMillis / 1000)
|
|
||||||
self.validPeriod.setEnd(validTimeMillis / 1000)
|
|
||||||
|
|
||||||
# figure out utility flags
|
|
||||||
if fcstTime:
|
|
||||||
self.utilityFlags.add("FCST_USED")
|
|
||||||
if self.validPeriod and self.validPeriod.isValid():
|
|
||||||
self.utilityFlags.add("PERIOD_USED")
|
|
||||||
|
|
||||||
def getRefTime(self):
|
|
||||||
return self.refTime
|
|
||||||
|
|
||||||
def setRefTime(self, refTime):
|
|
||||||
self.refTime = refTime
|
|
||||||
|
|
||||||
def getFcstTime(self):
|
|
||||||
return self.fcstTime
|
|
||||||
|
|
||||||
def setFcstTime(self, fcstTime):
|
|
||||||
self.fcstTime = fcstTime
|
|
||||||
|
|
||||||
def getValidPeriod(self):
|
|
||||||
return self.validPeriod
|
|
||||||
|
|
||||||
def setValidPeriod(self, validPeriod):
|
|
||||||
self.validPeriod = validPeriod
|
|
||||||
|
|
||||||
def getUtilityFlags(self):
|
|
||||||
return self.utilityFlags
|
|
||||||
|
|
||||||
def setUtilityFlags(self, utilityFlags):
|
|
||||||
self.utilityFlags = utilityFlags
|
|
||||||
|
|
||||||
def getLevelValue(self):
|
|
||||||
return self.levelValue
|
|
||||||
|
|
||||||
def setLevelValue(self, levelValue):
|
|
||||||
self.levelValue = numpy.float64(levelValue)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
buffer = StringIO.StringIO()
|
|
||||||
|
|
||||||
if self.refTime is not None:
|
|
||||||
refTimeInSecs = self.refTime.getTime() / 1000
|
|
||||||
micros = (self.refTime.getTime() % 1000) * 1000
|
|
||||||
dtObj = datetime.datetime.utcfromtimestamp(refTimeInSecs)
|
|
||||||
dtObj = dtObj.replace(microsecond=micros)
|
|
||||||
buffer.write(dtObj.isoformat(' '))
|
|
||||||
|
|
||||||
if "FCST_USED" in self.utilityFlags:
|
|
||||||
hrs = int(self.fcstTime / 3600)
|
|
||||||
mins = int((self.fcstTime - (hrs * 3600)) / 60)
|
|
||||||
buffer.write(" (" + str(hrs))
|
|
||||||
if mins != 0:
|
|
||||||
buffer.write(":" + str(mins))
|
|
||||||
buffer.write(")")
|
|
||||||
|
|
||||||
if "PERIOD_USED" in self.utilityFlags:
|
|
||||||
buffer.write("[")
|
|
||||||
buffer.write(self.validPeriod.start.isoformat(' '))
|
|
||||||
buffer.write("--")
|
|
||||||
buffer.write(self.validPeriod.end.isoformat(' '))
|
|
||||||
buffer.write("]")
|
|
||||||
|
|
||||||
strVal = buffer.getvalue()
|
|
||||||
buffer.close()
|
|
||||||
return strVal
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return "<DataTime instance: " + str(self) + " >"
|
|
||||||
|
|
||||||
def __hash__(self):
|
|
||||||
hashCode = hash(self.refTime) ^ hash(self.fcstTime)
|
|
||||||
if self.validPeriod is not None and self.validPeriod.isValid():
|
|
||||||
hashCode ^= hash(self.validPeriod.getStart())
|
|
||||||
hashCode ^= hash(self.validPeriod.getEnd())
|
|
||||||
hashCode ^= hash(self.levelValue)
|
|
||||||
return hashCode
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return False
|
|
||||||
|
|
||||||
if other.getRefTime() is None:
|
|
||||||
return self.fcstTime == other.fcstTime
|
|
||||||
|
|
||||||
dataTime1 = (self.refTime, self.fcstTime, self.validPeriod, self.levelValue)
|
|
||||||
dataTime2 = (other.refTime, other.fcstTime, other.validPeriod, other.levelValue)
|
|
||||||
return dataTime1 == dataTime2
|
|
||||||
|
|
||||||
def __ne__(self, other):
|
|
||||||
return not self.__eq__(other)
|
|
||||||
|
|
||||||
def __lt__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return NotImplemented
|
|
||||||
|
|
||||||
myValidTime = self.getRefTime().getTime() + self.getFcstTime()
|
|
||||||
otherValidTime = other.getRefTime().getTime() + other.getFcstTime()
|
|
||||||
if myValidTime < otherValidTime:
|
|
||||||
return True
|
|
||||||
|
|
||||||
if self.fcstTime < other.fcstTime:
|
|
||||||
return True
|
|
||||||
|
|
||||||
if self.levelValue < other.levelValue:
|
|
||||||
return True
|
|
||||||
|
|
||||||
myValidPeriod = self.validPeriod
|
|
||||||
otherValidPeriod = other.validPeriod
|
|
||||||
if myValidPeriod != otherValidPeriod:
|
|
||||||
if myValidPeriod.duration() < otherValidPeriod.duration():
|
|
||||||
return True
|
|
||||||
return myValidPeriod.getStartInMillis() < otherValidPeriod.getStartInMillis()
|
|
||||||
return False
|
|
||||||
|
|
||||||
def __le__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return NotImplemented
|
|
||||||
|
|
||||||
return self.__lt__(other) or self.__eq__(other)
|
|
||||||
|
|
||||||
def __gt__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return NotImplemented
|
|
||||||
|
|
||||||
myValidTime = self.getRefTime().getTime() + self.getFcstTime()
|
|
||||||
otherValidTime = other.getRefTime().getTime() + other.getFcstTime()
|
|
||||||
if myValidTime > otherValidTime:
|
|
||||||
return True
|
|
||||||
|
|
||||||
if self.fcstTime > other.fcstTime:
|
|
||||||
return True
|
|
||||||
|
|
||||||
if self.levelValue > other.levelValue:
|
|
||||||
return True
|
|
||||||
|
|
||||||
myValidPeriod = self.validPeriod
|
|
||||||
otherValidPeriod = other.validPeriod
|
|
||||||
if myValidPeriod != otherValidPeriod:
|
|
||||||
if myValidPeriod.duration() > otherValidPeriod.duration():
|
|
||||||
return True
|
|
||||||
return myValidPeriod.getStartInMillis() > otherValidPeriod.getStartInMillis()
|
|
||||||
return False
|
|
||||||
|
|
||||||
def __ge__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return NotImplemented
|
|
||||||
|
|
||||||
return self.__gt__(other) or self.__eq__(other)
|
|
|
@ -1,161 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated against equivalent DynamicSerialize Java class. Then modified to add functionality
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# SOFTWARE HISTORY
|
|
||||||
#
|
|
||||||
# Date Ticket# Engineer Description
|
|
||||||
# ------------ ---------- ----------- --------------------------
|
|
||||||
# ??/??/?? xxxxxxxx Initial Creation.
|
|
||||||
# 01/22/14 2667 bclement fixed millisecond support
|
|
||||||
# 02/28/14 2667 bclement constructor can take extra micros for start and end
|
|
||||||
# 06/24/15 4480 dgilling fix __eq__.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
import calendar
|
|
||||||
import datetime
|
|
||||||
import time
|
|
||||||
|
|
||||||
MAX_TIME = 2147483647
|
|
||||||
MICROS_IN_SECOND = 1000000
|
|
||||||
|
|
||||||
class TimeRange(object):
|
|
||||||
def __init__(self, start=None, end=None, startExtraMicros=None, endExtraMicros=None):
|
|
||||||
self.start = self.__convertToDateTimeWithExtra(start, startExtraMicros)
|
|
||||||
self.end = self.__convertToDateTimeWithExtra(end, endExtraMicros)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.__repr__()
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return "(" + self.start.strftime("%b %d %y %H:%M:%S %Z") + ", " + self.end.strftime("%b %d %y %H:%M:%S %Z") + ")"
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
|
||||||
if type(self) != type(other):
|
|
||||||
return False
|
|
||||||
|
|
||||||
if self.isValid() and other.isValid():
|
|
||||||
return self.getStart() == other.getStart() and self.getEnd() == other.getEnd()
|
|
||||||
elif not self.isValid() and not other.isValid():
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def __ne__(self, other):
|
|
||||||
return (not self.__eq__(other))
|
|
||||||
|
|
||||||
def __convertToDateTimeWithExtra(self, timeArg, extraMicros):
|
|
||||||
rval = self.__convertToDateTime(timeArg)
|
|
||||||
if rval is not None and extraMicros is not None:
|
|
||||||
rval = rval + datetime.timedelta(microseconds=extraMicros)
|
|
||||||
return rval
|
|
||||||
|
|
||||||
def __convertToDateTime(self, timeArg):
|
|
||||||
if timeArg is None:
|
|
||||||
return None
|
|
||||||
if isinstance(timeArg, datetime.datetime):
|
|
||||||
return timeArg
|
|
||||||
elif isinstance(timeArg, time.struct_time):
|
|
||||||
return datetime.datetime(*timeArg[:6])
|
|
||||||
elif isinstance(timeArg, float):
|
|
||||||
# seconds as float, should be avoided due to floating point errors
|
|
||||||
totalSecs = long(timeArg)
|
|
||||||
micros = int((timeArg - totalSecs) * MICROS_IN_SECOND)
|
|
||||||
return self.__convertSecsAndMicros(totalSecs, micros)
|
|
||||||
elif isinstance(timeArg, (int, long)):
|
|
||||||
# seconds as integer
|
|
||||||
totalSecs = timeArg
|
|
||||||
return self.__convertSecsAndMicros(totalSecs, 0)
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def __convertSecsAndMicros(self, seconds, micros):
|
|
||||||
if seconds < MAX_TIME:
|
|
||||||
rval = datetime.datetime.utcfromtimestamp(seconds)
|
|
||||||
else:
|
|
||||||
extraTime = datetime.timedelta(seconds=(seconds - MAX_TIME))
|
|
||||||
rval = datetime.datetime.utcfromtimestamp(MAX_TIME) + extraTime
|
|
||||||
return rval.replace(microsecond=micros)
|
|
||||||
|
|
||||||
def getStart(self):
|
|
||||||
return self.start.utctimetuple()
|
|
||||||
|
|
||||||
def getStartInMillis(self):
|
|
||||||
return self._getInMillis(self.start)
|
|
||||||
|
|
||||||
def setStart(self, start, extraMicros=None):
|
|
||||||
self.start = self.__convertToDateTimeWithExtra(start, extraMicros)
|
|
||||||
|
|
||||||
def getEnd(self):
|
|
||||||
return self.end.utctimetuple()
|
|
||||||
|
|
||||||
def getEndInMillis(self):
|
|
||||||
return self._getInMillis(self.end)
|
|
||||||
|
|
||||||
def _getInMillis(self, time):
|
|
||||||
rval = long(calendar.timegm(time.utctimetuple()) * 1000)
|
|
||||||
rval += time.microsecond // 1000
|
|
||||||
return rval
|
|
||||||
|
|
||||||
def setEnd(self, end, extraMicros=None):
|
|
||||||
self.end = self.__convertToDateTimeWithExtra(end, extraMicros)
|
|
||||||
|
|
||||||
def duration(self):
|
|
||||||
delta = self.end - self.start
|
|
||||||
return long(delta.total_seconds())
|
|
||||||
|
|
||||||
def contains(self, timeArg):
|
|
||||||
if isinstance(timeArg, TimeRange):
|
|
||||||
if self.duration() == 0:
|
|
||||||
return self.__eq__(timeArg)
|
|
||||||
elif timeArg.duration() == 0:
|
|
||||||
return self.contains(timeArg.start)
|
|
||||||
return (timeArg.start >= self.start and timeArg.end <= self.end)
|
|
||||||
else:
|
|
||||||
convTime = self.__convertToDateTime(timeArg)
|
|
||||||
if type(convTime) is not datetime.datetime:
|
|
||||||
raise TypeError("Invalid type for argument time specified to TimeRange.contains().")
|
|
||||||
if self.duration() != 0:
|
|
||||||
return (convTime >= self.start and convTime < self.end)
|
|
||||||
return convTime == self.start
|
|
||||||
|
|
||||||
def isValid(self):
|
|
||||||
return bool(self.start != self.end)
|
|
||||||
|
|
||||||
def overlaps(self, timeRange):
|
|
||||||
return (timeRange.contains(self.start) or self.contains(timeRange.start))
|
|
||||||
|
|
||||||
def combineWith(self, timeRange):
|
|
||||||
if self.isValid() and timeRange.isValid():
|
|
||||||
newStart = min(self.start, timeRange.start)
|
|
||||||
newEnd = max(self.end, timeRange.end)
|
|
||||||
return TimeRange(newStart, newEnd)
|
|
||||||
elif self.isValid():
|
|
||||||
return self
|
|
||||||
|
|
||||||
return timeRange
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def allTimes():
|
|
||||||
return TimeRange(0, MAX_TIME)
|
|
|
@ -1,30 +0,0 @@
|
||||||
##
|
|
||||||
# This software was developed and / or modified by Raytheon Company,
|
|
||||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
#
|
|
||||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
# This software product contains export-restricted data whose
|
|
||||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
# to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
# an export license or other authorization.
|
|
||||||
#
|
|
||||||
# Contractor Name: Raytheon Company
|
|
||||||
# Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
# Mail Stop B8
|
|
||||||
# Omaha, NE 68106
|
|
||||||
# 402.291.0100
|
|
||||||
#
|
|
||||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
# further licensing information.
|
|
||||||
##
|
|
||||||
|
|
||||||
# File auto-generated by PythonFileGenerator
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'DataTime',
|
|
||||||
'TimeRange'
|
|
||||||
]
|
|
||||||
|
|
||||||
from DataTime import DataTime
|
|
||||||
from TimeRange import TimeRange
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue