als-finder 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- als_finder-1.0.1/.agents/CONVERSATION_DUMP_Phase2.md +21 -0
- als_finder-1.0.1/.agents/rules.md +123 -0
- als_finder-1.0.1/.agents/workflows/docker_build.md +22 -0
- als_finder-1.0.1/.agents/workflows/local_setup.md +23 -0
- als_finder-1.0.1/.agents/workflows/qa_checks.md +21 -0
- als_finder-1.0.1/.dockerignore +14 -0
- als_finder-1.0.1/.env.template +1 -0
- als_finder-1.0.1/.github/workflows/docker-publish.yml +49 -0
- als_finder-1.0.1/.github/workflows/pypi-publish.yml +36 -0
- als_finder-1.0.1/.gitignore +42 -0
- als_finder-1.0.1/ARCHITECTURE.md +29 -0
- als_finder-1.0.1/Dockerfile +36 -0
- als_finder-1.0.1/LICENSE +21 -0
- als_finder-1.0.1/MANIFEST.in +4 -0
- als_finder-1.0.1/PKG-INFO +682 -0
- als_finder-1.0.1/README.md +645 -0
- als_finder-1.0.1/STATUS.md +20 -0
- als_finder-1.0.1/docs/PLAN.md +100 -0
- als_finder-1.0.1/environment.yml +21 -0
- als_finder-1.0.1/examples/ltbmu_boundary.gpkg +0 -0
- als_finder-1.0.1/requirements.txt +12 -0
- als_finder-1.0.1/scripts/test_docker.sh +16 -0
- als_finder-1.0.1/scripts/test_noaa_fast_stac.py +39 -0
- als_finder-1.0.1/scripts/test_noaa_index.py +58 -0
- als_finder-1.0.1/scripts/test_noaa_stac.py +60 -0
- als_finder-1.0.1/setup.cfg +4 -0
- als_finder-1.0.1/setup.py +39 -0
- als_finder-1.0.1/src/als_finder/__init__.py +4 -0
- als_finder-1.0.1/src/als_finder/__main__.py +0 -0
- als_finder-1.0.1/src/als_finder/cli.py +632 -0
- als_finder-1.0.1/src/als_finder/core/__init__.py +0 -0
- als_finder-1.0.1/src/als_finder/core/input_manager.py +95 -0
- als_finder-1.0.1/src/als_finder/core/normalization.py +116 -0
- als_finder-1.0.1/src/als_finder/core/quicklooks.py +219 -0
- als_finder-1.0.1/src/als_finder/core/stac_generator.py +126 -0
- als_finder-1.0.1/src/als_finder/download.py +227 -0
- als_finder-1.0.1/src/als_finder/providers/__init__.py +6 -0
- als_finder-1.0.1/src/als_finder/providers/base.py +46 -0
- als_finder-1.0.1/src/als_finder/providers/noaa.py +261 -0
- als_finder-1.0.1/src/als_finder/providers/opentopography.py +292 -0
- als_finder-1.0.1/src/als_finder/providers/usgs.py +100 -0
- als_finder-1.0.1/src/als_finder.egg-info/PKG-INFO +682 -0
- als_finder-1.0.1/src/als_finder.egg-info/SOURCES.txt +45 -0
- als_finder-1.0.1/src/als_finder.egg-info/dependency_links.txt +1 -0
- als_finder-1.0.1/src/als_finder.egg-info/entry_points.txt +2 -0
- als_finder-1.0.1/src/als_finder.egg-info/requires.txt +13 -0
- als_finder-1.0.1/src/als_finder.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Antigravity State Dump: Phase 2 Execution Completion
|
|
2
|
+
|
|
3
|
+
## Core Summary
|
|
4
|
+
Completed the fundamental integration of **OpenTopography** handling alongside deep CLI parameter unification and Dry-Run `download` payload extraction tracking. The system is structurally completely ready to begin the **PDAL Normalization Pipeline (Phase 3)** smoothly bridging arrays globally.
|
|
5
|
+
|
|
6
|
+
## Finalized Matrices
|
|
7
|
+
1. **Double Date Drop Bug**: Fixed `cli.py` dropping generic temporal subset boundaries erroneously by moving `sort_date` tracking definitions directly prior to logical `<` and `>` exclusions natively cleanly opening subset extraction structurally `/2020-01-01`.
|
|
8
|
+
2. **Tabular Size Render**: Re-coded `download.py` transforming strict iterative text output logs into beautiful explicit ASCII reporting geometries tracking `Tiles`, `True Size`, and native `Format` physically aggregating into formal estimates prior to active physical retrieval.
|
|
9
|
+
3. **HTTP HEAD Parsing**: Intercepted OpenTopography Mode B bounding geometries naturally routing all indices natively through concurrent `ThreadPoolExecutor` abstractions probing the S3 `requests.head` to calculate literal sizes matching standard `Mode A` natively!
|
|
10
|
+
4. **README Consistency**: Rewrote parameter sequences tracking CLI matrices enforcing identical arrays globally (`--roi`, `--name`, `--workspace`) replacing literal texts seamlessly. Cleanly explicitly scoped target Point Density `--density 2/10`. Expanded "federal registries" clause structurally to logically encompass generic "public multi-origin LiDAR repositories".
|
|
11
|
+
5. **Distribution Infrastructure**: Established cross-platform robust package delivery explicitly.
|
|
12
|
+
- **PyPI**: Integrated automated Trusted Publishing via `.github/workflows/pypi-publish.yml` dynamically bridging GitHub Releases to PyPI directly natively.
|
|
13
|
+
- **Conda-Forge**: Finalized PR `#33018` for `als-finder-feedstock` via `staged-recipes`, comprehensively navigating pure Python `noarch` cross-platform edge-cases (implementing native `build.sh` and `bld.bat` explicitly fixing Windows `cmd.exe` limitations executing inline Bash environment variables resolving `SETUPTOOLS_SCM_PRETEND_VERSION`).
|
|
14
|
+
## Current Project Space
|
|
15
|
+
- `git` was fully synchronized and pushed cleanly under `feat: robust tabular payload tracking on dry-runs natively & OT HTTP HEAD evaluations`.
|
|
16
|
+
- `scratch/` workspace was completely expunged securely.
|
|
17
|
+
- **GitHub Issue**: Sourced a tracking PR explicitly bounding the dry-run CLI additions under Milestone `v1.1 (Big-Data Architecture)`.
|
|
18
|
+
|
|
19
|
+
## Next Objective (Phase 3)
|
|
20
|
+
1. Read the newly tracked parameters and verify `src/als_finder/` structures.
|
|
21
|
+
2. Formally initiate native Phase 3 protocols tracking `.laz` normalization integrations gracefully (handling CRS Projections natively leveraging PDAL pipelines). We must natively map formats globally resolving variable geometries!
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Documentation Maintenance Rules
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Documentation Rules
|
|
6
|
+
|
|
7
|
+
## 1. Sync Logic
|
|
8
|
+
- **Code ↔ Docs**: If you change the code behavior (arguments, features, outputs), you MUST update the corresponding documentation immediately.
|
|
9
|
+
- **PLAN.md**: This is a living document. Mark tasks as `[x]` when completed. Add new constraints or steps as they are discovered.
|
|
10
|
+
|
|
11
|
+
## 2. Required Documentation
|
|
12
|
+
- **README.md**: Must contain:
|
|
13
|
+
- Project Title & Description
|
|
14
|
+
- Installation Instructions (Docker & Local)
|
|
15
|
+
- Basic Usage Examples
|
|
16
|
+
- Current Status/badges
|
|
17
|
+
- **docs/**:
|
|
18
|
+
- `PLAN.md`: Implementation roadmap.
|
|
19
|
+
- `API.md`: (Future) Auto-generated or manual API reference.
|
|
20
|
+
- `Architecture.md`: (Optional) Diagram/text explaining the provider -> download flow.
|
|
21
|
+
|
|
22
|
+
## 3. Docstrings
|
|
23
|
+
- Code is not "done" until it is documented.
|
|
24
|
+
- See `python_standards.md` for format.
|
|
25
|
+
---
|
|
26
|
+
description: Rules for Version Control and Checkpointing
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# Git & Checkpointing Rules
|
|
30
|
+
|
|
31
|
+
## 1. Commit Granularity
|
|
32
|
+
- **Atomic Commits**: Commit one logical change at a time. Do not bundle refactors with feature additions.
|
|
33
|
+
- **Frequency**: "Checkpoint" (commit) often. Ideally, after every successful step or file creation/modification that reaches a stable state.
|
|
34
|
+
- **Safety**: Always commit before attempting a risky operation (e.g., large refactor, file deletion).
|
|
35
|
+
|
|
36
|
+
## 2. Commit Message Convention
|
|
37
|
+
Follow the Conventional Commits specification:
|
|
38
|
+
`type(scope): description`
|
|
39
|
+
|
|
40
|
+
- **Types**:
|
|
41
|
+
- `feat`: A new feature
|
|
42
|
+
- `fix`: A bug fix
|
|
43
|
+
- `docs`: Documentation only changes
|
|
44
|
+
- `style`: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
|
|
45
|
+
- `refactor`: A code change that neither fixes a bug nor adds a feature
|
|
46
|
+
- `perf`: A code change that improves performance
|
|
47
|
+
- `test`: Adding missing tests or correcting existing tests
|
|
48
|
+
- `chore`: Changes to the build process or auxiliary tools and libraries
|
|
49
|
+
- `wip`: Work in progress (use sparingly, amend later if possible)
|
|
50
|
+
|
|
51
|
+
- **Example**:
|
|
52
|
+
- `feat(opentopo): implement search function for global datasets`
|
|
53
|
+
- `docs(readme): update installation instructions`
|
|
54
|
+
- `chore(deps): add pdal to requirements`
|
|
55
|
+
|
|
56
|
+
## 3. Branching (If applicable)
|
|
57
|
+
- Main development happens on the current branch unless instructed otherwise.
|
|
58
|
+
- If experimenting, creating a temporary branch is encouraged.
|
|
59
|
+
---
|
|
60
|
+
description: Python Development Guidelines and Standards
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
# Python Development Rules
|
|
64
|
+
|
|
65
|
+
## 1. Code Style & Formatting
|
|
66
|
+
- **Formatter**: Use `black` for code formatting.
|
|
67
|
+
- **Linter**: Use `ruff` or `flake8` for linting.
|
|
68
|
+
- **Imports**: Sort imports using `isort` (or `ruff`'s import sorting).
|
|
69
|
+
- **Line Length**: 88 characters (Black default).
|
|
70
|
+
|
|
71
|
+
## 2. Type Hinting
|
|
72
|
+
- **Mandatory**: All function signatures (arguments and return types) MUST have type hints.
|
|
73
|
+
- **Static Analysis**: Code must pass `mypy` strict mode checks.
|
|
74
|
+
- **Variables**: Type hint complex variables where inference is ambiguous.
|
|
75
|
+
|
|
76
|
+
## 3. Documentation
|
|
77
|
+
- **Docstrings**: All modules, classes, and public functions must have Google-style docstrings.
|
|
78
|
+
- *Example*:
|
|
79
|
+
```python
|
|
80
|
+
def fetch_data(roi: dict) -> pd.DataFrame:
|
|
81
|
+
"""Fetches data for a given region.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
roi (dict): The region of interest geometry.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
pd.DataFrame: Metadata of found datasets.
|
|
88
|
+
"""
|
|
89
|
+
```
|
|
90
|
+
- **Comments**: Use comments to explain *why*, not *what*.
|
|
91
|
+
|
|
92
|
+
## 4. Testing
|
|
93
|
+
- **Framework**: Use `pytest`.
|
|
94
|
+
- **Coverage**: Aim for high test coverage, particularly for core logic in `providers/`.
|
|
95
|
+
- **Fixtures**: Use `conftest.py` for shared fixtures (e.g., sample ROIs).
|
|
96
|
+
|
|
97
|
+
## 5. File Handling
|
|
98
|
+
- **Pathlib**: ALWAYS use `pathlib.Path` instead of `os.path` for file manipulation.
|
|
99
|
+
- **Context Managers**: Use `with` statements for opening files.
|
|
100
|
+
---
|
|
101
|
+
description: Project Directory Structure and Organization
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
# Project Structure
|
|
105
|
+
|
|
106
|
+
## Top Level
|
|
107
|
+
- `src/`: **Source Code**. All application logic resides here.
|
|
108
|
+
- `als_finder/`: The main package.
|
|
109
|
+
- `docs/`: **Documentation**. Plans, API docs, architecture notes.
|
|
110
|
+
- `.agent/`: **Agent Configuration**. Rules and workflows for the AI assistant.
|
|
111
|
+
- `scratch/`: **Scratch Space**. (Gitignored) Primary workspace for debugging scripts and local `tests/`.
|
|
112
|
+
- `data/`: **Local Data**. (Gitignored) Place to store input ROIs or output data during dev.
|
|
113
|
+
- `output/`: **Results**. (Gitignored) Default download destination.
|
|
114
|
+
|
|
115
|
+
## Configuration Files
|
|
116
|
+
- `Dockerfile`: Container definition.
|
|
117
|
+
- `setup.py`: Package installation metadata.
|
|
118
|
+
- `requirements.txt`: Pinned dependencies.
|
|
119
|
+
- `.env`: (Gitignored) Secrets and keys.
|
|
120
|
+
|
|
121
|
+
## Rules
|
|
122
|
+
1. **No Logic at Root**: Do not put python scripts at the top level. Use `src/` or `scripts/`.
|
|
123
|
+
2. **Clean Root**: Only standard config files (`.gitignore`, `README.md`, etc.) belong at the root.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Build and test the Docker container
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Docker Build Workflow
|
|
6
|
+
|
|
7
|
+
## Steps
|
|
8
|
+
|
|
9
|
+
1. **Validate Requirements**
|
|
10
|
+
- Ensure `requirements.txt` is up to date.
|
|
11
|
+
- Ensure `Dockerfile` exists.
|
|
12
|
+
|
|
13
|
+
2. **Build Image**
|
|
14
|
+
- Run: `docker build -t als-finder:latest .`
|
|
15
|
+
|
|
16
|
+
3. **Test Run**
|
|
17
|
+
- Run help command to verify entrypoint:
|
|
18
|
+
`docker run --rm als-finder:latest --help`
|
|
19
|
+
|
|
20
|
+
4. **Integration Test (Optional)**
|
|
21
|
+
- Run a small search to verify connectivity (requires API key):
|
|
22
|
+
`docker run --rm --env-file .env als-finder:latest search --roi tests/sample_roi.json`
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Setup local development environment
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Local Development Setup
|
|
6
|
+
|
|
7
|
+
## 1. Create Virtual Environment
|
|
8
|
+
We use a specific venv named `als-finder-env` to avoid conflicts.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
python3 -m venv als-finder-env
|
|
12
|
+
source als-finder-env/bin/activate
|
|
13
|
+
pip install --upgrade pip
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## 2. Install Dependencies
|
|
17
|
+
```bash
|
|
18
|
+
pip install -r requirements.txt
|
|
19
|
+
pip install -e . # Install package in editable mode
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 3. VS Code Configuration
|
|
23
|
+
Select the interpreter path: `./als-finder-env/bin/python`
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run code quality checks and tests
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Test & Lint Workflow
|
|
6
|
+
|
|
7
|
+
## Steps
|
|
8
|
+
|
|
9
|
+
1. **Format**
|
|
10
|
+
- `black src/ tests/`
|
|
11
|
+
|
|
12
|
+
2. **Lint**
|
|
13
|
+
- `ruff check src/ tests/`
|
|
14
|
+
|
|
15
|
+
3. **Type Check**
|
|
16
|
+
- `mypy src/`
|
|
17
|
+
|
|
18
|
+
4. **Unit Tests**
|
|
19
|
+
- `pytest tests/`
|
|
20
|
+
|
|
21
|
+
// turbo-all
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
OPENTOPOGRAPHY_API_KEY=your_api_key_here
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: Docker Build and Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ "main" ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ "main" ]
|
|
8
|
+
|
|
9
|
+
env:
|
|
10
|
+
REGISTRY: ghcr.io
|
|
11
|
+
IMAGE_NAME: ${{ github.repository }}
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
build-and-push-image:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
packages: write
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout repository
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- name: Log in to the Container registry
|
|
25
|
+
uses: docker/login-action@v3
|
|
26
|
+
with:
|
|
27
|
+
registry: ${{ env.REGISTRY }}
|
|
28
|
+
username: ${{ github.actor }}
|
|
29
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
30
|
+
|
|
31
|
+
- name: Extract metadata (tags, labels) for Docker
|
|
32
|
+
id: meta
|
|
33
|
+
uses: docker/metadata-action@v5
|
|
34
|
+
with:
|
|
35
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
36
|
+
tags: |
|
|
37
|
+
type=raw,value=latest,enable={{is_default_branch}}
|
|
38
|
+
type=ref,event=branch
|
|
39
|
+
|
|
40
|
+
- name: Set up Docker Buildx
|
|
41
|
+
uses: docker/setup-buildx-action@v3
|
|
42
|
+
|
|
43
|
+
- name: Build and push Docker image
|
|
44
|
+
uses: docker/build-push-action@v5
|
|
45
|
+
with:
|
|
46
|
+
context: .
|
|
47
|
+
push: ${{ github.event_name != 'pull_request' }}
|
|
48
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
49
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: Upload Python Package to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
pypi-publish:
|
|
9
|
+
name: Build and publish to PyPI
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
# Specifies that the job requires permission to request an OIDC token
|
|
13
|
+
permissions:
|
|
14
|
+
id-token: write
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Check out repository
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
with:
|
|
21
|
+
fetch-depth: 0 # Required for setuptools_scm to get git tags
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.10"
|
|
27
|
+
|
|
28
|
+
- name: Install build tools
|
|
29
|
+
run: python -m pip install --upgrade pip build
|
|
30
|
+
|
|
31
|
+
- name: Build sdist and wheel
|
|
32
|
+
run: python -m build
|
|
33
|
+
|
|
34
|
+
- name: Publish package to PyPI
|
|
35
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
36
|
+
# No password or username needed. It uses Trusted Publishing (OIDC).
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.pyc
|
|
4
|
+
*.pyo
|
|
5
|
+
*.pyd
|
|
6
|
+
.Python
|
|
7
|
+
env/
|
|
8
|
+
venv/
|
|
9
|
+
.venv/
|
|
10
|
+
als-finder-env/
|
|
11
|
+
.env
|
|
12
|
+
|
|
13
|
+
# Build Artifacts
|
|
14
|
+
build/
|
|
15
|
+
develop-eggs/
|
|
16
|
+
dist/
|
|
17
|
+
downloads/
|
|
18
|
+
eggs/
|
|
19
|
+
.eggs/
|
|
20
|
+
lib/
|
|
21
|
+
lib64/
|
|
22
|
+
parts/
|
|
23
|
+
sdist/
|
|
24
|
+
var/
|
|
25
|
+
wheels/
|
|
26
|
+
*.egg-info/
|
|
27
|
+
.installed.cfg
|
|
28
|
+
*.egg
|
|
29
|
+
MANIFEST
|
|
30
|
+
|
|
31
|
+
# Testing
|
|
32
|
+
.pytest_cache/
|
|
33
|
+
.mypy_cache/
|
|
34
|
+
.tox/
|
|
35
|
+
.coverage
|
|
36
|
+
htmlcov/
|
|
37
|
+
|
|
38
|
+
# Local Workspaces
|
|
39
|
+
scratch/
|
|
40
|
+
data/
|
|
41
|
+
output/
|
|
42
|
+
test_workspace/
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# ALS-Finder Architecture Roadmap
|
|
2
|
+
|
|
3
|
+
**Purpose**: An API extraction engine designed to search, deduplicate, and securely download high-resolution LiDAR Point clouds (`.laz`) natively across isolated federal boundaries. Acts as the geospatial ingestion stage for the downstream `als-downscaler` HPC orchestration pipeline.
|
|
4
|
+
|
|
5
|
+
***
|
|
6
|
+
|
|
7
|
+
## Workflow A: Geospatial Search (`cli.py search`)
|
|
8
|
+
- **Inputs**:
|
|
9
|
+
- Local GeoJSON Region of Interest boundaries (`--roi`).
|
|
10
|
+
- Explicit permitted query providers (USGS STAC, OpenTopography, NOAA).
|
|
11
|
+
- **Core Execution**:
|
|
12
|
+
1. Translates the ROI limits into raw `shapely.geometry` spatial intersections.
|
|
13
|
+
2. Dispatches asynchronous, federated API payload queries across the Microsoft Planetary Computer STAC (USGS 3DEP), NOAA AWS S3 Entwine index catalogs, and OpenTopography JSON-LD spatial environments.
|
|
14
|
+
3. Homogenizes resulting heterogeneous JSON responses natively into an internal python schema array.
|
|
15
|
+
4. Extracts dataset aliases to isolate and natively suppress functionally identical targets (Currently strictly bounded to literal string matching).
|
|
16
|
+
- **Outputs**:
|
|
17
|
+
- A highly structured JSON configuration manifest (`manifest.json`) securely mapping all mathematically viable `.laz` download arrays across the designated bounding box.
|
|
18
|
+
|
|
19
|
+
***
|
|
20
|
+
|
|
21
|
+
## Workflow B: Target Extraction (`cli.py download`)
|
|
22
|
+
- **Inputs**:
|
|
23
|
+
- The upstream generated JSON architecture manifest, or dynamic `--tile-url` injection parameters.
|
|
24
|
+
- **Core Execution**:
|
|
25
|
+
1. Spools the native HTTP extraction clients to map against targeted provider logic (e.g., `USGSProvider`).
|
|
26
|
+
2. Actively probes the payload structures: if native Azure Blob URLs block access (`409 Public Access Blocked`), proactively dispatches identical authentication queries into the Microsoft Planetary `sas` overlay to construct an ephemeral **Shared Access Signature (SAS)** API bypass token.
|
|
27
|
+
3. Instantiates parallel or successive byte stream downloads into local scratch volumes.
|
|
28
|
+
- **Outputs**:
|
|
29
|
+
- Localized, uncompressed `.copc.laz` or legacy point cloud layers structured rigidly onto the `$SCRATCH` partitions for HPC intersection.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Use Micromamba to handle complex geospatial C++ dependencies (GDAL, PDAL) smoothly
|
|
2
|
+
FROM mambaorg/micromamba:1.5-jammy
|
|
3
|
+
|
|
4
|
+
# Set environment variables
|
|
5
|
+
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
6
|
+
PYTHONUNBUFFERED=1
|
|
7
|
+
|
|
8
|
+
# Copy requirements and install them via conda-forge
|
|
9
|
+
COPY --chown=$MAMBA_USER:$MAMBA_USER requirements.txt /tmp/requirements.txt
|
|
10
|
+
RUN micromamba install -y -n base -c conda-forge \
|
|
11
|
+
python=3.11 \
|
|
12
|
+
gdal \
|
|
13
|
+
pdal \
|
|
14
|
+
python-pdal \
|
|
15
|
+
--file /tmp/requirements.txt && \
|
|
16
|
+
micromamba clean --all --yes
|
|
17
|
+
|
|
18
|
+
# Set the working directory in the container
|
|
19
|
+
WORKDIR /app
|
|
20
|
+
|
|
21
|
+
# Copy the application code
|
|
22
|
+
COPY --chown=$MAMBA_USER:$MAMBA_USER src/ src/
|
|
23
|
+
COPY --chown=$MAMBA_USER:$MAMBA_USER .agent/ .agent/
|
|
24
|
+
COPY --chown=$MAMBA_USER:$MAMBA_USER docs/ docs/
|
|
25
|
+
COPY --chown=$MAMBA_USER:$MAMBA_USER README.md .
|
|
26
|
+
COPY --chown=$MAMBA_USER:$MAMBA_USER setup.py .
|
|
27
|
+
|
|
28
|
+
# Install the package itself in editable mode via pip (since micromamba provides pip)
|
|
29
|
+
# We use the micromamba python interpreter
|
|
30
|
+
ARG MAMBA_DOCKERFILE_ACTIVATE=1
|
|
31
|
+
ENV SETUPTOOLS_SCM_PRETEND_VERSION=0.1.0
|
|
32
|
+
RUN pip install --no-cache-dir -e .
|
|
33
|
+
|
|
34
|
+
# Define the entrypoint
|
|
35
|
+
ENTRYPOINT ["/usr/local/bin/_entrypoint.sh", "python", "-m", "als_finder.cli"]
|
|
36
|
+
CMD ["--help"]
|
als_finder-1.0.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jonathan Greenberg / University of Nevada, Reno
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|