rtest


Namertest JSON
Version 0.0.31 PyPI version JSON
download
home_pageNone
SummaryPython test runner built in Rust
upload_time2025-07-23 02:34:16
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords testing pytest rust performance
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # rtest

[![PyPI version](https://badge.fury.io/py/rtest.svg)](https://badge.fury.io/py/rtest)
[![Python](https://img.shields.io/pypi/pyversions/rtest.svg)](https://pypi.org/project/rtest/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

A Python test runner built with Rust, currently supporting high-performance test-collection, with the goal of being a drop-in replacement for [`pytest`](https://pytest.org).

> **⚠️ Development Status**: This project is in early development (v0.0.x). Expect bugs, breaking changes, and evolving features as we work toward stability.

## Performance

*Benchmarks performed using [hyperfine](https://github.com/sharkdp/hyperfine) with 20 runs, 3 warmup runs per measurement, on an M4 Macbook Pro with 14 cores and 48GB RAM.* **More sophisticated benchmarks will be implemented in the future.**

### Against the [`flask`](https://github.com/pallets/flask) Repository
```
hyperfine --command-name pytest --command-name rtest "pytest --collect-only" "rtest --collect-only" --warmup 3 --runs 20
Benchmark 1: pytest
  Time (mean ± σ):     229.9 ms ±   2.6 ms    [User: 184.5 ms, System: 37.4 ms]
  Range (min … max):   226.0 ms … 235.4 ms    20 runs
 
Benchmark 2: rtest
  Time (mean ± σ):      35.8 ms ±   1.2 ms    [User: 18.1 ms, System: 10.7 ms]
  Range (min … max):    34.2 ms …  40.3 ms    20 runs
 
Summary
  rtest ran
    6.41 ± 0.23 times faster than pytest
```

### Against the [`httpx`](https://github.com/encode/httpx) Repository
```
hyperfine --command-name pytest --command-name rtest "pytest --collect-only" "rtest --collect-only" --warmup 3 --runs 20
Benchmark 1: pytest
  Time (mean ± σ):     310.1 ms ±  18.6 ms    [User: 259.3 ms, System: 42.6 ms]
  Range (min … max):   291.0 ms … 344.4 ms    20 runs
 
Benchmark 2: rtest
  Time (mean ± σ):      20.6 ms ±   1.0 ms    [User: 12.5 ms, System: 5.5 ms]
  Range (min … max):    18.6 ms …  21.9 ms    20 runs
 
Summary
  rtest ran
   15.06 ± 1.15 times faster than pytest
```

### Against the [`pydantic`](https://github.com/pydantic/pydantic) Repository
```
hyperfine --command-name pytest --command-name rtest "pytest --collect-only" "rtest --collect-only" --warmup 3 --runs 20
Benchmark 1: pytest
  Time (mean ± σ):      2.777 s ±  0.031 s    [User: 2.598 s, System: 0.147 s]
  Range (min … max):    2.731 s …  2.864 s    20 runs
 
Benchmark 2: rtest
  Time (mean ± σ):      61.2 ms ±   1.1 ms    [User: 40.1 ms, System: 14.4 ms]
  Range (min … max):    60.1 ms …  64.2 ms    20 runs
 
Summary
  rtest ran
   45.39 ± 0.95 times faster than pytest
```

## Quick Start

### Installation

```bash
pip install rtest
```

*Requires Python 3.9+*

### Basic Usage

```bash
rtest --collect-only
```

## Roadmap
Support executing tests, with parallelization built out of the box (bypassing [`pytest-xdist`](https://pypi.org/project/pytest-xdist/)). Currently, this works for some cases, but is not yet stable.

## Known Limitations

### Parametrized Test Discovery
`rtest` currently discovers only the base function names for parametrized tests (created with `@pytest.mark.parametrize`), rather than expanding them into individual test items during collection. For example:

```python
@pytest.mark.parametrize("value", [1, 2, 3])
def test_example(value):
    assert value > 0
```

**pytest collection shows:**
```
test_example[1]
test_example[2] 
test_example[3]
```

**rtest collection shows:**
```
test_example
```

However, when `rtest` executes tests using pytest as the executor, passing the base function name (`test_example`) to pytest results in identical behavior - pytest automatically runs all parametrized variants. This means test execution is functionally equivalent between the tools, but collection counts may differ.

### Test Class Inheritance Collection
When a test class inherits from another test class, `rtest` collects inherited test methods differently than `pytest`. While `pytest` shows inherited methods under each subclass that inherits them, `rtest` currently shows inherited methods only under the base class where they are defined. For example:

```python
# test_example.py
class TestAddNumbers:
    def test_add_positive_numbers(self):
        pass
    
    def test_add_negative_numbers(self):
        pass

# test_floating_numbers.py  
from tests.test_example import TestAddNumbers

class TestAddFloatingNumbers(TestAddNumbers):
    def test_add_simple_floats(self):
        pass
```

**pytest collection shows:**
```
test_example.py::TestAddNumbers::test_add_positive_numbers
test_example.py::TestAddNumbers::test_add_negative_numbers
test_floating_numbers.py::TestAddNumbers::test_add_positive_numbers
test_floating_numbers.py::TestAddNumbers::test_add_negative_numbers
test_floating_numbers.py::TestAddFloatingNumbers::test_add_positive_numbers
test_floating_numbers.py::TestAddFloatingNumbers::test_add_negative_numbers
test_floating_numbers.py::TestAddFloatingNumbers::test_add_simple_floats
```

**rtest collection shows:**
```
test_example.py::TestAddNumbers::test_add_positive_numbers
test_example.py::TestAddNumbers::test_add_negative_numbers
test_floating_numbers.py::TestAddFloatingNumbers::test_add_positive_numbers
test_floating_numbers.py::TestAddFloatingNumbers::test_add_negative_numbers
test_floating_numbers.py::TestAddFloatingNumbers::test_add_simple_floats
```

We believe this difference is desirable, in that `TestAddNumbers` isn't collected twice from different modules.

### Path Separator Handling
`rtest` uses platform-specific path separators in test nodeids, while `pytest` normalizes all paths to use forward slashes (`/`) regardless of platform. For example:

**On Windows:**
- pytest shows: `tests/unit/test_example.py::test_function`
- rtest shows: `tests\unit\test_example.py::test_function`

**On Unix/macOS:**
- Both show: `tests/unit/test_example.py::test_function`

This difference is intentional as `rtest` preserves the native path format of the operating system.

## Contributing

We welcome contributions! See [Contributing Guide](CONTRIBUTING.rst).

## License

MIT - see [LICENSE](LICENSE) file for details.

---

## Acknowledgments

This project takes inspiration from [Astral](https://astral.sh) and leverages crates from [`ruff`].


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "rtest",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "testing, pytest, rust, performance",
    "author": null,
    "author_email": "Hugh Han <hughhan1@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/ec/80/59eab3eafb1eb8a393c4ebda82253b0bded2e77bf33e26a82fe4001a6c7e/rtest-0.0.31.tar.gz",
    "platform": null,
    "description": "# rtest\n\n[![PyPI version](https://badge.fury.io/py/rtest.svg)](https://badge.fury.io/py/rtest)\n[![Python](https://img.shields.io/pypi/pyversions/rtest.svg)](https://pypi.org/project/rtest/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA Python test runner built with Rust, currently supporting high-performance test-collection, with the goal of being a drop-in replacement for [`pytest`](https://pytest.org).\n\n> **\u26a0\ufe0f Development Status**: This project is in early development (v0.0.x). Expect bugs, breaking changes, and evolving features as we work toward stability.\n\n## Performance\n\n*Benchmarks performed using [hyperfine](https://github.com/sharkdp/hyperfine) with 20 runs, 3 warmup runs per measurement, on an M4 Macbook Pro with 14 cores and 48GB RAM.* **More sophisticated benchmarks will be implemented in the future.**\n\n### Against the [`flask`](https://github.com/pallets/flask) Repository\n```\nhyperfine --command-name pytest --command-name rtest \"pytest --collect-only\" \"rtest --collect-only\" --warmup 3 --runs 20\nBenchmark 1: pytest\n  Time (mean \u00b1 \u03c3):     229.9 ms \u00b1   2.6 ms    [User: 184.5 ms, System: 37.4 ms]\n  Range (min \u2026 max):   226.0 ms \u2026 235.4 ms    20 runs\n \nBenchmark 2: rtest\n  Time (mean \u00b1 \u03c3):      35.8 ms \u00b1   1.2 ms    [User: 18.1 ms, System: 10.7 ms]\n  Range (min \u2026 max):    34.2 ms \u2026  40.3 ms    20 runs\n \nSummary\n  rtest ran\n    6.41 \u00b1 0.23 times faster than pytest\n```\n\n### Against the [`httpx`](https://github.com/encode/httpx) Repository\n```\nhyperfine --command-name pytest --command-name rtest \"pytest --collect-only\" \"rtest --collect-only\" --warmup 3 --runs 20\nBenchmark 1: pytest\n  Time (mean \u00b1 \u03c3):     310.1 ms \u00b1  18.6 ms    [User: 259.3 ms, System: 42.6 ms]\n  Range (min \u2026 max):   291.0 ms \u2026 344.4 ms    20 runs\n \nBenchmark 2: rtest\n  Time (mean \u00b1 \u03c3):      20.6 ms \u00b1   1.0 ms    [User: 12.5 ms, System: 5.5 ms]\n  Range (min \u2026 max):    18.6 ms \u2026  21.9 ms    20 runs\n \nSummary\n  rtest ran\n   15.06 \u00b1 1.15 times faster than pytest\n```\n\n### Against the [`pydantic`](https://github.com/pydantic/pydantic) Repository\n```\nhyperfine --command-name pytest --command-name rtest \"pytest --collect-only\" \"rtest --collect-only\" --warmup 3 --runs 20\nBenchmark 1: pytest\n  Time (mean \u00b1 \u03c3):      2.777 s \u00b1  0.031 s    [User: 2.598 s, System: 0.147 s]\n  Range (min \u2026 max):    2.731 s \u2026  2.864 s    20 runs\n \nBenchmark 2: rtest\n  Time (mean \u00b1 \u03c3):      61.2 ms \u00b1   1.1 ms    [User: 40.1 ms, System: 14.4 ms]\n  Range (min \u2026 max):    60.1 ms \u2026  64.2 ms    20 runs\n \nSummary\n  rtest ran\n   45.39 \u00b1 0.95 times faster than pytest\n```\n\n## Quick Start\n\n### Installation\n\n```bash\npip install rtest\n```\n\n*Requires Python 3.9+*\n\n### Basic Usage\n\n```bash\nrtest --collect-only\n```\n\n## Roadmap\nSupport executing tests, with parallelization built out of the box (bypassing [`pytest-xdist`](https://pypi.org/project/pytest-xdist/)). Currently, this works for some cases, but is not yet stable.\n\n## Known Limitations\n\n### Parametrized Test Discovery\n`rtest` currently discovers only the base function names for parametrized tests (created with `@pytest.mark.parametrize`), rather than expanding them into individual test items during collection. For example:\n\n```python\n@pytest.mark.parametrize(\"value\", [1, 2, 3])\ndef test_example(value):\n    assert value > 0\n```\n\n**pytest collection shows:**\n```\ntest_example[1]\ntest_example[2] \ntest_example[3]\n```\n\n**rtest collection shows:**\n```\ntest_example\n```\n\nHowever, when `rtest` executes tests using pytest as the executor, passing the base function name (`test_example`) to pytest results in identical behavior - pytest automatically runs all parametrized variants. This means test execution is functionally equivalent between the tools, but collection counts may differ.\n\n### Test Class Inheritance Collection\nWhen a test class inherits from another test class, `rtest` collects inherited test methods differently than `pytest`. While `pytest` shows inherited methods under each subclass that inherits them, `rtest` currently shows inherited methods only under the base class where they are defined. For example:\n\n```python\n# test_example.py\nclass TestAddNumbers:\n    def test_add_positive_numbers(self):\n        pass\n    \n    def test_add_negative_numbers(self):\n        pass\n\n# test_floating_numbers.py  \nfrom tests.test_example import TestAddNumbers\n\nclass TestAddFloatingNumbers(TestAddNumbers):\n    def test_add_simple_floats(self):\n        pass\n```\n\n**pytest collection shows:**\n```\ntest_example.py::TestAddNumbers::test_add_positive_numbers\ntest_example.py::TestAddNumbers::test_add_negative_numbers\ntest_floating_numbers.py::TestAddNumbers::test_add_positive_numbers\ntest_floating_numbers.py::TestAddNumbers::test_add_negative_numbers\ntest_floating_numbers.py::TestAddFloatingNumbers::test_add_positive_numbers\ntest_floating_numbers.py::TestAddFloatingNumbers::test_add_negative_numbers\ntest_floating_numbers.py::TestAddFloatingNumbers::test_add_simple_floats\n```\n\n**rtest collection shows:**\n```\ntest_example.py::TestAddNumbers::test_add_positive_numbers\ntest_example.py::TestAddNumbers::test_add_negative_numbers\ntest_floating_numbers.py::TestAddFloatingNumbers::test_add_positive_numbers\ntest_floating_numbers.py::TestAddFloatingNumbers::test_add_negative_numbers\ntest_floating_numbers.py::TestAddFloatingNumbers::test_add_simple_floats\n```\n\nWe believe this difference is desirable, in that `TestAddNumbers` isn't collected twice from different modules.\n\n### Path Separator Handling\n`rtest` uses platform-specific path separators in test nodeids, while `pytest` normalizes all paths to use forward slashes (`/`) regardless of platform. For example:\n\n**On Windows:**\n- pytest shows: `tests/unit/test_example.py::test_function`\n- rtest shows: `tests\\unit\\test_example.py::test_function`\n\n**On Unix/macOS:**\n- Both show: `tests/unit/test_example.py::test_function`\n\nThis difference is intentional as `rtest` preserves the native path format of the operating system.\n\n## Contributing\n\nWe welcome contributions! See [Contributing Guide](CONTRIBUTING.rst).\n\n## License\n\nMIT - see [LICENSE](LICENSE) file for details.\n\n---\n\n## Acknowledgments\n\nThis project takes inspiration from [Astral](https://astral.sh) and leverages crates from [`ruff`].\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python test runner built in Rust",
    "version": "0.0.31",
    "project_urls": {
        "Homepage": "https://github.com/hughhan1/rtest",
        "Issues": "https://github.com/hughhan1/rtest/issues",
        "Repository": "https://github.com/hughhan1/rtest.git"
    },
    "split_keywords": [
        "testing",
        " pytest",
        " rust",
        " performance"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "929a302441f4af23e3d1069c017a8128736f160e9bbd9a00428c588c38a603d3",
                "md5": "f284af7132386bf45a036ef4d637db39",
                "sha256": "d0ad363f0df512eabdf5a00c198c5ab901059bcc2ea64bddcb5474e2130ffc81"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f284af7132386bf45a036ef4d637db39",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 1532274,
            "upload_time": "2025-07-23T02:33:41",
            "upload_time_iso_8601": "2025-07-23T02:33:41.067357Z",
            "url": "https://files.pythonhosted.org/packages/92/9a/302441f4af23e3d1069c017a8128736f160e9bbd9a00428c588c38a603d3/rtest-0.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f8c9ab70ba0927c154b214b59d7ced2cb2928f82e3ac96b211722b79efa7768d",
                "md5": "3ce6785670d0a45bc7039bde6cd4e299",
                "sha256": "c126ea51849bcbd9ceab1757a702529400e6eac9c515d98b07c261d17745c3d1"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp310-cp310-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "3ce6785670d0a45bc7039bde6cd4e299",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 1492019,
            "upload_time": "2025-07-23T02:33:42",
            "upload_time_iso_8601": "2025-07-23T02:33:42.685575Z",
            "url": "https://files.pythonhosted.org/packages/f8/c9/ab70ba0927c154b214b59d7ced2cb2928f82e3ac96b211722b79efa7768d/rtest-0.0.31-cp310-cp310-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c2e52cabe11ec009c6c26629ea46b8adad2004a4240095ff69464c072967be19",
                "md5": "5a9863cbf4adc01514cefd1739d9793b",
                "sha256": "9578f87b69c450e93a51881b2255de0a771126bd0b1810e80042b89a612bfb3e"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5a9863cbf4adc01514cefd1739d9793b",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 1335417,
            "upload_time": "2025-07-23T02:33:43",
            "upload_time_iso_8601": "2025-07-23T02:33:43.868674Z",
            "url": "https://files.pythonhosted.org/packages/c2/e5/2cabe11ec009c6c26629ea46b8adad2004a4240095ff69464c072967be19/rtest-0.0.31-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4974705b12fd9cf436b5d90e705abece8fcdad96363fae141cd9d85b4d9068ff",
                "md5": "8d95094a73a38cebed1f0d5cdde59d22",
                "sha256": "03d0824a4ff32e7288ed9873f4920ffeb9409124e0b4ec89db47a40ee2807670"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8d95094a73a38cebed1f0d5cdde59d22",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1452641,
            "upload_time": "2025-07-23T02:33:47",
            "upload_time_iso_8601": "2025-07-23T02:33:47.107594Z",
            "url": "https://files.pythonhosted.org/packages/49/74/705b12fd9cf436b5d90e705abece8fcdad96363fae141cd9d85b4d9068ff/rtest-0.0.31-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "470f53a5e22b2be1c92c4364f790ae73102a0341938b011086af0de4de65a37e",
                "md5": "c92a368d510cb7189940d8af9ac88c48",
                "sha256": "5700f56fa8f71bd181e3a614c01568ad396c66a68a34d68428fe9d88993509cd"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c92a368d510cb7189940d8af9ac88c48",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1412334,
            "upload_time": "2025-07-23T02:33:48",
            "upload_time_iso_8601": "2025-07-23T02:33:48.105310Z",
            "url": "https://files.pythonhosted.org/packages/47/0f/53a5e22b2be1c92c4364f790ae73102a0341938b011086af0de4de65a37e/rtest-0.0.31-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1852b8a7f451c77e0886f6c427f3286259cf0eff4bc8a5cfceb2d7049329a644",
                "md5": "a89caf39017173d5ec3af5c0222ae141",
                "sha256": "15ccc176c0a1ae9c4efa803364fd49524dc4ceab98b200192c8db60325147382"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a89caf39017173d5ec3af5c0222ae141",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1531749,
            "upload_time": "2025-07-23T02:33:49",
            "upload_time_iso_8601": "2025-07-23T02:33:49.443991Z",
            "url": "https://files.pythonhosted.org/packages/18/52/b8a7f451c77e0886f6c427f3286259cf0eff4bc8a5cfceb2d7049329a644/rtest-0.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ae59ae7b1b0692208515aa59fbf9ee7a24a17a015cc585c021e23f4fd068d971",
                "md5": "20032eeb4bbd95a08b898425595df336",
                "sha256": "98183ca1f55a45a9fcfd9998e4c91357ce05644d18bdd10588838e1427ddabc8"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp311-cp311-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "20032eeb4bbd95a08b898425595df336",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1491861,
            "upload_time": "2025-07-23T02:33:50",
            "upload_time_iso_8601": "2025-07-23T02:33:50.691453Z",
            "url": "https://files.pythonhosted.org/packages/ae/59/ae7b1b0692208515aa59fbf9ee7a24a17a015cc585c021e23f4fd068d971/rtest-0.0.31-cp311-cp311-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7b388983829b8c9ed5773d4a669dc34240787f2fad8fe07093743df9aff4459b",
                "md5": "cb64f9aa4add3844f6e64a16f184ff7f",
                "sha256": "531374a0d488fb587744f3fe4e2d1e5d2c0477c648970fa6565a3bd4cd9242fe"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "cb64f9aa4add3844f6e64a16f184ff7f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1335507,
            "upload_time": "2025-07-23T02:33:51",
            "upload_time_iso_8601": "2025-07-23T02:33:51.759132Z",
            "url": "https://files.pythonhosted.org/packages/7b/38/8983829b8c9ed5773d4a669dc34240787f2fad8fe07093743df9aff4459b/rtest-0.0.31-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7d1abd1d7a6abdb1e41ad235d210ed4b1e1aa45be11546b1056f215850d6f763",
                "md5": "b21043931764a6cff468c43dfd8b3f24",
                "sha256": "5f437404be87c24234d9ae6b8ac41b4bd0645a038ff5bc31a11b4c04724aa4b2"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b21043931764a6cff468c43dfd8b3f24",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1448531,
            "upload_time": "2025-07-23T02:33:52",
            "upload_time_iso_8601": "2025-07-23T02:33:52.760151Z",
            "url": "https://files.pythonhosted.org/packages/7d/1a/bd1d7a6abdb1e41ad235d210ed4b1e1aa45be11546b1056f215850d6f763/rtest-0.0.31-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5dbc58b5f32b606f7762860c044776600b8681199429a7f20089777a2bb4afc0",
                "md5": "445f354d74aa202a993ba108d74c4572",
                "sha256": "c9b2fc45b21c162306e85a3f210e255b2552cfe346c2b0a30267fd43cbb90e3c"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "445f354d74aa202a993ba108d74c4572",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1409395,
            "upload_time": "2025-07-23T02:33:53",
            "upload_time_iso_8601": "2025-07-23T02:33:53.710565Z",
            "url": "https://files.pythonhosted.org/packages/5d/bc/58b5f32b606f7762860c044776600b8681199429a7f20089777a2bb4afc0/rtest-0.0.31-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e5bdf0252193d50047f591aaef4f72e688ac540b4a0cca751e40d8e445247d99",
                "md5": "c9463f983803befd871ed0673abec95e",
                "sha256": "dc38280589b736f7c47a549ebe8c0d331c28d4a2c8685145df44454101247b32"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c9463f983803befd871ed0673abec95e",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1531078,
            "upload_time": "2025-07-23T02:33:54",
            "upload_time_iso_8601": "2025-07-23T02:33:54.678440Z",
            "url": "https://files.pythonhosted.org/packages/e5/bd/f0252193d50047f591aaef4f72e688ac540b4a0cca751e40d8e445247d99/rtest-0.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bd87d48b66939010bd22ac4cf559254ed663a336cb7bb4981e56aa1732713715",
                "md5": "a37b89a6314749c694153b1f9efbd3d5",
                "sha256": "509263fe8f3ddc9ee36fef241dbb37da7570a848c7083dd1fa582f2735f8ac5c"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp312-cp312-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "a37b89a6314749c694153b1f9efbd3d5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1491165,
            "upload_time": "2025-07-23T02:33:55",
            "upload_time_iso_8601": "2025-07-23T02:33:55.928279Z",
            "url": "https://files.pythonhosted.org/packages/bd/87/d48b66939010bd22ac4cf559254ed663a336cb7bb4981e56aa1732713715/rtest-0.0.31-cp312-cp312-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2cc67b87c565ccb6035ea9902c0e1b9b95ff35ebac718f80e82e934086467579",
                "md5": "53a3cb9ba059c73bc92c6f5c85e6f45a",
                "sha256": "e07303c58147d98158e95ad66e5530e7b0b85b71eaafe1d81dc5c983a21ac02b"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "53a3cb9ba059c73bc92c6f5c85e6f45a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1335434,
            "upload_time": "2025-07-23T02:33:57",
            "upload_time_iso_8601": "2025-07-23T02:33:57.041125Z",
            "url": "https://files.pythonhosted.org/packages/2c/c6/7b87c565ccb6035ea9902c0e1b9b95ff35ebac718f80e82e934086467579/rtest-0.0.31-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3ccdc3682148d2136771d18634fe66226cef1c5c8b9d1dc58a82c7b055058b0e",
                "md5": "a1571d2fe34a2e0718a7d0d9fa10a429",
                "sha256": "59646866b38dfd339ae1d0f2a02565ada7309df8dc49b5bbf23780cc369671f2"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp313-cp313-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a1571d2fe34a2e0718a7d0d9fa10a429",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1448635,
            "upload_time": "2025-07-23T02:33:58",
            "upload_time_iso_8601": "2025-07-23T02:33:58.325975Z",
            "url": "https://files.pythonhosted.org/packages/3c/cd/c3682148d2136771d18634fe66226cef1c5c8b9d1dc58a82c7b055058b0e/rtest-0.0.31-cp313-cp313-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "11280d474a8df2c9db735c25fa304a61c952911366273f6a5953d551e95fa9d6",
                "md5": "a87e82aedf393ac1e4012b8462c02d38",
                "sha256": "f8817cf1e9809c3d0dff392430b8207b79d787a2e41eca36ed5fea29503a5adc"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "a87e82aedf393ac1e4012b8462c02d38",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1409423,
            "upload_time": "2025-07-23T02:33:59",
            "upload_time_iso_8601": "2025-07-23T02:33:59.770337Z",
            "url": "https://files.pythonhosted.org/packages/11/28/0d474a8df2c9db735c25fa304a61c952911366273f6a5953d551e95fa9d6/rtest-0.0.31-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "97ba5f6edfe6f2d6ebf5f713773133be6416af9470afd5e1a5ebcae80c9fe730",
                "md5": "b1ac88daf45fc2931c22b37a7da78750",
                "sha256": "9295abe1f70f02efc63260ebc0f8f5c03d0b4896167ef2e845f4debea7f9119e"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b1ac88daf45fc2931c22b37a7da78750",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1530745,
            "upload_time": "2025-07-23T02:34:01",
            "upload_time_iso_8601": "2025-07-23T02:34:01.112807Z",
            "url": "https://files.pythonhosted.org/packages/97/ba/5f6edfe6f2d6ebf5f713773133be6416af9470afd5e1a5ebcae80c9fe730/rtest-0.0.31-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a80cc6765f44407d42bc380d9dfbe2ee157ae6242734afffd8f6828d726d9ec1",
                "md5": "c116a7f46e9866a41a5d17a98b2e043b",
                "sha256": "208af13da3606fa6ffb2b939234ab66c87d3fd1696483227bcf10bd6ff8e2784"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp313-cp313-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "c116a7f46e9866a41a5d17a98b2e043b",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1490894,
            "upload_time": "2025-07-23T02:34:02",
            "upload_time_iso_8601": "2025-07-23T02:34:02.315337Z",
            "url": "https://files.pythonhosted.org/packages/a8/0c/c6765f44407d42bc380d9dfbe2ee157ae6242734afffd8f6828d726d9ec1/rtest-0.0.31-cp313-cp313-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a85df1d7ce6ad16919e7006e068ca682432eb1e3518aeab5817daf7f58d3e7de",
                "md5": "ae050b1f65ce4b8744a189c9cf4f0eee",
                "sha256": "08a66d40bde0c62ac97c352f0853ca6b3972bcbf8d3e182afdf0d1efdb9f95c1"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp313-cp313t-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "ae050b1f65ce4b8744a189c9cf4f0eee",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1491658,
            "upload_time": "2025-07-23T02:34:04",
            "upload_time_iso_8601": "2025-07-23T02:34:04.653386Z",
            "url": "https://files.pythonhosted.org/packages/a8/5d/f1d7ce6ad16919e7006e068ca682432eb1e3518aeab5817daf7f58d3e7de/rtest-0.0.31-cp313-cp313t-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dbc3ed83d8ac6beacf4c523341ea1e88706467fc4f09c94b93897201f45bac36",
                "md5": "46f81c4b32e79f50d38f2cce058763ec",
                "sha256": "4405952d3835a61cd4ed99c84b3abc24f05ec6ee0a5207cf59984c162f0f8ac7"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "46f81c4b32e79f50d38f2cce058763ec",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1335161,
            "upload_time": "2025-07-23T02:34:03",
            "upload_time_iso_8601": "2025-07-23T02:34:03.275221Z",
            "url": "https://files.pythonhosted.org/packages/db/c3/ed83d8ac6beacf4c523341ea1e88706467fc4f09c94b93897201f45bac36/rtest-0.0.31-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "05d138dfda73f28241df4ce15b41c6644860e98e909677b42322e9f01599cc03",
                "md5": "e1552d8be80cec34e3955ffdc16c3d6b",
                "sha256": "1130b1eb625c6961ad65dc55bf77db4938e4c9f87fce1c5ed414990ea9d7b3c9"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e1552d8be80cec34e3955ffdc16c3d6b",
            "packagetype": "bdist_wheel",
            "python_version": "cp314",
            "requires_python": ">=3.9",
            "size": 1531050,
            "upload_time": "2025-07-23T02:34:05",
            "upload_time_iso_8601": "2025-07-23T02:34:05.653227Z",
            "url": "https://files.pythonhosted.org/packages/05/d1/38dfda73f28241df4ce15b41c6644860e98e909677b42322e9f01599cc03/rtest-0.0.31-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8a1770a382aa716e08c3203d2b66b1e3aa4b474bc914850fd61a92fca565f6a3",
                "md5": "a85ce8227114acdaa7a64c62491b772b",
                "sha256": "f9593c55af680570323a903722fc0653e493694a24348634d7ece5c28dcc5cd9"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a85ce8227114acdaa7a64c62491b772b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 1532587,
            "upload_time": "2025-07-23T02:34:06",
            "upload_time_iso_8601": "2025-07-23T02:34:06.836876Z",
            "url": "https://files.pythonhosted.org/packages/8a/17/70a382aa716e08c3203d2b66b1e3aa4b474bc914850fd61a92fca565f6a3/rtest-0.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "efd267769e91a9d099050dd26e73d87cabca17bc6f7116ccac3cd729a25f98ec",
                "md5": "801e809b3fa4feba6988ef67c78d73ed",
                "sha256": "3d5e85460705c163c4cafaa607b1df784bd9eda130c2318168426e8059f93ecf"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp39-cp39-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "801e809b3fa4feba6988ef67c78d73ed",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 1492328,
            "upload_time": "2025-07-23T02:34:07",
            "upload_time_iso_8601": "2025-07-23T02:34:07.976155Z",
            "url": "https://files.pythonhosted.org/packages/ef/d2/67769e91a9d099050dd26e73d87cabca17bc6f7116ccac3cd729a25f98ec/rtest-0.0.31-cp39-cp39-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "39b8ab37eb27e0ce16e52ce6fd105cd2c264b34405059bfd7735e6c86835756e",
                "md5": "777a9dd91a1f4080ac351cb6d594d847",
                "sha256": "58b7f950ccb196f5c7ccb519f8b187dfb863bfd74d16d366712efab8dbe1f0a6"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "777a9dd91a1f4080ac351cb6d594d847",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 1335475,
            "upload_time": "2025-07-23T02:34:09",
            "upload_time_iso_8601": "2025-07-23T02:34:09.015635Z",
            "url": "https://files.pythonhosted.org/packages/39/b8/ab37eb27e0ce16e52ce6fd105cd2c264b34405059bfd7735e6c86835756e/rtest-0.0.31-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d44d015209ec8c8d7fea59c2b9b10a809b96b753a96063695d6ab498ab4a4f14",
                "md5": "82fb0fe2ab190bc6f928b25611b5c3e7",
                "sha256": "a3a3ab68926e8ad8cd718971ec3750c835e9e205f925820f6734b3929eaee0cb"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "82fb0fe2ab190bc6f928b25611b5c3e7",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 1533154,
            "upload_time": "2025-07-23T02:34:10",
            "upload_time_iso_8601": "2025-07-23T02:34:10.015039Z",
            "url": "https://files.pythonhosted.org/packages/d4/4d/015209ec8c8d7fea59c2b9b10a809b96b753a96063695d6ab498ab4a4f14/rtest-0.0.31-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fedd4e0cbfdae1a9a868c437cda89d0e7a83908ff8fb723bd1325fa811468dea",
                "md5": "8c6cb750c04fcbd325c13b13922fd8ef",
                "sha256": "2be175885260795f6ea3a2c1f323521e35d5ceea884245698dbae39821a6cda6"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "8c6cb750c04fcbd325c13b13922fd8ef",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 1493040,
            "upload_time": "2025-07-23T02:34:11",
            "upload_time_iso_8601": "2025-07-23T02:34:11.315946Z",
            "url": "https://files.pythonhosted.org/packages/fe/dd/4e0cbfdae1a9a868c437cda89d0e7a83908ff8fb723bd1325fa811468dea/rtest-0.0.31-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "09226a0b9d663e3fb86b928734ad9c615f607b839234722760d2505f7cd7c387",
                "md5": "cd0d76d5080dde40a821a65a1b3b1381",
                "sha256": "d79b96e63e93aa22caa2ac192d8f45802bbc69cd05a73f29f271e84e3133f305"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cd0d76d5080dde40a821a65a1b3b1381",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.9",
            "size": 1532776,
            "upload_time": "2025-07-23T02:34:12",
            "upload_time_iso_8601": "2025-07-23T02:34:12.438859Z",
            "url": "https://files.pythonhosted.org/packages/09/22/6a0b9d663e3fb86b928734ad9c615f607b839234722760d2505f7cd7c387/rtest-0.0.31-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fa27a78243bfb5399028eafcd35048ea36da827a7c0425d2a744378f8120c77d",
                "md5": "2d970f60f71c2429010321ae83285ace",
                "sha256": "b7b989cdba5c775ce7d74c96c425da7b2dc41ff681280fc8a1ee23a75d0d7104"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2d970f60f71c2429010321ae83285ace",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.9",
            "size": 1492673,
            "upload_time": "2025-07-23T02:34:13",
            "upload_time_iso_8601": "2025-07-23T02:34:13.901928Z",
            "url": "https://files.pythonhosted.org/packages/fa/27/a78243bfb5399028eafcd35048ea36da827a7c0425d2a744378f8120c77d/rtest-0.0.31-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c3bb514cd91b91e3215225ee5fac4771f541784a8b1271a1b84d0610f3bfcc1d",
                "md5": "1dd109688fd1cdf0b0f4f9d8b5b850b4",
                "sha256": "7ed4944a6e2e18f8ebcf0226dac9069ebe6c01095cac482d4357d2b1b341c56a"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31-pp39-pypy39_pp73-manylinux_2_34_aarch64.whl",
            "has_sig": false,
            "md5_digest": "1dd109688fd1cdf0b0f4f9d8b5b850b4",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.9",
            "size": 1492713,
            "upload_time": "2025-07-23T02:34:15",
            "upload_time_iso_8601": "2025-07-23T02:34:15.346555Z",
            "url": "https://files.pythonhosted.org/packages/c3/bb/514cd91b91e3215225ee5fac4771f541784a8b1271a1b84d0610f3bfcc1d/rtest-0.0.31-pp39-pypy39_pp73-manylinux_2_34_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ec8059eab3eafb1eb8a393c4ebda82253b0bded2e77bf33e26a82fe4001a6c7e",
                "md5": "03b6fd4e06bee3120252ec21cc25d625",
                "sha256": "76f48786477e680c8f4bfa77e1d51dd24afd6408e9d07cc6d1e1f4c570951858"
            },
            "downloads": -1,
            "filename": "rtest-0.0.31.tar.gz",
            "has_sig": false,
            "md5_digest": "03b6fd4e06bee3120252ec21cc25d625",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 1938054,
            "upload_time": "2025-07-23T02:34:16",
            "upload_time_iso_8601": "2025-07-23T02:34:16.725394Z",
            "url": "https://files.pythonhosted.org/packages/ec/80/59eab3eafb1eb8a393c4ebda82253b0bded2e77bf33e26a82fe4001a6c7e/rtest-0.0.31.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-23 02:34:16",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "hughhan1",
    "github_project": "rtest",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "rtest"
}
        
Elapsed time: 0.47296s