diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..be70a7fdd8bd00d614478babb8f4dbe76a0b82ec --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,39 @@ +# Changelog + +All changes that impact users of this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +<!--- +This document is intended for users of the applications and API. Changes to things +like tests should not be noted in this document. + +When updating this file for a PR, add an entry for your change under Unreleased +and one of the following headings: + - Added - for new features. + - Changed - for changes in existing functionality. + - Deprecated - for soon-to-be removed features. + - Removed - for now removed features. + - Fixed - for any bug fixes. + - Security - in case of vulnerabilities. + +If the heading does not yet exist under Unreleased, then add it as a 3rd heading, +with three #. + + +When preparing for a public release candidate add a new 2nd heading, with two #, under +Unreleased with the version number and the release date, in year-month-day +format. Then, add a link for the new version at the bottom of this document and +update the Unreleased link so that it compares against the latest release tag. + + +When preparing for a bug fix release create a new 2nd heading above the Fixed +heading to indicate that only the bug fixes and security fixes are in the bug fix +release. +--> +## [Unreleased] + +### Added +- Added this CHANGELOG.md file to track changes to the library +- Added a warning when to_isis is called without a target name fixing [#126](https://github.com/USGS-Astrogeology/plio/issues/126). diff --git a/environment.yml b/environment.yml index f0394f47df2c28e7ae5aef73c14cf47f4568945d..6513c5f2d4730029281183292334ba2e44ecfe37 100644 --- a/environment.yml +++ b/environment.yml @@ -8,7 +8,7 @@ dependencies: - numpy - pyproj - h5py - - pvl >= 1.0 + - pvl >= 1.3.0 - scipy - protobuf - affine diff --git a/plio/io/io_controlnetwork.py b/plio/io/io_controlnetwork.py index 75196b5040c0062903115a93e2500fb0d5b4d60c..3649d664027df60736783975e94228ac3542abe3 100644 --- a/plio/io/io_controlnetwork.py +++ b/plio/io/io_controlnetwork.py @@ -122,6 +122,10 @@ def to_isis(obj, path, mode='wb', version=2, description='None', username=DEFAULTUSERNAME, creation_date=None, modified_date=None, pointid_prefix=None, pointid_suffix=None): + + if targetname == 'None': + warnings.warn("Users should provide a targetname to this function such as 'Moon' or 'Mars' in order to generate a valid ISIS control network.") + with IsisStore(path, mode) as store: if not creation_date: creation_date = strftime("%Y-%m-%d %H:%M:%S", gmtime()) @@ -220,7 +224,7 @@ class IsisStore(object): Given an ISIS store, read the underlying ISIS3 compatible control network and return an IsisControlNetwork dataframe. """ - pvl_header = pvl.load(self._path) + pvl_header = pvl.load(self._path, grammar=pvl.grammar.ISISGrammar()) header_start_byte = find_in_dict(pvl_header, 'HeaderStartByte') header_bytes = find_in_dict(pvl_header, 'HeaderBytes') point_start_byte = find_in_dict(pvl_header, 'PointsStartByte') diff --git a/plio/io/tests/test_io_controlnetwork.py b/plio/io/tests/test_io_controlnetwork.py index 134206ae14aaec2b93c10045a78995cebcb6113c..094c54dd3e3dc7a56219185b9c110b7cd0e2f3c9 100644 --- a/plio/io/tests/test_io_controlnetwork.py +++ b/plio/io/tests/test_io_controlnetwork.py @@ -56,6 +56,10 @@ def test_log_error(): with pytest.raises(TypeError) as err: io_controlnetwork.MeasureLog(2, 'foo') +def test_to_isis_wo_targetname(cnet_dataframe, tmpdir): + with pytest.warns(UserWarning, match="Users should provide a targetname"): + io_controlnetwork.to_isis(cnet_dataframe, tmpdir.join('test.net'), mode='wb', targetname='None') # 'None' is the default. + def test_to_protobuf(): value = 1.25 int_dtype = 2 @@ -87,7 +91,7 @@ def cnet_dataframe(tmpdir): df.creation_date = strftime("%Y-%m-%d %H:%M:%S", gmtime()) df.modified_date = strftime("%Y-%m-%d %H:%M:%S", gmtime()) - io_controlnetwork.to_isis(df, tmpdir.join('test.net'), mode='wb', targetname='Moon') + #io_controlnetwork.to_isis(df, tmpdir.join('test.net'), mode='wb', targetname='Moon') df.header_message_size = 78 df.point_start_byte = 65614 # 66949 @@ -97,6 +101,8 @@ def cnet_dataframe(tmpdir): return df def test_create_buffer_header(cnet_dataframe, tmpdir): + # Write the cnet + io_controlnetwork.to_isis(cnet_dataframe, tmpdir.join('test.net'), mode='wb', targetname='Moon') with open(tmpdir.join('test.net'), 'rb') as f: f.seek(io_controlnetwork.HEADERSTARTBYTE) @@ -114,6 +120,8 @@ def test_create_buffer_header(cnet_dataframe, tmpdir): assert cnet_dataframe.measure_size == header_protocol.pointMessageSizes def test_create_point(cnet_dataframe, tmpdir): + # Write the cnet + io_controlnetwork.to_isis(cnet_dataframe, tmpdir.join('test.net'), mode='wb', targetname='Moon') with open(tmpdir.join('test.net'), 'rb') as f: f.seek(cnet_dataframe.point_start_byte) for i, length in enumerate(cnet_dataframe.measure_size): @@ -148,9 +156,10 @@ def test_create_point_wo_reference_index(cnet_dataframe, tmpdir): assert (test_cnet.referenceIndex == reference_idx).all() def test_create_pvl_header(cnet_dataframe, tmpdir): - with open(tmpdir.join('test.net'), 'rb') as f: - pvl_header = pvl.load(f) - + # Write the cnet + io_controlnetwork.to_isis(cnet_dataframe, tmpdir.join('test.net'), mode='wb', targetname='Moon') + with open(tmpdir.join('test.net'), 'rb') as stream: + pvl_header = pvl.load(stream, grammar=pvl.grammar.ISISGrammar()) npoints = find_in_dict(pvl_header, 'NumberOfPoints') assert 5 == npoints diff --git a/recipe/meta.yaml b/recipe/meta.yaml index f4e22459812c3d5e2cbbfc06b4ea16f81c37b0e1..63a32afb86edfdc1a1d02c52d0f0ca6620705c2b 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -20,7 +20,7 @@ requirements: - python - setuptools - numpy - - pvl + - pvl >= 1.3.0 - protobuf - gdal - icu @@ -36,7 +36,7 @@ requirements: - python - setuptools - numpy - - pvl >= 1.0 + - pvl >= 1.3.0 - protobuf - gdal - icu