Git Product home page Git Product logo

python-awips's Introduction

AWIPS Python Data Access Framework

License PyPI Package Conda Package Conda Downloads circleci Travis Build Status Latest Doc Build Status

Codacy issues Scrutinizer Code Quality Code Climate PRs Welcome

About

The python-awips package provides a data access framework for requesting grid and geometry datasets from an AWIPS EDEX server. AWIPS and python-awips packages are released and maintained by UCAR's Unidata Program Center in Boulder, Colorado.

Install

  • pip install python-awips

    or

  • conda install -c conda-forge python-awips

Conda Environment

Documentation

License

Unidata AWIPS source code and binaries (RPMs) are considered to be in the public domain, meaning there are no restrictions on any download, modification, or distribution in any form (original or modified). The Python AWIPS package contains no proprietery content and is therefore not subject to export controls as stated in the Master Rights licensing file and source code headers.

python-awips's People

Contributors

mjames-upc avatar rfiutak avatar tiffanycmeyer13 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

python-awips's Issues

Numpy Deprication (WWA Notebook)

Section 7.2 of the WWA notebook is throwing the following warning:

/Users/scarter/opt/miniconda3/envs/python3-awips-latest/lib/python3.10/site-packages/numpy/core/fromnumeric.py:1859: ShapelyDeprecationWarning: __len__ for multi-part geometries is deprecated and will be removed in Shapely 2.0. Check the length of the `geoms` property instead to get the  number of parts of a multi-part geometry.
  return asanyarray(a).ravel(order=order)
/Users/scarter/opt/miniconda3/envs/python3-awips-latest/lib/python3.10/site-packages/numpy/core/fromnumeric.py:1859: ShapelyDeprecationWarning: Iteration over multi-part geometries is deprecated and will be removed in Shapely 2.0. Use the `geoms` property to access the constituent parts of a multi-part geometry.
  return asanyarray(a).ravel(order=order)

Not entirely sure where this is coming from but I assume it might have to do with either line 49 and/or the for loop at line 54

Socket.gaierror on GetSatelliteIR

socket.gaierror: [Errno 8] nodename nor servname provided, or not known

Followed all the install steps, dowloaded the repo, called
python setup.py build
python setup.py install

Used Sublime to create Python file containing this code

#!/awips2/python/bin/python
from awips.dataaccess import DataAccessLayer
import numpy as np

request = DataAccessLayer.newDataRequest()
request.setDatatype("satellite")
request.setLocationNames("East CONUS")
request.setParameters("Imager 6.7-6.5 micron IR (WV)")

t = DataAccessLayer.getAvailableTimes(request)
print t[-1].getRefTime()

response = DataAccessLayer.getGridData(request, times=[t[-1]])
print response
data = response[0]

print 'Units are in', data.getUnit()
lon,lat = data.getLatLonCoords()

print 'Parameter we requested is',data.getParameter()
print data.getRawData()

Full Log

Traceback (most recent call last):
  File "weatherInfo.py", line 10, in <module>
    t = DataAccessLayer.getAvailableTimes(request)
  File "/Users/newuser/Downloads/python-awips-master/awips/dataaccess/DataAccessLayer.py", line 71, in getAvailableTimes
    return router.getAvailableTimes(request, refTimeOnly)
  File "/Users/newuser/Downloads/python-awips-master/awips/dataaccess/ThriftClientRouter.py", line 57, in getAvailableTimes
    response = self._client.sendRequest(timesRequest)
  File "/Users/newuser/Downloads/python-awips-master/awips/ThriftClient.py", line 56, in sendRequest
    self.__httpConn.connect()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 832, in connect
    self.timeout, self.source_address)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 557, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno 8] nodename nor servname provided, or not known

Any way to filter metar obs?

Is there any way to filter metar obs so that the station models do not overlap when plotted, like how they plot in CAVE?

Also, I see how to get the nexrad level 3 data, but I was wondering if there was a way to access the national composites that you can view in CAVE. They don't seem to be listed with the radar sites.

datatype bufrmosgfs ThriftRequestException

  • Failed to retrieve available parameters for request: PointDataServerRequest [rcMap={mode=EQUALS getParameters, pluginName=EQUALS bufrmosgfs}]
  • Unable to instantiate data access object for bufrmosgfs
  • Plugin bufrmosgfs is not registered with the PluginRegistry
