Skip to content
Snippets Groups Projects
Commit 3cac5d91 authored by Jay's avatar Jay
Browse files

Adds CSM cameras

parent 1d54c8a3
No related branches found
No related tags found
No related merge requests found
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
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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment