diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml new file mode 100644 index 0000000..92fc43c --- /dev/null +++ b/.github/workflows/python.yml @@ -0,0 +1,137 @@ +# This file is autogenerated by maturin v1.5.0 +# To update, run +# +# maturin generate-ci github +# +name: Python + +on: + push: + branches: + - main + tags: + - "*" + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + linux: + runs-on: ubuntu-latest + strategy: + matrix: + target: [x86_64] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + args: > + --release + --manifest-path popgetter_py/Cargo.toml + --out dist + sccache: "true" + before-script-linux: | + sudo apt-get update + sudo apt-get install pkg-config libssl-dev + # See: https://github.com/pola-rs/polars/blob/main/.github/workflows/release-python.yml + - name: Test wheel + if: matrix.target == 'x86_64' + run: | + pip install --force-reinstall --verbose dist/*.whl + python -c 'import popgetter' + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-linux-${{ matrix.target }} + path: dist + + # TODO: currently compilation fails due to API missing for xdg: `xdg::BaseDirectories` + # windows: + # runs-on: windows-latest + # strategy: + # matrix: + # target: [x64, x86] + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-python@v5 + # with: + # python-version: '3.11' + # architecture: ${{ matrix.target }} + # - name: Build wheels + # uses: PyO3/maturin-action@v1 + # with: + # target: ${{ matrix.target }} + # args: --release --out dist --find-interpreter + # working-directory: popgetter_py + # sccache: 'true' + # - name: Upload wheels + # uses: actions/upload-artifact@v4 + # with: + # name: wheels-windows-${{ matrix.target }} + # path: dist + # working-directory: popgetter_py + + macos: + runs-on: macos-latest + strategy: + matrix: + target: [x86_64, aarch64] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + args: > + --release + --manifest-path popgetter_py/Cargo.toml + --out dist + sccache: "true" + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-macos-${{ matrix.target }} + path: dist + + sdist: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build sdist + uses: PyO3/maturin-action@v1 + with: + command: sdist + args: > + --manifest-path popgetter_py/Cargo.toml + --out dist + - name: Upload sdist + uses: actions/upload-artifact@v4 + with: + name: wheels-sdist + path: dist + + # TODO: uncomment for release to PyPI + # release: + # name: Release + # runs-on: ubuntu-latest + # if: startsWith(github.ref, 'refs/tags/') + # needs: [linux, windows, macos, sdist] + # steps: + # - uses: actions/download-artifact@v4 + # - name: Publish to PyPI + # uses: PyO3/maturin-action@v1 + # env: + # MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} + # with: + # command: upload + # args: --non-interactive --skip-existing wheels-*/* diff --git a/popgetter_py/.github/workflows/CI.yml b/popgetter_py/.github/workflows/CI.yml deleted file mode 100644 index a213727..0000000 --- a/popgetter_py/.github/workflows/CI.yml +++ /dev/null @@ -1,118 +0,0 @@ -# This file is autogenerated by maturin v1.5.0 -# To update, run -# -# maturin generate-ci github -# -name: CI - -on: - push: - branches: - - main - - master - tags: - - '*' - pull_request: - workflow_dispatch: - -permissions: - contents: read - -jobs: - linux: - runs-on: ubuntu-latest - strategy: - matrix: - target: [x86_64, x86, aarch64, armv7, s390x, ppc64le] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - name: Build wheels - uses: PyO3/maturin-action@v1 - with: - target: ${{ matrix.target }} - args: --release --out dist --find-interpreter - sccache: 'true' - manylinux: auto - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheels-linux-${{ matrix.target }} - path: dist - - windows: - runs-on: windows-latest - strategy: - matrix: - target: [x64, x86] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - architecture: ${{ matrix.target }} - - name: Build wheels - uses: PyO3/maturin-action@v1 - with: - target: ${{ matrix.target }} - args: --release --out dist --find-interpreter - sccache: 'true' - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheels-windows-${{ matrix.target }} - path: dist - - macos: - runs-on: macos-latest - strategy: - matrix: - target: [x86_64, aarch64] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - name: Build wheels - uses: PyO3/maturin-action@v1 - with: - target: ${{ matrix.target }} - args: --release --out dist --find-interpreter - sccache: 'true' - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheels-macos-${{ matrix.target }} - path: dist - - sdist: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Build sdist - uses: PyO3/maturin-action@v1 - with: - command: sdist - args: --out dist - - name: Upload sdist - uses: actions/upload-artifact@v4 - with: - name: wheels-sdist - path: dist - - release: - name: Release - runs-on: ubuntu-latest - if: startsWith(github.ref, 'refs/tags/') - needs: [linux, windows, macos, sdist] - steps: - - uses: actions/download-artifact@v4 - - name: Publish to PyPI - uses: PyO3/maturin-action@v1 - env: - MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} - with: - command: upload - args: --non-interactive --skip-existing wheels-*/* diff --git a/popgetter_py/README.md b/popgetter_py/README.md new file mode 100644 index 0000000..ce4bf31 --- /dev/null +++ b/popgetter_py/README.md @@ -0,0 +1,26 @@ +# popgetter_py + +Python bindings for popgetter library for searching and downloading [popgetter](https://github.com/Urban-Analytics-Technology-Platform/popgetter) data. + +## Quickstart + +- Install [Python](https://www.python.org/) +- Install [Rust](https://www.rust-lang.org/tools/install) +- Install [maturin](https://github.com/PyO3/maturin) +- Create a virtual environment and activate (e.g. with zsh): + ```shell + python -m venv .venv + source .venv/bin/activate + ``` +- Install popgetter + ```shell + maturin develop --release + ``` +- Run popgetter with a data requst specification (see e.g. [test_recipe.json](../test_recipe.json)): + ```python + import json + import popgetter + with open("../test_recipe.json", "r") as f: + df = popgetter.download_data_request(json.load(f)) + print(df.head()) + ``` \ No newline at end of file