from __future__ import print_function
from awips.dataaccess import DataAccessLayer as DAL
from awips.ThriftClient import ThriftRequestException
import os
import unittest
datatype = "bufrmosgfs"
data_params = "temperature", "dewpoint"
DAL.changeEDEXHost("edex-cloud.unidata.ucar.edu")
req = DAL.newDataRequest(datatype)
params = DAL.getAvailableParameters(req)
print(params)
ThriftRequestException: b'com.raytheon.uf.common.dataaccess.exception.DataRetrievalException exception thrown: Failed to retrieve available parameters for request: PointDataServerRequest [rcMap={mode=EQUALS getParameters, pluginName=EQUALS bufrmosgfs}]
 com.raytheon.uf.common.pointdata.dataaccess.PointDataAccessFactory.getAvailableParameters(PointDataAccessFactory.java:164)
 com.raytheon.uf.common.dataaccess.DataAccessLayer.getAvailableParameters(DataAccessLayer.java:254)
 com.raytheon.uf.edex.dataaccess.handler.GetAvailableParametersHandler.handleRequest(GetAvailableParametersHandler.java:49)
 com.raytheon.uf.edex.dataaccess.handler.GetAvailableParametersHandler.handleRequest(GetAvailableParametersHandler.java:1)
 com.raytheon.uf.edex.requestsrv.RequestServiceExecutor.execute(RequestServiceExecutor.java:155)
 com.raytheon.uf.edex.requestsrv.serialization.SerializingStreamExecutor.execute(SerializingStreamExecutor.java:107)
 com.raytheon.uf.edex.requestsrv.serialization.ByteLimitingStreamExecutor.execute(ByteLimitingStreamExecutor.java:76)
 com.raytheon.uf.edex.requestsrv.http.HttpRequestServiceExecutor.execute(HttpRequestServiceExecutor.java:102)
 sun.reflect.GeneratedMethodAccessor134.invoke()
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 java.lang.reflect.Method.invoke(Method.java:498)
 org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:458)
 org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:289)
 org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:262)
 org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:178)
 org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:41)
 org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
 org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
 org.apache.camel.processor.SendProcessor.process(SendProcessor.java:116)
 com.raytheon.uf.edex.esb.camel.MessageProducer$2.process(MessageProducer.java:439)
 org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:110)
 org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542)
 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
 org.apache.camel.processor.Pipeline.process(Pipeline.java:120)
 org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
 org.apache.camel.component.jetty.CamelContinuationServlet.doService(CamelContinuationServlet.java:191)
 org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:74)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
 org.eclipse.jetty.server.Server.handle(Server.java:499)
 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
 org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
 java.lang.Thread.run(Thread.java:745)
