merge 16.2.2 updates to master-python3

This commit is contained in:
mjames-upc 2016-10-04 13:03:04 -06:00
commit b26f1b15d3
32 changed files with 2809 additions and 198 deletions

View file

@ -1,15 +1,17 @@
Python Data Access Framework for AWIPS II
=========================================
.. image:: https://img.shields.io/pypi/v/python-awips.svg
|PyPI| |LatestDocs|
.. |PyPI| image:: https://img.shields.io/pypi/v/python-awips.svg
:target: https://pypi.python.org/pypi/python-awips/
:alt: PyPI Package
.. image:: https://img.shields.io/pypi/dm/python-awips.svg
.. |PyPIDownloads| image:: https://img.shields.io/pypi/dm/python-awips.svg
:target: https://pypi.python.org/pypi/python-awips/
:alt: PyPI Downloads
.. image:: https://readthedocs.org/projects/pip/badge/?version=latest
.. |LatestDocs| image:: https://readthedocs.org/projects/pip/badge/?version=latest
:target: http://python-awips.readthedocs.org/en/latest/
:alt: Latest Doc Build Status
@ -19,59 +21,33 @@ Install
- pip install python-awips
Requirements
------------
- Python 2.7 minimum
- pip install numpy shapely
- pip install metpy enum34 - to run Jupyter Notebook examples
Documentation
-------------
- Python 2.7 or later
- pip install numpy shapely
* http://python-awips.readthedocs.org/en/latest/
* http://nbviewer.jupyter.org/github/Unidata/python-awips/tree/master/examples/notebooks
From Github
-----------
Install from Github
-------------------
- git clone https://github.com/Unidata/python-awips.git
- cd python-awips
- python setup.py install
- python setup.py install
Install for AWIPS II Python
--------------------
Install for AWIPS (/awips2/python)
-----------------------------------------
AWIPS II >=15.1.3 (March 2016) has `python-awips` installed in /awips2/python, as well as a full meteorological data stack (metpy, matplotlib, numpy, etc).
AWIPS II >=15.1.3 (March 2016) has `python-awips` bundled with the awips2-server and awips2-cave groups, as well as a full meteorological data stack (metpy, matplotlib, numpy, etc).
For AWIPS II systems 15.1.2 and lower:
Easy install on an AWIPS system
- wget https://bootstrap.pypa.io/ez_setup.py -O - | /awips2/python/bin/python
- /awips2/python/bin/easy_install pip
- /awips2/python/bin/pip install python-awips
Grid Inventory
--------------
A short script to request available grid names from an EDEX server::
#!python
from awips.dataaccess import DataAccessLayer
# Set host
DataAccessLayer.changeEDEXHost("edex-cloud.unidata.ucar.edu")
# Init data request
request = DataAccessLayer.newDataRequest()
# Set datatype
request.setDatatype("grid")
#
# getAvailableLocationNames method will return a list of all available models
#
# LocationNames mean different things to different plugins beware...radar is icao,
# satellite is sector, etc
#
available_grids = DataAccessLayer.getAvailableLocationNames(request)
for grid in available_grids:
print grid
Documentation
------------------
* http://python-awips.readthedocs.org/en/latest/
* `Jupyter Notebook Examples <http://nbviewer.jupyter.org/github/Unidata/python-awips/tree/master/examples/notebooks/>`_

View file

@ -28,6 +28,21 @@ inter-process communication.
image
License
-------
The AWIPS software package released by the Unidata Program Center is considered to
be in the public domain since it is released without proprietary code. As such, export
controls do not apply.  Any person is free to download, modify, distribute, or share
Unidata AWIPS in any form. Entities who modify or re-distribute Unidata AWIPS
software are encouraged to conduct their own FOSS/COTS entitlement/license review
to ensure that they remain compatible with the associated terms (see
FOSS_COTS_License.pdf at `https://github.com/Unidata/awips2 <https://github.com/Unidata/awips2>`_).
About AWIPS
-----------
The primary AWIPS II application for data ingest, processing, and
storage is the Environmental Data EXchange (**EDEX**) server; the
primary AWIPS II application for visualization/data manipulation is the
@ -44,25 +59,27 @@ AWIPS II Python Stack
---------------------
A number of Python packages are bundled with the AWIPS II EDEX and CAVE
installations, on top of base Python 2.7.9.
installations.
====================== ============== ==============================
Package Version RPM Name
====================== ============== ==============================
Python 2.7.9 awips2-python
**awips** **0.9.3** **awips2-python-awips**
Python 2.7.10 awips2-python
**awips** **0.9.5** **awips2-python-awips**
basemap 1.0.7 awips2-python-basemap
cartopy 0.13.0 awips2-python-cartopy
cherrypy 3.1.2 awips2-python-cherrypy
cycler 0.10.0 awips2-python-cycler
cython 0.23.4 awips2-python-cython
dateutil 2.5.0 awips2-python-dateutil
gfe 1.0.0 awips2-python-gfe
h5py 1.3.0 awips2-python-h5py
jep 3.4.1 awips2-python-jep
matplotlib 1.5.1 awips2-python-matplotlib
metpy 0.3.0 awips2-python-metpy
nose 0.11.1 awips2-python-nose
numpy 1.10.4 awips2-python-numpy
numpy 1.8.0 awips2-python-numpy
pil 1.1.6 awips2-python-pil
pint 0.7.2 awips2-python-pint
pmw 1.3.2 awips2-python-pmw
@ -72,7 +89,7 @@ pygtk 2.8.6 awips2-python-pygtk
pyparsing 2.1.0 awips2-python-pyparsing
qpid 0.32 awips2-python-qpid
scientific 2.8 awips2-python-scientific
scipy 0.17.0 awips2-python-scipy
scipy 0.9.0 awips2-python-scipy
shapely 1.5.9 awips2-python-shapely
six 1.10.0 awips2-python-six
tables 2.1.2 awips2-python-tables

