Commit fdc9ed0d authored by jlaura's avatar jlaura Committed by GitHub
Browse files

Adds tests for GDAL not installed (#71)

* Adds tests for GDAL not installed

* typo in travis else

* proper matrix build

* semicolons...I write python

* updates test with conditional osr

* Proper pytest skipping enabled for conditional imports

* missed pytest import

* Typos

* Mixing pytest and unittest

* typos and imports

* typos city

* removes hasosr

* fixes wrapper for conditional gdal

* Removes test for non-available gdal
parent 7ee78052
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -10,8 +10,10 @@ os:
  - osx

env:
  - PYTHON_VERSION=3.5
  - PYTHON_VERSION=3.6
  - PYTHON_VERSION=3.5 HAS_GDAL=true
  - PYTHON_VERSION=3.6 HAS_GDAL=true
  - PYTHON_VERSION=3.5 HAS_GDAL=false
  - PYTHON_VERSION=3.6 HAS_GDAL=false

before_install:
  # We do this conditionally because it saves us some downloading if the
@@ -37,7 +39,11 @@ before_install:
install:
  - conda config --add channels usgs-astrogeology
  - conda config --add channels conda-forge
  - conda install libgdal gdal numpy pyproj h5py pvl scipy protobuf affine jinja2 networkx pandas sqlalchemy pyyaml ncurses usgscam pytest pytest-cov sh coveralls nbsphinx
  - if $HAS_GDAL; then
      conda install libgdal gdal numpy pyproj h5py pvl scipy protobuf affine jinja2 networkx pandas sqlalchemy pyyaml ncurses pytest pytest-cov sh coveralls nbsphinx;
    else
      conda install numpy pyproj h5py pvl scipy protobuf affine jinja2 networkx pandas sqlalchemy pyyaml ncurses pytest pytest-cov sh coveralls nbsphinx;
    fi

script:
  - pytest --cov=plio
+20 −0
Original line number Diff line number Diff line
import importlib
import warnings

cam = importlib.find_loader('usgscam')
cycsm_isd = importlib.find_loader('cycsm.isd')

if cam:
    cam = cam.load_module()

if cycsm_isd:
    cycsm_isd = cycsm_isd.load_module()

def conditional_cameras(func):
    def cam_check(*args, **kwargs):
        if cam:
            return func(*args, **kwargs)
        else:
            warning.warn('Trying to call a camera method, but usgscam is not installed.')
            return None
        return cam_check
 No newline at end of file
+3 −10
Original line number Diff line number Diff line
import datetime
import json

try:
    import usgscam as cam
    from cycsm.isd import Isd
    camera_support = True
except:
    camera_support = False
import requests

from plio.utils.utils import find_in_dict
from plio.io.io_json import NumpyEncoder

from plio.camera import conditional_cameras, cam, cycsm_isd

def data_from_cube(header):
    data = {}
@@ -28,16 +22,15 @@ def data_from_cube(header):
    data['SPACECRAFT_CLOCK_START_COUNT'] = find_in_dict(header, 'SpacecraftClockCount')
    return data

@conditional_cameras
def create_camera(obj, url='http://smalls:8002/api/1.0/missions/mars_reconnaissance_orbiter/csm_isd'):
    if not camera_support:
        print("Usgscam library not installed. Camera capabilities are disabled")
    
    data = json.dumps(data_from_cube(obj.metadata), cls=NumpyEncoder)
    r = requests.post(url, data=data)

    # Get the ISD back and instantiate a local ISD for the image
    isd = r.json()['data']['isd']
    i = Isd.loads(isd)
    i = cycsm_isd.Isd.loads(isd)

    # Create the plugin and camera as usual
    plugin = cam.genericls.Plugin()
+5 −5
Original line number Diff line number Diff line
@@ -5,9 +5,7 @@ from unittest import mock
import pytest
import pvl

import usgscam

from plio.camera import csm
from plio.camera import csm, cam, conditional_cameras
from plio.examples import get_path

def mock_requests_post(*args, **kwargs):
@@ -35,11 +33,13 @@ def header():
def req_obj():
    return 

@pytest.mark.skipif(cam is None, reason="Cameras not installed")
def test_data_from_cube(header):
    data = csm.data_from_cube(header)
    assert data['START_TIME'] == datetime.datetime(2008, 9, 17, 5, 8, 10, 820000)

@pytest.mark.skipif(cam is None, reason="Cameras not installed")
@mock.patch('requests.post', side_effect=mock_requests_post)
def test_create_camera(header):
    cam = csm.create_camera(header)
    assert isinstance(cam, usgscam.genericls.SensorModel)
    created_camera = csm.create_camera(header)
    assert isinstance(create_camera, cam.genericls.SensorModel)
+23 −0
Original line number Diff line number Diff line
# Conditional imports for GDAL
import importlib
import warnings

gdal = importlib.find_loader('gdal')
ogr = importlib.find_loader('osgeo.ogr')
osr = importlib.find_loader('osr')

if gdal:
    gdal = gdal.load_module()
    ogr = ogr.load_module()
    osr = osr.load_module()
    gdal.UseExceptions() 

def conditional_gdal(func):
    def has_gdal(*args, **kwargs):
        if gdal:
            return func(*args, **kwargs)
        else:
            warning.warn('Trying to call a GDAL method, but GDAL is not installed.')
        return None
    return has_gdal

from . import io_autocnetgraph
from . import io_controlnetwork
from . import io_db
Loading