Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python - autonomi client #2372

Merged
merged 2 commits into from
Nov 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .cursorrules
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
You are an AI assistant specialized in Python and Rust development.

For python

Your approach emphasizes:Clear project structure with separate directories for source code, tests, docs, and config.Modular design with distinct files for models, services, controllers, and utilities.Configuration management using environment variables.Robust error handling and logging, including context capture.Comprehensive testing with pytest.Detailed documentation using docstrings and README files.Dependency management via https://github.com/astral-sh/uv and virtual environments.Code style consistency using Ruff.CI/CD implementation with GitHub Actions or GitLab CI.AI-friendly coding practices:You provide code snippets and explanations tailored to these principles, optimizing for clarity and AI-assisted development.Follow the following rules:For any python file, be sure to ALWAYS add typing annotations to each function or class. Be sure to include return types when necessary. Add descriptive docstrings to all python functions and classes as well. Please use pep257 convention for python. Update existing docstrings if need be.Make sure you keep any comments that exist in a file.When writing tests, make sure that you ONLY use pytest or pytest plugins, do NOT use the unittest module. All tests should have typing annotations as well. All tests should be in ./tests. Be sure to create all necessary files and folders. If you are creating files inside of ./tests or ./src/goob_ai, be sure to make a init.py file if one does not exist.All tests should be fully annotated and should contain docstrings. Be sure to import the following if TYPE_CHECKING:from _pytest.capture import CaptureFixturefrom _pytest.fixtures import FixtureRequestfrom _pytest.logging import LogCaptureFixturefrom _pytest.monkeypatch import MonkeyPatchfrom pytest_mock.plugin import MockerFixture

For Rust

Please do not use unwraps or panics. Please ensure all methods are fully tested and annotated.
190 changes: 190 additions & 0 deletions .github/workflows/python-publish-node.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
name: Build and Publish Python Package

on:
push:
tags:
- 'v*'

permissions:
id-token: write
contents: read

jobs:
macos:
runs-on: macos-latest
permissions:
id-token: write
contents: read
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Create Python module structure
run: |
mkdir -p sn_node/python/autonomi_node
cat > sn_node/python/autonomi_node/__init__.py << EOL
from ._autonomi import *
__version__ = "${{ github.ref_name }}"
EOL
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist
sccache: 'true'
working-directory: ./sn_node
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: sn_node/dist/*.whl
if-no-files-found: error

windows:
runs-on: windows-latest
permissions:
id-token: write
contents: read
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
target: [x64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.target }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Create Python module structure
shell: cmd
run: |
mkdir sn_node\python\autonomi_client
echo from ._autonomi import * > autonomi\python\autonomi_node\__init__.py
echo __version__ = "0.2.33" >> autonomi\python\autonomi_node\__init__.py
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
args: --release --out dist
sccache: 'true'
working-directory: ./sn_node
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: sn_node/dist/*.whl
if-no-files-found: error

linux:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
target: [x86_64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
target: x86_64-unknown-linux-gnu
- name: Install dependencies
run: |
python -m pip install --user cffi
python -m pip install --user patchelf
rustup component add rustfmt
- name: Create Python module structure
run: |
mkdir -p sn_node/python/autonomi_sn_node
cat > sn_node/python/autonomi_node/__init__.py << EOL
from ._autonomi import *
__version__ = "0.2.33"
EOL
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: auto
args: --release --out dist
sccache: 'true'
working-directory: ./sn_node
before-script-linux: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
rustup component add rustfmt
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: sn_node/dist/*.whl
if-no-files-found: error

sdist:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Create Python module structure
run: |
mkdir -p sn_node/python/autonomi_node
cat > sn_node/python/autonomi_node/__init__.py << EOL
from ._autonomi import *
__version__ = "0.2.33"
EOL
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
working-directory: ./autonomi
- name: Upload sdist
uses: actions/upload-artifact@v3
with:
name: wheels
path: autonomi/dist/*.tar.gz
if-no-files-found: error

release:
name: Release
runs-on: ubuntu-latest
needs: [macos, windows, linux, sdist]
permissions:
id-token: write
contents: read
steps:
- uses: actions/download-artifact@v3
with:
name: wheels
path: dist
- name: Display structure of downloaded files
run: ls -R dist
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/
verbose: true
print-hash: true
190 changes: 190 additions & 0 deletions .github/workflows/python-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
name: Build and Publish Python Package

on:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we remove the whole trigger for now and just commit the workflow without it?

So for now, it won't fire, but we can add the trigger back in when we are ready.

push:
tags:
- 'XXX*'

permissions:
id-token: write
contents: read

jobs:
macos:
runs-on: macos-latest
permissions:
id-token: write
contents: read
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Create Python module structure
run: |
mkdir -p autonomi/python/autonomi_client
cat > autonomi/python/autonomi_client/__init__.py << EOL
from ._autonomi import *
__version__ = "0.2.33"
EOL
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist
sccache: 'true'
working-directory: ./autonomi
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: autonomi/dist/*.whl
if-no-files-found: error

windows:
runs-on: windows-latest
permissions:
id-token: write
contents: read
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
target: [x64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.target }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Create Python module structure
shell: cmd
run: |
mkdir autonomi\python\autonomi_client
echo from ._autonomi import * > autonomi\python\autonomi_client\__init__.py
echo __version__ = "0.2.33" >> autonomi\python\autonomi_client\__init__.py
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
args: --release --out dist
sccache: 'true'
working-directory: ./autonomi
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: autonomi/dist/*.whl
if-no-files-found: error

linux:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
target: [x86_64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
target: x86_64-unknown-linux-gnu
- name: Install dependencies
run: |
python -m pip install --user cffi
python -m pip install --user patchelf
rustup component add rustfmt
- name: Create Python module structure
run: |
mkdir -p autonomi/python/autonomi_client
cat > autonomi/python/autonomi_client/__init__.py << EOL
from ._autonomi import *
__version__ = "0.2.33"
EOL
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: auto
args: --release --out dist
sccache: 'true'
working-directory: ./autonomi
before-script-linux: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
rustup component add rustfmt
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: autonomi/dist/*.whl
if-no-files-found: error

sdist:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Create Python module structure
run: |
mkdir -p autonomi/python/autonomi_client
cat > autonomi/python/autonomi_client/__init__.py << EOL
from ._autonomi import *
__version__ = "0.2.33"
EOL
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
working-directory: ./autonomi
- name: Upload sdist
uses: actions/upload-artifact@v3
with:
name: wheels
path: autonomi/dist/*.tar.gz
if-no-files-found: error

release:
name: Release
runs-on: ubuntu-latest
needs: [macos, windows, linux, sdist]
permissions:
id-token: write
contents: read
steps:
- uses: actions/download-artifact@v3
with:
name: wheels
path: dist
- name: Display structure of downloaded files
run: ls -R dist
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/
verbose: true
print-hash: true
Loading
Loading