Commit 9a1a8e73 authored by Kelvin Rodriguez's avatar Kelvin Rodriguez Committed by GitHub
Browse files

Merge pull request #65 from jlaura/camera

Adds CSM Camera Module
parents af1cb29e e774c6b2
Loading
Loading
Loading
Loading
+0 −0

Empty file added.

plio/camera/csm.py

0 → 100644
+44 −0
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


def data_from_cube(header):
    data = {}
    data['START_TIME'] = find_in_dict(header, 'StartTime')
    data['SPACECRAFT_NAME'] = find_in_dict(header, 'SpacecraftName')
    data['INSTRUMENT_NAME'] = find_in_dict(header, 'InstrumentId')
    data['SAMPLING_FACTOR'] = find_in_dict(header, 'SpatialSumming')
    data['SAMPLE_FIRST_PIXEL'] = find_in_dict(header, 'SampleFirstPixel')
    data['IMAGE'] = {}
    data['IMAGE']['LINES'] = find_in_dict(header, 'Lines')
    data['IMAGE']['SAMPLES'] = find_in_dict(header, 'Samples')
    data['TARGET_NAME'] = find_in_dict(header, 'TargetName')
    data['LINE_EXPOSURE_DURATION'] = find_in_dict(header, 'LineExposureDuration')
    data['SPACECRAFT_CLOCK_START_COUNT'] = find_in_dict(header, 'SpacecraftClockCount')
    return data

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)

    # Create the plugin and camera as usual
    plugin = cam.genericls.Plugin()
    return plugin.from_isd(i, plugin.modelname(0))
 No newline at end of file
+0 −0

Empty file added.

+45 −0
Original line number Diff line number Diff line
import datetime
import json
from unittest import mock

import pytest
import pvl

import usgscam

from plio.camera import csm
from plio.examples import get_path

def mock_requests_post(*args, **kwargs):
    class MockResponse:
        def __init__(self, json_data, status_code):
            self.json_data = json_data
            self.status_code = status_code

        def json(self):
            return self.json_data

    if 'mars_reconnaissance_orbiter' in args[0]:
        with open(get_path('ctx.response'), 'r') as f:
            resp = json.load(f)
        return MockResponse(resp, 200)

    return MockResponse(None, 404)


@pytest.fixture
def header():
    return pvl.load(get_path('ctx.pvl'))

@pytest.fixture
def req_obj():
    return 

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)

@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)
+1766 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading