# PyTera
[](https://pypi.org/project/pytera/)
[](https://pypi.org/project/pytera/)
[](https://github.com/un4gt/pytera/blob/main/LICENSE)
[](https://github.com/un4gt/pytera/actions/workflows/ci.yml)
[](https://codecov.io/gh/un4gt/pytera)
A fast, Python-native templating engine powered by Rust's Tera library. PyTera brings the power and performance of Tera templates to Python applications through PyO3 bindings.
## Features
- 🚀 **High Performance**: Rust-powered templating with zero-copy operations
- 🐍 **Python Native**: Seamless integration with Python data types and workflows
- 📝 **Tera Compatible**: Full support for Tera template syntax and features
- 🔧 **Easy Integration**: Simple API that works with Flask, FastAPI, and other web frameworks
- 🛡️ **Type Safe**: Comprehensive type hints and error handling
- 📚 **Rich Features**: Variables, conditionals, loops, filters, inheritance, and more
## Installation
Install PyTera from PyPI:
```bash
pip install pytera
```
Or using uv:
```bash
uv add pytera
```
### Requirements
- Python 3.8+
- Rust toolchain (for building from source)
## Quick Start
```python
import os
from pytera import PyTera
template_dir = os.path.join(os.path.dirname(__file__), "templates")
tera = PyTera(f"{template_dir}/*.html")
result = tera.render_template("basic_variables.html", name="Alice", age=30)
print(result) # Hello Alice! You are 30 years old.
```
> ℹ️ **Glob pattern tips**: The current templates live directly under `templates/`, so `PyTera(f"{template_dir}/*.html")` works. If you reorganize templates into nested subdirectories, switch to `PyTera(f"{template_dir}/**/*.html")` to load them recursively.
## Usage Examples
### Basic Variables
```python
tera = PyTera("templates/*.html")
result = tera.render_template(
"basic_variables.html",
name="Alice",
age=30,
)
print(result) # Hello Alice! You are 30 years old.
```
> ℹ️ **Glob pattern tips**: Current templates live directly under `templates/`, so `PyTera(f"{template_dir}/*.html")` works. If you organize templates into nested subdirectories later, switch to `PyTera(f"{template_dir}/**/*.html")` to load them recursively.
```html
<!-- templates/basic_variables.html -->
Hello {{ name }}! You are {{ age }} years old.
```
### Conditionals
```python
user = {"name": "Bob", "is_admin": True}
result = tera.render_template("conditionals.html", user=user)
print(result) # Welcome, Administrator Bob!
```
```html
<!-- templates/conditionals.html -->
{% if user.is_admin %}
Welcome, Administrator {{ user.name }}!
{% else %}
Hello, {{ user.name }}!
{% endif %}
```
### Loops
```python
items = [
{"name": "Apple", "price": 1.50},
{"name": "Banana", "price": 0.75},
{"name": "Cherry", "price": 2.25},
]
result = tera.render_template("loops.html", items=items)
print(result)
```
```html
<!-- templates/loops.html -->
<ul>
{% for item in items %}
<li>{{ item.name }}: {{ item.price | round(precision=2) }}</li>
{% endfor %}
</ul>
```
### Filters
```python
data = {
"text": "hello world",
"missing": None,
"list": ["apple", "banana", "cherry", "date"],
}
result = tera.render_template("filters.html", **data)
print(result)
```
```html
<!-- templates/filters.html -->
<p>Uppercase: {{ text | upper }}</p>
<p>Length: {{ text | length }}</p>
<p>Default: {{ missing | default(value="N/A") }}</p>
<p>Slice: {{ list | slice(start=1, end=3) | join(sep=", ") }}</p>
```
### Template Inheritance
```html
<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}Default Title{% endblock %}</title>
</head>
<body>
<header>
<h1>My Website</h1>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>© 2023</p>
</footer>
</body>
</html>
```
```html
<!-- templates/child.html -->
{% extends "base.html" %}
{% block title %}Home Page{% endblock %}
{% block content %}
<h2>Welcome to {{ site_name }}</h2>
<p>This is the home page content.</p>
{% if user %}
<p>Hello, {{ user.name }}!</p>
{% endif %}
{% endblock %}
```
### Flask Integration
```python
import os
from flask import Flask, render_template
from pytera import PyTera
template_dir = os.path.join(os.path.dirname(__file__), "..", "templates")
tera = PyTera(f"{template_dir}/*.html")
app = Flask(__name__, template_folder=os.path.abspath(template_dir))
@app.route("/")
def index():
return tera.render_template(
"child.html",
site_name="example",
user={"name": "David"},
)
@app.route("/child")
def child():
return render_template(
"child.html",
site_name="example",
user={"name": "David"},
)
```
For a complete working example with additional routes (`/basic_variables`, `/conditionals`, `/filters`, `/loops`), see [examples/app.py](examples/app.py).
## Template Syntax
The templates rendered in [examples/app.py](examples/app.py) cover the core pieces of Tera syntax:
### Variables
```html
Hello {{ name }}! You are {{ age }} years old.
```
### Conditionals
```html
{% if user.is_admin %}
Welcome, Administrator {{ user.name }}!
{% else %}
Hello, {{ user.name }}!
{% endif %}
```
### Loops
```html
<ul>
{% for item in items %}
<li>{{ item.name }}: {{ item.price | round(precision=2) }}</li>
{% endfor %}
</ul>
```
### Filters
```html
<p>Uppercase: {{ text | upper }}</p>
<p>Length: {{ text | length }}</p>
<p>Default: {{ missing | default(value="N/A") }}</p>
<p>Slice: {{ list | slice(start=1, end=3) | join(sep=", ") }}</p>
```
### Template Inheritance
```html
{% extends "base.html" %}
{% block title %}Home Page{% endblock %}
{% block content %}
<h2>Welcome to {{ site_name }}</h2>
{% if user %}
<p>Hello, {{ user.name }}!</p>
{% endif %}
{% endblock %}
```
For more template features—such as macros, tests, and custom filters—consult the [Tera documentation](https://keats.github.io/tera/docs/#getting-started).
## Error Handling
PyTera provides detailed error messages for common issues:
- **Template Not Found**: When requesting a non-existent template
- **Invalid Context**: When context keys aren't strings
- **Parsing Errors**: Syntax errors in templates
- **Inheritance Issues**: Circular dependencies or missing parents
## Development
### Building from Source
```bash
# Clone the repository
git clone https://github.com/un4gt/pytera.git
cd pytera
# Install development dependencies
uv sync --dev
# Build the package
maturin develop
# Run tests
pytest
```
### Running Tests
```bash
# Run all tests
pytest
# Run with coverage
pytest --cov=pytera --cov-report=html
```
### Code Quality
```bash
# Format code
cargo fmt
black src/
# Lint code
cargo clippy
flake8 src/
```
## Contributing
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests
5. Submit a pull request
### Development Setup
```bash
# Install development dependencies
uv sync --dev
# Install pre-commit hooks
pre-commit install
# Build and test
maturin develop
pytest
```
## License
PyTera is licensed under the MIT License. See [LICENSE](LICENSE) for details.
## Acknowledgments
- [Tera](https://keats.github.io/tera/docs/#getting-started) - The Rust templating engine
- [PyO3](https://pyo3.rs/) - Python bindings for Rust
- [Maturin](https://www.maturin.rs/) - Build tool for Python extensions
## Changelog
See [CHANGELOG.md](CHANGELOG.md) for version history.
Raw data
{
"_id": null,
"home_page": null,
"name": "pytera",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8.1",
"maintainer_email": "un4gt <mt3085570450@outlook.com>",
"keywords": "templating, tera, rust, pyo3, jinja2, django-templates, web-framework, html, rendering, fast",
"author": null,
"author_email": "un4gt <mt3085570450@outlook.com>",
"download_url": "https://files.pythonhosted.org/packages/c3/ce/56324ada8340261fdefc48759c98a183c536ac461c4e3f7b54a4defe0df5/pytera-0.1.2.tar.gz",
"platform": null,
"description": "# PyTera\n\n[](https://pypi.org/project/pytera/)\n[](https://pypi.org/project/pytera/)\n[](https://github.com/un4gt/pytera/blob/main/LICENSE)\n[](https://github.com/un4gt/pytera/actions/workflows/ci.yml)\n[](https://codecov.io/gh/un4gt/pytera)\n\nA fast, Python-native templating engine powered by Rust's Tera library. PyTera brings the power and performance of Tera templates to Python applications through PyO3 bindings.\n\n## Features\n\n- \ud83d\ude80 **High Performance**: Rust-powered templating with zero-copy operations\n- \ud83d\udc0d **Python Native**: Seamless integration with Python data types and workflows\n- \ud83d\udcdd **Tera Compatible**: Full support for Tera template syntax and features\n- \ud83d\udd27 **Easy Integration**: Simple API that works with Flask, FastAPI, and other web frameworks\n- \ud83d\udee1\ufe0f **Type Safe**: Comprehensive type hints and error handling\n- \ud83d\udcda **Rich Features**: Variables, conditionals, loops, filters, inheritance, and more\n\n## Installation\n\nInstall PyTera from PyPI:\n\n```bash\npip install pytera\n```\n\nOr using uv:\n\n```bash\nuv add pytera\n```\n\n### Requirements\n\n- Python 3.8+\n- Rust toolchain (for building from source)\n\n## Quick Start\n\n```python\nimport os\nfrom pytera import PyTera\n\ntemplate_dir = os.path.join(os.path.dirname(__file__), \"templates\")\ntera = PyTera(f\"{template_dir}/*.html\")\n\nresult = tera.render_template(\"basic_variables.html\", name=\"Alice\", age=30)\nprint(result) # Hello Alice! You are 30 years old.\n```\n\n> \u2139\ufe0f **Glob pattern tips**: The current templates live directly under `templates/`, so `PyTera(f\"{template_dir}/*.html\")` works. If you reorganize templates into nested subdirectories, switch to `PyTera(f\"{template_dir}/**/*.html\")` to load them recursively.\n\n## Usage Examples\n\n### Basic Variables\n\n```python\ntera = PyTera(\"templates/*.html\")\nresult = tera.render_template(\n \"basic_variables.html\",\n name=\"Alice\",\n age=30,\n)\nprint(result) # Hello Alice! You are 30 years old.\n```\n\n> \u2139\ufe0f **Glob pattern tips**: Current templates live directly under `templates/`, so `PyTera(f\"{template_dir}/*.html\")` works. If you organize templates into nested subdirectories later, switch to `PyTera(f\"{template_dir}/**/*.html\")` to load them recursively.\n\n```html\n<!-- templates/basic_variables.html -->\nHello {{ name }}! You are {{ age }} years old.\n```\n\n### Conditionals\n\n```python\nuser = {\"name\": \"Bob\", \"is_admin\": True}\nresult = tera.render_template(\"conditionals.html\", user=user)\nprint(result) # Welcome, Administrator Bob!\n```\n\n```html\n<!-- templates/conditionals.html -->\n{% if user.is_admin %}\nWelcome, Administrator {{ user.name }}!\n{% else %}\nHello, {{ user.name }}!\n{% endif %}\n```\n\n### Loops\n\n```python\nitems = [\n {\"name\": \"Apple\", \"price\": 1.50},\n {\"name\": \"Banana\", \"price\": 0.75},\n {\"name\": \"Cherry\", \"price\": 2.25},\n]\nresult = tera.render_template(\"loops.html\", items=items)\nprint(result)\n```\n\n```html\n<!-- templates/loops.html -->\n<ul>\n{% for item in items %}\n<li>{{ item.name }}: {{ item.price | round(precision=2) }}</li>\n{% endfor %}\n</ul>\n```\n\n### Filters\n\n```python\ndata = {\n \"text\": \"hello world\",\n \"missing\": None,\n \"list\": [\"apple\", \"banana\", \"cherry\", \"date\"],\n}\nresult = tera.render_template(\"filters.html\", **data)\nprint(result)\n```\n\n```html\n<!-- templates/filters.html -->\n<p>Uppercase: {{ text | upper }}</p>\n<p>Length: {{ text | length }}</p>\n<p>Default: {{ missing | default(value=\"N/A\") }}</p>\n<p>Slice: {{ list | slice(start=1, end=3) | join(sep=\", \") }}</p>\n```\n\n### Template Inheritance\n\n```html\n<!-- templates/base.html -->\n<!DOCTYPE html>\n<html>\n<head>\n <title>{% block title %}Default Title{% endblock %}</title>\n</head>\n<body>\n <header>\n <h1>My Website</h1>\n </header>\n <main>\n {% block content %}{% endblock %}\n </main>\n <footer>\n <p>© 2023</p>\n </footer>\n</body>\n</html>\n```\n\n```html\n<!-- templates/child.html -->\n{% extends \"base.html\" %}\n\n{% block title %}Home Page{% endblock %}\n\n{% block content %}\n<h2>Welcome to {{ site_name }}</h2>\n<p>This is the home page content.</p>\n{% if user %}\n<p>Hello, {{ user.name }}!</p>\n{% endif %}\n{% endblock %}\n```\n\n### Flask Integration\n\n```python\nimport os\nfrom flask import Flask, render_template\nfrom pytera import PyTera\n\ntemplate_dir = os.path.join(os.path.dirname(__file__), \"..\", \"templates\")\ntera = PyTera(f\"{template_dir}/*.html\")\n\napp = Flask(__name__, template_folder=os.path.abspath(template_dir))\n\n@app.route(\"/\")\ndef index():\n return tera.render_template(\n \"child.html\",\n site_name=\"example\",\n user={\"name\": \"David\"},\n )\n\n@app.route(\"/child\")\ndef child():\n return render_template(\n \"child.html\",\n site_name=\"example\",\n user={\"name\": \"David\"},\n )\n```\n\nFor a complete working example with additional routes (`/basic_variables`, `/conditionals`, `/filters`, `/loops`), see [examples/app.py](examples/app.py).\n\n\n## Template Syntax\n\nThe templates rendered in [examples/app.py](examples/app.py) cover the core pieces of Tera syntax:\n\n### Variables\n```html\nHello {{ name }}! You are {{ age }} years old.\n```\n\n### Conditionals\n```html\n{% if user.is_admin %}\nWelcome, Administrator {{ user.name }}!\n{% else %}\nHello, {{ user.name }}!\n{% endif %}\n```\n\n### Loops\n```html\n<ul>\n{% for item in items %}\n<li>{{ item.name }}: {{ item.price | round(precision=2) }}</li>\n{% endfor %}\n</ul>\n```\n\n### Filters\n```html\n<p>Uppercase: {{ text | upper }}</p>\n<p>Length: {{ text | length }}</p>\n<p>Default: {{ missing | default(value=\"N/A\") }}</p>\n<p>Slice: {{ list | slice(start=1, end=3) | join(sep=\", \") }}</p>\n```\n\n### Template Inheritance\n```html\n{% extends \"base.html\" %}\n{% block title %}Home Page{% endblock %}\n{% block content %}\n<h2>Welcome to {{ site_name }}</h2>\n{% if user %}\n<p>Hello, {{ user.name }}!</p>\n{% endif %}\n{% endblock %}\n```\n\nFor more template features\u2014such as macros, tests, and custom filters\u2014consult the [Tera documentation](https://keats.github.io/tera/docs/#getting-started).\n\n## Error Handling\n\nPyTera provides detailed error messages for common issues:\n\n- **Template Not Found**: When requesting a non-existent template\n- **Invalid Context**: When context keys aren't strings\n- **Parsing Errors**: Syntax errors in templates\n- **Inheritance Issues**: Circular dependencies or missing parents\n\n\n## Development\n\n### Building from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/un4gt/pytera.git\ncd pytera\n\n# Install development dependencies\nuv sync --dev\n\n# Build the package\nmaturin develop\n\n# Run tests\npytest\n```\n\n### Running Tests\n\n```bash\n# Run all tests\npytest\n\n# Run with coverage\npytest --cov=pytera --cov-report=html\n```\n\n### Code Quality\n\n```bash\n# Format code\ncargo fmt\nblack src/\n\n# Lint code\ncargo clippy\nflake8 src/\n```\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests\n5. Submit a pull request\n\n### Development Setup\n\n```bash\n# Install development dependencies\nuv sync --dev\n\n# Install pre-commit hooks\npre-commit install\n\n# Build and test\nmaturin develop\npytest\n```\n\n## License\n\nPyTera is licensed under the MIT License. See [LICENSE](LICENSE) for details.\n\n## Acknowledgments\n\n- [Tera](https://keats.github.io/tera/docs/#getting-started) - The Rust templating engine\n- [PyO3](https://pyo3.rs/) - Python bindings for Rust\n- [Maturin](https://www.maturin.rs/) - Build tool for Python extensions\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for version history.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A fast, Python templating engine powered by Rust's Tera library",
"version": "0.1.2",
"project_urls": {
"Changelog": "https://github.com/PyO3Lab/pytera/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/PyO3Lab/pytera#readme",
"Homepage": "https://github.com/PyO3Lab/pytera",
"Issues": "https://github.com/PyO3Lab/pytera/issues",
"Repository": "https://github.com/PyO3Lab/pytera.git"
},
"split_keywords": [
"templating",
" tera",
" rust",
" pyo3",
" jinja2",
" django-templates",
" web-framework",
" html",
" rendering",
" fast"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "c88741b7ddb17b5b819e7b16ba7acf286f2a5f4b3838d22463d38ee1164b450f",
"md5": "b8bab86f5d5853edf0517832432706c8",
"sha256": "5ac77410ce344a86f5b5032fa8e5948a2951a4b8fa1b323c269a7a6b56c5d410"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "b8bab86f5d5853edf0517832432706c8",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1502868,
"upload_time": "2025-11-02T18:48:22",
"upload_time_iso_8601": "2025-11-02T18:48:22.064068Z",
"url": "https://files.pythonhosted.org/packages/c8/87/41b7ddb17b5b819e7b16ba7acf286f2a5f4b3838d22463d38ee1164b450f/pytera-0.1.2-cp313-cp313t-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ca480aea258d148e474bf48e18e98bcd3b0f356a5e8a42eef965756ff103a019",
"md5": "c0ae1c3614593a9635bbe0e734c74b23",
"sha256": "d48645ded1176462dbe7a22a57fb50901374067205511eea5104700167c71264"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "c0ae1c3614593a9635bbe0e734c74b23",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1404736,
"upload_time": "2025-11-02T18:48:19",
"upload_time_iso_8601": "2025-11-02T18:48:19.330435Z",
"url": "https://files.pythonhosted.org/packages/ca/48/0aea258d148e474bf48e18e98bcd3b0f356a5e8a42eef965756ff103a019/pytera-0.1.2-cp313-cp313t-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0b91d5c523e6a9c74f538eca8f25bb709a3903c1e58f2b1a25ff72ea06cecfd2",
"md5": "0b9e50141b7f2051f4606412fd61c424",
"sha256": "7d0618b8ae59833ab89d18ea481ef6bb93f11e5a66887e0f004b7d40fc95e010"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "0b9e50141b7f2051f4606412fd61c424",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1547755,
"upload_time": "2025-11-02T18:48:02",
"upload_time_iso_8601": "2025-11-02T18:48:02.857139Z",
"url": "https://files.pythonhosted.org/packages/0b/91/d5c523e6a9c74f538eca8f25bb709a3903c1e58f2b1a25ff72ea06cecfd2/pytera-0.1.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "208340c270030f73f3f0257972de5371d8e045674ccee480cef0d2a71bbdfe6b",
"md5": "509919daae0818a1744a340ff84010b0",
"sha256": "b685cb884540f08dde551920966fb26f7faf2b5d62b681721e9f1b16d344fb21"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "509919daae0818a1744a340ff84010b0",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1529881,
"upload_time": "2025-11-02T18:48:05",
"upload_time_iso_8601": "2025-11-02T18:48:05.895236Z",
"url": "https://files.pythonhosted.org/packages/20/83/40c270030f73f3f0257972de5371d8e045674ccee480cef0d2a71bbdfe6b/pytera-0.1.2-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6b5b0bd408635a1648802329ef3cb147cfd54735fbcfde64d12a9d1dd5743f68",
"md5": "5dccc84fe7a8195f698799fc1691d9c7",
"sha256": "f419d9522e5cb49f4b081e3a7b758eeac1a972914c9f061ad2ff78418af0cf1c"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "5dccc84fe7a8195f698799fc1691d9c7",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1729763,
"upload_time": "2025-11-02T18:48:08",
"upload_time_iso_8601": "2025-11-02T18:48:08.827211Z",
"url": "https://files.pythonhosted.org/packages/6b/5b/0bd408635a1648802329ef3cb147cfd54735fbcfde64d12a9d1dd5743f68/pytera-0.1.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eaab67c3bf28892cb5adda8f29f5adad789599954e4424986487c4aecbb5edd7",
"md5": "f1c61a87efb34582decc36942034dea9",
"sha256": "057a41e6e4197e629f75aeb75a9ba257c7d08c63e91267ebfa9eea944fd39df7"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "f1c61a87efb34582decc36942034dea9",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1770510,
"upload_time": "2025-11-02T18:48:11",
"upload_time_iso_8601": "2025-11-02T18:48:11.334183Z",
"url": "https://files.pythonhosted.org/packages/ea/ab/67c3bf28892cb5adda8f29f5adad789599954e4424986487c4aecbb5edd7/pytera-0.1.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "12118069e4266c741a7f9177891865bb835c8c0a1d2ceb8208c409c86aec088a",
"md5": "e5eed69f727a09a639d4a23b59f9a100",
"sha256": "70da508137919e7840dbda2a2d6bc28da96187752eff2328a587c587ed743dc1"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "e5eed69f727a09a639d4a23b59f9a100",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1652393,
"upload_time": "2025-11-02T18:48:16",
"upload_time_iso_8601": "2025-11-02T18:48:16.353355Z",
"url": "https://files.pythonhosted.org/packages/12/11/8069e4266c741a7f9177891865bb835c8c0a1d2ceb8208c409c86aec088a/pytera-0.1.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0571c7f417cb227dfec70d25fc3b87dacf6ceb4eabcbbd77a1f0ad5b6de25517",
"md5": "315b221b82690c443b9ba58f0003118b",
"sha256": "50dbf01a61990e4a7fc3b29b915b8066958a25af40442ca126369de3db9f339e"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "315b221b82690c443b9ba58f0003118b",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1614674,
"upload_time": "2025-11-02T18:48:13",
"upload_time_iso_8601": "2025-11-02T18:48:13.797834Z",
"url": "https://files.pythonhosted.org/packages/05/71/c7f417cb227dfec70d25fc3b87dacf6ceb4eabcbbd77a1f0ad5b6de25517/pytera-0.1.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1571faa882497507e8be4cad111f76d583c4c83cc6cd18a6f55b99767ce9db23",
"md5": "075d132718619be63ffbee023927c0f8",
"sha256": "ec20986bb050c4a356cdf73c43c421a298d4ff238fd9d7104588605531919c86"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "075d132718619be63ffbee023927c0f8",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1730278,
"upload_time": "2025-11-02T18:48:24",
"upload_time_iso_8601": "2025-11-02T18:48:24.878993Z",
"url": "https://files.pythonhosted.org/packages/15/71/faa882497507e8be4cad111f76d583c4c83cc6cd18a6f55b99767ce9db23/pytera-0.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9bb43e0ee932bd8da51ca6d3e704315da89e8db22eca0f0e7d1d2984c3f6de38",
"md5": "64fae97a7097890accd6d7e97565a23f",
"sha256": "849fe7aee510587711922b7feb64f66831922dd04a58c07c639adb83a1812015"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-musllinux_1_2_armv7l.whl",
"has_sig": false,
"md5_digest": "64fae97a7097890accd6d7e97565a23f",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1792504,
"upload_time": "2025-11-02T18:48:27",
"upload_time_iso_8601": "2025-11-02T18:48:27.738202Z",
"url": "https://files.pythonhosted.org/packages/9b/b4/3e0ee932bd8da51ca6d3e704315da89e8db22eca0f0e7d1d2984c3f6de38/pytera-0.1.2-cp313-cp313t-musllinux_1_2_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fee2beef52396277d12ebf208231c4fab2820b6cf36fe335306a9c88bee56548",
"md5": "372a5142a0d2c5eccc01cd88d855a51b",
"sha256": "a6edfdd908affa0fac12053896199db47967b6079e682c99d3db039faaa00096"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "372a5142a0d2c5eccc01cd88d855a51b",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1762741,
"upload_time": "2025-11-02T18:48:30",
"upload_time_iso_8601": "2025-11-02T18:48:30.500689Z",
"url": "https://files.pythonhosted.org/packages/fe/e2/beef52396277d12ebf208231c4fab2820b6cf36fe335306a9c88bee56548/pytera-0.1.2-cp313-cp313t-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2cc986729a8b920e950626af1c66d658cebb60e1b020b36017718a8664b25219",
"md5": "0a76cdea2f0d989013a3f3fda41d1f70",
"sha256": "42c12d725cf3bfc3ec404ddf0f3fe81230cb6139b4ca6e86f28cf5b1b5365667"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "0a76cdea2f0d989013a3f3fda41d1f70",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1831850,
"upload_time": "2025-11-02T18:48:32",
"upload_time_iso_8601": "2025-11-02T18:48:32.919311Z",
"url": "https://files.pythonhosted.org/packages/2c/c9/86729a8b920e950626af1c66d658cebb60e1b020b36017718a8664b25219/pytera-0.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "214ef263e85b10bdc84fa3b671e1cd2f015af39a01149bc751a068ebea9a4492",
"md5": "3eee1b8690b39febfe91b28849d2ed39",
"sha256": "55e18a318c2eed1b01ea4528b0c92f9a0beca1a9389eae1ce609736f70c00f29"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-win32.whl",
"has_sig": false,
"md5_digest": "3eee1b8690b39febfe91b28849d2ed39",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1363123,
"upload_time": "2025-11-02T18:48:38",
"upload_time_iso_8601": "2025-11-02T18:48:38.516733Z",
"url": "https://files.pythonhosted.org/packages/21/4e/f263e85b10bdc84fa3b671e1cd2f015af39a01149bc751a068ebea9a4492/pytera-0.1.2-cp313-cp313t-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "775eecccda3bbaa9b9d0ca5865a170e43a5000fb1979eac2a878d56b1f886626",
"md5": "1798ef74f0cf595adecdabf4aa50ceb8",
"sha256": "40d3d21d559283d3a0bad626c58b6291880e1c47a5444bbf1b8eb4014bb8257f"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp313-cp313t-win_amd64.whl",
"has_sig": false,
"md5_digest": "1798ef74f0cf595adecdabf4aa50ceb8",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8.1",
"size": 1424470,
"upload_time": "2025-11-02T18:48:36",
"upload_time_iso_8601": "2025-11-02T18:48:36.185396Z",
"url": "https://files.pythonhosted.org/packages/77/5e/ecccda3bbaa9b9d0ca5865a170e43a5000fb1979eac2a878d56b1f886626/pytera-0.1.2-cp313-cp313t-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fcd792d9484008c5ef00eece1dd1bd4971ff53ca0ff4ff61da63734234177591",
"md5": "8687ba7ce18fe7e90f5ae9c9f95dc6e5",
"sha256": "ef61de50f9ab508e6cae331e8de630795fbfd9a2aa31da32f5475d2e620c5901"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "8687ba7ce18fe7e90f5ae9c9f95dc6e5",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1508650,
"upload_time": "2025-11-02T18:48:23",
"upload_time_iso_8601": "2025-11-02T18:48:23.683978Z",
"url": "https://files.pythonhosted.org/packages/fc/d7/92d9484008c5ef00eece1dd1bd4971ff53ca0ff4ff61da63734234177591/pytera-0.1.2-cp38-abi3-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8ebf2358ea804903a239da2f71127ee913a2b4372dbc7b84dabb968a0fc20219",
"md5": "55c7b974f7e6e2c622dae8f388b909a1",
"sha256": "fc77b080c1887eee6710ad58ad4188288e773d6f4d0a5088f0eacfc3d3bb2283"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "55c7b974f7e6e2c622dae8f388b909a1",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1406934,
"upload_time": "2025-11-02T18:48:20",
"upload_time_iso_8601": "2025-11-02T18:48:20.548568Z",
"url": "https://files.pythonhosted.org/packages/8e/bf/2358ea804903a239da2f71127ee913a2b4372dbc7b84dabb968a0fc20219/pytera-0.1.2-cp38-abi3-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "17e05f91e1e981fc8d32da0c4430f12c45bf53fa973379c6282b671e4d859598",
"md5": "fca770ad4bd7bb19ddaf36c727932259",
"sha256": "6c46cbd5d8d17516825d1122a1b7d365e5fd838dd3f4df299a0a99784dd1f1b7"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "fca770ad4bd7bb19ddaf36c727932259",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1550266,
"upload_time": "2025-11-02T18:48:04",
"upload_time_iso_8601": "2025-11-02T18:48:04.689684Z",
"url": "https://files.pythonhosted.org/packages/17/e0/5f91e1e981fc8d32da0c4430f12c45bf53fa973379c6282b671e4d859598/pytera-0.1.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0f47a048ef2c6ea9844843728a38881922588c18289ef480d24a11496eb48f13",
"md5": "b2d9274df373e2d38383b167787e21b9",
"sha256": "9dd86beebf6d024792a8be1dc0b285b99369dbb24e30c31ee53b5f004e3d4292"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "b2d9274df373e2d38383b167787e21b9",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1534067,
"upload_time": "2025-11-02T18:48:07",
"upload_time_iso_8601": "2025-11-02T18:48:07.242873Z",
"url": "https://files.pythonhosted.org/packages/0f/47/a048ef2c6ea9844843728a38881922588c18289ef480d24a11496eb48f13/pytera-0.1.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6054c1def0f561fb086416f8561c6e34ac7473b32507fa44fbf56922db1a412e",
"md5": "48e9c3c5216f17c15752fb7ae0bb4d71",
"sha256": "b8df5ec074c4d751bf8e19b04c4c1013b9122b93b56002493ed1731fbced05f3"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "48e9c3c5216f17c15752fb7ae0bb4d71",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1734133,
"upload_time": "2025-11-02T18:48:10",
"upload_time_iso_8601": "2025-11-02T18:48:10.125605Z",
"url": "https://files.pythonhosted.org/packages/60/54/c1def0f561fb086416f8561c6e34ac7473b32507fa44fbf56922db1a412e/pytera-0.1.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7e0b582305db20f2e38fdcbb3bbb3b8a40c8957ece93cd0a4d085fe257265b62",
"md5": "e601878c9bbcbe73185acc6a65583d81",
"sha256": "6a1d2d6e6d4f4502e2983dc5555f9d330a5ee4e9cf151f2ff6c3098d50d07f32"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "e601878c9bbcbe73185acc6a65583d81",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1791876,
"upload_time": "2025-11-02T18:48:12",
"upload_time_iso_8601": "2025-11-02T18:48:12.560908Z",
"url": "https://files.pythonhosted.org/packages/7e/0b/582305db20f2e38fdcbb3bbb3b8a40c8957ece93cd0a4d085fe257265b62/pytera-0.1.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b24893b85b903d18e4f3a7e7a2dd7f88f19915c7f4acf3321c421d7dd9349d01",
"md5": "35e803f22a64fcb5334b0f84e5abfd71",
"sha256": "6956681a84aa68e15638788915473e41ae2b31b79863507e7573a2e137d23b86"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "35e803f22a64fcb5334b0f84e5abfd71",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1655847,
"upload_time": "2025-11-02T18:48:17",
"upload_time_iso_8601": "2025-11-02T18:48:17.555971Z",
"url": "https://files.pythonhosted.org/packages/b2/48/93b85b903d18e4f3a7e7a2dd7f88f19915c7f4acf3321c421d7dd9349d01/pytera-0.1.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ede8cbd7d33f6bb421921d6e1253780b9e98212d195f64f674947a9b6347fd24",
"md5": "ba56c213c6e37ebd266a2d3c0fa1c392",
"sha256": "1e86b6cd3c056b48101c13730c60781c77bd97d7405d2d9d14c69a0b04dce1a0"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "ba56c213c6e37ebd266a2d3c0fa1c392",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1618550,
"upload_time": "2025-11-02T18:48:15",
"upload_time_iso_8601": "2025-11-02T18:48:15.038895Z",
"url": "https://files.pythonhosted.org/packages/ed/e8/cbd7d33f6bb421921d6e1253780b9e98212d195f64f674947a9b6347fd24/pytera-0.1.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "59dfbab4c7324384dc9fdea58c468a5cb2ad468bd11509a6b7dd2bc055b7cf9f",
"md5": "40a3e6d165821d6c52ac52fb54f6366f",
"sha256": "8e86bddab3da4cb72e645d96b667b0d9ed98b01375d24fd5818050868c794748"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "40a3e6d165821d6c52ac52fb54f6366f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1732771,
"upload_time": "2025-11-02T18:48:26",
"upload_time_iso_8601": "2025-11-02T18:48:26.128343Z",
"url": "https://files.pythonhosted.org/packages/59/df/bab4c7324384dc9fdea58c468a5cb2ad468bd11509a6b7dd2bc055b7cf9f/pytera-0.1.2-cp38-abi3-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "727a0cae45afc09765876881a216878b6d3e252851e4724a35755896a443f438",
"md5": "48742996804e48a5a4c78bb1f9a086dd",
"sha256": "c8b2d62329e4eccebe4d8f3a1d36762d3f8d46570900df3e1a8be77ae9c12f64"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-musllinux_1_2_armv7l.whl",
"has_sig": false,
"md5_digest": "48742996804e48a5a4c78bb1f9a086dd",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1795830,
"upload_time": "2025-11-02T18:48:29",
"upload_time_iso_8601": "2025-11-02T18:48:29.280141Z",
"url": "https://files.pythonhosted.org/packages/72/7a/0cae45afc09765876881a216878b6d3e252851e4724a35755896a443f438/pytera-0.1.2-cp38-abi3-musllinux_1_2_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "55da17f1d506ad7768231a7031d41eebb912718c7364372aa8359fc216046227",
"md5": "772585df6f3fe3462dea90e5a505a9f6",
"sha256": "ced029df2b993ed1b62a14fff709c46c965edb626c07c66e25d3d91c44dee85e"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "772585df6f3fe3462dea90e5a505a9f6",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1764155,
"upload_time": "2025-11-02T18:48:31",
"upload_time_iso_8601": "2025-11-02T18:48:31.728348Z",
"url": "https://files.pythonhosted.org/packages/55/da/17f1d506ad7768231a7031d41eebb912718c7364372aa8359fc216046227/pytera-0.1.2-cp38-abi3-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bad88af1c8245b5eabd6930bd8d6657586332adbfe4378a846cb9178f9adc35e",
"md5": "7a33300b8ef7ff9d39dd2aa5dbf776c9",
"sha256": "ccc16749115c9b640f780dca67023cdf9c6d175632940a70f6d9c61ca6490bf6"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "7a33300b8ef7ff9d39dd2aa5dbf776c9",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1836042,
"upload_time": "2025-11-02T18:48:34",
"upload_time_iso_8601": "2025-11-02T18:48:34.209950Z",
"url": "https://files.pythonhosted.org/packages/ba/d8/8af1c8245b5eabd6930bd8d6657586332adbfe4378a846cb9178f9adc35e/pytera-0.1.2-cp38-abi3-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9f91c3d84a48f880553138ae25918761bd79a64719adab811da6df0289ad2498",
"md5": "ed350ede61d42eb63af9e3aed4aace9d",
"sha256": "3e3c182d6ea356fbdc9cd54c182c1278429e79f56faa5a9142843b03d41a2736"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-win32.whl",
"has_sig": false,
"md5_digest": "ed350ede61d42eb63af9e3aed4aace9d",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1367346,
"upload_time": "2025-11-02T18:48:39",
"upload_time_iso_8601": "2025-11-02T18:48:39.719628Z",
"url": "https://files.pythonhosted.org/packages/9f/91/c3d84a48f880553138ae25918761bd79a64719adab811da6df0289ad2498/pytera-0.1.2-cp38-abi3-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cad4d83a582581395119f12c2a98e0776bb79399b828dcfc029aa6e958624a69",
"md5": "12e7454717c7b7f6cd946aeae6dceaab",
"sha256": "0056c78843de6214360ee3145ef6aebec64f065db13a9f902d26e9b4c4768ade"
},
"downloads": -1,
"filename": "pytera-0.1.2-cp38-abi3-win_amd64.whl",
"has_sig": false,
"md5_digest": "12e7454717c7b7f6cd946aeae6dceaab",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.1",
"size": 1428084,
"upload_time": "2025-11-02T18:48:37",
"upload_time_iso_8601": "2025-11-02T18:48:37.350593Z",
"url": "https://files.pythonhosted.org/packages/ca/d4/d83a582581395119f12c2a98e0776bb79399b828dcfc029aa6e958624a69/pytera-0.1.2-cp38-abi3-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c3ce56324ada8340261fdefc48759c98a183c536ac461c4e3f7b54a4defe0df5",
"md5": "85b861e3fc903a8a3a47debfbe14dd3b",
"sha256": "4f2433a0503d27d1653aef523833f983b624aa2923de3fefcfca1ddf1649fc64"
},
"downloads": -1,
"filename": "pytera-0.1.2.tar.gz",
"has_sig": false,
"md5_digest": "85b861e3fc903a8a3a47debfbe14dd3b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8.1",
"size": 123717,
"upload_time": "2025-11-02T18:48:35",
"upload_time_iso_8601": "2025-11-02T18:48:35.290152Z",
"url": "https://files.pythonhosted.org/packages/c3/ce/56324ada8340261fdefc48759c98a183c536ac461c4e3f7b54a4defe0df5/pytera-0.1.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-11-02 18:48:35",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "PyO3Lab",
"github_project": "pytera",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "pytera"
}