View file

@ -65,7 +65,7 @@ author = 'Unidata'
# built documents.
#
# The short X.Y version.
version = '0.9.3'
version = '0.9.5'
# The full version, including alpha/beta/rc tags.
# The language for content autogenerated by Sphinx. Refer to documentation

1456
docs/source/gridparms.rst Normal file

File diff suppressed because it is too large Load diff

View file

@ -17,3 +17,4 @@ Documentation
examples/index
about
dev
gridparms

View file

@ -1,3 +1,5 @@
.. _Jupyter Notebook: http://nbviewer.jupyter.org/github/Unidata/python-awips/tree/master/examples/notebooks
Install python-awips
------------------
@ -8,22 +10,24 @@ Requirements
- Python 2.7 or later
- pip install numpy shapely
- pip install metpy enum34 - to run `Jupyter Notebook`_ examples
From Github
~~~~~~~~~~~~
Install from Github
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- git clone https://github.com/Unidata/python-awips.git
- cd python-awips
- python setup.py install
- python setup.py install
Install for AWIPS II Python
Install for AWIPS (/awips2/python)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
AWIPS II >=15.1.3 (March 2016) has `python-awips` installed in /awips2/python, as well as a full meteorological data stack (metpy, matplotlib, numpy, etc).
AWIPS II >=15.1.3 (March 2016) has `python-awips` bundled with the awips2-server and awips2-cave groups, as well as a full meteorological data stack (metpy, matplotlib, numpy, etc).
For AWIPS II systems 15.1.2 and lower:
Easy install on an AWIPS system
- wget https://bootstrap.pypa.io/ez_setup.py -O - | /awips2/python/bin/python
- /awips2/python/bin/easy_install pip
- /awips2/python/bin/pip install python-awips

View file

@ -0,0 +1,46 @@
##
# 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 FormattedDate
#
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 9/21/2015 4486 rjpeter Initial creation.
#
#
#
from dynamicserialize.dstypes.com.raytheon.uf.common.time import FormattedDate
ClassAdapter = 'com.raytheon.uf.common.time.FormattedDate'
def serialize(context, date):
context.writeI64(date.getTime())
def deserialize(context):
result = FormattedDate()
result.setTime(context.readI64())
return result

View file

