seldom


Nameseldom JSON
Version 3.10.0 PyPI version JSON
download
home_pagehttps://seldomqa.github.io
SummarySeldom automation testing framework based on unittest.
upload_time2024-11-11 11:23:25
maintainerNone
docs_urlNone
authorbugmaster
requires_python<4.0,>=3.8
licenseApache-2.0
keywords sedom selenium appium requests
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [GitHub](https://github.com/SeldomQA/seldom) | [Gitee](https://gitee.com/fnngj/seldom) |

![](seldom_logo.jpg)

[![PyPI version](https://badge.fury.io/py/seldom.svg)](https://badge.fury.io/py/seldom) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/seldom)

Seldom is an automation testing framework based on unittest.

> seldom 是基于unittest 的自动化测试框架。

### Features

- [x] web/app/api全功能测试框架
- [x] 提供脚手架快速创建自动化项目
- [x] 集成`XTestRunner`测试报告,现代美观
- [x] 提供丰富的断言
- [x] 提供强大的`数据驱动`
- [x] 平台化支持

### Install

```shell
pip install seldom==3.9.0
```

If you want to keep up with the latest version, you can install with github repository url:

```shell
> pip install -U git+https://github.com/SeldomQA/seldom.git@master
```

### 🤖 Quick Start

1、查看帮助:

```shell
seldom --help
Usage: seldom [OPTIONS]

  seldom CLI.

Options:
  --version                       Show version.
  --project-api TEXT              Create an API automation test project.
  --project-app TEXT              Create an App automation test project.
  --project-web TEXT              Create an Web automation test project.
  -cc, --clear-cache BOOLEAN      Clear all caches of seldom.
  -p, --path TEXT                 Run test case file path.
  -c, --collect / -nc, --no-collect
                                  Collect project test cases. Need the
                                  `--path`.
  -l, --level [data|method]       Parse the level of use cases. Need the
                                  --path.
  -j, --case-json TEXT            Test case files. Need the `--path`.
  -e, --env TEXT                  Set the Seldom run environment `Seldom.env`.
  -b, --browser [chrome|firefox|ie|edge|safari]
                                  The browser that runs the Web UI automation
                                  tests. Need the `--path`.
  -u, --base-url TEXT             The base-url that runs the HTTP automation
                                  tests. Need the `--path`.
  -d, --debug / -nd, --no-debug   Debug mode. Need the `--path`.
  -rr, --rerun INTEGER            The number of times a use case failed to run
                                  again. Need the `--path`.
  -r, --report TEXT               Set the test report for output. Need the
                                  `--path`.
  -m, --mod TEXT                  Run tests modules, classes or even
                                  individual test methods from the command
                                  line.
  -ll, --log-level [TRACE|DEBUG|INFO|SUCCESS|WARNING|ERROR]
                                  Set the log level.
  -h2c, --har2case TEXT           HAR file converts an seldom test case.
  -s2c, --swagger2case TEXT       Swagger file converts an seldom test case.
  --api-excel TEXT                Run the api test cases in the excel file.
  --help                          Show this message and exit.
```

2、创建项目:

```shell
> seldom --project-api myapi  # API automation test project.
> seldom --project-app myapp  # or App automation test project.
> seldom --project-web myweb  # or Web automation test project.
```

目录结构如下:

```shell
myweb/
├── test_dir/
│   ├── __init__.py
│   └── test_sample.py
├── test_data/
│   └── data.json
├── reports/
└── confrun.py
```

* `test_dir/` 测试用例目录。
* `test_data/` 测试数据文件目录。
* `reports/` 测试报告目录。
* `confrun.py` 运行配置文件。

3、运行项目:

* ❌️ 在`PyCharm`中右键执行。

* ✔️ 通过命令行工具执行。

```shell
> seldom -p test_dir # 运行 test_dir 测试目录


              __    __
   ________  / /___/ /___  ____ ____
  / ___/ _ \/ / __  / __ \/ __ ` ___/
 (__  )  __/ / /_/ / /_/ / / / / / /
/____/\___/_/\__,_/\____/_/ /_/ /_/  v3.x.x
-----------------------------------------
                             @itest.info
...

2022-04-30 18:37:36 log.py | INFO | ✅ Find 1 element: id=sb_form_q  -> input 'seldom'.
2022-04-30 18:37:39 log.py | INFO | 👀 assertIn title: seldom - 搜索.
.52022-04-30 18:37:39 log.py | INFO | 📖 https://cn.bing.com
2022-04-30 18:37:41 log.py | INFO | ✅ Find 1 element: id=sb_form_q  -> input 'poium'.
2022-04-30 18:37:42 log.py | INFO | 👀 assertIn title: poium - 搜索.
.62022-04-30 18:37:42 log.py | INFO | 📖 https://cn.bing.com
2022-04-30 18:37:43 log.py | INFO | ✅ Find 1 element: id=sb_form_q  -> input 'XTestRunner'.
2022-04-30 18:37:44 log.py | INFO | 👀 assertIn title: XTestRunner - 搜索.
.72022-04-30 18:37:44 log.py | INFO | 📖 http://www.itest.info
2022-04-30 18:37:52 log.py | INFO | 👀 assertIn url: http://www.itest.info/.
.82022-04-30 18:37:52 log.py | SUCCESS | generated html file: file:///D:\mypro\reports\2022_04_30_18_37_29_result.html
2022-04-30 18:37:52 log.py | SUCCESS | generated log file: file:///D:\mypro\reports\seldom_log.log
```

4、查看报告

你可以到 `mypro\reports\` 目录查看测试报告。

![test report](./test_report.png)

## 🔬 Demo

> seldom继承unittest单元测试框架,完全遵循unittest编写用例规范。

[demo](/demo) 提供了丰富实例,帮你快速了解seldom的用法。

### Web UI 测试

```python
import seldom
from seldom import Steps


class BaiduTest(seldom.TestCase):

    def test_case_one(self):
        """a simple test case """
        self.open("https://www.baidu.com")
        self.type(id_="kw", text="seldom")
        self.click(css="#su")
        self.assertTitle("seldom_百度搜索")

    def test_case_two(self):
        """method chaining """
        Steps().open("https://www.baidu.com").find("#kw").type("seldom").find("#su").click()
        self.assertTitle("seldom_百度搜索")


if __name__ == '__main__':
    seldom.main(browser="chrome")
```

__说明:__

* `seldom.main()` 通过 `browser` 指定运行的浏览器。

### HTTP 测试

seldom 2.0 支持HTTP测试

```python
import seldom


class TestRequest(seldom.TestCase):

    def test_put_method(self):
        self.put('/put', data={'key': 'value'})
        self.assertStatusCode(200)

    def test_post_method(self):
        self.post('/post', data={'key': 'value'})
        self.assertStatusCode(200)

    def test_get_method(self):
        payload = {'key1': 'value1', 'key2': 'value2'}
        self.get("/get", params=payload)
        self.assertStatusCode(200)

    def test_delete_method(self):
        self.delete('/delete')
        self.assertStatusCode(200)


if __name__ == '__main__':
    seldom.main(base_url="http://httpbin.org")
```

__说明:__

* `seldom.main()` 通过 `base_url` 指定接口项目基本URL地址。

### App 测试

seldom 3.0 支持App测试

```python
import seldom
from seldom.appium_lab.keyboard import KeyEvent
from seldom.appium_lab.android import UiAutomator2Options


class TestBingApp(seldom.TestCase):

    def start(self):
        self.ke = KeyEvent(self.driver)

    def test_bing_search(self):
        """
        test bing App search
        """
        self.sleep(2)
        self.click(id_="com.microsoft.bing:id/sa_hp_header_search_box")
        self.type(id_="com.microsoft.bing:id/sapphire_search_header_input", text="seldomQA")
        self.ke.press_key("ENTER")
        self.sleep(1)
        elem = self.get_elements(xpath='//android.widget.TextView')
        self.assertIn("seldom", elem[0].text.lower())


if __name__ == '__main__':
    capabilities = {
        'deviceName': 'ELS-AN00',
        'automationName': 'UiAutomator2',
        'platformName': 'Android',
        'appPackage': 'com.microsoft.bing',
        'appActivity': 'com.microsoft.sapphire.app.main.MainSapphireActivity',
        'noReset': True,
    }
    options = UiAutomator2Options().load_capabilities(capabilities)
    seldom.main(app_server="http://127.0.0.1:4723", app_info=options, debug=True)
```

__说明:__

* `seldom.main()` 通过 `app_info` 指定App信息; `app_server` 指定appium server 地址。

## 📖 Document

[中文文档](https://seldomqa.github.io/)

### 项目实例

基于seldom的web UI自动化项目:

https://github.com/SeldomQA/seldom-web-testing

基于seldom的接口自动化项目:

https://github.com/defnngj/seldom-api-testing

## 微信(WeChat)

> 欢迎添加微信,交流和反馈问题。

<div style="display: flex;justify-content: space-between;width: 100%">
    <p><img alt="微信" src="wechat.jpg" style="width: 200px;height: 100%" ></p>
</div>

### Star History

![Star History Chart](https://api.star-history.com/svg?repos=SeldomQA/seldom&type=Date)

### 感谢

感谢从以下项目中得到思路和帮助。

* [parameterized](https://github.com/wolever/parameterized)

* [utx](https://github.com/jianbing/utx)

### 贡献者

<a href="https://github.com/SeldomQA/seldom/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=SeldomQA/seldom" />
</a>

### 交流

QQ群:948994709


            

Raw data

            {
    "_id": null,
    "home_page": "https://seldomqa.github.io",
    "name": "seldom",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.8",
    "maintainer_email": null,
    "keywords": "sedom, selenium, appium, requests",
    "author": "bugmaster",
    "author_email": "fnngj@126.com",
    "download_url": "https://files.pythonhosted.org/packages/66/60/2f9083f59ac963d4a37c22d81314fd5ebf849b0b4e66b47c1b9a07f6d9f4/seldom-3.10.0.tar.gz",
    "platform": null,
    "description": "[GitHub](https://github.com/SeldomQA/seldom) | [Gitee](https://gitee.com/fnngj/seldom) |\n\n![](seldom_logo.jpg)\n\n[![PyPI version](https://badge.fury.io/py/seldom.svg)](https://badge.fury.io/py/seldom) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/seldom)\n\nSeldom is an automation testing framework based on unittest.\n\n> seldom \u662f\u57fa\u4e8eunittest \u7684\u81ea\u52a8\u5316\u6d4b\u8bd5\u6846\u67b6\u3002\n\n### Features\n\n- [x] web/app/api\u5168\u529f\u80fd\u6d4b\u8bd5\u6846\u67b6\n- [x] \u63d0\u4f9b\u811a\u624b\u67b6\u5feb\u901f\u521b\u5efa\u81ea\u52a8\u5316\u9879\u76ee\n- [x] \u96c6\u6210`XTestRunner`\u6d4b\u8bd5\u62a5\u544a\uff0c\u73b0\u4ee3\u7f8e\u89c2\n- [x] \u63d0\u4f9b\u4e30\u5bcc\u7684\u65ad\u8a00\n- [x] \u63d0\u4f9b\u5f3a\u5927\u7684`\u6570\u636e\u9a71\u52a8`\n- [x] \u5e73\u53f0\u5316\u652f\u6301\n\n### Install\n\n```shell\npip install seldom==3.9.0\n```\n\nIf you want to keep up with the latest version, you can install with github repository url:\n\n```shell\n> pip install -U git+https://github.com/SeldomQA/seldom.git@master\n```\n\n### \ud83e\udd16 Quick Start\n\n1\u3001\u67e5\u770b\u5e2e\u52a9\uff1a\n\n```shell\nseldom --help\nUsage: seldom [OPTIONS]\n\n  seldom CLI.\n\nOptions:\n  --version                       Show version.\n  --project-api TEXT              Create an API automation test project.\n  --project-app TEXT              Create an App automation test project.\n  --project-web TEXT              Create an Web automation test project.\n  -cc, --clear-cache BOOLEAN      Clear all caches of seldom.\n  -p, --path TEXT                 Run test case file path.\n  -c, --collect / -nc, --no-collect\n                                  Collect project test cases. Need the\n                                  `--path`.\n  -l, --level [data|method]       Parse the level of use cases. Need the\n                                  --path.\n  -j, --case-json TEXT            Test case files. Need the `--path`.\n  -e, --env TEXT                  Set the Seldom run environment `Seldom.env`.\n  -b, --browser [chrome|firefox|ie|edge|safari]\n                                  The browser that runs the Web UI automation\n                                  tests. Need the `--path`.\n  -u, --base-url TEXT             The base-url that runs the HTTP automation\n                                  tests. Need the `--path`.\n  -d, --debug / -nd, --no-debug   Debug mode. Need the `--path`.\n  -rr, --rerun INTEGER            The number of times a use case failed to run\n                                  again. Need the `--path`.\n  -r, --report TEXT               Set the test report for output. Need the\n                                  `--path`.\n  -m, --mod TEXT                  Run tests modules, classes or even\n                                  individual test methods from the command\n                                  line.\n  -ll, --log-level [TRACE|DEBUG|INFO|SUCCESS|WARNING|ERROR]\n                                  Set the log level.\n  -h2c, --har2case TEXT           HAR file converts an seldom test case.\n  -s2c, --swagger2case TEXT       Swagger file converts an seldom test case.\n  --api-excel TEXT                Run the api test cases in the excel file.\n  --help                          Show this message and exit.\n```\n\n2\u3001\u521b\u5efa\u9879\u76ee\uff1a\n\n```shell\n> seldom --project-api myapi  # API automation test project.\n> seldom --project-app myapp  # or App automation test project.\n> seldom --project-web myweb  # or Web automation test project.\n```\n\n\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\uff1a\n\n```shell\nmyweb/\n\u251c\u2500\u2500 test_dir/\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2514\u2500\u2500 test_sample.py\n\u251c\u2500\u2500 test_data/\n\u2502   \u2514\u2500\u2500 data.json\n\u251c\u2500\u2500 reports/\n\u2514\u2500\u2500 confrun.py\n```\n\n* `test_dir/` \u6d4b\u8bd5\u7528\u4f8b\u76ee\u5f55\u3002\n* `test_data/` \u6d4b\u8bd5\u6570\u636e\u6587\u4ef6\u76ee\u5f55\u3002\n* `reports/` \u6d4b\u8bd5\u62a5\u544a\u76ee\u5f55\u3002\n* `confrun.py` \u8fd0\u884c\u914d\u7f6e\u6587\u4ef6\u3002\n\n3\u3001\u8fd0\u884c\u9879\u76ee\uff1a\n\n* \u274c\ufe0f \u5728`PyCharm`\u4e2d\u53f3\u952e\u6267\u884c\u3002\n\n* \u2714\ufe0f \u901a\u8fc7\u547d\u4ee4\u884c\u5de5\u5177\u6267\u884c\u3002\n\n```shell\n> seldom -p test_dir # \u8fd0\u884c test_dir \u6d4b\u8bd5\u76ee\u5f55\n\n\n              __    __\n   ________  / /___/ /___  ____ ____\n  / ___/ _ \\/ / __  / __ \\/ __ ` ___/\n (__  )  __/ / /_/ / /_/ / / / / / /\n/____/\\___/_/\\__,_/\\____/_/ /_/ /_/  v3.x.x\n-----------------------------------------\n                             @itest.info\n...\n\n2022-04-30 18:37:36 log.py | INFO | \u2705 Find 1 element: id=sb_form_q  -> input 'seldom'.\n2022-04-30 18:37:39 log.py | INFO | \ud83d\udc40 assertIn title: seldom - \u641c\u7d22.\n.52022-04-30 18:37:39 log.py | INFO | \ud83d\udcd6 https://cn.bing.com\n2022-04-30 18:37:41 log.py | INFO | \u2705 Find 1 element: id=sb_form_q  -> input 'poium'.\n2022-04-30 18:37:42 log.py | INFO | \ud83d\udc40 assertIn title: poium - \u641c\u7d22.\n.62022-04-30 18:37:42 log.py | INFO | \ud83d\udcd6 https://cn.bing.com\n2022-04-30 18:37:43 log.py | INFO | \u2705 Find 1 element: id=sb_form_q  -> input 'XTestRunner'.\n2022-04-30 18:37:44 log.py | INFO | \ud83d\udc40 assertIn title: XTestRunner - \u641c\u7d22.\n.72022-04-30 18:37:44 log.py | INFO | \ud83d\udcd6 http://www.itest.info\n2022-04-30 18:37:52 log.py | INFO | \ud83d\udc40 assertIn url: http://www.itest.info/.\n.82022-04-30 18:37:52 log.py | SUCCESS | generated html file: file:///D:\\mypro\\reports\\2022_04_30_18_37_29_result.html\n2022-04-30 18:37:52 log.py | SUCCESS | generated log file: file:///D:\\mypro\\reports\\seldom_log.log\n```\n\n4\u3001\u67e5\u770b\u62a5\u544a\n\n\u4f60\u53ef\u4ee5\u5230 `mypro\\reports\\` \u76ee\u5f55\u67e5\u770b\u6d4b\u8bd5\u62a5\u544a\u3002\n\n![test report](./test_report.png)\n\n## \ud83d\udd2c Demo\n\n> seldom\u7ee7\u627funittest\u5355\u5143\u6d4b\u8bd5\u6846\u67b6\uff0c\u5b8c\u5168\u9075\u5faaunittest\u7f16\u5199\u7528\u4f8b\u89c4\u8303\u3002\n\n[demo](/demo) \u63d0\u4f9b\u4e86\u4e30\u5bcc\u5b9e\u4f8b\uff0c\u5e2e\u4f60\u5feb\u901f\u4e86\u89e3seldom\u7684\u7528\u6cd5\u3002\n\n### Web UI \u6d4b\u8bd5\n\n```python\nimport seldom\nfrom seldom import Steps\n\n\nclass BaiduTest(seldom.TestCase):\n\n    def test_case_one(self):\n        \"\"\"a simple test case \"\"\"\n        self.open(\"https://www.baidu.com\")\n        self.type(id_=\"kw\", text=\"seldom\")\n        self.click(css=\"#su\")\n        self.assertTitle(\"seldom_\u767e\u5ea6\u641c\u7d22\")\n\n    def test_case_two(self):\n        \"\"\"method chaining \"\"\"\n        Steps().open(\"https://www.baidu.com\").find(\"#kw\").type(\"seldom\").find(\"#su\").click()\n        self.assertTitle(\"seldom_\u767e\u5ea6\u641c\u7d22\")\n\n\nif __name__ == '__main__':\n    seldom.main(browser=\"chrome\")\n```\n\n__\u8bf4\u660e\uff1a__\n\n* `seldom.main()` \u901a\u8fc7 `browser` \u6307\u5b9a\u8fd0\u884c\u7684\u6d4f\u89c8\u5668\u3002\n\n### HTTP \u6d4b\u8bd5\n\nseldom 2.0 \u652f\u6301HTTP\u6d4b\u8bd5\n\n```python\nimport seldom\n\n\nclass TestRequest(seldom.TestCase):\n\n    def test_put_method(self):\n        self.put('/put', data={'key': 'value'})\n        self.assertStatusCode(200)\n\n    def test_post_method(self):\n        self.post('/post', data={'key': 'value'})\n        self.assertStatusCode(200)\n\n    def test_get_method(self):\n        payload = {'key1': 'value1', 'key2': 'value2'}\n        self.get(\"/get\", params=payload)\n        self.assertStatusCode(200)\n\n    def test_delete_method(self):\n        self.delete('/delete')\n        self.assertStatusCode(200)\n\n\nif __name__ == '__main__':\n    seldom.main(base_url=\"http://httpbin.org\")\n```\n\n__\u8bf4\u660e\uff1a__\n\n* `seldom.main()` \u901a\u8fc7 `base_url` \u6307\u5b9a\u63a5\u53e3\u9879\u76ee\u57fa\u672cURL\u5730\u5740\u3002\n\n### App \u6d4b\u8bd5\n\nseldom 3.0 \u652f\u6301App\u6d4b\u8bd5\n\n```python\nimport seldom\nfrom seldom.appium_lab.keyboard import KeyEvent\nfrom seldom.appium_lab.android import UiAutomator2Options\n\n\nclass TestBingApp(seldom.TestCase):\n\n    def start(self):\n        self.ke = KeyEvent(self.driver)\n\n    def test_bing_search(self):\n        \"\"\"\n        test bing App search\n        \"\"\"\n        self.sleep(2)\n        self.click(id_=\"com.microsoft.bing:id/sa_hp_header_search_box\")\n        self.type(id_=\"com.microsoft.bing:id/sapphire_search_header_input\", text=\"seldomQA\")\n        self.ke.press_key(\"ENTER\")\n        self.sleep(1)\n        elem = self.get_elements(xpath='//android.widget.TextView')\n        self.assertIn(\"seldom\", elem[0].text.lower())\n\n\nif __name__ == '__main__':\n    capabilities = {\n        'deviceName': 'ELS-AN00',\n        'automationName': 'UiAutomator2',\n        'platformName': 'Android',\n        'appPackage': 'com.microsoft.bing',\n        'appActivity': 'com.microsoft.sapphire.app.main.MainSapphireActivity',\n        'noReset': True,\n    }\n    options = UiAutomator2Options().load_capabilities(capabilities)\n    seldom.main(app_server=\"http://127.0.0.1:4723\", app_info=options, debug=True)\n```\n\n__\u8bf4\u660e\uff1a__\n\n* `seldom.main()` \u901a\u8fc7 `app_info` \u6307\u5b9aApp\u4fe1\u606f\uff1b `app_server` \u6307\u5b9aappium server \u5730\u5740\u3002\n\n## \ud83d\udcd6 Document\n\n[\u4e2d\u6587\u6587\u6863](https://seldomqa.github.io/)\n\n### \u9879\u76ee\u5b9e\u4f8b\n\n\u57fa\u4e8eseldom\u7684web UI\u81ea\u52a8\u5316\u9879\u76ee\uff1a\n\nhttps://github.com/SeldomQA/seldom-web-testing\n\n\u57fa\u4e8eseldom\u7684\u63a5\u53e3\u81ea\u52a8\u5316\u9879\u76ee:\n\nhttps://github.com/defnngj/seldom-api-testing\n\n## \u5fae\u4fe1\uff08WeChat\uff09\n\n> \u6b22\u8fce\u6dfb\u52a0\u5fae\u4fe1\uff0c\u4ea4\u6d41\u548c\u53cd\u9988\u95ee\u9898\u3002\n\n<div style=\"display: flex;justify-content: space-between;width: 100%\">\n    <p><img alt=\"\u5fae\u4fe1\" src=\"wechat.jpg\" style=\"width: 200px;height: 100%\" ></p>\n</div>\n\n### Star History\n\n![Star History Chart](https://api.star-history.com/svg?repos=SeldomQA/seldom&type=Date)\n\n### \u611f\u8c22\n\n\u611f\u8c22\u4ece\u4ee5\u4e0b\u9879\u76ee\u4e2d\u5f97\u5230\u601d\u8def\u548c\u5e2e\u52a9\u3002\n\n* [parameterized](https://github.com/wolever/parameterized)\n\n* [utx](https://github.com/jianbing/utx)\n\n### \u8d21\u732e\u8005\n\n<a href=\"https://github.com/SeldomQA/seldom/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=SeldomQA/seldom\" />\n</a>\n\n### \u4ea4\u6d41\n\nQQ\u7fa4\uff1a948994709\n\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Seldom automation testing framework based on unittest.",
    "version": "3.10.0",
    "project_urls": {
        "Documentation": "https://seldomqa.github.io",
        "Homepage": "https://seldomqa.github.io",
        "Repository": "https://github.com/SeldomQA/seldom"
    },
    "split_keywords": [
        "sedom",
        " selenium",
        " appium",
        " requests"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fbbfac8bfb29cfc534281116f0b3f74483150d754c3bfb511732848141ba26d5",
                "md5": "5445fe6593b8bc6c198ab04f0957d0a2",
                "sha256": "cb73f81f05ff814f1236328559dfb46d017bfdf9a4e1ff97493cb2607dcf1948"
            },
            "downloads": -1,
            "filename": "seldom-3.10.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5445fe6593b8bc6c198ab04f0957d0a2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.8",
            "size": 113601,
            "upload_time": "2024-11-11T11:23:23",
            "upload_time_iso_8601": "2024-11-11T11:23:23.046974Z",
            "url": "https://files.pythonhosted.org/packages/fb/bf/ac8bfb29cfc534281116f0b3f74483150d754c3bfb511732848141ba26d5/seldom-3.10.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "66602f9083f59ac963d4a37c22d81314fd5ebf849b0b4e66b47c1b9a07f6d9f4",
                "md5": "3422dbbf300c5fd4d4e9f09f99610f87",
                "sha256": "7938abdbd80583a2f51ab9fff3b04c75db157ddbf5fea6f37dfa0b60a2589b59"
            },
            "downloads": -1,
            "filename": "seldom-3.10.0.tar.gz",
            "has_sig": false,
            "md5_digest": "3422dbbf300c5fd4d4e9f09f99610f87",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.8",
            "size": 93259,
            "upload_time": "2024-11-11T11:23:25",
            "upload_time_iso_8601": "2024-11-11T11:23:25.299388Z",
            "url": "https://files.pythonhosted.org/packages/66/60/2f9083f59ac963d4a37c22d81314fd5ebf849b0b4e66b47c1b9a07f6d9f4/seldom-3.10.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-11 11:23:25",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "SeldomQA",
    "github_project": "seldom",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "seldom"
}
        
Elapsed time: 0.66308s