Caused by: b"com.raytheon.uf.edex.database.DataAccessLayerException exception thrown: Unable to instantiate data access object for bufrmosgfs\
\ com.raytheon.uf.edex.pointdata.PointDataQuery.<init>(PointDataQuery.java:97)\
\ com.raytheon.uf.edex.pointdata.PointDataServerRequestHandler.handleRequest(PointDataServerRequestHandler.java:89)\
\ com.raytheon.uf.edex.pointdata.PointDataServerRequestHandler.handleRequest(PointDataServerRequestHandler.java:1)\
\ com.raytheon.uf.edex.requestsrv.RequestServiceExecutor.execute(RequestServiceExecutor.java:155)\
\ com.raytheon.uf.edex.requestsrv.router.ServerRequestRouter.route(ServerRequestRouter.java:58)\
\ com.raytheon.uf.common.serialization.comm.RequestRouter.route(RequestRouter.java:130)\
\ com.raytheon.uf.common.serialization.comm.RequestRouter.route(RequestRouter.java:107)\
\ com.raytheon.uf.common.pointdata.dataaccess.PointDataAccessFactory.getAvailableParameters(PointDataAccessFactory.java:162)\
\ com.raytheon.uf.common.dataaccess.DataAccessLayer.getAvailableParameters(DataAccessLayer.java:254)\
\ com.raytheon.uf.edex.dataaccess.handler.GetAvailableParametersHandler.handleRequest(GetAvailableParametersHandler.java:49)\
\ com.raytheon.uf.edex.dataaccess.handler.GetAvailableParametersHandler.handleRequest(GetAvailableParametersHandler.java:1)\
\ com.raytheon.uf.edex.requestsrv.RequestServiceExecutor.execute(RequestServiceExecutor.java:155)\
\ com.raytheon.uf.edex.requestsrv.serialization.SerializingStreamExecutor.execute(SerializingStreamExecutor.java:107)\
\ com.raytheon.uf.edex.requestsrv.serialization.ByteLimitingStreamExecutor.execute(ByteLimitingStreamExecutor.java:76)\
\ com.raytheon.uf.edex.requestsrv.http.HttpRequestServiceExecutor.execute(HttpRequestServiceExecutor.java:102)\
\ sun.reflect.GeneratedMethodAccessor134.invoke()\
\ sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\
\ java.lang.reflect.Method.invoke(Method.java:498)\
\ org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:458)\
\ org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:289)\
\ org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:262)\
\ org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:178)\
\ org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:41)\
\ org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)\
\ org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)\
\ org.apache.camel.processor.SendProcessor.process(SendProcessor.java:116)\
\ com.raytheon.uf.edex.esb.camel.MessageProducer$2.process(MessageProducer.java:439)\
\ org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:110)\
\ org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542)\
\ org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)\
\ org.apache.camel.processor.Pipeline.process(Pipeline.java:120)\
\ org.apache.camel.processor.Pipeline.process(Pipeline.java:83)\
\ org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)\
\ org.apache.camel.component.jetty.CamelContinuationServlet.doService(CamelContinuationServlet.java:191)\
\ org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:74)\
\ javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\
\ org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)\
\ org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)\
\ org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)\
\ org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)\
\ org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)\
\ org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\
\ org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)\
\ org.eclipse.jetty.server.Server.handle(Server.java:499)\
\ org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)\
\ org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)\
\ org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)\
\ org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)\
\ org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)\
\ java.lang.Thread.run(Thread.java:745)\
Caused by: b\'com.raytheon.uf.common.dataplugin.PluginException exception thrown: Plugin bufrmosgfs is not registered with the PluginRegistry\\\
\\\ com.raytheon.uf.edex.database.plugin.PluginFactory.getPluginDao(PluginFactory.java:129)\\\
\\\ com.raytheon.uf.edex.pointdata.PointDataQuery.<init>(PointDataQuery.java:89)\\\
\\\ com.raytheon.uf.edex.pointdata.PointDataServerRequestHandler.handleRequest(PointDataServerRequestHandler.java:89)\\\
\\\ com.raytheon.uf.edex.pointdata.PointDataServerRequestHandler.handleRequest(PointDataServerRequestHandler.java:1)\\\
\\\ com.raytheon.uf.edex.requestsrv.RequestServiceExecutor.execute(RequestServiceExecutor.java:155)\\\
\\\ com.raytheon.uf.edex.requestsrv.router.ServerRequestRouter.route(ServerRequestRouter.java:58)\\\
\\\ com.raytheon.uf.common.serialization.comm.RequestRouter.route(RequestRouter.java:130)\\\
\\\ com.raytheon.uf.common.serialization.comm.RequestRouter.route(RequestRouter.java:107)\\\
\\\ com.raytheon.uf.common.pointdata.dataaccess.PointDataAccessFactory.getAvailableParameters(PointDataAccessFactory.java:162)\\\
\\\ com.raytheon.uf.common.dataaccess.DataAccessLayer.getAvailableParameters(DataAccessLayer.java:254)\\\
\\\ com.raytheon.uf.edex.dataaccess.handler.GetAvailableParametersHandler.handleRequest(GetAvailableParametersHandler.java:49)\\\
\\\ com.raytheon.uf.edex.dataaccess.handler.GetAvailableParametersHandler.handleRequest(GetAvailableParametersHandler.java:1)\\\
\\\ com.raytheon.uf.edex.requestsrv.RequestServiceExecutor.execute(RequestServiceExecutor.java:155)\\\
\\\ com.raytheon.uf.edex.requestsrv.serialization.SerializingStreamExecutor.execute(SerializingStreamExecutor.java:107)\\\
\\\ com.raytheon.uf.edex.requestsrv.serialization.ByteLimitingStreamExecutor.execute(ByteLimitingStreamExecutor.java:76)\\\
\\\ com.raytheon.uf.edex.requestsrv.http.HttpRequestServiceExecutor.execute(HttpRequestServiceExecutor.java:102)\\\
\\\ sun.reflect.GeneratedMethodAccessor134.invoke()\\\
\\\ sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\\
\\\ java.lang.reflect.Method.invoke(Method.java:498)\\\
\\\ org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:458)\\\
\\\ org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:289)\\\
\\\ org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:262)\\\
\\\ org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:178)\\\
\\\ org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:41)\\\
\\\ org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)\\\
\\\ org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)\\\
\\\ org.apache.camel.processor.SendProcessor.process(SendProcessor.java:116)\\\
\\\ com.raytheon.uf.edex.esb.camel.MessageProducer$2.process(MessageProducer.java:439)\\\
\\\ org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:110)\\\
\\\ org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542)\\\
\\\ org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)\\\
\\\ org.apache.camel.processor.Pipeline.process(Pipeline.java:120)\\\
\\\ org.apache.camel.processor.Pipeline.process(Pipeline.java:83)\\\
\\\ org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)\\\
\\\ org.apache.camel.component.jetty.CamelContinuationServlet.doService(CamelContinuationServlet.java:191)\\\
\\\ org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:74)\\\
\\\ javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\\\
\\\ org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)\\\
\\\ org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)\\\
\\\ org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)\\\
\\\ org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)\\\
\\\ org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)\\\
\\\ org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\\\
\\\ org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)\\\
\\\ org.eclipse.jetty.server.Server.handle(Server.java:499)\\\
\\\ org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)\\\
\\\ org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)\\\
\\\ org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)\\\
\\\ org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)\\\
\\\ org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)\\\
\\\ java.lang.Thread.run(Thread.java:745)\\\