@ -32,7 +32,7 @@
# 04/22/13 #1949 rjpeter Added LockTableAdapter
# 02/06/14 #2672 bsteffen Added JTSEnvelopeAdapter
# 06/22/2015 #4573 randerso Added JobProgressAdapter
#
# 09/21/2015 #4486 rjpeter Added FormattedDateAdapter
#
__all__ = [
@ -43,6 +43,7 @@ __all__ = [
'GregorianCalendarAdapter',
'ActiveTableModeAdapter',
'DateAdapter',
'FormattedDateAdapter',
'LocalizationLevelSerializationAdapter',
'LocalizationTypeSerializationAdapter',
'GeometryTypeAdapter',

View file

@ -23,6 +23,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 05/22/2015 4522 randerso Initial creation
# 03/17/2016 5426 randerso Add issueYear to primary key
#
##
class ActiveTableKey(object):
@ -33,6 +34,7 @@ class ActiveTableKey(object):
self.sig = None
self.etn = None
self.ugcZone = None
self.issueYear = None
def getOfficeid(self):
return self.officeid
@ -63,3 +65,9 @@ class ActiveTableKey(object):
def setUgcZone(self, ugcZone):
self.ugcZone = ugcZone
def getIssueYear(self):
return self.issueYear
def setIssueYear(self, issueYear):
self.issueYear = issueYear

View file

@ -23,6 +23,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 05/22/2015 4522 randerso Initial creation (hand generated)
# 03/17/2016 5426 randerso Add issueYear to primary key
#
##
@ -159,6 +160,9 @@ class ActiveTableRecord(with_metaclass(abc.ABCMeta, object)):
return self.issueTime
def setIssueTime(self, issueTime):
from datetime import datetime
date = datetime.utcfromtimestamp(issueTime.getTime()/1000)
self.key.setIssueYear(date.year)
self.issueTime = issueTime
def getPurgeTime(self):

View file

@ -19,6 +19,7 @@
##
# File auto-generated against equivalent DynamicSerialize Java class
# Jul 27, 2015 4654 skorolev Added filters
class AlertVizRequest(object):
@ -29,6 +30,7 @@ class AlertVizRequest(object):
self.sourceKey = None
self.category = None
self.audioFile = None
self.filters = None
def getMessage(self):
return self.message
@ -66,3 +68,13 @@ class AlertVizRequest(object):
def setAudioFile(self, audioFile):
self.audioFile = audioFile
def getFilters(self):
return self.filters
def setFilters(self, filters):
if filters is None:
self.filters = {}
elif not(filters.has_key(None) or filters.values().count(None)>0 or filters.has_key('') or filters.values().count('')>0):
self.filters = filters
else:
raise ValueError('Filters must not contain None or empty keys or values: %s' % filters)

View file

@ -18,23 +18,27 @@
# further licensing information.
##
# File auto-generated against equivalent DynamicSerialize Java class
##
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# xx/xx/?? dgilling Initial Creation.
# 12/02/15 5129 dgilling Refactor based on AbstractGfeRequest.
#
##
class GetSiteTimeZoneInfoRequest(object):
from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.gfe.request import AbstractGfeRequest
class GetSiteTimeZoneInfoRequest(AbstractGfeRequest):
def __init__(self):
self.workstationID = None
self.siteID = None
super(GetSiteTimeZoneInfoRequest, self).__init__()
self.requestedSiteIDs = None
def getWorkstationID(self):
return self.workstationID
def getRequestedSiteIDs(self):
return self.requestedSiteIDs
def setWorkstationID(self, workstationID):
self.workstationID = workstationID
def getSiteID(self):
return self.siteID
def setSiteID(self, siteID):
self.siteID = siteID
def setRequestedSiteIDs(self, requestedSiteIDs):
self.requestedSiteIDs = requestedSiteIDs

View file

@ -22,7 +22,7 @@
__all__ = [
'dbsrv',
'request'
'subscription'
]

View file

@ -0,0 +1,27 @@
##
# 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__ = [
'request'
]

View file

@ -30,11 +30,13 @@
import struct
import socket
import os
import pwd
import thread
try:
import _thread
import pwd
pwd_error = False
except ImportError:
import thread as _thread
pwd_error = True
class WsId(object):
@ -45,7 +47,10 @@ class WsId(object):
self.userName = userName
if userName is None:
self.userName = pwd.getpwuid(os.getuid()).pw_name
if not pwd_error:
self.userName = pwd.getpwuid(os.getuid()).pw_name
else:
self.userName = "GenericUsername"
self.progName = progName
if progName is None:
@ -96,4 +101,4 @@ class WsId(object):
return self.toString()
def __repr__(self):
return self.toString()
return self.toString()

View file

@ -20,13 +20,22 @@
# File auto-generated against equivalent DynamicSerialize Java class
import os, pwd
import os
try:
import pwd
pwd_error = False
except ImportError:
pwd_error = True
class UserId(object):
def __init__(self, id = None):
if id is None:
self.id = pwd.getpwuid(os.getuid()).pw_name
if not pwd_error:
self.id = pwd.getpwuid(os.getuid()).pw_name
else:
self.id = "GenericUsername"
else:
self.id = id

View file

@ -0,0 +1,39 @@
##
# 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 DeleteOrphansRequest(object):
def __init__(self):
self.filename = None
self.oldestDate = None
def getOldestDate(self):
return self.oldestDate
def setOldestDate(self, oldestDate):
self.oldestDate = oldestDate
def getFilename(self):
return self.filename
def setFilename(self, filename):
self.filename = filename

View file

@ -26,6 +26,7 @@ __all__ = [
'DatasetDataRequest',
'DatasetNamesRequest',
'DeleteFilesRequest',
'DeleteOrphansRequest',
'DeleteRequest',
'GroupsRequest',
'RepackRequest',
@ -38,6 +39,7 @@ from .CreateDatasetRequest import CreateDatasetRequest
from .DatasetDataRequest import DatasetDataRequest
from .DatasetNamesRequest import DatasetNamesRequest
from .DeleteFilesRequest import DeleteFilesRequest
from .DeleteOrphansRequest import DeleteOrphansRequest
from .DeleteRequest import DeleteRequest
from .GroupsRequest import GroupsRequest
from .RepackRequest import RepackRequest

View file

@ -0,0 +1,39 @@
##
# 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/21/2015 4486 rjpeter Initial creation.
#
##
from time import gmtime, strftime
from dynamicserialize.dstypes.java.util import Date
class FormattedDate(Date):
def __init__(self, timeInMillis=None):
super(FormattedDate, self).__init__(timeInMillis)
def __repr__(self):
return strftime("%Y-%m-%d %H:%M:%S.", gmtime(self.time/1000.0)) + '{:03d}'.format(self.time%1000)

View file

@ -22,9 +22,11 @@
__all__ = [
'DataTime',
'TimeRange'
'TimeRange',
'FormattedDate'
]
from .DataTime import DataTime
from .TimeRange import TimeRange
from .FormattedDate import FormattedDate

View file

@ -5,7 +5,8 @@ __all__ = [
'ActivityInfo',
'DerivedProduct',
'ResponseMessageValidate',
'request'
'request',
'response'
]
from .ActivityInfo import ActivityInfo

View file

@ -0,0 +1,13 @@
# File auto-generated against equivalent DynamicSerialize Java class
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# May 05, 2016 root Generated
class RetrieveActivityMapRequest(object):
def __init__(self):
return

View file

@ -4,10 +4,11 @@
__all__ = [
'RetrieveAllProductsRequest',
'StoreActivityRequest',
'StoreDerivedProductRequest'
'StoreDerivedProductRequest',
'RetrieveActivityMapRequest'
]
from .RetrieveAllProductsRequest import RetrieveAllProductsRequest
from .StoreActivityRequest import StoreActivityRequest
from .StoreDerivedProductRequest import StoreDerivedProductRequest
from .RetrieveActivityMapRequest import RetrieveActivityMapRequest

View file

@ -0,0 +1,55 @@
# File auto-generated against equivalent DynamicSerialize Java class
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# May 06, 2016 root Generated
class ActivityMapData(object):
def __init__(self):
self.refTime = None
self.activityLabel = None
self.activitySubtype = None
self.dataURI = None
self.activityType = None
self.activityName = None
def getRefTime(self):
return self.refTime
def setRefTime(self, refTime):
self.refTime = refTime
def getActivityLabel(self):
return self.activityLabel
def setActivityLabel(self, activityLabel):
self.activityLabel = activityLabel
def getActivitySubtype(self):
return self.activitySubtype
def setActivitySubtype(self, activitySubtype):
self.activitySubtype = activitySubtype
def getDataURI(self):
return self.dataURI
def setDataURI(self, dataURI):
self.dataURI = dataURI
def getActivityType(self):
return self.activityType
def setActivityType(self, activityType):
self.activityType = activityType
def getActivityName(self):
return self.activityName
def setActivityName(self, activityName):
self.activityName = activityName

View file

@ -0,0 +1,20 @@
# File auto-generated against equivalent DynamicSerialize Java class
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# May 06, 2016 root Generated
class RetrieveActivityMapResponse(object):
def __init__(self):
self.data = None
def getData(self):
return self.data
def setData(self, data):
self.data = data

View file

@ -0,0 +1,11 @@
# File auto-generated by PythonFileGenerator
__all__ = [
'ActivityMapData',
'RetrieveActivityMapResponse'
]
from ActivityMapData import ActivityMapData
from RetrieveActivityMapResponse import RetrieveActivityMapResponse

View file

@ -953,7 +953,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
"version": "2.7.10"
}
},
"nbformat": 4,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -3,12 +3,12 @@ from setuptools import find_packages
setup(
name='python-awips',
version='0.9.3',
version='0.9.5',
description='A framework for requesting AWIPS meteorological datasets from an EDEX server',
packages=find_packages(exclude='data'),
license='Apache 2.0 / Various + US Export Controlled Technical Data',
license='Open Source',
url='http://www.unidata.ucar.edu/software/awips2',
download_url='https://github.com/Unidata/python-awips/tarball/0.9.3',
download_url='https://github.com/Unidata/python-awips/tarball/0.9.5',
author='Unidata',
author_email='mjames@ucar.edu',
requires=['argparse','shapely','numpy','six']