Skip to content

Commit

Permalink
Publish python docs (#372)
Browse files Browse the repository at this point in the history
  • Loading branch information
kylebarron authored Jan 1, 2024
1 parent 41b2c4b commit 43dcf67
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 6 deletions.
68 changes: 68 additions & 0 deletions .github/workflows/python-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Publish Python docs via GitHub Pages

# Only run on new tags starting with `py-v`
on:
push:
tags:
- 'py-v*'
workflow_dispatch:

jobs:
build:
name: Deploy Python core docs
runs-on: ubuntu-latest
defaults:
run:
working-directory: python/core/
steps:
- uses: actions/checkout@v4
# We need to additionally fetch the gh-pages branch for mike deploy
with:
fetch-depth: 0

- name: Set up Python 3.11
id: setup-python
uses: actions/setup-python@v4
with:
python-version: "3.11"

- name: Install and configure Poetry
uses: snok/install-poetry@v1
with:
version: 1.7.1
virtualenvs-create: true
virtualenvs-in-project: true
installer-parallel: true

- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v3
with:
path: .venv
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}

- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root

- name: Install root project
run: poetry install --no-interaction

- name: Deploy docs
env:
GIT_COMMITTER_NAME: CI
GIT_COMMITTER_EMAIL: [email protected]
run: |
# Get most recent git tag
# https://stackoverflow.com/a/7261049
# https://stackoverflow.com/a/3867811
# We don't use {{github.ref_name}} because if triggered manually, it
# will be a branch name instead of a tag version.
# Then remove `py-` from the tag
VERSION=$(git describe --tags --match="py-*" --abbrev=0 | cut -c 4-)
# Only push docs if no letters in git tag after the first character
# (usually the git tag will have v as the first character)
if ! echo $VERSION | cut -c 1- | grep -q "[A-Za-z]"; then
poetry run mike deploy $VERSION latest --update-aliases --push
fi
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ This repository also includes [Python bindings](https://github.com/kylebarron/ge

## Documentation

- Rust library <https://docs.rs/geoarrow2/latest/geoarrow2/>
- JavaScript library: <https://geoarrow.github.io/geoarrow-rs/js/>
- Rust wasm-bindgen library: <https://docs.rs/geoarrow-wasm/latest/geoarrow_wasm/>
- [Use from Rust](https://docs.rs/geoarrow2/latest/geoarrow2/)
- [Use from Python](https://geoarrow.github.io/geoarrow-rs/python/core)
- [Use from JavaScript](https://geoarrow.github.io/geoarrow-rs/js)
- [Create your own Rust-JavaScript library with `wasm-bindgen`](https://docs.rs/geoarrow-wasm/latest/geoarrow_wasm/)

## Examples

Expand Down
3 changes: 2 additions & 1 deletion python/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
site
/target

# Byte-compiled / optimized / DLL files
Expand Down Expand Up @@ -69,4 +70,4 @@ docs/_build/
.vscode/

# Pyenv
.python-version
.python-version
25 changes: 25 additions & 0 deletions python/core/DEVELOP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Develop Docs

## Docs

View docs:

```
poetry run mkdocs serve
```

Deploy docs (automatically):

Push a new tag with the format `py-v*`, such as `py-v0.1.0`.

Deploy docs (manually):

```
poetry run mike deploy VERSION_TAG --update-aliases --push --deploy-prefix python/core/
```

This only needs to be run once ever, to set the redirect from `https://geoarrow.github.io/geoarrow-rs/python/core/` to `https://geoarrow.github.io/geoarrow-rs/python/core/latest/`.

```
poetry run mike set-default latest --deploy-prefix python/core/ --push
```
12 changes: 10 additions & 2 deletions python/core/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
# `geoarrow.rust.core`: Python bindings to `geoarrow-rs`

## Overview

This library contains Python bindings to the [GeoArrow Rust implementation](https://github.com/geoarrow/geoarrow-rs).

- **Fast**: Connects to algorithms implemented in [GeoRust](https://georust.org/), which compile to native code.
- **Parallel**: Multi-threading is enabled out-of-the-box for all operations on chunked data structures.
- **Self-contained**: Zero Python dependencies.
- **Easy to install**: Distributed as static binary wheels with zero C dependencies.
- **Strong, static typing**: geometry arrays have a known type
- **Interoperable ecosystem**: Data can be shared at zero cost with other libraries in the burgeoning [GeoArrow ecosystem](https://geoarrow.org/), such as [geoarrow-c](https://github.com/geoarrow/geoarrow-c/tree/main/python) or [lightning-fast map rendering](https://github.com/developmentseed/lonboard).
- **Interoperable ecosystem**: Data is shared at zero cost with other Python libraries in the burgeoning [GeoArrow ecosystem](https://geoarrow.org/), such as [geoarrow-c](https://github.com/geoarrow/geoarrow-c/tree/main/python) or [lightning-fast map rendering](https://github.com/developmentseed/lonboard).

More specifically, it contains:

Expand All @@ -17,9 +19,15 @@ More specifically, it contains:
- Rust-based algorithms for computations on GeoArrow memory.
- Rust-based parsers for various geospatial file formats.

Future work:
## Documentation

Refer to the documentation at [geoarrow.github.io/geoarrow-rs/python/core](https://geoarrow.github.io/geoarrow-rs/python/core).

## Future work:

- [ ] 3D coordinates. Only 2D geometries are supported at this time.
- [ ] CRS management. This currently loses the CRS information in the [GeoArrow metadata](https://geoarrow.org/extension-types#extension-metadata).

## Background reading

Refer to the [GeoArrow Python module proposal](https://github.com/geoarrow/geoarrow-python/issues/38) for more background information.

0 comments on commit 43dcf67

Please sign in to comment.