unidata-workshop pip python-awips install failure

referenced at Unidata/python-workshop#348
for the file environment.yml

 name: unidata-workshop
 channels:
   - conda-forge
 dependencies:
   - python=3.6
   - numpy
   - nomkl
   - matplotlib
   - cartopy
   - jupyter
   - netcdf4
   - owslib
   - metpy
   - pint
   - shapely
   - siphon
   - xarray
   - pip
   - ffmpeg
   - pytest
   - pip:
     - python-awips
conda env update -f environment.yml 

Solving environment: done

Downloading and Extracting Packages
pip-18.0             | 1.8 MB    | ################################################################################################################################################################# | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Collecting python-awips (from -r /Users/mjames/unidata-python-workshop/condaenv.pn_95g9y.requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/3a/05/7d0c53f27af89b4dab569328acd5c6740cccd1f662edce1201fb4fc20bad/python-awips-18.1.2.tar.gz (166kB)
    100% |████████████████████████████████| 174kB 2.5MB/s 
Requirement already satisfied: numpy in /Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages (from python-awips->-r /Users/mjames/unidata-python-workshop/condaenv.pn_95g9y.requirements.txt (line 1)) (1.15.2)
Requirement already satisfied: six in /Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages (from python-awips->-r /Users/mjames/unidata-python-workshop/condaenv.pn_95g9y.requirements.txt (line 1)) (1.11.0)
Building wheels for collected packages: python-awips
  Running setup.py bdist_wheel for python-awips ... done
  Stored in directory: /Users/mjames/Library/Caches/pip/wheels/ad/15/e9/67c4cdb77e0f896d713f87e020d3dc98c21a8ae315ce7c2d8a
Successfully built python-awips
Exception:
Traceback (most recent call last):
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2869, in _dep_map
    return self.__dep_map
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2663, in __getattr__
    raise AttributeError(attr)
AttributeError: _DistInfoDistribution__dep_map

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py", line 93, in __init__
    req = REQUIREMENT.parseString(requirement_string)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 1632, in parseString
    raise exc
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 1622, in parseString
    loc, tokens = self._parse( instring, 0 )
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 1379, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 3395, in parseImpl
    loc, exprtokens = e._parse( instring, loc, doActions )
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 1383, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 3183, in parseImpl
    raise ParseException(instring, loc, self.errmsg, self)
pip._vendor.pyparsing.ParseException: Expected stringEnd (at char 33), (line:1, col:34)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2949, in __init__
    super(Requirement, self).__init__(requirement_string)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py", line 97, in __init__
    requirement_string[e.loc:e.loc + 8]))
pip._vendor.packaging.requirements.InvalidRequirement: Invalid requirement, parse error at "'; extra '"

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/basecommand.py", line 141, in main
    status = self.run(options, args)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 330, in run
    self._warn_about_conflicts(to_install)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 456, in _warn_about_conflicts
    package_set, _dep_info = check_install_conflicts(to_install)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/operations/check.py", line 98, in check_install_conflicts
    package_set = create_package_set_from_installed()
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/operations/check.py", line 41, in create_package_set_from_installed
    package_set[name] = PackageDetails(dist.version, dist.requires())
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2607, in requires
    dm = self._dep_map
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2871, in _dep_map
    self.__dep_map = self._compute_dependencies()
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2881, in _compute_dependencies
    reqs.extend(parse_requirements(req))
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2942, in parse_requirements
    yield Requirement(line)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2951, in __init__
    raise RequirementParseError(str(e))
