diff --git a/.github/workflows/metadata-catalog.yml b/.github/workflows/metadata-catalog.yml index cc5d4af..6620d2a 100644 --- a/.github/workflows/metadata-catalog.yml +++ b/.github/workflows/metadata-catalog.yml @@ -59,132 +59,8 @@ jobs: cat dist/index.json | jq . echo "Partition files:" jq -r '.partitions[].path' dist/index.json - # Continue-on-error allows subsequent steps to run even if this one fails. - # We need this so the artifact upload step can execute on failure. - continue-on-error: true - - - name: Upload validation report artifact - # This step runs on both success and failure - if: always() - uses: actions/upload-artifact@v4 - with: - name: validation-report - path: dist/index.json - - - name: Check for validation failure - # This step explicitly fails the job if the generation step failed. - if: steps.generate-metadata.outcome == 'failure' - run: | - echo "Metadata generation failed. See the 'validation-report' artifact for details." - exit 1 - - name: Upload metadata to S3 (sync) - run: | - aws s3 sync dist/metadata/ ${{ env.S3_BASE_PATH }}/ - - - name: Repair / add partitions - run: | - aws athena start-query-execution \ - --query-string "MSCK REPAIR TABLE ${TABLE_NAME}" \ - --query-execution-context Database=${ATHENA_DATABASE} \ - --result-configuration OutputLocation=${ATHENA_RESULT_BUCKET} - - - name: Verify partition count - run: | - QID=$(aws athena start-query-execution \ - --query-string "SHOW PARTITIONS ${TABLE_NAME}" \ - --query-execution-context Database=${ATHENA_DATABASE} \ - --result-configuration OutputLocation=${ATHENA_RESULT_BUCKET} \ - --query-execution-context Database=${ATHENA_DATABASE} | jq -r '.QueryExecutionId') - echo "QueryExecutionId=$QID"; - # Poll for completion - STATUS="PENDING" - RESULT_JSON="" - for i in $(seq 1 30); do - RESULT_JSON=$(aws athena get-query-execution --query-execution-id $QID) - STATUS=$(echo "$RESULT_JSON" | jq -r '.QueryExecution.Status.State'); - if [ "$STATUS" = "SUCCEEDED" ]; then break; fi - if [ "$STATUS" = "FAILED" ] || [ "$STATUS" = "CANCELLED" ]; then - echo "::error::Athena query $QID ended with status $STATUS" >&2 - echo "$RESULT_JSON" | jq -r '.QueryExecution.Status.StateChangeReason' >&2 - exit 1 - fi - sleep 4 - done - if [ "$STATUS" != "SUCCEEDED" ]; then - echo "::error::Athena query $QID did not succeed (status=$STATUS)" >&2 - exit 1 - fi - OUTPUT_URI=$(echo "$RESULT_JSON" | jq -r '.QueryExecution.ResultConfiguration.OutputLocation') - if [ -z "$OUTPUT_URI" ] || [ "$OUTPUT_URI" = "null" ]; then - echo "::error::Athena did not return an output location for query $QID" >&2 - exit 1 - fi - echo "OutputLocation=$OUTPUT_URI" - DOWNLOAD_OK="false" - for attempt in $(seq 1 5); do - if aws s3 cp "$OUTPUT_URI" partitions.csv; then - DOWNLOAD_OK="true" - break - fi - echo "Waiting for result file to appear... (attempt $attempt)" - sleep 2 - done - if [ "$DOWNLOAD_OK" != "true" ]; then - echo "::error::Failed to download Athena results from $OUTPUT_URI" >&2 - exit 1 - fi - echo "Partitions:"; cat partitions.csv - - - name: Sample query (count rows) - run: | - QID=$(aws athena start-query-execution \ - --query-string "SELECT count(*) FROM ${TABLE_NAME}" \ - --query-execution-context Database=${ATHENA_DATABASE} \ - --result-configuration OutputLocation=${ATHENA_RESULT_BUCKET} | jq -r '.QueryExecutionId') - STATUS="PENDING" - RESULT_JSON="" - for i in $(seq 1 30); do - RESULT_JSON=$(aws athena get-query-execution --query-execution-id $QID) - STATUS=$(echo "$RESULT_JSON" | jq -r '.QueryExecution.Status.State'); - if [ "$STATUS" = "SUCCEEDED" ]; then break; fi - if [ "$STATUS" = "FAILED" ] || [ "$STATUS" = "CANCELLED" ]; then - echo "::error::Athena query $QID ended with status $STATUS" >&2 - echo "$RESULT_JSON" | jq -r '.QueryExecution.Status.StateChangeReason' >&2 - exit 1 - fi - sleep 4 - done - if [ "$STATUS" != "SUCCEEDED" ]; then - echo "::error::Athena query $QID did not succeed (status=$STATUS)" >&2 - exit 1 - fi - OUTPUT_URI=$(echo "$RESULT_JSON" | jq -r '.QueryExecution.ResultConfiguration.OutputLocation') - if [ -z "$OUTPUT_URI" ] || [ "$OUTPUT_URI" = "null" ]; then - echo "::error::Athena did not return an output location for query $QID" >&2 - exit 1 - fi - echo "OutputLocation=$OUTPUT_URI" - DOWNLOAD_OK="false" - for attempt in $(seq 1 5); do - if aws s3 cp "$OUTPUT_URI" rowcount.csv; then - DOWNLOAD_OK="true" - break - fi - echo "Waiting for result file to appear... (attempt $attempt)" - sleep 2 - done - if [ "$DOWNLOAD_OK" != "true" ]; then - echo "::error::Failed to download Athena results from $OUTPUT_URI" >&2 - exit 1 - fi - echo "Row count:"; cat rowcount.csv - - - name: Post-run summary + - name: Upload and process metadata run: | - echo "Metadata catalog workflow completed."; - echo "Table: ${TABLE_NAME}"; - echo "S3 Base Path: ${S3_BASE_PATH}"; - echo "Database: ${ATHENA_DATABASE}"; + uv run publish-metadata-to-s3 --root . - # Optional: simple failure notification step could be added here. diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000..2658792 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,2 @@ +[MESSAGES CONTROL] +disable=logging-fstring-interpolation diff --git a/pipelines/rme_to_athena/layer_definitions.json b/pipelines/rme_to_athena/layer_definitions.json index acde31f..220c9ec 100644 --- a/pipelines/rme_to_athena/layer_definitions.json +++ b/pipelines/rme_to_athena/layer_definitions.json @@ -14,7 +14,7 @@ "dtype": "REAL", "friendly_name": "Existing Beaver Dam Capacity", "data_unit": "km^-1", - "description": "", + "description": "The existing number of beaver dams per unit of riverscape length that the riverscape can support", "is_key": false, "is_required": false, "theme": "Beaver", @@ -26,7 +26,7 @@ "dtype": "REAL", "friendly_name": "Historical Beaver Dam Capacity", "data_unit": "km^-1", - "description": "", + "description": "The historic number of beaver dams per unit of riverscapes length that the riverscape could support based on modeled historic vegetation", "is_key": false, "is_required": false, "theme": "Beaver", @@ -38,7 +38,7 @@ "dtype": "TEXT", "friendly_name": "Risks to Beaver Dam Restoration", "data_unit": "NA", - "description": "", + "description": "Categorical values of risk that beaver dam building activity could pose to human infrastructure", "is_key": false, "is_required": false, "theme": "Beaver", @@ -50,7 +50,7 @@ "dtype": "TEXT", "friendly_name": "Opportunities for Beaver Dam Restoration", "data_unit": "NA", - "description": "", + "description": "Categorical values of beaver-related restoration and conservation opportunities", "is_key": false, "is_required": false, "theme": "Beaver", @@ -62,7 +62,7 @@ "dtype": "TEXT", "friendly_name": "Limiting Factors to Bever Dam Restoration", "data_unit": "NA", - "description": "", + "description": "Categorical natural and anthropogenic limitations on beaver dam building", "is_key": false, "is_required": false, "theme": "Beaver", @@ -74,7 +74,7 @@ "dtype": "REAL", "friendly_name": "Existing Beaver Dam Complex Size", "data_unit": "count", - "description": "", + "description": "The number of dams the section of riverscape could support", "is_key": false, "is_required": false, "theme": "Beaver", @@ -86,7 +86,7 @@ "dtype": "REAL", "friendly_name": "Historical Beaver Dam Complex Size", "data_unit": "count", - "description": "", + "description": "The number of dams the section of riverscapes could historically support based on modeled historic vegetation", "is_key": false, "is_required": false, "theme": "Beaver", @@ -98,7 +98,7 @@ "dtype": "TEXT", "friendly_name": "Dam Setting", "data_unit": "NA", - "description": "", + "description": "Beaver dam setting (classic, steep, floodplain)", "is_key": false, "is_required": false, "theme": "Beaver", @@ -110,7 +110,7 @@ "dtype": "TEXT", "friendly_name": "Ownership Code", "data_unit": "NA", - "description": "", + "description": "Dominant ownership within the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -122,7 +122,7 @@ "dtype": "TEXT", "friendly_name": "US State", "data_unit": "NA", - "description": "", + "description": "The dominant US state within the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -134,7 +134,7 @@ "dtype": "TEXT", "friendly_name": "US County", "data_unit": "NA", - "description": "", + "description": "The dominant county within the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -146,7 +146,7 @@ "dtype": "REAL", "friendly_name": "Drainage Area", "data_unit": "km^2", - "description": "", + "description": "The drainage area of the primary channel in the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -158,7 +158,7 @@ "dtype": "TEXT", "friendly_name": "Watershed ID", "data_unit": "NA", - "description": "", + "description": "The 10-digit USGS watershed Hydrologic Unit Code", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -170,7 +170,7 @@ "dtype": "TEXT", "friendly_name": "Stream Name", "data_unit": "NA", - "description": "", + "description": "The name of the primary stream in the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -182,7 +182,7 @@ "dtype": "INTEGER", "friendly_name": "Stream Order", "data_unit": "NA", - "description": "", + "description": "Strahler Stream Order of the primary stream in the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -194,7 +194,7 @@ "dtype": "INTEGER", "friendly_name": "Is Headwater", "data_unit": "NA", - "description": "", + "description": "zero if not a headwater, one if a headwater", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -206,7 +206,7 @@ "dtype": "REAL", "friendly_name": "Stream Length", "data_unit": "m", - "description": "", + "description": "Sum of stream segment lengths (NHD flow lines) within the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -218,7 +218,7 @@ "dtype": "TEXT", "friendly_name": "Waterbody Type", "data_unit": "NA", - "description": "", + "description": "The NHD FCode of waterbody within the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -230,7 +230,7 @@ "dtype": "REAL", "friendly_name": "Waterbody Extent", "data_unit": "m^2", - "description": "", + "description": "The area of waterbody within the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -242,7 +242,7 @@ "dtype": "TEXT", "friendly_name": "Ecoregion 3", "data_unit": "NA", - "description": "", + "description": "EPA Ecoregion Level 3", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -254,7 +254,7 @@ "dtype": "TEXT", "friendly_name": "Ecoregion 4", "data_unit": "NA", - "description": "", + "description": "EPA Ecoregion Level 4", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -266,7 +266,7 @@ "dtype": "REAL", "friendly_name": "Elevation", "data_unit": "m", - "description": "", + "description": "The minimum elevation in the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -278,7 +278,7 @@ "dtype": "TEXT", "friendly_name": "Geology", "data_unit": "NA", - "description": "", + "description": "The dominant geology type within the DGO", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -290,7 +290,7 @@ "dtype": "TEXT", "friendly_name": "HUC12", "data_unit": "NA", - "description": "", + "description": "The 12-digit USGS watershed Hydrologic Unit Code", "is_key": false, "is_required": false, "theme": "Descriptive", @@ -302,7 +302,7 @@ "dtype": "REAL", "friendly_name": "Primary Channel Gradient", "data_unit": "%", - "description": "", + "description": "The gradient of the primary channel in the DGO", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -314,7 +314,7 @@ "dtype": "REAL", "friendly_name": "Valley Bottom Gradient", "data_unit": "%", - "description": "", + "description": "The gradient of the riverscape centerline", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -326,7 +326,7 @@ "dtype": "REAL", "friendly_name": "Relative Flow Length", "data_unit": "m/m", - "description": "", + "description": "Sum of stream lengths in the DGO divided by length of valley centerline", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -338,7 +338,7 @@ "dtype": "INTEGER", "friendly_name": "Number of Confluences", "data_unit": "count", - "description": "", + "description": "Number of anabranch confluences within the DGO", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -350,7 +350,7 @@ "dtype": "INTEGER", "friendly_name": "Number of Diffluences", "data_unit": "count", - "description": "", + "description": "Number of anabranch diffluences within the DGO", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -362,7 +362,7 @@ "dtype": "INTEGER", "friendly_name": "Number of Tributaries", "data_unit": "count", - "description": "", + "description": "Number of tributary confluences within the DGO", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -374,7 +374,7 @@ "dtype": "REAL", "friendly_name": "Tributaries per Kilometer", "data_unit": "km^-1", - "description": "", + "description": "The number of tributaries per unit of riverscape length.", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -386,7 +386,7 @@ "dtype": "REAL", "friendly_name": "Planform Sinuosity", "data_unit": "m/m", - "description": "", + "description": "Sum of river length divided by the valley bottom length within moving window.", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -398,7 +398,7 @@ "dtype": "REAL", "friendly_name": "Low-lying Area", "data_unit": "m^2", - "description": "", + "description": "The area of valley bottom classified as 'low_lying' within the DGO", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -410,7 +410,7 @@ "dtype": "REAL", "friendly_name": "Elevated Area", "data_unit": "m^2", - "description": "", + "description": "The area of valley bottom classified as 'elevated' within the DGO", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -422,7 +422,7 @@ "dtype": "REAL", "friendly_name": "Channel Area", "data_unit": "m^2", - "description": "", + "description": "The area of active channel within the DGO.", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -434,7 +434,7 @@ "dtype": "REAL", "friendly_name": "Floodplain Area", "data_unit": "m^2", - "description": "", + "description": "The area of active floodplain within the DGO.", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -446,7 +446,7 @@ "dtype": "REAL", "friendly_name": "Integrated Width", "data_unit": "m", - "description": "", + "description": "The width of the riverscape", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -458,7 +458,7 @@ "dtype": "REAL", "friendly_name": "Active Channel Ratio", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of the riverscape that is active channel", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -470,7 +470,7 @@ "dtype": "REAL", "friendly_name": "Low Lying Ratio", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of the riversape that is relatively low-lying surface", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -482,7 +482,7 @@ "dtype": "REAL", "friendly_name": "Elevated Ratio", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of the riverscape that is relatively elevated surface", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -494,7 +494,7 @@ "dtype": "REAL", "friendly_name": "Floodplain Ratio", "data_unit": "m^2/m^2", - "description": "", + "description": "proportion of the riverscape that is floodplain (low-lying + elevated; not channel)", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -506,7 +506,7 @@ "dtype": "REAL", "friendly_name": "Acres Valley Bottom Per Mile", "data_unit": "acre/mile", - "description": "", + "description": "Area of valley bottom per riverscape length", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -518,7 +518,7 @@ "dtype": "REAL", "friendly_name": "Hectares Valley Bottom Per Kilometer", "data_unit": "ha/km", - "description": "", + "description": "Area of valley bottom per riverscape length", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -530,7 +530,7 @@ "dtype": "REAL", "friendly_name": "Channel Width", "data_unit": "m", - "description": "", + "description": "Width of the primary channel in the DGO", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -542,7 +542,7 @@ "dtype": "REAL", "friendly_name": "Confinement Ratio", "data_unit": "m/m", - "description": "", + "description": "The ratio of channel length that abuts a confining margin to the total channel length", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -554,7 +554,7 @@ "dtype": "REAL", "friendly_name": "Constriction Ratio", "data_unit": "m/m", - "description": "", + "description": "The ratio of channel length constricted by confining margins on both sides to total channel length", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -566,7 +566,7 @@ "dtype": "REAL", "friendly_name": "Confining Margins", "data_unit": "m", - "description": "", + "description": "The length of confining margins within the DGO", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -578,7 +578,7 @@ "dtype": "REAL", "friendly_name": "Constricting Margins", "data_unit": "m", - "description": "", + "description": "The length of constricting margins (confining on both sides of the channel simultaneously) within the DGO", "is_key": false, "is_required": false, "theme": "Geomorphic", @@ -590,7 +590,7 @@ "dtype": "REAL", "friendly_name": "Low Flow", "data_unit": "ft^3/s", - "description": "", + "description": "Low flow value of the primary channel in the DGO", "is_key": false, "is_required": false, "theme": "Hydrologic context", @@ -602,7 +602,7 @@ "dtype": "REAL", "friendly_name": "High Flow", "data_unit": "ft^3/s", - "description": "", + "description": "Typical flood (Q2) flow value of the primary channel in the DGO", "is_key": false, "is_required": false, "theme": "Hydrologic context", @@ -614,7 +614,7 @@ "dtype": "REAL", "friendly_name": "Low Stream Power", "data_unit": "W", - "description": "", + "description": "Low flow stream power", "is_key": false, "is_required": false, "theme": "Hydrologic context", @@ -626,7 +626,7 @@ "dtype": "REAL", "friendly_name": "High Stream Power", "data_unit": "W", - "description": "", + "description": "Typical flood (Q2) stream power", "is_key": false, "is_required": false, "theme": "Hydrologic context", @@ -638,7 +638,7 @@ "dtype": "REAL", "friendly_name": "Road Length", "data_unit": "m", - "description": "", + "description": "Length of roads within the DGO", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -650,7 +650,7 @@ "dtype": "REAL", "friendly_name": "Road Density", "data_unit": "m/m", - "description": "", + "description": "Length of roads per length of riverscape centerline", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -662,7 +662,7 @@ "dtype": "REAL", "friendly_name": "Rail Length", "data_unit": "m", - "description": "", + "description": "Length of railroads within the DGO", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -674,7 +674,7 @@ "dtype": "REAL", "friendly_name": "Rail Density (m/m)", "data_unit": "m/m", - "description": "", + "description": "Length of railroads per length of riverscape centerline", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -686,7 +686,7 @@ "dtype": "REAL", "friendly_name": "Land Use Intensity", "data_unit": "NA", - "description": "", + "description": "Land use intensity from 0 (None) to 100 (High) within the DGO", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -698,7 +698,7 @@ "dtype": "REAL", "friendly_name": "Minimum Distance Between Channel and Roads", "data_unit": "m", - "description": "", + "description": "The minimum distance between roads and river channels", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -710,7 +710,7 @@ "dtype": "REAL", "friendly_name": "Minimum Distance Between Channel and Railroads", "data_unit": "m", - "description": "", + "description": "The minimum distance between railroads and river channels", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -722,7 +722,7 @@ "dtype": "REAL", "friendly_name": "Minimum Distance Between Channel and Diversions", "data_unit": "m", - "description": "", + "description": "The minimum distance between diversion points and river channels", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -734,7 +734,7 @@ "dtype": "REAL", "friendly_name": "Minimum Distance Between Channel and Canals", "data_unit": "m", - "description": "", + "description": "The minimum distance between canals and river channels", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -746,7 +746,7 @@ "dtype": "REAL", "friendly_name": "Minimum Distance Between Channel and Infrastructure", "data_unit": "m", - "description": "", + "description": "The minimum distance between any infrastructure and river channels", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -758,7 +758,7 @@ "dtype": "REAL", "friendly_name": "Floodplain Accessibility", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of flooplain accessible to the channel (e.g., via lateral migration)", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -770,7 +770,7 @@ "dtype": "REAL", "friendly_name": "Floodplain Acessibility Extent", "data_unit": "m^2", - "description": "", + "description": "The area of the accessible floodplain", "is_key": false, "is_required": false, "theme": "Anthropogenic Impact", @@ -782,7 +782,7 @@ "dtype": "TEXT", "friendly_name": "Dominant Existing Vegetation Classes", "data_unit": "NA", - "description": "", + "description": "The dominant Landfire EVT classes", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -794,7 +794,7 @@ "dtype": "TEXT", "friendly_name": "Dominstant Historical Vegetation Classes", "data_unit": "NA", - "description": "", + "description": "The dominant Landfire BpS classes", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -806,7 +806,7 @@ "dtype": "REAL", "friendly_name": "Proportion Agriculture", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of agricultural cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -818,7 +818,7 @@ "dtype": "REAL", "friendly_name": "Area Agriculture", "data_unit": "m^2", - "description": "", + "description": "The area of agricultural cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -830,7 +830,7 @@ "dtype": "REAL", "friendly_name": "Proprotion Coniferous", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of conifer cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -842,7 +842,7 @@ "dtype": "REAL", "friendly_name": "Area Coniferous", "data_unit": "m^2", - "description": "", + "description": "The area of conifer cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -854,7 +854,7 @@ "dtype": "REAL", "friendly_name": "Proportion Mixed Hardwood/Coniferous", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of mixed conifer-hardwood cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -866,7 +866,7 @@ "dtype": "REAL", "friendly_name": "Area Mixed Hardwood/Coniferous", "data_unit": "m^2", - "description": "", + "description": "The area of mixed conifer-hardwood cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -878,7 +878,7 @@ "dtype": "REAL", "friendly_name": "Proportion Developed", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of the riverscape that is developed", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -890,7 +890,7 @@ "dtype": "REAL", "friendly_name": "Area Developed", "data_unit": "m^2", - "description": "", + "description": "The area of the riverscape that is developed", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -902,7 +902,7 @@ "dtype": "REAL", "friendly_name": "Proportion Exotic Herbacious", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion exotic herbaceous cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -914,7 +914,7 @@ "dtype": "REAL", "friendly_name": "Area Exotic Herbacious", "data_unit": "m^2", - "description": "", + "description": "The area of exotic herbaceous cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -926,7 +926,7 @@ "dtype": "REAL", "friendly_name": "Proportion Exotic Trees or Shrubs", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of exotic tree and shrub cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -938,7 +938,7 @@ "dtype": "REAL", "friendly_name": "Area Exotic Tree or Shrub", "data_unit": "m^2", - "description": "", + "description": "The area of exotic tree and shrub cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -950,7 +950,7 @@ "dtype": "REAL", "friendly_name": "Proportion Grassland", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of grassland cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -962,7 +962,7 @@ "dtype": "REAL", "friendly_name": "Area Grassland", "data_unit": "m^2", - "description": "", + "description": "The area of grassland cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -974,7 +974,7 @@ "dtype": "REAL", "friendly_name": "Proportion Hardwood", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of hardwood forest cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -986,7 +986,7 @@ "dtype": "REAL", "friendly_name": "Area Hardwood", "data_unit": "m^2", - "description": "", + "description": "The area of hardwood forest cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -998,7 +998,7 @@ "dtype": "REAL", "friendly_name": "Proportion Riparian Vegetation", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of riparian vegetation cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1010,7 +1010,7 @@ "dtype": "REAL", "friendly_name": "Area Riparian Vegetation", "data_unit": "m^2", - "description": "", + "description": "The area of riparian vegetation cover in the riverscape (from LandFire)", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1022,7 +1022,7 @@ "dtype": "REAL", "friendly_name": "Proportion Shrubland", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of shrubland cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1034,7 +1034,7 @@ "dtype": "REAL", "friendly_name": "Area Shrubland", "data_unit": "m^2", - "description": "", + "description": "The area of shrubland cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1046,7 +1046,7 @@ "dtype": "REAL", "friendly_name": "Proportion Sparsely Vegetated", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of the riverscape that is sparsely vegetated", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1058,7 +1058,7 @@ "dtype": "REAL", "friendly_name": "Area Sparsely Vegetated", "data_unit": "m^2", - "description": "", + "description": "The area of the riverscape that is sparsely vegetated", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1070,7 +1070,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion Coniferous", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of conifer cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1082,7 +1082,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Coniferous", "data_unit": "m^2", - "description": "", + "description": "The historic area of conifer cover in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1094,7 +1094,7 @@ "dtype": "REAL", "friendly_name": "Hisotric Proportion Mixed Coniferous/Hardwood", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of mixed conifer-hardwood forest in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1106,7 +1106,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Mixed Coniferous/Hardwood", "data_unit": "m^2", - "description": "", + "description": "The historic area of mixed conifer-hardwood forest in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1118,7 +1118,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion Grassland", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of grassland in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1130,7 +1130,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Grassland", "data_unit": "m^2", - "description": "", + "description": "The historic area of grassland in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1142,7 +1142,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion Hardwood", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of hardwood forest in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1154,7 +1154,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Hardwood", "data_unit": "m^2", - "description": "", + "description": "The historic area of hardwood forest in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1166,7 +1166,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion Mixed Hardwood/Conifer", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of mixed hardwood-conifer forest in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1178,7 +1178,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Mixed Hardwood/Conifer", "data_unit": "m^2", - "description": "", + "description": "The historic area of mixed hardwood-conifer forest in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1190,7 +1190,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion Peatland", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of peatland forest in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1202,7 +1202,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Peatland", "data_unit": "m^2", - "description": "", + "description": "The historic area of peatland forest in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1214,7 +1214,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion Peatland or Non-Forest", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of non-forested peatland in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1226,7 +1226,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Peatland or Non-Forest", "data_unit": "m^2", - "description": "", + "description": "The historic area of non-forested peatland in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1238,7 +1238,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion Riparian Vegetation", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of riparian vegetation in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1250,7 +1250,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Riparian Vegetation", "data_unit": "m^2", - "description": "", + "description": "The historic area of riparian vegetation in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1262,7 +1262,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion Savanna", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of savanna in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1274,7 +1274,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Savanna", "data_unit": "m^2", - "description": "", + "description": "The historic area of savanna in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1286,7 +1286,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion Shrubland", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of shrubland in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1298,7 +1298,7 @@ "dtype": "REAL", "friendly_name": "Historic Area Shrubland", "data_unit": "m^2", - "description": "", + "description": "The historic area of shrubland in the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1310,7 +1310,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion of Sparse Vegetation", "data_unit": "m^2/m^2", - "description": "", + "description": "The historic proportion of the riverscape that was sparsely vegetated", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1322,7 +1322,7 @@ "dtype": "REAL", "friendly_name": "Historic Area of Sparse Vegetation", "data_unit": "m^2", - "description": "", + "description": "The historic area of the riverscape that was sparsely vegetated", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1334,7 +1334,7 @@ "dtype": "REAL", "friendly_name": "Area of Riparian Vegetation", "data_unit": "m^2", - "description": "", + "description": "Area of existing riparian vegetation (as calculated by RCAT, which includes additonal landfire categories)", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1346,7 +1346,7 @@ "dtype": "REAL", "friendly_name": "Historic Area of Riparian Vegetation", "data_unit": "m^2", - "description": "", + "description": "Area of historic riparian vegetation (as calculated by RCAT, which includes additonal landfire categories)", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1358,7 +1358,7 @@ "dtype": "REAL", "friendly_name": "Proportion of Riparian Vegetation", "data_unit": "m^2/m^2", - "description": "", + "description": "The area of existing riparian cover divided by the area of the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1370,7 +1370,7 @@ "dtype": "REAL", "friendly_name": "Historic Proportion of Riparian Vegetation", "data_unit": "m^2/m^2", - "description": "", + "description": "The area of historic riparian cover divided by the area of the riverscape", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1382,7 +1382,7 @@ "dtype": "REAL", "friendly_name": "Riparian Proportion Current over Historic", "data_unit": "m^2/m^2", - "description": "", + "description": "Ratio of existing riparian vegetation cover over historic riparian vegetation cover. This is often expressed or symbolized as departure from historic which is 1 minus this value. Value of -9999 means valley too narrow to sample.", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1394,7 +1394,7 @@ "dtype": "REAL", "friendly_name": "Conversion from Riparian to Agriculture", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of historic riparian vegetation converted to agriculture", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1406,7 +1406,7 @@ "dtype": "REAL", "friendly_name": "Conversion from Riparian to Developed", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of historic riparian vegetation converted to developed", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1418,7 +1418,7 @@ "dtype": "REAL", "friendly_name": "Conversion from Riparian to Grass/Shrubland", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of historic riparian vegetation converted to grass-shrubland", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1430,7 +1430,7 @@ "dtype": "REAL", "friendly_name": "Conversion from Riparian to Conifer", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of historic riparian vegetation converted to conifer", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1442,7 +1442,7 @@ "dtype": "REAL", "friendly_name": "Conversion from Native Riparian to Invasive", "data_unit": "m^2/m^2", - "description": "", + "description": "The proportion of historic riparian vegetation converted to invasive vegetation", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1454,7 +1454,7 @@ "dtype": "REAL", "friendly_name": "Riparian Condition Index", "data_unit": "NA", - "description": "", + "description": "A riparian condition index from (0) poor to (1) intact based on riparian vegetation departure, land use intensity, and floodplain accessibility", "is_key": false, "is_required": false, "theme": "Vegetation Context", @@ -1466,7 +1466,7 @@ "dtype": "POINT", "friendly_name": "DGO Geometry", "data_unit": "", - "description": "", + "description": "Well-known-binary (WKB) representation of the DGO Polygon", "is_key": false, "is_required": false, "theme": "DGOS", @@ -1478,7 +1478,7 @@ "dtype": "TEXT", "friendly_name": "Level Path", "data_unit": "", - "description": "", + "description": "the NHD level path, which is a unique identifier for each stream from its origin to its end in the NHDPlusHR dataset", "is_key": false, "is_required": false, "theme": "DGOS", @@ -1490,7 +1490,7 @@ "dtype": "MEDIUMINT", "friendly_name": "Segment Distance", "data_unit": "", - "description": "", + "description": "(From VBET) the distance along a given level path that the IGO is located (used for toplogical purposes)", "is_key": false, "is_required": false, "theme": "DGOS", @@ -1502,7 +1502,7 @@ "dtype": "REAL", "friendly_name": "Riverscape Length", "data_unit": "", - "description": "", + "description": "The length of valley centerline", "is_key": false, "is_required": false, "theme": "DGOS", @@ -1514,7 +1514,7 @@ "dtype": "REAL", "friendly_name": "Riverscape Area", "data_unit": "", - "description": "", + "description": "the area of the DGO polygon", "is_key": false, "is_required": false, "theme": "DGOS", @@ -1526,7 +1526,7 @@ "dtype": "MEDIUMINT", "friendly_name": "Feature Code", "data_unit": "", - "description": "", + "description": "The NHD Feature Code representing flow type of the primary channel", "is_key": false, "is_required": false, "theme": "DGOS", @@ -1538,7 +1538,7 @@ "dtype": "TEXT", "friendly_name": "RME Project ID", "data_unit": "", - "description": "", + "description": "Project ID for the source metric engine project on Riverscapes Data Exchange, data.riverscapes.net", "is_key": false, "is_required": false, "theme": "meta", @@ -1550,7 +1550,7 @@ "dtype": "INTEGER", "friendly_name": "RME Date Created Timesteamp", "data_unit": "", - "description": "", + "description": "Timestamp of date RME project was created", "is_key": false, "is_required": false, "theme": "meta", @@ -1562,7 +1562,7 @@ "dtype": "TEXT", "friendly_name": "RME Project Version", "data_unit": "", - "description": "", + "description": "RME Version as string, e.g. 1.3.4", "is_key": false, "is_required": false, "theme": "meta", @@ -1574,7 +1574,7 @@ "dtype": "INTEGER", "friendly_name": "RME Project Version Integer", "data_unit": "", - "description": "", + "description": "RME Version as integer e.g. 10", "is_key": false, "is_required": false, "theme": "meta", diff --git a/pipelines/rscontext_to_athena/layer_definitions.json b/pipelines/rscontext_to_athena/layer_definitions.json index 8717e2d..3a9e94e 100644 --- a/pipelines/rscontext_to_athena/layer_definitions.json +++ b/pipelines/rscontext_to_athena/layer_definitions.json @@ -13,7 +13,7 @@ "name": "huc", "dtype": "TEXT", "friendly_name": "", - "data_unit": "", + "data_unit": "NA", "description": "", "is_key": false, "is_required": false, @@ -25,7 +25,7 @@ "name": "hucName", "dtype": "TEXT", "friendly_name": "Watershed Name", - "data_unit": "", + "data_unit": "NA", "description": "", "is_key": false, "is_required": false, @@ -96,7 +96,7 @@ "name": "flowlineFeatureCount", "dtype": "INTEGER", "friendly_name": "Number of Stream Segments", - "data_unit": "Unitless" + "data_unit": "count" }, { "name": "waterbodyAreaSqKm", @@ -108,7 +108,7 @@ "name": "waterbodyFeatureCount", "dtype": "INTEGER", "friendly_name": "Total count of Waterbodies", - "data_unit": "Unitless" + "data_unit": "count" }, { "name": "waterbodyLakesPondsAreaSqKm", @@ -150,8 +150,8 @@ "name": "dem_bins.min", "dtype": "REAL", "friendly_name": "Lowest Elevation", - "data_unit": "", - "description": "", + "data_unit": "m", + "description": "Minimum elevation value within the watershed’s DEM raster.", "is_key": false, "is_required": false, "theme": "", @@ -162,8 +162,8 @@ "name": "dem_bins.max", "dtype": "REAL", "friendly_name": "Highest Elevation", - "data_unit": "", - "description": "", + "description": "Maximum elevation value within the watershed’s DEM raster.", + "data_unit": "m", "is_key": false, "is_required": false, "theme": "", @@ -173,9 +173,9 @@ { "name": "dem_bins.geotransform", "dtype": "ARRAY", - "friendly_name": "", - "data_unit": "", - "description": "", + "friendly_name": "Raster Geotransform", + "data_unit": "NA", + "description": "Affine transformation coefficients for converting raster coordinates to spatial coordinates.", "is_key": false, "is_required": false, "theme": "", @@ -185,9 +185,9 @@ { "name": "dem_bins.proj", "dtype": "TEXT", - "friendly_name": "", - "data_unit": "", - "description": "", + "friendly_name": "Raster Projection (WKT)", + "data_unit": "NA", + "description": "Well-Known Text (WKT) string describing the spatial reference system of the DEM raster.", "is_key": false, "is_required": false, "theme": "", @@ -197,21 +197,20 @@ { "name": "dem_bins.nodata", "dtype": "REAL", - "friendly_name": "", - "data_unit": "", - "description": "", + "friendly_name": "NoData Value", + "data_unit": "NA", + "description": "Value used in the DEM raster to represent missing or undefined data.", "is_key": false, "is_required": false, "theme": "", - "preferred_bin_definition": "", "default_value": null }, { "name": "dem_bins.value_count", "dtype": "INTEGER", - "friendly_name": "", - "data_unit": "", - "description": "", + "friendly_name": "Valid Cell Count", + "data_unit": "count", + "description": "Number of raster cells with valid elevation values (excluding NoData)", "is_key": false, "is_required": false, "theme": "", @@ -221,50 +220,50 @@ { "name": "dem_bins.hist_type", "dtype": "TEXT", - "friendly_name": "", - "data_unit": "", - "description": "", + "friendly_name": "Histogram Type", + "data_unit": "NA", + "description": "Method used to bin elevation values. Continuous means bins are of equal width.", "is_key": false, "is_required": false, "theme": "", - "preferred_bin_definition": "", "default_value": null }, { "name": "dem_bins.bin_size", "dtype": "INTEGER", - "friendly_name": "", - "data_unit": "", - "description": "", - "is_key": false, - "is_required": false, + "friendly_name": "Bin Size", + "data_unit": "m", + "description": "Width of each elevation bin used in the hypsometric analysis", "theme": "", - "preferred_bin_definition": "", "default_value": null }, { "name": "dem_bins.bins.bin", "dtype": "INTEGER", - "friendly_name": "", - "data_unit": "", - "description": "", + "friendly_name": "Elevation Bin Value", + "data_unit": "m", + "description": "Lower bound of the bin", "is_key": false, "is_required": false, "theme": "", - "preferred_bin_definition": "", "default_value": null }, { "name": "dem_bins.bins.cell_count", "dtype": "INTEGER", - "friendly_name": "", - "data_unit": "", - "description": "", + "friendly_name": "Cell Count", + "data_unit": "count", + "description": "Number of raster cells falling within elevation bin", "is_key": false, "is_required": false, "theme": "", - "preferred_bin_definition": "", "default_value": null + }, + { + "name": "existing_veg_bins", + "dtype": "STRUCT", + "friendly_name": "Existing Vegetation Bins", + "description": "Categorical bins extracted from the LandFire Existing Vegetation Type (EVT) raster. Complexes of plant communities representing NatureServe's terrestrial Ecological Systems classification." } ] } diff --git a/uv.lock b/uv.lock index 8cb603e..f6ca05a 100644 --- a/uv.lock +++ b/uv.lock @@ -95,30 +95,30 @@ wheels = [ [[package]] name = "boto3" -version = "1.40.71" +version = "1.42.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore" }, { name = "jmespath" }, { name = "s3transfer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2e/d8/c316637525560e01cbf048fd88f29be73214411ad26e743f3b1950df76f0/boto3-1.40.71.tar.gz", hash = "sha256:6d38e0250154552658be92a62cd48adf8ca8fd4abc181fb52d13371b53179503", size = 111638, upload-time = "2025-11-11T20:25:02.621Z" } +sdist = { url = "https://files.pythonhosted.org/packages/25/f9/808ed6c387802399a9d6c3a6cc3d09d19376dbbcdf228a8ca501b7f98eda/boto3-1.42.7.tar.gz", hash = "sha256:eda49046c0f6a21ac159f9b2d609e5cc70d1dd019b7ac9618eec99285282b3db", size = 112817, upload-time = "2025-12-10T20:32:10.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/5c/e1ef895ceaf42826b21c2a85b281cb31d3fc7056fb03d5d2d4beeb0ee574/boto3-1.40.71-py3-none-any.whl", hash = "sha256:4ac9ee8d1629e45d6b6adc727795d1fc9852e998cd1a73e4eda50f6120677bab", size = 139357, upload-time = "2025-11-11T20:24:59.376Z" }, + { url = "https://files.pythonhosted.org/packages/99/87/0929d68046575a2171a6ef8681a14e707c25e1dcc6db883f1729c3c111cd/boto3-1.42.7-py3-none-any.whl", hash = "sha256:c5cb2ada690c14e2dfa1e1c59ef7ef399c5e381f5514f1541d28310e35192300", size = 140573, upload-time = "2025-12-10T20:32:08.253Z" }, ] [[package]] name = "botocore" -version = "1.40.71" +version = "1.42.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jmespath" }, { name = "python-dateutil" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5f/2f/7e5b9a0f9f9c958e1b70734be9b5cbcef64a1bfa9a570bcaafea0c997840/botocore-1.40.71.tar.gz", hash = "sha256:7ed28c2e092fc0d67fbfba818fbdccc92426b452cc936bf034db6de717e0d068", size = 14445036, upload-time = "2025-11-11T20:24:50.69Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/76/d55a451399fa3a05a39881976dc9a02e6d60661f7e68976a387da655be5a/botocore-1.42.7.tar.gz", hash = "sha256:cc401b4836eae2a781efa1d1df88b2e92f9245885a6ae1bf9a6b26bc97b3efd2", size = 14855150, upload-time = "2025-12-10T20:31:58.665Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/a3/b44efd9db38d4426740f42c550c0c23502a91328e2cdcbe6f0795191002a/botocore-1.40.71-py3-none-any.whl", hash = "sha256:4c05907b2a56b1f6fd70403fbae0f09a4758b95758192db5ff93c0e9940a11bb", size = 14107773, upload-time = "2025-11-11T20:24:48.115Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/223f3e319a5a710bd28b4e4b5d0ba16a0ee9c858541335ef42fd14443e83/botocore-1.42.7-py3-none-any.whl", hash = "sha256:92128d56654342f026d5c20a92bf0e8b546be1eb38df2c0efc7433e8bbc39045", size = 14527904, upload-time = "2025-12-10T20:31:54.934Z" }, ] [[package]] @@ -1100,9 +1100,10 @@ wheels = [ [[package]] name = "riverscapes-metadata" -version = "0.1.1" -source = { git = "https://github.com/Riverscapes/RiverscapesXML.git?subdirectory=riverscapes_metadata&rev=master#e563b0a84add98dbf59c903e571d49e5a68aa305" } +version = "0.1.2" +source = { git = "https://github.com/Riverscapes/RiverscapesXML.git?subdirectory=riverscapes_metadata&rev=master#7f444ec46a24d3d5ebe7f9e61d8fd1653665a92f" } dependencies = [ + { name = "boto3" }, { name = "jsonschema" }, { name = "pint" }, { name = "pyarrow" }, @@ -1219,14 +1220,14 @@ wheels = [ [[package]] name = "s3transfer" -version = "0.14.0" +version = "0.16.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/62/74/8d69dcb7a9efe8baa2046891735e5dfe433ad558ae23d9e3c14c633d1d58/s3transfer-0.14.0.tar.gz", hash = "sha256:eff12264e7c8b4985074ccce27a3b38a485bb7f7422cc8046fee9be4983e4125", size = 151547, upload-time = "2025-09-09T19:23:31.089Z" } +sdist = { url = "https://files.pythonhosted.org/packages/05/04/74127fc843314818edfa81b5540e26dd537353b123a4edc563109d8f17dd/s3transfer-0.16.0.tar.gz", hash = "sha256:8e990f13268025792229cd52fa10cb7163744bf56e719e0b9cb925ab79abf920", size = 153827, upload-time = "2025-12-01T02:30:59.114Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/f0/ae7ca09223a81a1d890b2557186ea015f6e0502e9b8cb8e1813f1d8cfa4e/s3transfer-0.14.0-py3-none-any.whl", hash = "sha256:ea3b790c7077558ed1f02a3072fb3cb992bbbd253392f4b6e9e8976941c7d456", size = 85712, upload-time = "2025-09-09T19:23:30.041Z" }, + { url = "https://files.pythonhosted.org/packages/fc/51/727abb13f44c1fcf6d145979e1535a35794db0f6e450a0cb46aa24732fe2/s3transfer-0.16.0-py3-none-any.whl", hash = "sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe", size = 86830, upload-time = "2025-12-01T02:30:57.729Z" }, ] [[package]]