demopy-gb-jj


Namedemopy-gb-jj JSON
Version 0.6.1 PyPI version JSON
download
home_pageNone
SummaryA demo PyPI package with Rust extensions
upload_time2025-09-07 02:05:18
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords rust python pyo3 extension
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # demopy_gb_jj

A minimal Rust-based Python extension using PyO3 bindings with automated CI/CD
pipeline.

[![CI](https://github.com/jj-devhub/demopy/actions/workflows/ci.yml/badge.svg)](https://github.com/jj-devhub/demopy/actions/workflows/ci.yml)
[![PyPI version](https://badge.fury.io/py/demopy-gb-jj.svg)](https://badge.fury.io/py/demopy-gb-jj)
[![Python versions](https://img.shields.io/pypi/pyversions/demopy-gb-jj.svg)](https://pypi.org/project/demopy-gb-jj/)

## Features

- **Rust-Python Integration**: High-performance Rust functions exposed to Python
via PyO3
- **Fallback Support**: Pure Python implementations when Rust extension is
unavailable
- **Automated CI/CD**: GitHub Actions workflows for testing, building, and
publishing
- **Version Management**: Automated version bumping across all project files
- **Cross-Platform**: Supports Windows, macOS, and Linux
- **Multiple Python Versions**: Compatible with Python 3.8-3.13

## Installation

### From PyPI (Recommended)

```bash
pip install demopy_gb_jj
```text

### From Source

```bash
# Clone the repository
git clone https://github.com/jj-devhub/demopy.git
cd demopy

# Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Install Python dependencies
pip install maturin

# Build and install the package
maturin develop
```text

## Usage

```python
import demopy

# Basic functions
print(demopy.hello())  # "Hello from demopy_gb_jj (Rust edition)!"
print(demopy.add(2, 3))  # 5
print(demopy.multiply(2.5, 4.0))  # 10.0

# List operations
numbers = [1, 2, 3, 4, 5]
print(demopy.sum_list(numbers))  # 15

# String operations
print(demopy.reverse_string("Hello, World!"))  # "!dlroW ,olleH"

# Version info
print(demopy.__version__)  # Current version
```text

## Development

### Prerequisites

- Python 3.8 or higher (tested up to 3.13)
- Rust 1.70 or higher
- Git

### Setup Development Environment

```bash
# Clone the repository
git clone https://github.com/jj-devhub/demopy.git
cd demopy

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install maturin pytest

# Set up pre-commit hooks for code quality (recommended)
python scripts/setup_pre_commit.py

# Build the extension in development mode
maturin develop

# Run tests
pytest tests/ -v
cargo test
```text

### Code Quality

This project uses automated code quality enforcement through pre-commit hooks:

```bash
# Set up pre-commit hooks (one-time setup)
python scripts/setup_pre_commit.py

# Hooks run automatically on git commit
git commit -m "your changes"  # Hooks auto-format and check code
```text

**Available quality tools:**

- **Black**: Python code formatting (88-char line length)
- **isort**: Import statement sorting
- **flake8**: Python linting and PEP 8 compliance
- **mypy**: Static type checking (optional)
- **cargo fmt**: Rust code formatting
- **cargo clippy**: Rust linting

See [docs/PRE_COMMIT_HOOKS.md](docs/PRE_COMMIT_HOOKS.md) for detailed information.

### Project Structure

```text
demopy/
├── .github/workflows/     # GitHub Actions CI/CD
├── docs/                  # Documentation
├── python/demopy/         # Python package source
├── src/                   # Rust source code
├── tests/                 # Test files
├── scripts/               # Utility scripts
├── .pre-commit-config.yaml # Pre-commit hooks configuration
├── Cargo.toml            # Rust package configuration
├── pyproject.toml        # Python package configuration
└── README.md
```text

### Version Management

This project uses automated version management. To bump the version:

#### Using GitHub Actions (Recommended)

1. Go to the "Actions" tab in your GitHub repository
2. Select "Version Bump" workflow
3. Click "Run workflow"
4. Choose the bump type (patch/minor/major) or specify a custom version
5. The workflow will automatically:
   - Update version numbers in all files
   - Create a commit and tag
   - Trigger the release workflow
   - Publish to PyPI

#### Manual Version Bumping

```bash
# Bump patch version (0.2.5 -> 0.2.6)
python scripts/bump_version.py patch

# Bump minor version (0.2.5 -> 0.3.0)
python scripts/bump_version.py minor

# Bump major version (0.2.5 -> 1.0.0)
python scripts/bump_version.py major

# Set specific version
python scripts/bump_version.py 1.2.3
```text

### Testing

```bash
# Run Python tests
pytest tests/ -v

# Run Rust tests
cargo test

# Run linting
cargo fmt --all -- --check
cargo clippy -- -D warnings

# Test pure Python fallback
python -c "
import sys
sys.path.insert(0, 'python')
import builtins
original_import = builtins.__import__
def mock_import(name, *args, **kwargs):
    if 'demopy_gb_jj._rust' in name:
        raise ImportError('Mocked')
    return original_import(name, *args, **kwargs)
builtins.__import__ = mock_import
import demopy
print(demopy.hello())
"
```text

### Building and Publishing

The project uses GitHub Actions for automated building and publishing:

1. **Continuous Integration**: Runs on every push and pull request
   - Tests across multiple OS and Python versions
   - Builds the Rust extension
   - Runs both Rust and Python tests

2. **Release Workflow**: Triggers on version tags
   - Builds wheels for all platforms
   - Creates source distribution
   - Publishes to PyPI
   - Creates GitHub release with changelog

3. **Version Bump Workflow**: Manual trigger for version management
   - Updates version across all files
   - Creates commit and tag
   - Triggers release workflow

### Contributing

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Add tests for new functionality
5. Run the test suite (`pytest tests/ && cargo test`)
6. Commit your changes (`git commit -m 'Add amazing feature'`)
7. Push to the branch (`git push origin feature/amazing-feature`)
8. Open a Pull Request

## Architecture

### Rust Extension

The Rust code in `src/lib.rs` implements high-performance functions using PyO3:

- **hello()**: Returns a greeting message
- **add(a, b)**: Adds two integers
- **multiply(a, b)**: Multiplies two floats
- **sum_list(numbers)**: Sums a list of integers
- **reverse_string(s)**: Reverses a string

### Python Wrapper

The Python module in `python/demopy/__init__.py` provides:

- Import handling with fallback to pure Python
- Consistent API regardless of backend
- Version information
- Proper error handling

### Fallback Mechanism

If the Rust extension fails to load, the package automatically falls back to
pure Python implementations, ensuring the package works even in environments
where the Rust extension cannot be built or loaded.

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE)
file for details.

## Changelog

See [Releases](https://github.com/jj-devhub/demopy/releases) for a detailed changelog.

A demo PyPI package for CI/CD publishing.


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "demopy-gb-jj",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "rust, python, pyo3, extension",
    "author": null,
    "author_email": "jj-devhub <Jaid.jashim@infinitibit.com>",
    "download_url": "https://files.pythonhosted.org/packages/71/98/d725d07c36750fb0905364dd78f86ff43c47aa353907feddc31ea84fc238/demopy_gb_jj-0.6.1.tar.gz",
    "platform": null,
    "description": "# demopy_gb_jj\n\nA minimal Rust-based Python extension using PyO3 bindings with automated CI/CD\npipeline.\n\n[![CI](https://github.com/jj-devhub/demopy/actions/workflows/ci.yml/badge.svg)](https://github.com/jj-devhub/demopy/actions/workflows/ci.yml)\n[![PyPI version](https://badge.fury.io/py/demopy-gb-jj.svg)](https://badge.fury.io/py/demopy-gb-jj)\n[![Python versions](https://img.shields.io/pypi/pyversions/demopy-gb-jj.svg)](https://pypi.org/project/demopy-gb-jj/)\n\n## Features\n\n- **Rust-Python Integration**: High-performance Rust functions exposed to Python\nvia PyO3\n- **Fallback Support**: Pure Python implementations when Rust extension is\nunavailable\n- **Automated CI/CD**: GitHub Actions workflows for testing, building, and\npublishing\n- **Version Management**: Automated version bumping across all project files\n- **Cross-Platform**: Supports Windows, macOS, and Linux\n- **Multiple Python Versions**: Compatible with Python 3.8-3.13\n\n## Installation\n\n### From PyPI (Recommended)\n\n```bash\npip install demopy_gb_jj\n```text\n\n### From Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/jj-devhub/demopy.git\ncd demopy\n\n# Install Rust (if not already installed)\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# Install Python dependencies\npip install maturin\n\n# Build and install the package\nmaturin develop\n```text\n\n## Usage\n\n```python\nimport demopy\n\n# Basic functions\nprint(demopy.hello())  # \"Hello from demopy_gb_jj (Rust edition)!\"\nprint(demopy.add(2, 3))  # 5\nprint(demopy.multiply(2.5, 4.0))  # 10.0\n\n# List operations\nnumbers = [1, 2, 3, 4, 5]\nprint(demopy.sum_list(numbers))  # 15\n\n# String operations\nprint(demopy.reverse_string(\"Hello, World!\"))  # \"!dlroW ,olleH\"\n\n# Version info\nprint(demopy.__version__)  # Current version\n```text\n\n## Development\n\n### Prerequisites\n\n- Python 3.8 or higher (tested up to 3.13)\n- Rust 1.70 or higher\n- Git\n\n### Setup Development Environment\n\n```bash\n# Clone the repository\ngit clone https://github.com/jj-devhub/demopy.git\ncd demopy\n\n# Create virtual environment\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n\n# Install development dependencies\npip install maturin pytest\n\n# Set up pre-commit hooks for code quality (recommended)\npython scripts/setup_pre_commit.py\n\n# Build the extension in development mode\nmaturin develop\n\n# Run tests\npytest tests/ -v\ncargo test\n```text\n\n### Code Quality\n\nThis project uses automated code quality enforcement through pre-commit hooks:\n\n```bash\n# Set up pre-commit hooks (one-time setup)\npython scripts/setup_pre_commit.py\n\n# Hooks run automatically on git commit\ngit commit -m \"your changes\"  # Hooks auto-format and check code\n```text\n\n**Available quality tools:**\n\n- **Black**: Python code formatting (88-char line length)\n- **isort**: Import statement sorting\n- **flake8**: Python linting and PEP 8 compliance\n- **mypy**: Static type checking (optional)\n- **cargo fmt**: Rust code formatting\n- **cargo clippy**: Rust linting\n\nSee [docs/PRE_COMMIT_HOOKS.md](docs/PRE_COMMIT_HOOKS.md) for detailed information.\n\n### Project Structure\n\n```text\ndemopy/\n\u251c\u2500\u2500 .github/workflows/     # GitHub Actions CI/CD\n\u251c\u2500\u2500 docs/                  # Documentation\n\u251c\u2500\u2500 python/demopy/         # Python package source\n\u251c\u2500\u2500 src/                   # Rust source code\n\u251c\u2500\u2500 tests/                 # Test files\n\u251c\u2500\u2500 scripts/               # Utility scripts\n\u251c\u2500\u2500 .pre-commit-config.yaml # Pre-commit hooks configuration\n\u251c\u2500\u2500 Cargo.toml            # Rust package configuration\n\u251c\u2500\u2500 pyproject.toml        # Python package configuration\n\u2514\u2500\u2500 README.md\n```text\n\n### Version Management\n\nThis project uses automated version management. To bump the version:\n\n#### Using GitHub Actions (Recommended)\n\n1. Go to the \"Actions\" tab in your GitHub repository\n2. Select \"Version Bump\" workflow\n3. Click \"Run workflow\"\n4. Choose the bump type (patch/minor/major) or specify a custom version\n5. The workflow will automatically:\n   - Update version numbers in all files\n   - Create a commit and tag\n   - Trigger the release workflow\n   - Publish to PyPI\n\n#### Manual Version Bumping\n\n```bash\n# Bump patch version (0.2.5 -> 0.2.6)\npython scripts/bump_version.py patch\n\n# Bump minor version (0.2.5 -> 0.3.0)\npython scripts/bump_version.py minor\n\n# Bump major version (0.2.5 -> 1.0.0)\npython scripts/bump_version.py major\n\n# Set specific version\npython scripts/bump_version.py 1.2.3\n```text\n\n### Testing\n\n```bash\n# Run Python tests\npytest tests/ -v\n\n# Run Rust tests\ncargo test\n\n# Run linting\ncargo fmt --all -- --check\ncargo clippy -- -D warnings\n\n# Test pure Python fallback\npython -c \"\nimport sys\nsys.path.insert(0, 'python')\nimport builtins\noriginal_import = builtins.__import__\ndef mock_import(name, *args, **kwargs):\n    if 'demopy_gb_jj._rust' in name:\n        raise ImportError('Mocked')\n    return original_import(name, *args, **kwargs)\nbuiltins.__import__ = mock_import\nimport demopy\nprint(demopy.hello())\n\"\n```text\n\n### Building and Publishing\n\nThe project uses GitHub Actions for automated building and publishing:\n\n1. **Continuous Integration**: Runs on every push and pull request\n   - Tests across multiple OS and Python versions\n   - Builds the Rust extension\n   - Runs both Rust and Python tests\n\n2. **Release Workflow**: Triggers on version tags\n   - Builds wheels for all platforms\n   - Creates source distribution\n   - Publishes to PyPI\n   - Creates GitHub release with changelog\n\n3. **Version Bump Workflow**: Manual trigger for version management\n   - Updates version across all files\n   - Creates commit and tag\n   - Triggers release workflow\n\n### Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Add tests for new functionality\n5. Run the test suite (`pytest tests/ && cargo test`)\n6. Commit your changes (`git commit -m 'Add amazing feature'`)\n7. Push to the branch (`git push origin feature/amazing-feature`)\n8. Open a Pull Request\n\n## Architecture\n\n### Rust Extension\n\nThe Rust code in `src/lib.rs` implements high-performance functions using PyO3:\n\n- **hello()**: Returns a greeting message\n- **add(a, b)**: Adds two integers\n- **multiply(a, b)**: Multiplies two floats\n- **sum_list(numbers)**: Sums a list of integers\n- **reverse_string(s)**: Reverses a string\n\n### Python Wrapper\n\nThe Python module in `python/demopy/__init__.py` provides:\n\n- Import handling with fallback to pure Python\n- Consistent API regardless of backend\n- Version information\n- Proper error handling\n\n### Fallback Mechanism\n\nIf the Rust extension fails to load, the package automatically falls back to\npure Python implementations, ensuring the package works even in environments\nwhere the Rust extension cannot be built or loaded.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE)\nfile for details.\n\n## Changelog\n\nSee [Releases](https://github.com/jj-devhub/demopy/releases) for a detailed changelog.\n\nA demo PyPI package for CI/CD publishing.\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A demo PyPI package with Rust extensions",
    "version": "0.6.1",
    "project_urls": {
        "Homepage": "https://github.com/jj-devhub/demopy",
        "Issues": "https://github.com/jj-devhub/demopy/issues",
        "Repository": "https://github.com/jj-devhub/demopy"
    },
    "split_keywords": [
        "rust",
        " python",
        " pyo3",
        " extension"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "03745245123f169cc845a8574fae3cd1e622f8c087249a366b29d3d9cd22e42c",
                "md5": "6fada746cfb7deb882d2072707a38919",
                "sha256": "3f14c0c8140cd30ac90163d148c32981b5c232f2fd79c581da5005daf17ad37b"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "6fada746cfb7deb882d2072707a38919",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 100181,
            "upload_time": "2025-09-07T02:05:07",
            "upload_time_iso_8601": "2025-09-07T02:05:07.607354Z",
            "url": "https://files.pythonhosted.org/packages/03/74/5245123f169cc845a8574fae3cd1e622f8c087249a366b29d3d9cd22e42c/demopy_gb_jj-0.6.1-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0b45b43fb6fd89a213f49b344c4f0954d2bd5b8f8332ec291577335d1086765a",
                "md5": "ae52dee1616ce88c092a60f95f6a98bf",
                "sha256": "811aeb75de0e15acc9b7de2c4a7e310aed06d702d8578ee10002f2d2b63c237f"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "ae52dee1616ce88c092a60f95f6a98bf",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 199565,
            "upload_time": "2025-09-07T02:05:09",
            "upload_time_iso_8601": "2025-09-07T02:05:09.223366Z",
            "url": "https://files.pythonhosted.org/packages/0b/45/b43fb6fd89a213f49b344c4f0954d2bd5b8f8332ec291577335d1086765a/demopy_gb_jj-0.6.1-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f94bb0c79a70f7471a340386ae28ffd865d63d94c5102477c1012168c0398652",
                "md5": "24608b52faffb020039705f4c1761884",
                "sha256": "9bbc1f7b4eeb1c5ceed91d5316f81a9ff7130f01c35de893c93017b1f9030262"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp311-cp311-manylinux_2_34_x86_64.whl",
            "has_sig": false,
            "md5_digest": "24608b52faffb020039705f4c1761884",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 227643,
            "upload_time": "2025-09-07T02:05:10",
            "upload_time_iso_8601": "2025-09-07T02:05:10.209390Z",
            "url": "https://files.pythonhosted.org/packages/f9/4b/b0c79a70f7471a340386ae28ffd865d63d94c5102477c1012168c0398652/demopy_gb_jj-0.6.1-cp311-cp311-manylinux_2_34_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cade005e0466bafd740d326bdff5a2609afadbe6e6430c627e928fbd04ba1698",
                "md5": "ee3a12c7adea8113ae8547c580759363",
                "sha256": "b930aab887a2f6abbffa84c8e1a7010edf82283550ee1d139df4a26f27c7b512"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ee3a12c7adea8113ae8547c580759363",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 100163,
            "upload_time": "2025-09-07T02:05:11",
            "upload_time_iso_8601": "2025-09-07T02:05:11.258202Z",
            "url": "https://files.pythonhosted.org/packages/ca/de/005e0466bafd740d326bdff5a2609afadbe6e6430c627e928fbd04ba1698/demopy_gb_jj-0.6.1-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0d8391e6f77fdfc521da441535cdb3c5dfbdd57a8b63e8938b636e91a978795c",
                "md5": "5259cae3da967c3f0992690434240661",
                "sha256": "7fe1d7167e29f96c77ebf7fd45f05b4d04cde09e20e0071bc81ceb8ff46a92a1"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "5259cae3da967c3f0992690434240661",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 198796,
            "upload_time": "2025-09-07T02:05:12",
            "upload_time_iso_8601": "2025-09-07T02:05:12.104616Z",
            "url": "https://files.pythonhosted.org/packages/0d/83/91e6f77fdfc521da441535cdb3c5dfbdd57a8b63e8938b636e91a978795c/demopy_gb_jj-0.6.1-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "81a32f01f97d069c44135017796df9620084864f23c139b3889cfcc38cb65ede",
                "md5": "e30ef302fac3e3be04afa634f121376c",
                "sha256": "72ff236bcac1ac1ba89ad1042b746695562d02d4991cb251a008a780497a2326"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp312-cp312-manylinux_2_34_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e30ef302fac3e3be04afa634f121376c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 227311,
            "upload_time": "2025-09-07T02:05:13",
            "upload_time_iso_8601": "2025-09-07T02:05:13.405036Z",
            "url": "https://files.pythonhosted.org/packages/81/a3/2f01f97d069c44135017796df9620084864f23c139b3889cfcc38cb65ede/demopy_gb_jj-0.6.1-cp312-cp312-manylinux_2_34_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "354b176e6fa78c86200465a3cc8b1726038aa635410dc55d2df2ad3a6f7ced78",
                "md5": "92e86ccd716f8cddb3dbfed69b00981c",
                "sha256": "2c201c262590e1c364d9dac98e0939b8d2bdd66eb8c665a2876dcef4e04ce2f0"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "92e86ccd716f8cddb3dbfed69b00981c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 99677,
            "upload_time": "2025-09-07T02:05:14",
            "upload_time_iso_8601": "2025-09-07T02:05:14.702185Z",
            "url": "https://files.pythonhosted.org/packages/35/4b/176e6fa78c86200465a3cc8b1726038aa635410dc55d2df2ad3a6f7ced78/demopy_gb_jj-0.6.1-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "730051f0bd5799baa2e8c461befcd9ed5aa0c30f80dc01b97bcdf703bdac64eb",
                "md5": "d1d634722ce479684fe5453a84bc5052",
                "sha256": "8ccaeb45b6f8f5dc69b9b88ded8077baf05cd213aacf0557ddf53b2ef3d36ad6"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "d1d634722ce479684fe5453a84bc5052",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 198944,
            "upload_time": "2025-09-07T02:05:15",
            "upload_time_iso_8601": "2025-09-07T02:05:15.902594Z",
            "url": "https://files.pythonhosted.org/packages/73/00/51f0bd5799baa2e8c461befcd9ed5aa0c30f80dc01b97bcdf703bdac64eb/demopy_gb_jj-0.6.1-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e9ab2d1848f5123fb8cb2a45453367edcf064ef1050f85b0bedc8004fe58c84b",
                "md5": "8c9129646ca1f2b71c1f1d51a223402e",
                "sha256": "8337495bd638079f77c95631ab49b1e3257e878251b5312fdf3c59f1bb24ab82"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "8c9129646ca1f2b71c1f1d51a223402e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 99732,
            "upload_time": "2025-09-07T02:05:16",
            "upload_time_iso_8601": "2025-09-07T02:05:16.770146Z",
            "url": "https://files.pythonhosted.org/packages/e9/ab/2d1848f5123fb8cb2a45453367edcf064ef1050f85b0bedc8004fe58c84b/demopy_gb_jj-0.6.1-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6dc34dbca4ba9dbe4d8038aebd4cc8ccd36fd5a8d7d1832bcbefda48161eb8bb",
                "md5": "524192b8205a305678793287099cd7a9",
                "sha256": "d9dd36edbd89309480cba993fded837149ca50ed948a7afec3a8c290e8c3a2af"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "524192b8205a305678793287099cd7a9",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 100438,
            "upload_time": "2025-09-07T02:05:17",
            "upload_time_iso_8601": "2025-09-07T02:05:17.960598Z",
            "url": "https://files.pythonhosted.org/packages/6d/c3/4dbca4ba9dbe4d8038aebd4cc8ccd36fd5a8d7d1832bcbefda48161eb8bb/demopy_gb_jj-0.6.1-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7198d725d07c36750fb0905364dd78f86ff43c47aa353907feddc31ea84fc238",
                "md5": "984542305e841f4f776dc3e8f3d20736",
                "sha256": "65178a8e9b3b21a4de27d502fe7a2f250edab99cad4e1ddac4964f36df21ded9"
            },
            "downloads": -1,
            "filename": "demopy_gb_jj-0.6.1.tar.gz",
            "has_sig": false,
            "md5_digest": "984542305e841f4f776dc3e8f3d20736",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 60540,
            "upload_time": "2025-09-07T02:05:18",
            "upload_time_iso_8601": "2025-09-07T02:05:18.773521Z",
            "url": "https://files.pythonhosted.org/packages/71/98/d725d07c36750fb0905364dd78f86ff43c47aa353907feddc31ea84fc238/demopy_gb_jj-0.6.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-07 02:05:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jj-devhub",
    "github_project": "demopy",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "demopy-gb-jj"
}
        
Elapsed time: 2.87528s