pip._vendor.pkg_resources.RequirementParseError: Invalid requirement, parse error at "'; extra '"

CondaValueError: pip returned an error

previous message

conda env update -f environment.yml 

Solving environment: done
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Collecting python-awips (from -r /Users/mjames/unidata-python-workshop/condaenv.zn2xq7f0.requirements.txt (line 1))
Requirement already satisfied: numpy in /Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages (from python-awips->-r /Users/mjames/unidata-python-workshop/condaenv.zn2xq7f0.requirements.txt (line 1)) (1.15.2)
Requirement already satisfied: six in /Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages (from python-awips->-r /Users/mjames/unidata-python-workshop/condaenv.zn2xq7f0.requirements.txt (line 1)) (1.11.0)
Exception:
Traceback (most recent call last):
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2869, in _dep_map
    return self.__dep_map
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2663, in __getattr__
    raise AttributeError(attr)
AttributeError: _DistInfoDistribution__dep_map

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py", line 93, in __init__
    req = REQUIREMENT.parseString(requirement_string)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 1632, in parseString
    raise exc
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 1622, in parseString
    loc, tokens = self._parse( instring, 0 )
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 1379, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 3395, in parseImpl
    loc, exprtokens = e._parse( instring, loc, doActions )
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 1383, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pyparsing.py", line 3183, in parseImpl
    raise ParseException(instring, loc, self.errmsg, self)
pip._vendor.pyparsing.ParseException: Expected stringEnd (at char 33), (line:1, col:34)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2949, in __init__
    super(Requirement, self).__init__(requirement_string)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/packaging/requirements.py", line 97, in __init__
    requirement_string[e.loc:e.loc + 8]))
pip._vendor.packaging.requirements.InvalidRequirement: Invalid requirement, parse error at "'; extra '"

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/basecommand.py", line 141, in main
    status = self.run(options, args)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 330, in run
    self._warn_about_conflicts(to_install)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 456, in _warn_about_conflicts
    package_set, _dep_info = check_install_conflicts(to_install)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/operations/check.py", line 98, in check_install_conflicts
    package_set = create_package_set_from_installed()
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_internal/operations/check.py", line 41, in create_package_set_from_installed
    package_set[name] = PackageDetails(dist.version, dist.requires())
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2607, in requires
    dm = self._dep_map
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2871, in _dep_map
    self.__dep_map = self._compute_dependencies()
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2881, in _compute_dependencies
    reqs.extend(parse_requirements(req))
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2942, in parse_requirements
    yield Requirement(line)
  File "/Users/mjames/miniconda3/envs/unidata-workshop/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2951, in __init__
    raise RequirementParseError(str(e))
pip._vendor.pkg_resources.RequirementParseError: Invalid requirement, parse error at "'; extra '"

CondaValueError: pip returned an error


'bufrua' and 'obs' data setParameters and setLocationNames differ

Per the examples, requesting bufrua and obs data is relatively the same, although setting location name and parameters are different. For bufrua, a user would set parameters with say tpMan while obs takes the full name, temperature. This also exists when setting locations:

Data type station parameter
bufrua 72230 tpMan
obs KOUN temperature
grid OUN unknown

Can we standardize this?

ERROR: testGetAvailableLocations (awips.test.dafTests.testClimate.ClimateTestCase)

