From d1ac9da78c54d8f465b51417aba3533ce07434cb Mon Sep 17 00:00:00 2001 From: mike-gangl Date: Thu, 29 Jun 2023 07:27:09 -0700 Subject: [PATCH 1/6] fixed version release, added changelog items --- .github/workflows/release.yml | 6 +++--- CHANGELOG.md | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f08960c..a9dcdae 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -57,7 +57,7 @@ jobs: python -m pip install --upgrade pip # Retry 3 times before the steps actually fails because sometimes it takes a minute for pip to recognize the new version - (echo "pip Install Attempt: 1" && pip install --force unity_py==${{ needs.release.outputs.publishedVersion }}) || \ - (echo "pip Install Attempt: 2" && pip install --force unity_py==${{ needs.release.outputs.publishedVersion }}) || \ - (echo "pip Install Attempt: 3" && pip install --force unity_py==${{ needs.release.outputs.publishedVersion }}) || \ + (echo "pip Install Attempt: 1" && pip install --force unity-sds-client==${{ needs.release.outputs.publishedVersion }}) || \ + (echo "pip Install Attempt: 2" && pip install --force unity-sds-client==${{ needs.release.outputs.publishedVersion }}) || \ + (echo "pip Install Attempt: 3" && pip install --force unity-sds-client==${{ needs.release.outputs.publishedVersion }}) || \ (echo "pip Install Step Failed" && exit 1) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c72d40..1101c08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 -------- +## UNRELEASED + +### Added +### Fixed +* fixed release workflow to test against `unity-sds-client` not `unity_py` +### Changed +### Removed +### Security +### Deprecated + ## [0.1.2] - 2023-06-28 ### Added From b87da94ad6a3edcc7d5a5f53b2c3cafcca4853f6 Mon Sep 17 00:00:00 2001 From: mike-gangl Date: Thu, 29 Jun 2023 07:27:59 -0700 Subject: [PATCH 2/6] added new install info to README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index aa247f6..0e7d269 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@ Unity-Py is a Python client to simplify interactions with NASA's Unity Platform. ## Installation +### Install from pypi +``` +pip install unity-sds-client +``` + ### Install from Github ``` python -m pip install git+https://github.com/unity-sds/unity-py.git From 5405d8f5b8f3ce8a6a5e0c2089b5f59aff00f143 Mon Sep 17 00:00:00 2001 From: Anil Natha Date: Tue, 1 Aug 2023 12:05:26 -0700 Subject: [PATCH 3/6] Updated package name so that import references `unity-sds-client` as opposed to `unity_py`. --- README.md | 6 +-- notebooks/README.md | 2 +- notebooks/mercury-dashboard.ipynb | 53 ++++++++++++++++--- pyproject.toml | 2 +- tests/test_unity_py.py | 6 +-- tests/test_unity_stac.py | 4 +- {unity_py => unity_sds_client}/__init__.py | 0 .../envs/unity.test.cfg | 0 .../resources/__init__.py | 0 .../resources/collection.py | 8 +-- .../resources/data_file.py | 2 +- .../resources/dataset.py | 6 +-- .../resources/job.py | 10 ++-- .../resources/job_status.py | 0 .../resources/process.py | 8 +-- .../services/__init__.py | 0 .../services/application_service.py | 0 .../services/data_service.py | 8 +-- .../services/process_service.py | 8 +-- {unity_py => unity_sds_client}/unity.py | 12 ++--- .../unity_environments.py | 0 .../unity_exception.py | 0 .../unity_services.py | 2 +- .../unity_session.py | 2 +- .../utils/__init__.py | 0 {unity_py => unity_sds_client}/utils/http.py | 0 26 files changed, 88 insertions(+), 51 deletions(-) rename {unity_py => unity_sds_client}/__init__.py (100%) rename {unity_py => unity_sds_client}/envs/unity.test.cfg (100%) rename {unity_py => unity_sds_client}/resources/__init__.py (100%) rename {unity_py => unity_sds_client}/resources/collection.py (96%) rename {unity_py => unity_sds_client}/resources/data_file.py (79%) rename {unity_py => unity_sds_client}/resources/dataset.py (89%) rename {unity_py => unity_sds_client}/resources/job.py (89%) rename {unity_py => unity_sds_client}/resources/job_status.py (100%) rename {unity_py => unity_sds_client}/resources/process.py (92%) rename {unity_py => unity_sds_client}/services/__init__.py (100%) rename {unity_py => unity_sds_client}/services/application_service.py (100%) rename {unity_py => unity_sds_client}/services/data_service.py (91%) rename {unity_py => unity_sds_client}/services/process_service.py (94%) rename {unity_py => unity_sds_client}/unity.py (85%) rename {unity_py => unity_sds_client}/unity_environments.py (100%) rename {unity_py => unity_sds_client}/unity_exception.py (100%) rename {unity_py => unity_sds_client}/unity_services.py (80%) rename {unity_py => unity_sds_client}/unity_session.py (98%) rename {unity_py => unity_sds_client}/utils/__init__.py (100%) rename {unity_py => unity_sds_client}/utils/http.py (100%) diff --git a/README.md b/README.md index aa247f6..59e808d 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,9 @@ The order of Authentication Parameters is as follows: ### Running your first command ``` -from unity_py.unity import Unity -from unity_py.unity_session import UnitySession -from unity_py.unity_services import UnityServices as services +from unity_sds_client.unity import Unity +from unity_sds_client.unity_session import UnitySession +from unity_sds_client.unity_services import UnityServices as services s = Unity() dataManager = s.client(services.DATA_SERVICE) diff --git a/notebooks/README.md b/notebooks/README.md index d72f94e..859ce2b 100644 --- a/notebooks/README.md +++ b/notebooks/README.md @@ -2,7 +2,7 @@ ## mercury-dashboard.ipynb -An example notebook using the unity-py client to create a pseudo operator dashboard. Proof of concept and a way of defining what items need to be in the client, and what metadata/data services need to return. +An example notebook using the unity-sds-client Python package to create a pseudo operator dashboard. Proof of concept and a way of defining what items need to be in the client, and what metadata/data services need to return. ### requirements ``` diff --git a/notebooks/mercury-dashboard.ipynb b/notebooks/mercury-dashboard.ipynb index 0136090..ea1cfc3 100644 --- a/notebooks/mercury-dashboard.ipynb +++ b/notebooks/mercury-dashboard.ipynb @@ -8,11 +8,11 @@ "outputs": [], "source": [ "import mercury as mr # for widgets\n", - "from unity_py.unity import Unity\n", - "from unity_py.unity_session import UnitySession\n", - "from unity_py.unity_services import UnityServices as services\n", + "from unity_sds_client.unity import Unity\n", + "from unity_sds_client.unity_session import UnitySession\n", + "from unity_sds_client.unity_services import UnityServices as services\n", "import pandas as pd\n", - "from unity_py.resources.job import Job, JobStatus\n" + "from unity_sds_client.resources.job import Job, JobStatus\n" ] }, { @@ -23,7 +23,24 @@ "outputs": [ { "data": { - "application/mercury+json": "{\n \"widget\": \"App\",\n \"title\": \"Unity Operator Dashboard - Mercury Sample\",\n \"description\": \"Sample Unity Dashboard in Mercury\",\n \"show_code\": false,\n \"show_prompt\": false,\n \"share\": \"public\",\n \"output\": \"app\",\n \"schedule\": \"\",\n \"notify\": \"{}\",\n \"continuous_update\": true,\n \"static_notebook\": false,\n \"show_sidebar\": true,\n \"full_screen\": true,\n \"allow_download\": true,\n \"model_id\": \"mercury-app\",\n \"code_uid\": \"App.0.40.25.1-randeadd304c\"\n}", + "application/mercury+json": { + "allow_download": true, + "code_uid": "App.0.40.25.1-randeadd304c", + "continuous_update": true, + "description": "Sample Unity Dashboard in Mercury", + "full_screen": true, + "model_id": "mercury-app", + "notify": "{}", + "output": "app", + "schedule": "", + "share": "public", + "show_code": false, + "show_prompt": false, + "show_sidebar": true, + "static_notebook": false, + "title": "Unity Operator Dashboard - Mercury Sample", + "widget": "App" + }, "text/html": [ "

