rpa-sdk


Namerpa-sdk JSON
Version 1.1.2 PyPI version JSON
download
home_pageNone
SummaryRPA SDK - 机器人流程自动化软件开发工具包
upload_time2025-09-03 06:49:12
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords rpa automation browser websocket database
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # RPA SDK

[![Python Version](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/downloads/)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Version](https://img.shields.io/badge/version-1.0.0-orange.svg)](https://gitee.com/aitmc/rpa-sdk)

**RPA SDK** 是一个功能强大的机器人流程自动化(RPA)软件开发工具包,专为Python开发者设计。它提供了浏览器自动化、WebSocket通信、数据库操作等核心功能,帮助您快速构建高效的RPA应用程序。

## ✨ 主要特性

- 🌐 **浏览器自动化**: 基于Playwright的现代浏览器自动化支持
- 🔌 **WebSocket通信**: 实时双向通信能力
- 🗄️ **数据库集成**: 支持MySQL数据库操作
- 📊 **数据模型**: 内置访问、体检、档案等数据模型
- 🛠️ **丰富工具**: 提供字符串处理、文件操作、系统工具等实用功能
- 📝 **完整日志**: 支持调试模式和详细日志记录
- 🎯 **易于扩展**: 模块化设计,支持自定义任务处理器

## 📦 安装

### 使用pip安装

```bash
pip install rpa-sdk
```

### 从源码安装

```bash
git clone https://gitee.com/aitmc/rpa-sdk.git
cd rpa-sdk
pip install -e .
```

### 安装浏览器驱动

安装完成后,需要安装Playwright浏览器驱动:

```bash
playwright install
```

## 🚀 快速开始

### 基本使用

```python
from rpa_sdk import RPAClient, Logger

# 创建RPA客户端
client = RPAClient()

# 启用调试日志
Logger.setup(debug_mode=True)

# 初始化浏览器
if client.initialize_browser(headless=False):
    Logger.info("浏览器初始化成功")
    
    # 执行自动化任务
    # ...
    
    # 清理资源
    client.cleanup()
```

### 使用浏览器管理器

```python
from rpa_sdk import PlaywrightBrowserManager

with PlaywrightBrowserManager() as browser:
    if browser.initialize(headless=False):
        browser.navigate_to("https://example.com")
        # 执行页面操作
        # ...
```

### WebSocket通信

```python
from rpa_sdk import WebSocketClient

def handle_message(data):
    print(f"收到消息: {data}")

# 创建WebSocket客户端
ws_client = WebSocketClient(
    url="ws://localhost:8765",
    message_handler=handle_message
)

# 连接并发送消息
ws_client.connect()
ws_client.send_message("hello", "Hello, Server!")
```

### 数据库操作

```python
from rpa_sdk import DatabaseManager

# 获取数据库管理器
db = DatabaseManager()

# 执行查询
results = db.execute_query("SELECT * FROM users WHERE active = 1")
for row in results:
    print(row)
```

## 📚 API文档

### 核心类

#### RPAClient
主要的RPA客户端类,提供完整的RPA功能。

- `initialize_browser(headless=True)`: 初始化浏览器
- `login_system(username, password)`: 系统登录
- `start()`: 启动客户端
- `stop()`: 停止客户端
- `cleanup()`: 清理资源

#### PlaywrightBrowserManager
浏览器管理器,负责浏览器实例的生命周期管理。

- `initialize(headless=True)`: 初始化浏览器
- `navigate_to(url)`: 导航到指定URL
- `login(username, password)`: 执行登录操作
- `cleanup()`: 清理浏览器资源

#### WebSocketClient
WebSocket客户端,提供实时通信功能。

- `connect()`: 连接到WebSocket服务器
- `send_message(action, message, data=None)`: 发送消息
- `send_result(key_id, rpa_type, rpa_state, rpa_note)`: 发送执行结果
- `stop()`: 停止连接

### 工具类

#### Logger
增强的日志记录器。

- `Logger.setup(debug_mode=False, log_file="rpa.log")`: 设置日志配置
- `Logger.info(message, extra_data=None)`: 记录信息日志
- `Logger.warning(message, extra_data=None)`: 记录警告日志
- `Logger.error(message, exception=None, extra_data=None)`: 记录错误日志

## 🔧 配置

### 环境变量

- `RPA_DEBUG`: 设置为`true`启用调试模式
- `RPA_LOG_FILE`: 指定日志文件路径
- `WEBSOCKET_URL`: WebSocket服务器地址

### 配置文件

您可以创建配置文件来自定义RPA客户端的行为:

```python
# config.py
CONFIG = {
    'browser': {
        'headless': True,
        'timeout': 30000,
    },
    'websocket': {
        'url': 'ws://localhost:8765',
        'reconnect_interval': 5,
    },
    'database': {
        'host': 'localhost',
        'port': 3306,
        'user': 'root',
        'password': 'password',
        'database': 'rpa_db',
    }
}
```

## 🎯 使用场景

- **Web自动化测试**: 自动化网页操作和测试
- **数据采集**: 从网站批量采集数据
- **业务流程自动化**: 自动化重复性业务操作
- **系统集成**: 连接不同系统进行数据交换
- **监控和报告**: 自动生成报告和监控系统状态

## 🤝 贡献

欢迎贡献代码!请遵循以下步骤:

1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 创建Pull Request

## 📄 许可证

本项目采用MIT许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。

## 📞 支持

- 📧 邮箱: support@aitmc.com
- 🐛 问题反馈: [Gitee Issues](https://gitee.com/aitmc/rpa-sdk/issues)
- 📖 文档: [项目Wiki](https://gitee.com/aitmc/rpa-sdk/wikis)

## 🔄 更新日志

### v1.0.0 (2024-01-15)
- 🎉 首次发布
- ✨ 支持Playwright浏览器自动化
- ✨ WebSocket实时通信
- ✨ MySQL数据库集成
- ✨ 完整的日志系统
- ✨ 模块化架构设计

---

**RPA SDK** - 让自动化更简单! 🚀

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "rpa-sdk",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "rpa, automation, browser, websocket, database",
    "author": null,
    "author_email": "AITMC <support@aitmc.com>",
    "download_url": "https://files.pythonhosted.org/packages/b2/4e/dd57bd7301c39d25a90f3e8a5c0b78cb7b436dc6f5a1c2683742707e00ba/rpa_sdk-1.1.2.tar.gz",
    "platform": null,
    "description": "# RPA SDK\r\n\r\n[![Python Version](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/downloads/)\r\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\r\n[![Version](https://img.shields.io/badge/version-1.0.0-orange.svg)](https://gitee.com/aitmc/rpa-sdk)\r\n\r\n**RPA SDK** \u662f\u4e00\u4e2a\u529f\u80fd\u5f3a\u5927\u7684\u673a\u5668\u4eba\u6d41\u7a0b\u81ea\u52a8\u5316\uff08RPA\uff09\u8f6f\u4ef6\u5f00\u53d1\u5de5\u5177\u5305\uff0c\u4e13\u4e3aPython\u5f00\u53d1\u8005\u8bbe\u8ba1\u3002\u5b83\u63d0\u4f9b\u4e86\u6d4f\u89c8\u5668\u81ea\u52a8\u5316\u3001WebSocket\u901a\u4fe1\u3001\u6570\u636e\u5e93\u64cd\u4f5c\u7b49\u6838\u5fc3\u529f\u80fd\uff0c\u5e2e\u52a9\u60a8\u5feb\u901f\u6784\u5efa\u9ad8\u6548\u7684RPA\u5e94\u7528\u7a0b\u5e8f\u3002\r\n\r\n## \u2728 \u4e3b\u8981\u7279\u6027\r\n\r\n- \ud83c\udf10 **\u6d4f\u89c8\u5668\u81ea\u52a8\u5316**: \u57fa\u4e8ePlaywright\u7684\u73b0\u4ee3\u6d4f\u89c8\u5668\u81ea\u52a8\u5316\u652f\u6301\r\n- \ud83d\udd0c **WebSocket\u901a\u4fe1**: \u5b9e\u65f6\u53cc\u5411\u901a\u4fe1\u80fd\u529b\r\n- \ud83d\uddc4\ufe0f **\u6570\u636e\u5e93\u96c6\u6210**: \u652f\u6301MySQL\u6570\u636e\u5e93\u64cd\u4f5c\r\n- \ud83d\udcca **\u6570\u636e\u6a21\u578b**: \u5185\u7f6e\u8bbf\u95ee\u3001\u4f53\u68c0\u3001\u6863\u6848\u7b49\u6570\u636e\u6a21\u578b\r\n- \ud83d\udee0\ufe0f **\u4e30\u5bcc\u5de5\u5177**: \u63d0\u4f9b\u5b57\u7b26\u4e32\u5904\u7406\u3001\u6587\u4ef6\u64cd\u4f5c\u3001\u7cfb\u7edf\u5de5\u5177\u7b49\u5b9e\u7528\u529f\u80fd\r\n- \ud83d\udcdd **\u5b8c\u6574\u65e5\u5fd7**: \u652f\u6301\u8c03\u8bd5\u6a21\u5f0f\u548c\u8be6\u7ec6\u65e5\u5fd7\u8bb0\u5f55\r\n- \ud83c\udfaf **\u6613\u4e8e\u6269\u5c55**: \u6a21\u5757\u5316\u8bbe\u8ba1\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u4efb\u52a1\u5904\u7406\u5668\r\n\r\n## \ud83d\udce6 \u5b89\u88c5\r\n\r\n### \u4f7f\u7528pip\u5b89\u88c5\r\n\r\n```bash\r\npip install rpa-sdk\r\n```\r\n\r\n### \u4ece\u6e90\u7801\u5b89\u88c5\r\n\r\n```bash\r\ngit clone https://gitee.com/aitmc/rpa-sdk.git\r\ncd rpa-sdk\r\npip install -e .\r\n```\r\n\r\n### \u5b89\u88c5\u6d4f\u89c8\u5668\u9a71\u52a8\r\n\r\n\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u9700\u8981\u5b89\u88c5Playwright\u6d4f\u89c8\u5668\u9a71\u52a8\uff1a\r\n\r\n```bash\r\nplaywright install\r\n```\r\n\r\n## \ud83d\ude80 \u5feb\u901f\u5f00\u59cb\r\n\r\n### \u57fa\u672c\u4f7f\u7528\r\n\r\n```python\r\nfrom rpa_sdk import RPAClient, Logger\r\n\r\n# \u521b\u5efaRPA\u5ba2\u6237\u7aef\r\nclient = RPAClient()\r\n\r\n# \u542f\u7528\u8c03\u8bd5\u65e5\u5fd7\r\nLogger.setup(debug_mode=True)\r\n\r\n# \u521d\u59cb\u5316\u6d4f\u89c8\u5668\r\nif client.initialize_browser(headless=False):\r\n    Logger.info(\"\u6d4f\u89c8\u5668\u521d\u59cb\u5316\u6210\u529f\")\r\n    \r\n    # \u6267\u884c\u81ea\u52a8\u5316\u4efb\u52a1\r\n    # ...\r\n    \r\n    # \u6e05\u7406\u8d44\u6e90\r\n    client.cleanup()\r\n```\r\n\r\n### \u4f7f\u7528\u6d4f\u89c8\u5668\u7ba1\u7406\u5668\r\n\r\n```python\r\nfrom rpa_sdk import PlaywrightBrowserManager\r\n\r\nwith PlaywrightBrowserManager() as browser:\r\n    if browser.initialize(headless=False):\r\n        browser.navigate_to(\"https://example.com\")\r\n        # \u6267\u884c\u9875\u9762\u64cd\u4f5c\r\n        # ...\r\n```\r\n\r\n### WebSocket\u901a\u4fe1\r\n\r\n```python\r\nfrom rpa_sdk import WebSocketClient\r\n\r\ndef handle_message(data):\r\n    print(f\"\u6536\u5230\u6d88\u606f: {data}\")\r\n\r\n# \u521b\u5efaWebSocket\u5ba2\u6237\u7aef\r\nws_client = WebSocketClient(\r\n    url=\"ws://localhost:8765\",\r\n    message_handler=handle_message\r\n)\r\n\r\n# \u8fde\u63a5\u5e76\u53d1\u9001\u6d88\u606f\r\nws_client.connect()\r\nws_client.send_message(\"hello\", \"Hello, Server!\")\r\n```\r\n\r\n### \u6570\u636e\u5e93\u64cd\u4f5c\r\n\r\n```python\r\nfrom rpa_sdk import DatabaseManager\r\n\r\n# \u83b7\u53d6\u6570\u636e\u5e93\u7ba1\u7406\u5668\r\ndb = DatabaseManager()\r\n\r\n# \u6267\u884c\u67e5\u8be2\r\nresults = db.execute_query(\"SELECT * FROM users WHERE active = 1\")\r\nfor row in results:\r\n    print(row)\r\n```\r\n\r\n## \ud83d\udcda API\u6587\u6863\r\n\r\n### \u6838\u5fc3\u7c7b\r\n\r\n#### RPAClient\r\n\u4e3b\u8981\u7684RPA\u5ba2\u6237\u7aef\u7c7b\uff0c\u63d0\u4f9b\u5b8c\u6574\u7684RPA\u529f\u80fd\u3002\r\n\r\n- `initialize_browser(headless=True)`: \u521d\u59cb\u5316\u6d4f\u89c8\u5668\r\n- `login_system(username, password)`: \u7cfb\u7edf\u767b\u5f55\r\n- `start()`: \u542f\u52a8\u5ba2\u6237\u7aef\r\n- `stop()`: \u505c\u6b62\u5ba2\u6237\u7aef\r\n- `cleanup()`: \u6e05\u7406\u8d44\u6e90\r\n\r\n#### PlaywrightBrowserManager\r\n\u6d4f\u89c8\u5668\u7ba1\u7406\u5668\uff0c\u8d1f\u8d23\u6d4f\u89c8\u5668\u5b9e\u4f8b\u7684\u751f\u547d\u5468\u671f\u7ba1\u7406\u3002\r\n\r\n- `initialize(headless=True)`: \u521d\u59cb\u5316\u6d4f\u89c8\u5668\r\n- `navigate_to(url)`: \u5bfc\u822a\u5230\u6307\u5b9aURL\r\n- `login(username, password)`: \u6267\u884c\u767b\u5f55\u64cd\u4f5c\r\n- `cleanup()`: \u6e05\u7406\u6d4f\u89c8\u5668\u8d44\u6e90\r\n\r\n#### WebSocketClient\r\nWebSocket\u5ba2\u6237\u7aef\uff0c\u63d0\u4f9b\u5b9e\u65f6\u901a\u4fe1\u529f\u80fd\u3002\r\n\r\n- `connect()`: \u8fde\u63a5\u5230WebSocket\u670d\u52a1\u5668\r\n- `send_message(action, message, data=None)`: \u53d1\u9001\u6d88\u606f\r\n- `send_result(key_id, rpa_type, rpa_state, rpa_note)`: \u53d1\u9001\u6267\u884c\u7ed3\u679c\r\n- `stop()`: \u505c\u6b62\u8fde\u63a5\r\n\r\n### \u5de5\u5177\u7c7b\r\n\r\n#### Logger\r\n\u589e\u5f3a\u7684\u65e5\u5fd7\u8bb0\u5f55\u5668\u3002\r\n\r\n- `Logger.setup(debug_mode=False, log_file=\"rpa.log\")`: \u8bbe\u7f6e\u65e5\u5fd7\u914d\u7f6e\r\n- `Logger.info(message, extra_data=None)`: \u8bb0\u5f55\u4fe1\u606f\u65e5\u5fd7\r\n- `Logger.warning(message, extra_data=None)`: \u8bb0\u5f55\u8b66\u544a\u65e5\u5fd7\r\n- `Logger.error(message, exception=None, extra_data=None)`: \u8bb0\u5f55\u9519\u8bef\u65e5\u5fd7\r\n\r\n## \ud83d\udd27 \u914d\u7f6e\r\n\r\n### \u73af\u5883\u53d8\u91cf\r\n\r\n- `RPA_DEBUG`: \u8bbe\u7f6e\u4e3a`true`\u542f\u7528\u8c03\u8bd5\u6a21\u5f0f\r\n- `RPA_LOG_FILE`: \u6307\u5b9a\u65e5\u5fd7\u6587\u4ef6\u8def\u5f84\r\n- `WEBSOCKET_URL`: WebSocket\u670d\u52a1\u5668\u5730\u5740\r\n\r\n### \u914d\u7f6e\u6587\u4ef6\r\n\r\n\u60a8\u53ef\u4ee5\u521b\u5efa\u914d\u7f6e\u6587\u4ef6\u6765\u81ea\u5b9a\u4e49RPA\u5ba2\u6237\u7aef\u7684\u884c\u4e3a\uff1a\r\n\r\n```python\r\n# config.py\r\nCONFIG = {\r\n    'browser': {\r\n        'headless': True,\r\n        'timeout': 30000,\r\n    },\r\n    'websocket': {\r\n        'url': 'ws://localhost:8765',\r\n        'reconnect_interval': 5,\r\n    },\r\n    'database': {\r\n        'host': 'localhost',\r\n        'port': 3306,\r\n        'user': 'root',\r\n        'password': 'password',\r\n        'database': 'rpa_db',\r\n    }\r\n}\r\n```\r\n\r\n## \ud83c\udfaf \u4f7f\u7528\u573a\u666f\r\n\r\n- **Web\u81ea\u52a8\u5316\u6d4b\u8bd5**: \u81ea\u52a8\u5316\u7f51\u9875\u64cd\u4f5c\u548c\u6d4b\u8bd5\r\n- **\u6570\u636e\u91c7\u96c6**: \u4ece\u7f51\u7ad9\u6279\u91cf\u91c7\u96c6\u6570\u636e\r\n- **\u4e1a\u52a1\u6d41\u7a0b\u81ea\u52a8\u5316**: \u81ea\u52a8\u5316\u91cd\u590d\u6027\u4e1a\u52a1\u64cd\u4f5c\r\n- **\u7cfb\u7edf\u96c6\u6210**: \u8fde\u63a5\u4e0d\u540c\u7cfb\u7edf\u8fdb\u884c\u6570\u636e\u4ea4\u6362\r\n- **\u76d1\u63a7\u548c\u62a5\u544a**: \u81ea\u52a8\u751f\u6210\u62a5\u544a\u548c\u76d1\u63a7\u7cfb\u7edf\u72b6\u6001\r\n\r\n## \ud83e\udd1d \u8d21\u732e\r\n\r\n\u6b22\u8fce\u8d21\u732e\u4ee3\u7801\uff01\u8bf7\u9075\u5faa\u4ee5\u4e0b\u6b65\u9aa4\uff1a\r\n\r\n1. Fork \u672c\u4ed3\u5e93\r\n2. \u521b\u5efa\u7279\u6027\u5206\u652f (`git checkout -b feature/AmazingFeature`)\r\n3. \u63d0\u4ea4\u66f4\u6539 (`git commit -m 'Add some AmazingFeature'`)\r\n4. \u63a8\u9001\u5230\u5206\u652f (`git push origin feature/AmazingFeature`)\r\n5. \u521b\u5efaPull Request\r\n\r\n## \ud83d\udcc4 \u8bb8\u53ef\u8bc1\r\n\r\n\u672c\u9879\u76ee\u91c7\u7528MIT\u8bb8\u53ef\u8bc1 - \u67e5\u770b [LICENSE](LICENSE) \u6587\u4ef6\u4e86\u89e3\u8be6\u60c5\u3002\r\n\r\n## \ud83d\udcde \u652f\u6301\r\n\r\n- \ud83d\udce7 \u90ae\u7bb1: support@aitmc.com\r\n- \ud83d\udc1b \u95ee\u9898\u53cd\u9988: [Gitee Issues](https://gitee.com/aitmc/rpa-sdk/issues)\r\n- \ud83d\udcd6 \u6587\u6863: [\u9879\u76eeWiki](https://gitee.com/aitmc/rpa-sdk/wikis)\r\n\r\n## \ud83d\udd04 \u66f4\u65b0\u65e5\u5fd7\r\n\r\n### v1.0.0 (2024-01-15)\r\n- \ud83c\udf89 \u9996\u6b21\u53d1\u5e03\r\n- \u2728 \u652f\u6301Playwright\u6d4f\u89c8\u5668\u81ea\u52a8\u5316\r\n- \u2728 WebSocket\u5b9e\u65f6\u901a\u4fe1\r\n- \u2728 MySQL\u6570\u636e\u5e93\u96c6\u6210\r\n- \u2728 \u5b8c\u6574\u7684\u65e5\u5fd7\u7cfb\u7edf\r\n- \u2728 \u6a21\u5757\u5316\u67b6\u6784\u8bbe\u8ba1\r\n\r\n---\r\n\r\n**RPA SDK** - \u8ba9\u81ea\u52a8\u5316\u66f4\u7b80\u5355\uff01 \ud83d\ude80\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "RPA SDK - \u673a\u5668\u4eba\u6d41\u7a0b\u81ea\u52a8\u5316\u8f6f\u4ef6\u5f00\u53d1\u5de5\u5177\u5305",
    "version": "1.1.2",
    "project_urls": {
        "Bug Reports": "https://gitee.com/aitmc/rpa-sdk/issues",
        "Documentation": "https://gitee.com/aitmc/rpa-sdk/wikis",
        "Homepage": "https://gitee.com/aitmc/rpa-sdk",
        "Source": "https://gitee.com/aitmc/rpa-sdk"
    },
    "split_keywords": [
        "rpa",
        " automation",
        " browser",
        " websocket",
        " database"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "06d9ccaa4a3c7fe4f7316e25f023ca0a42671deefb5362c3912f66118ef6f70a",
                "md5": "3ae7cbc3673cc278bb74e782581a22c5",
                "sha256": "afdaa3c8672d69ba1f79a7ed394daa127fa0ba437e2c3db540244ab691840c94"
            },
            "downloads": -1,
            "filename": "rpa_sdk-1.1.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3ae7cbc3673cc278bb74e782581a22c5",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 72154,
            "upload_time": "2025-09-03T06:49:10",
            "upload_time_iso_8601": "2025-09-03T06:49:10.301223Z",
            "url": "https://files.pythonhosted.org/packages/06/d9/ccaa4a3c7fe4f7316e25f023ca0a42671deefb5362c3912f66118ef6f70a/rpa_sdk-1.1.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b24edd57bd7301c39d25a90f3e8a5c0b78cb7b436dc6f5a1c2683742707e00ba",
                "md5": "ad2fb11de56f16857efcee5256bb93cf",
                "sha256": "cd9f033ca7462fb193d431a14d8c8c619da9cd9090d48b8ce6eb2cbc417ba7c5"
            },
            "downloads": -1,
            "filename": "rpa_sdk-1.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "ad2fb11de56f16857efcee5256bb93cf",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 59739,
            "upload_time": "2025-09-03T06:49:12",
            "upload_time_iso_8601": "2025-09-03T06:49:12.462254Z",
            "url": "https://files.pythonhosted.org/packages/b2/4e/dd57bd7301c39d25a90f3e8a5c0b78cb7b436dc6f5a1c2683742707e00ba/rpa_sdk-1.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-03 06:49:12",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "rpa-sdk"
}
        
Elapsed time: 1.83241s