======================================================================
ERROR: testGetAvailableLocations (awips.test.dafTests.testClimate.ClimateTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/scrutinizer/build/awips/test/dafTests/testClimate.py", line 49, in testGetAvailableLocations
    self.runLocationsTest(req)
  File "/home/scrutinizer/build/awips/test/dafTests/baseDafTestCase.py", line 123, in runLocationsTest
    locs = DAL.getAvailableLocationNames(req)
  File "/home/scrutinizer/build/awips/dataaccess/DataAccessLayer.py", line 208, in getAvailableLocationNames
    return router.getAvailableLocationNames(request)
  File "/home/scrutinizer/build/awips/dataaccess/ThriftClientRouter.py", line 167, in getAvailableLocationNames
    response = self._client.sendRequest(locNamesRequest)
  File "/home/scrutinizer/build/awips/ThriftClient.py", line 68, in sendRequest
    raise ThriftRequestException(forceError)
awips.ThriftClient.ThriftRequestException: b'com.raytheon.uf.common.dataaccess.exception.DataRetrievalException' exception thrown: b'Error retrieving climate data (failed query="select column_name from information_schema.columns where column_name in (\'station_code\', \'station_id\', \'inform_id\', \'icao_loc_id\') and table_name = \'cli_asos_monthly\';")'
	at com.raytheon.uf.common.dataaccess.util.DatabaseQueryUtil.executeDatabaseQuery(DatabaseQueryUtil.java:129)
	at com.raytheon.uf.common.dataaccess.impl.AbstractGeometryDatabaseFactory.executeQuery(AbstractGeometryDatabaseFactory.java:238)
	at com.raytheon.uf.common.dataaccess.impl.AbstractGeometryDatabaseFactory.executeGetColumnNames(AbstractGeometryDatabaseFactory.java:628)
	at com.raytheon.uf.common.dataplugin.climate.ClimateGeometryFactory.getLocationColumnName(ClimateGeometryFactory.java:173)
	at com.raytheon.uf.common.dataplugin.climate.ClimateGeometryFactory.assembleGetAvailableLocationNames(ClimateGeometryFactory.java:189)
	at com.raytheon.uf.common.dataaccess.impl.AbstractGeometryDatabaseFactory.getAvailableLocationNames(AbstractGeometryDatabaseFactory.java:246)
	at com.raytheon.uf.common.dataaccess.DataAccessLayer.getAvailableLocationNames(DataAccessLayer.java:211)
	at com.raytheon.uf.edex.dataaccess.handler.GetAvailableLocationNamesHandler.handleRequest(GetAvailableLocationNamesHandler.java:57)
	at com.raytheon.uf.edex.dataaccess.handler.GetAvailableLocationNamesHandler.handleRequest(GetAvailableLocationNamesHandler.java:1)
	at com.raytheon.uf.edex.requestsrv.RequestServiceExecutor.execute(RequestServiceExecutor.java:155)
	at com.raytheon.uf.edex.requestsrv.serialization.SerializingStreamExecutor.execute(SerializingStreamExecutor.java:107)
	at com.raytheon.uf.edex.requestsrv.serialization.ByteLimitingStreamExecutor.execute(ByteLimitingStreamExecutor.java:76)
	at com.raytheon.uf.edex.requestsrv.http.HttpRequestServiceExecutor.execute(HttpRequestServiceExecutor.java:102)
	at sun.reflect.GeneratedMethodAccessor137.invoke()
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:458)
	at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:289)
	at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:262)
	at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:178)
	at org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:41)
	at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
	at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
	at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:116)
	at com.raytheon.uf.edex.esb.camel.MessageProducer$2.process(MessageProducer.java:439)
	at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:110)
	at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542)
	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:120)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
	at org.apache.camel.component.jetty.CamelContinuationServlet.doService(CamelContinuationServlet.java:191)
	at org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:74)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
	at org.eclipse.jetty.server.Server.handle(Server.java:499)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
	at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
	at java.lang.Thread.run(Thread.java:745)