Mercury Application

This output won't appear in the web app." ], @@ -68,7 +85,16 @@ "outputs": [ { "data": { - "application/mercury+json": "{\n \"widget\": \"Select\",\n \"value\": null,\n \"choices\": [\n \"l1b-cwl:develop\"\n ],\n \"label\": \"Select Workflow\",\n \"model_id\": \"a5b3fdb9bf6541c8aaa76b4d3f75250d\",\n \"code_uid\": \"Select.0.40.14.1-randfd7ea563\"\n}", + "application/mercury+json": { + "choices": [ + "l1b-cwl:develop" + ], + "code_uid": "Select.0.40.14.1-randfd7ea563", + "label": "Select Workflow", + "model_id": "a5b3fdb9bf6541c8aaa76b4d3f75250d", + "value": null, + "widget": "Select" + }, "application/vnd.jupyter.widget-view+json": { "model_id": "a5b3fdb9bf6541c8aaa76b4d3f75250d", "version_major": 2, @@ -222,7 +248,18 @@ "outputs": [ { "data": { - "application/mercury+json": "{\n \"widget\": \"Select\",\n \"value\": \"1234\",\n \"choices\": [\n \"1234\",\n \"iido\",\n \"131231455\"\n ],\n \"label\": \"Select Workflow\",\n \"model_id\": \"f1430f80dd9e4b1487753f7ebd9893fe\",\n \"code_uid\": \"Select.0.40.14.1-rand89a0b65b\"\n}", + "application/mercury+json": { + "choices": [ + "1234", + "iido", + "131231455" + ], + "code_uid": "Select.0.40.14.1-rand89a0b65b", + "label": "Select Workflow", + "model_id": "f1430f80dd9e4b1487753f7ebd9893fe", + "value": "1234", + "widget": "Select" + }, "application/vnd.jupyter.widget-view+json": { "model_id": "f1430f80dd9e4b1487753f7ebd9893fe", "version_major": 2, @@ -336,7 +373,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "image/svg+xml": [ "\n", " Date: Wed, 2 Aug 2023 12:17:34 -0700 Subject: [PATCH 4/6] Updated changelog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1101c08..e33b4bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed * fixed release workflow to test against `unity-sds-client` not `unity_py` ### Changed +* updated package name so that imports reference `unity_sds_client` not `unity_py` ### Removed ### Security ### Deprecated From 533773b4005a4566e062debb09e24f609b2c1b75 Mon Sep 17 00:00:00 2001 From: Anil Natha Date: Mon, 7 Aug 2023 12:27:23 -0700 Subject: [PATCH 5/6] Bumped version number to 0.2.0. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6de8308..140f33d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "unity-sds-client" -version = "0.1.2" +version = "0.2.0" description = "Unity-Py is a Python client to simplify interactions with NASA's Unity Platform." authors = ["Anil Natha, Mike Gangl"] readme = "README.md" From 828927208e4b925310a4cf817f398bebb37621cf Mon Sep 17 00:00:00 2001 From: mike-gangl Date: Thu, 10 Aug 2023 08:47:15 -0700 Subject: [PATCH 6/6] added collection info to stac items --- CHANGELOG.md | 4 +++- ...17.m06.g233.L1_AQ.std.v02_48.G.200425130422.json | 1 + tests/test_unity_stac.py | 7 +++++++ unity_sds_client/resources/collection.py | 13 ++++++++++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e33b4bc..e243da6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 -------- -## UNRELEASED + +## [0.2.0] - 2023-08-10 ### Added +* Added parsing of collection in stac items ### Fixed * fixed release workflow to test against `unity-sds-client` not `unity_py` ### Changed diff --git a/tests/test_files/SNDR.SS1330.CHIRP.20160829T2317.m06.g233.L1_AQ.std.v02_48.G.200425130422.json b/tests/test_files/SNDR.SS1330.CHIRP.20160829T2317.m06.g233.L1_AQ.std.v02_48.G.200425130422.json index b431e39..599a2f5 100644 --- a/tests/test_files/SNDR.SS1330.CHIRP.20160829T2317.m06.g233.L1_AQ.std.v02_48.G.200425130422.json +++ b/tests/test_files/SNDR.SS1330.CHIRP.20160829T2317.m06.g233.L1_AQ.std.v02_48.G.200425130422.json @@ -1,6 +1,7 @@ { "type": "Feature", "stac_version": "1.0.0", + "collection": "collection_test", "id": "SNDR.SS1330.CHIRP.20160829T2317.m06.g233.L1_AQ.std.v02_48.G.200425130422", "properties": { "datetime": "2016-08-29T23:17:00Z", diff --git a/tests/test_unity_stac.py b/tests/test_unity_stac.py index 8571232..3d3058a 100644 --- a/tests/test_unity_stac.py +++ b/tests/test_unity_stac.py @@ -23,6 +23,9 @@ def test_read_stac(): datasets = collection.datasets assert len(datasets) == 2 + # Added 8/10/23 to check the STAC collection information + assert datasets[1].collection_id == 'C2011289787-GES_DISC' + data_files = collection.data_locations() assert len(data_files) == 6 data_files = collection.data_locations(["data","opendap"]) @@ -37,6 +40,8 @@ def test_read_stac(): #Try a "classic" catalog + item files stac catalog collection = Collection.from_stac("tests/test_files/catalog_01.json") datasets = collection.datasets + # Added 8/10/23 to check the STAC collection information + assert datasets[0].collection_id == 'collection_test' assert len(datasets) == 1 data_files = collection.data_locations() assert len(data_files) == 2 @@ -102,6 +107,8 @@ def test_unity_to_stac(): prop_count = 0 for d in collection._datasets: + # Added 8/10/23 to check the STAC collection information + assert d.collection_id == 'SNDR13CHRP1AQCal_rebin' for df in d.datafiles: assert application_output_directory in df.location assert os.path.isabs(df.location) == True diff --git a/unity_sds_client/resources/collection.py b/unity_sds_client/resources/collection.py index c7f4d04..3bc7d7b 100644 --- a/unity_sds_client/resources/collection.py +++ b/unity_sds_client/resources/collection.py @@ -88,6 +88,7 @@ def to_stac(collection, data_dir): id=dataset.id, geometry=dataset.geometry, bbox=dataset.bbox, + collection=dataset.collection_id, datetime = date_parser.parse(dataset.data_begin_time), properties={ "datetime": dataset.data_begin_time, @@ -163,7 +164,17 @@ def from_stac(stac_file): collection = Collection(id) # Catch file not found... ? for item in items: - ds = Dataset(item.id, item.properties.get("collection"), item.properties.get("start_datetime",None), item.properties.get("end_datetime", None), item.properties.get("created", None)) + # if the id of the catalog and the id of the collection items are not the same, + # then use the one that is a part of the collection item definition + # Added 8/10/23 + ds = Dataset(item.id, id, item.properties.get("start_datetime", None), + item.properties.get("end_datetime", None), item.properties.get("created", None)) + if item.collection_id is not None and item.collection_id != id: + print ("if2") + ds = Dataset(item.id, item.collection_id, item.properties.get("start_datetime", None), + item.properties.get("end_datetime", None), item.properties.get("created", None)) + + ds.bbox = item.bbox ds.geometry = item.geometry