meta: initial commit (archival)
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.history/
|
||||||
|
|
66
string_sum/.github/workflows/CI.yml
vendored
Normal file
66
string_sum/.github/workflows/CI.yml
vendored
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: messense/maturin-action@v1
|
||||||
|
with:
|
||||||
|
manylinux: auto
|
||||||
|
command: build
|
||||||
|
args: --release --sdist -o dist
|
||||||
|
- name: Upload wheels
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: wheels
|
||||||
|
path: dist
|
||||||
|
|
||||||
|
windows:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: messense/maturin-action@v1
|
||||||
|
with:
|
||||||
|
command: build
|
||||||
|
args: --release -o dist
|
||||||
|
- name: Upload wheels
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: wheels
|
||||||
|
path: dist
|
||||||
|
|
||||||
|
macos:
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: messense/maturin-action@v1
|
||||||
|
with:
|
||||||
|
command: build
|
||||||
|
args: --release -o dist --universal2
|
||||||
|
- name: Upload wheels
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: wheels
|
||||||
|
path: dist
|
||||||
|
|
||||||
|
release:
|
||||||
|
name: Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: "startsWith(github.ref, 'refs/tags/')"
|
||||||
|
needs: [ macos, windows, linux ]
|
||||||
|
steps:
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: wheels
|
||||||
|
- name: Publish to PyPI
|
||||||
|
uses: messense/maturin-action@v1
|
||||||
|
env:
|
||||||
|
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
|
||||||
|
with:
|
||||||
|
command: upload
|
||||||
|
args: --skip-existing *
|
72
string_sum/.gitignore
vendored
Normal file
72
string_sum/.gitignore
vendored
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/target
|
||||||
|
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
.pytest_cache/
|
||||||
|
*.py[cod]
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
.venv/
|
||||||
|
env/
|
||||||
|
bin/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
include/
|
||||||
|
man/
|
||||||
|
venv/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
pip-selfcheck.json
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
|
||||||
|
# Mr Developer
|
||||||
|
.mr.developer.cfg
|
||||||
|
.project
|
||||||
|
.pydevproject
|
||||||
|
|
||||||
|
# Rope
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# VSCode
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# Pyenv
|
||||||
|
.python-version
|
1168
string_sum/Cargo.lock
generated
Normal file
1168
string_sum/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
17
string_sum/Cargo.toml
Normal file
17
string_sum/Cargo.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[package]
|
||||||
|
name = "string_sum"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
[lib]
|
||||||
|
name = "string_sum"
|
||||||
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
pyo3 = { version = "0.16.5", features = ["extension-module"] }
|
||||||
|
pyo3-asyncio = { version = "0.16", features = ["tokio-runtime"] }
|
||||||
|
reqwest = { version = "0.11.11" }
|
||||||
|
serde = { version = "1.0.138", features = ["derive"] }
|
||||||
|
serde_json = "1.0.82"
|
||||||
|
tokio = { version = "1.19.2", features = ["full"] }
|
13
string_sum/pyproject.toml
Normal file
13
string_sum/pyproject.toml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[tool.poetry]
|
||||||
|
name = "string-sum"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = ""
|
||||||
|
authors = ["Your Name <you@example.com>"]
|
||||||
|
readme = "README.md"
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
python = "^3.11"
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["poetry-core"]
|
||||||
|
build-backend = "poetry.core.masonry.api"
|
39
string_sum/src/lib.rs
Normal file
39
string_sum/src/lib.rs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
use pyo3::{prelude::*};
|
||||||
|
|
||||||
|
#[pyfunction]
|
||||||
|
fn do_something(
|
||||||
|
instance: &PyAny,
|
||||||
|
) -> String {
|
||||||
|
println!("whoo 2023 year of the gamer");
|
||||||
|
|
||||||
|
let word = String::from("bark");
|
||||||
|
|
||||||
|
let repetition = instance.call_method("repeat", (word,), None);
|
||||||
|
let repetition = repetition.unwrap();
|
||||||
|
let repetition = repetition.extract::<String>();
|
||||||
|
let repetition = repetition.unwrap();
|
||||||
|
|
||||||
|
println!("repetition: {repetition:?}");
|
||||||
|
|
||||||
|
repetition
|
||||||
|
}
|
||||||
|
|
||||||
|
#[pyfunction]
|
||||||
|
fn run_this_function(function: &PyAny, instance: &PyAny) -> usize {
|
||||||
|
let res = function.call1((instance,));
|
||||||
|
|
||||||
|
let x = res.unwrap().extract::<usize>().unwrap();
|
||||||
|
|
||||||
|
println!("x: {x}");
|
||||||
|
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A Python module implemented in Rust.
|
||||||
|
#[pymodule]
|
||||||
|
fn string_sum(_py: Python, m: &PyModule) -> PyResult<()> {
|
||||||
|
m.add_function(wrap_pyfunction!(do_something, m)?)?;
|
||||||
|
m.add_function(wrap_pyfunction!(run_this_function, m)?)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
31
string_sum/usage.py
Normal file
31
string_sum/usage.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import string_sum
|
||||||
|
|
||||||
|
|
||||||
|
class CustomClass:
|
||||||
|
x: int
|
||||||
|
|
||||||
|
def repeat(self, word: str) -> str:
|
||||||
|
return (word + " ")*self.x
|
||||||
|
|
||||||
|
def use_my_custom_class(custom: CustomClass) -> int:
|
||||||
|
return custom.x
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
print("here we go")
|
||||||
|
|
||||||
|
instance = CustomClass()
|
||||||
|
instance.x = 8
|
||||||
|
barks = string_sum.do_something(instance)
|
||||||
|
print(f"{barks=}")
|
||||||
|
|
||||||
|
num = string_sum.run_this_function(use_my_custom_class, instance)
|
||||||
|
print(f"{num=}")
|
||||||
|
|
||||||
|
# ret = await get_average_coordinate()
|
||||||
|
|
||||||
|
# print(f"{ret=}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
from asyncio import run
|
||||||
|
|
||||||
|
run(main())
|
Reference in New Issue
Block a user