Caused by: b'java.lang.NullPointerException' exception thrown: 
	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
	at com.raytheon.uf.edex.database.dao.CoreDao.executeSQLQuery(CoreDao.java:894)
	at com.raytheon.uf.edex.database.dao.CoreDao.executeSQLQuery(CoreDao.java:875)
	at com.raytheon.uf.edex.database.dao.CoreDao.executeMappedSQLQuery(CoreDao.java:953)
	at com.raytheon.uf.edex.database.QlServerRequestHandler.handleRequest(QlServerRequestHandler.java:74)
	at com.raytheon.uf.edex.database.QlServerRequestHandler.handleRequest(QlServerRequestHandler.java:1)
	at com.raytheon.uf.edex.requestsrv.RequestServiceExecutor.execute(RequestServiceExecutor.java:155)
	at com.raytheon.uf.edex.requestsrv.router.ServerRequestRouter.route(ServerRequestRouter.java:58)
	at com.raytheon.uf.common.serialization.comm.RequestRouter.route(RequestRouter.java:130)
	at com.raytheon.uf.common.serialization.comm.RequestRouter.route(RequestRouter.java:107)
	at com.raytheon.uf.common.dataaccess.util.DatabaseQueryUtil.executeDatabaseQuery(DatabaseQueryUtil.java:127)
	at com.raytheon.uf.common.dataaccess.impl.AbstractGeometryDatabaseFactory.executeQuery(AbstractGeometryDatabaseFactory.java:238)
	at com.raytheon.uf.common.dataaccess.impl.AbstractGeometryDatabaseFactory.executeGetColumnNames(AbstractGeometryDatabaseFactory.java:628)
	at com.raytheon.uf.common.dataplugin.climate.ClimateGeometryFactory.getLocationColumnName(ClimateGeometryFactory.java:173)
	at com.raytheon.uf.common.dataplugin.climate.ClimateGeometryFactory.assembleGetAvailableLocationNames(ClimateGeometryFactory.java:189)
	at com.raytheon.uf.common.dataaccess.impl.AbstractGeometryDatabaseFactory.getAvailableLocationNames(AbstractGeometryDatabaseFactory.java:246)
	at com.raytheon.uf.common.dataaccess.DataAccessLayer.getAvailableLocationNames(DataAccessLayer.java:211)
	at com.raytheon.uf.edex.dataaccess.handler.GetAvailableLocationNamesHandler.handleRequest(GetAvailableLocationNamesHandler.java:57)
	at com.raytheon.uf.edex.dataaccess.handler.GetAvailableLocationNamesHandler.handleRequest(GetAvailableLocationNamesHandler.java:1)
	at com.raytheon.uf.edex.requestsrv.RequestServiceExecutor.execute(RequestServiceExecutor.java:155)
	at com.raytheon.uf.edex.requestsrv.serialization.SerializingStreamExecutor.execute(SerializingStreamExecutor.java:107)
	at com.raytheon.uf.edex.requestsrv.serialization.ByteLimitingStreamExecutor.execute(ByteLimitingStreamExecutor.java:76)
	at com.raytheon.uf.edex.requestsrv.http.HttpRequestServiceExecutor.execute(HttpRequestServiceExecutor.java:102)
	at sun.reflect.GeneratedMethodAccessor137.invoke()
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:458)
	at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:289)
	at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:262)
	at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:178)
	at org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:41)
	at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
	at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
	at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:116)
	at com.raytheon.uf.edex.esb.camel.MessageProducer$2.process(MessageProducer.java:439)
	at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:110)
	at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542)
	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:120)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)
	at org.apache.camel.component.jetty.CamelContinuationServlet.doService(CamelContinuationServlet.java:191)
	at org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:74)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
	at org.eclipse.jetty.server.Server.handle(Server.java:499)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
	at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
	at java.lang.Thread.run(Thread.java:745)

autodoc failing without shapely dep

WARNING: autodoc: failed to import module u'awips.dataaccess.CombinedTimeQuery'; the following exception was raised:
No module named shapely.wkb
WARNING: autodoc: failed to import module u'awips.dataaccess.DataAccessLayer'; the following exception was raised:
No module named shapely.wkb
WARNING: autodoc: failed to import module u'awips.dataaccess.SoundingsSupport'; the following exception was raised:
No module named shapely.geometry
WARNING: autodoc: failed to import module u'awips.dataaccess.ThriftClientRouter'; the following exception was raised:
No module named shapely.wkb

Storing Data to Edex

I've found code and examples to store HDF5 data using pypies both in here and in the pythonPackages folder of the AWIPS2 github, and can successfully store the hdf5 data.

However, I have not found code or examples on how to update the database entries so that EDEX knows that the data is available for viewing. Is this possible using this package? Is it even possible at all?

Thanks,
Kelton.

Updating the DataTime printout

It would be helpful if the default print string for a dataTime object also included the forecast hour if that's available.
It does seem like the current print string logic tries to accomplish this, but it doesn't seem to be working in practice.

To replicate, use any of the model notebooks and print out a DataTime object that's used to request the data, you'll see it doesn't show the Forecast Hour, which can be confusing because two different DataTime objects can print out the same string.

DataAccessLayer.getAvailableTimes(request, True) return empty array?

`from awips.dataaccess import DataAccessLayer
DataAccessLayer.changeEDEXHost("edex-cloud.unidata.ucar.edu")
request = DataAccessLayer.newDataRequest()
dataTypes = DataAccessLayer.getSupportedDatatypes()
request.setDatatype('grid')

Print availale grids

available_grids = DataAccessLayer.getAvailableLocationNames(request)
available_grids.sort()

Get desired grids

request.setLocationNames('RAP40')
request.setParameters('GH')
#request.setParameters(["T","P","GH","RH","USTM","VSTM"])
request.setLevels("500.0MB")
#request.setLevels(["1000.0MB","850.0MB","700.0MB","500.0MB","300.0MB"])
cycles = DataAccessLayer.getAvailableTimes(request, True)
times = DataAccessLayer.getAvailableTimes(request)
#cycle = datetime.strptime("4/10/2017 12:00", "%Y-%m-%d %H:%M:%S")
#cycle = "2017-10-04 00:00:00"
print(cycles)
response = DataAccessLayer.getGridData(request, cycles[0])
`

fails on last line of above snippet because 0 is out of bounds for an array of length 0.

print(cycles) returns []. This is consistent for multiple models/arguments for request.setLocationNames

Tried to work around by writing my cycle as a string but it requires a time object so that was a no go.

Thanks,
Ryan

setMethod is erroring out when trying to run the NEXRAD3 notebook

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
File ~/anaconda3_host/envs/python-awips-v20/lib/python3.12/site-packages/dynamicserialize/ThriftSerializationContext.py:213, in ThriftSerializationContext._deserializeField(self, structname, obj)
    212 try:
--> 213     setMethod = getattr(obj, lookingFor)
    214     setMethod(result)                

AttributeError: 'DataTime' object has no attribute 'setLevelType'

During handling of the above exception, another exception occurred:

SerializationException                    Traceback (most recent call last)

    214         setMethod(result)                
    215     except:
--> 216         raise dynamicserialize.SerializationException(
    217             "Couldn't find setter method " + lookingFor)
    219 self.protocol.readFieldEnd()
    220 return True

SerializationException: Couldn't find setter method setLevelType```

Segmentation Fault: 11 when attempting to "Plot Global Water Vapor Composite"

Code

from awips.dataaccess import DataAccessLayer
import cartopy.crs as ccrs
import cartopy.feature as cfeat
import matplotlib.pyplot as plt
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import numpy as np
import datetime

DataAccessLayer.changeEDEXHost("edex-cloud.unidata.ucar.edu")
request = DataAccessLayer.newDataRequest()
request.setDatatype("satellite")

request.setLocationNames("Global")
availableProducts = DataAccessLayer.getAvailableParameters(request)
availableProducts.sort()
request.setParameters(availableProducts[0])

utc = datetime.datetime.utcnow()
times = DataAccessLayer.getAvailableTimes(request)
hourdiff = utc - datetime.datetime.strptime(str(times[-1]),'%Y-%m-%d %H:%M:%S')
hours,days = hourdiff.seconds/3600,hourdiff.days
minute = str((hourdiff.seconds - (3600 * hours)) / 60)
offsetStr = ''
if hours > 0:
    offsetStr += str(hours) + "hr "
offsetStr += str(minute) + "m ago"
if days > 1:
    offsetStr = str(days) + " days ago"

print("Found "+ str(len(times)) +" available times")
print("  "+str(times[0]) + "\n    to\n  " + str(times[-1]))
print("Using "+str(times[-1]) + " ("+offsetStr+")")

response = DataAccessLayer.getGridData(request, [times[-1]])
grid = response[0]
data = grid.getRawData()
lons,lats = grid.getLatLonCoords()
bbox = [lons.min(), lons.max(), lats.min(), lats.max()]

print("grid size " + str(data.shape))
print("grid extent " + str(list(bbox)))

def make_map(bbox, projection=ccrs.PlateCarree()):
    fig, ax = plt.subplots(figsize=(18,14),
            subplot_kw=dict(projection=projection))
    ax.set_extent(bbox)
    ax.coastlines(resolution='50m')
    gl = ax.gridlines(draw_labels=True)
    gl.xlabels_top = gl.ylabels_right = False
    gl.xformatter = LONGITUDE_FORMATTER
    gl.yformatter = LATITUDE_FORMATTER
    return fig, ax

fig, ax = make_map(bbox=bbox)
# State boundaries
states = cfeat.NaturalEarthFeature(category='cultural',
                                    name='admin_1_states_provinces_lines',
                                    scale='50m', facecolor='none')
ax.add_feature(states, linestyle=':')
cs = ax.pcolormesh(lons, lats, data, cmap='Greys_r')
cbar = fig.colorbar(cs, shrink=0.9, orientation='horizontal')
cbar.set_label(str(grid.getLocationName())+" " \
               +str(grid.getParameter())+" " \
               +str(grid.getDataTime().getRefTime()))
plt.tight_layout()

Output

Found 204 available times
  2017-07-16 03:00:00
    to
  2017-08-10 15:00:00
Using 2017-08-10 15:00:00 (3hr 18m ago)
grid size (1024, 2048)
grid extent [-179.91191, 179.99982, -89.977936, 89.890022]
Segmentation fault: 11

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.