Name | pyworkbox JSON |
Version |
0.0.3
JSON |
| download |
home_page | None |
Summary | A collection of my awesome Python functions to make life easier. |
upload_time | 2025-08-27 09:20:26 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | MIT License
Copyright (c) [2025] [mengvision]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
keywords |
utilities
tools
productivity
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# PyWorkBox
[](https://pypi.org/project/pyworkbox/)
[](https://pypi.org/project/pyworkbox/)
[](https://opensource.org/licenses/MIT)
这是一个包含常用功能的 Python 工具函数库,涵盖装饰器、数据库操作、数据可视化、模型评估、降维可视化、节假日处理等多个方面。
## Installation
```bash
pip install pyworkbox
```
### database parameter setup
在使用数据库功能前,请设置以下环境变量:
```bash
# Linux/macOS
echo 'export DB_HOST="your_database_host"' >> ~/.bashrc
echo 'export DB_PORT=5432' >> ~/.bashrc
echo 'export DB_NAME="your_database_name"' >> ~/.bashrc
echo 'export DB_USER="your_username"' >> ~/.bashrc
echo 'export DB_PASSWORD="your_password"' >> ~/.bashrc
source ~/.bashrc
# Windows (Command Prompt)
setx DB_HOST "your_database_host"
setx DB_PORT 5432
setx DB_NAME "your_database_name"
setx DB_USER "your_username"
setx DB_PASSWORD "your_password"
# Windows (PowerShell)
[Environment]::SetEnvironmentVariable("DB_HOST", "your_database_host", "User")
[Environment]::SetEnvironmentVariable("DB_PORT", 5432, "User")
[Environment]::SetEnvironmentVariable("DB_NAME", "your_database_name", "User")
[Environment]::SetEnvironmentVariable("DB_USER", "your_username", "User")
[Environment]::SetEnvironmentVariable("DB_PASSWORD", "your_password", "User")
## Window设置完环境变量以后需要重启电脑
```
## Quick Start
```python
from pyworkbox import fetch_dataframe
# 使用主要功能
sql = 'select * from table limit 10;'
df = fetch_dataframe(sql)
```
## 功能模块说明
### 1. 装饰器(Decorators)
#### `timer`
用于测量函数执行时间的装饰器。
```python
@timer
def my_function():
time.sleep(1)
```
#### `memoize`
缓存函数结果的装饰器,避免重复计算。
```python
@memoize
def expensive_function(x):
return x * x
```
---
### 2. 数据库操作(Database)
#### `fetch_data_from_db`
从 MySQL 数据库分批次读取数据并保存为 Parquet 文件。
```python
rounds = fetch_data_from_db(
tbl_name='my_table',
order_sql='id',
db_name='my_db',
batch_size=10000
)
```
#### `concat_tbl_data`
合并多个 Parquet 文件为一个 DataFrame。
```python
concat_tbl_data('my_table', rounds)
```
#### `fetch_dataframe`
执行 SQL 查询并返回 DataFrame。
```python
df = fetch_dataframe('SELECT * FROM my_table', db_name='my_db')
```
#### `df2db`
将 DataFrame 写入数据库(支持覆盖或追加模式)。
```python
df2db(df, db_name='my_db', tbl_name='my_table', mode='replace')
```
---
### 3. 数据分布可视化(Distribution Plot)
#### `draw_distribute`
绘制数据的分布图(支持 KDE、直方图、混合图)。
```python
draw_distribute(
df,
column='age',
v_min=0,
v_max=100,
hue='gender',
plot_type="kde+histogram"
)
```
---
### 4. 模型评估(Evaluation)
#### `draw_best_f1_score`
绘制 F1 分数随阈值变化图,返回最佳 F1 分数。
```python
best_f1 = draw_best_f1_score(oof_xgb, 'class_1')
```
#### `draw_best_accuracy`
绘制准确率随阈值变化图,返回最佳准确率。
```python
best_acc = draw_best_accuracy(oof_xgb, 'class_1')
```
#### `draw_auc_curve`
绘制 ROC 曲线并计算 AUC。
```python
auc_score = draw_auc_curve(oof_xgb, 'class_1')
```
#### `plot_importance_meng`
绘制特征重要性图(适用于 XGBoost 模型)。
```python
top_features = plot_importance_meng(clf, importance_type='weight', num_feats=10)
```
---
### 5. t-SNE 可视化
#### `tSNE_cal_plot`
计算并绘制 t-SNE 降维结果。
```python
X_tsne, idx = tSNE_cal_plot(
df,
x_name=['feature1', 'feature2'],
y_name='label',
n=5000,
perplexity=50
)
```
#### `split_patient_from_tsne`
根据矩形区域从 t-SNE 图中提取样本。
```python
rect_lim = {
'group1': {'x_lim': [-10, 10], 'y_lim': [-10, 10]}
}
points = split_patient_from_tsne(X_tsne, rect_lim, df, 'label')
```
---
### 6. 节假日处理(Holidays)
#### `in_easter_holiday`
判断日期是否在复活节假期内。
```python
is_easter = in_easter_holiday(datetime(2023, 4, 9))
```
#### `in_christmas_holiday`
判断日期是否在圣诞节假期内。
```python
is_christmas = in_christmas_holiday(datetime(2023, 12, 25))
```
#### `get_period_of_month`
判断日期属于上旬、中旬还是下旬。
```python
period = get_period_of_month(datetime(2023, 7, 15)) # 返回 2
```
#### `get_holiday_workday`
从 GitHub 获取节假日和调休信息。
```python
holidays, workdays = get_holiday_workday('https://raw.githubusercontent.com/xxx/holidays.js')
```
---
### 7. 模型工具(Models)
#### `ridge_regression`
岭回归闭式解实现。
```python
coef = ridge_regression(X, y, lambda_param=0.1)
```
---
### 8. 时间处理(Time Processing)
#### `get_last_day_of_previous_month`
获取上个月的最后一天。
```python
last_day = get_last_day_of_previous_month()
# 或指定日期
last_day = get_last_day_of_previous_month('2024-07-01')
```
---
## 使用示例
```python
from my_utils import timer, fetch_dataframe, draw_distribute
@timer
def process_data():
df = fetch_dataframe('SELECT * FROM users', db_name='test_db')
draw_distribute(df, 'age', v_min=0, v_max=100)
process_data()
```
---
## 注意事项
- 数据库连接参数已硬编码,请根据需要修改 `host`、`user`、`passwd` 等字段。
- 部分函数依赖外部库,请确保已安装所需依赖。
- 可视化函数默认使用中文字体(Microsoft YaHei),请确保系统中已安装该字体或替换为其他支持中文的字体。
---
如果有任何问题或建议,欢迎联系维护者:mengvision
Raw data
{
"_id": null,
"home_page": null,
"name": "pyworkbox",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "utilities, tools, productivity",
"author": null,
"author_email": "mengvision <mengvision@qq.com>",
"download_url": "https://files.pythonhosted.org/packages/74/40/9f278d1ef7352f261f071675afe19d5804efb2831eba9dc1f1c80c3f0c07/pyworkbox-0.0.3.tar.gz",
"platform": null,
"description": "# PyWorkBox\r\n\r\n[](https://pypi.org/project/pyworkbox/)\r\n[](https://pypi.org/project/pyworkbox/)\r\n[](https://opensource.org/licenses/MIT)\r\n\r\n\u8fd9\u662f\u4e00\u4e2a\u5305\u542b\u5e38\u7528\u529f\u80fd\u7684 Python \u5de5\u5177\u51fd\u6570\u5e93\uff0c\u6db5\u76d6\u88c5\u9970\u5668\u3001\u6570\u636e\u5e93\u64cd\u4f5c\u3001\u6570\u636e\u53ef\u89c6\u5316\u3001\u6a21\u578b\u8bc4\u4f30\u3001\u964d\u7ef4\u53ef\u89c6\u5316\u3001\u8282\u5047\u65e5\u5904\u7406\u7b49\u591a\u4e2a\u65b9\u9762\u3002\r\n\r\n## Installation\r\n\r\n```bash\r\npip install pyworkbox\r\n```\r\n\r\n### database parameter setup\r\n\r\n\u5728\u4f7f\u7528\u6570\u636e\u5e93\u529f\u80fd\u524d\uff0c\u8bf7\u8bbe\u7f6e\u4ee5\u4e0b\u73af\u5883\u53d8\u91cf\uff1a\r\n\r\n```bash\r\n# Linux/macOS\r\necho 'export DB_HOST=\"your_database_host\"' >> ~/.bashrc\r\necho 'export DB_PORT=5432' >> ~/.bashrc\r\necho 'export DB_NAME=\"your_database_name\"' >> ~/.bashrc\r\necho 'export DB_USER=\"your_username\"' >> ~/.bashrc\r\necho 'export DB_PASSWORD=\"your_password\"' >> ~/.bashrc\r\nsource ~/.bashrc\r\n\r\n# Windows (Command Prompt)\r\nsetx DB_HOST \"your_database_host\"\r\nsetx DB_PORT 5432\r\nsetx DB_NAME \"your_database_name\"\r\nsetx DB_USER \"your_username\"\r\nsetx DB_PASSWORD \"your_password\"\r\n\r\n# Windows (PowerShell)\r\n[Environment]::SetEnvironmentVariable(\"DB_HOST\", \"your_database_host\", \"User\")\r\n[Environment]::SetEnvironmentVariable(\"DB_PORT\", 5432, \"User\")\r\n[Environment]::SetEnvironmentVariable(\"DB_NAME\", \"your_database_name\", \"User\")\r\n[Environment]::SetEnvironmentVariable(\"DB_USER\", \"your_username\", \"User\")\r\n[Environment]::SetEnvironmentVariable(\"DB_PASSWORD\", \"your_password\", \"User\")\r\n## Window\u8bbe\u7f6e\u5b8c\u73af\u5883\u53d8\u91cf\u4ee5\u540e\u9700\u8981\u91cd\u542f\u7535\u8111\r\n```\r\n\r\n## Quick Start\r\n\r\n```python\r\nfrom pyworkbox import fetch_dataframe\r\n\r\n# \u4f7f\u7528\u4e3b\u8981\u529f\u80fd\r\nsql = 'select * from table limit 10;'\r\n\r\ndf = fetch_dataframe(sql)\r\n```\r\n\r\n## \u529f\u80fd\u6a21\u5757\u8bf4\u660e\r\n\r\n### 1. \u88c5\u9970\u5668\uff08Decorators\uff09\r\n\r\n#### `timer`\r\n\u7528\u4e8e\u6d4b\u91cf\u51fd\u6570\u6267\u884c\u65f6\u95f4\u7684\u88c5\u9970\u5668\u3002\r\n\r\n```python\r\n@timer\r\ndef my_function():\r\n time.sleep(1)\r\n```\r\n\r\n#### `memoize`\r\n\u7f13\u5b58\u51fd\u6570\u7ed3\u679c\u7684\u88c5\u9970\u5668\uff0c\u907f\u514d\u91cd\u590d\u8ba1\u7b97\u3002\r\n\r\n```python\r\n@memoize\r\ndef expensive_function(x):\r\n return x * x\r\n```\r\n\r\n---\r\n\r\n### 2. \u6570\u636e\u5e93\u64cd\u4f5c\uff08Database\uff09\r\n\r\n#### `fetch_data_from_db`\r\n\u4ece MySQL \u6570\u636e\u5e93\u5206\u6279\u6b21\u8bfb\u53d6\u6570\u636e\u5e76\u4fdd\u5b58\u4e3a Parquet \u6587\u4ef6\u3002\r\n\r\n```python\r\nrounds = fetch_data_from_db(\r\n tbl_name='my_table',\r\n order_sql='id',\r\n db_name='my_db',\r\n batch_size=10000\r\n)\r\n```\r\n\r\n#### `concat_tbl_data`\r\n\u5408\u5e76\u591a\u4e2a Parquet \u6587\u4ef6\u4e3a\u4e00\u4e2a DataFrame\u3002\r\n\r\n```python\r\nconcat_tbl_data('my_table', rounds)\r\n```\r\n\r\n#### `fetch_dataframe`\r\n\u6267\u884c SQL \u67e5\u8be2\u5e76\u8fd4\u56de DataFrame\u3002\r\n\r\n```python\r\ndf = fetch_dataframe('SELECT * FROM my_table', db_name='my_db')\r\n```\r\n\r\n#### `df2db`\r\n\u5c06 DataFrame \u5199\u5165\u6570\u636e\u5e93\uff08\u652f\u6301\u8986\u76d6\u6216\u8ffd\u52a0\u6a21\u5f0f\uff09\u3002\r\n\r\n```python\r\ndf2db(df, db_name='my_db', tbl_name='my_table', mode='replace')\r\n```\r\n\r\n---\r\n\r\n### 3. \u6570\u636e\u5206\u5e03\u53ef\u89c6\u5316\uff08Distribution Plot\uff09\r\n\r\n#### `draw_distribute`\r\n\u7ed8\u5236\u6570\u636e\u7684\u5206\u5e03\u56fe\uff08\u652f\u6301 KDE\u3001\u76f4\u65b9\u56fe\u3001\u6df7\u5408\u56fe\uff09\u3002\r\n\r\n```python\r\ndraw_distribute(\r\n df, \r\n column='age', \r\n v_min=0, \r\n v_max=100, \r\n hue='gender',\r\n plot_type=\"kde+histogram\"\r\n)\r\n```\r\n\r\n---\r\n\r\n### 4. \u6a21\u578b\u8bc4\u4f30\uff08Evaluation\uff09\r\n\r\n#### `draw_best_f1_score`\r\n\u7ed8\u5236 F1 \u5206\u6570\u968f\u9608\u503c\u53d8\u5316\u56fe\uff0c\u8fd4\u56de\u6700\u4f73 F1 \u5206\u6570\u3002\r\n\r\n```python\r\nbest_f1 = draw_best_f1_score(oof_xgb, 'class_1')\r\n```\r\n\r\n#### `draw_best_accuracy`\r\n\u7ed8\u5236\u51c6\u786e\u7387\u968f\u9608\u503c\u53d8\u5316\u56fe\uff0c\u8fd4\u56de\u6700\u4f73\u51c6\u786e\u7387\u3002\r\n\r\n```python\r\nbest_acc = draw_best_accuracy(oof_xgb, 'class_1')\r\n```\r\n\r\n#### `draw_auc_curve`\r\n\u7ed8\u5236 ROC \u66f2\u7ebf\u5e76\u8ba1\u7b97 AUC\u3002\r\n\r\n```python\r\nauc_score = draw_auc_curve(oof_xgb, 'class_1')\r\n```\r\n\r\n#### `plot_importance_meng`\r\n\u7ed8\u5236\u7279\u5f81\u91cd\u8981\u6027\u56fe\uff08\u9002\u7528\u4e8e XGBoost \u6a21\u578b\uff09\u3002\r\n\r\n```python\r\ntop_features = plot_importance_meng(clf, importance_type='weight', num_feats=10)\r\n```\r\n\r\n---\r\n\r\n### 5. t-SNE \u53ef\u89c6\u5316\r\n\r\n#### `tSNE_cal_plot`\r\n\u8ba1\u7b97\u5e76\u7ed8\u5236 t-SNE \u964d\u7ef4\u7ed3\u679c\u3002\r\n\r\n```python\r\nX_tsne, idx = tSNE_cal_plot(\r\n df, \r\n x_name=['feature1', 'feature2'], \r\n y_name='label',\r\n n=5000,\r\n perplexity=50\r\n)\r\n```\r\n\r\n#### `split_patient_from_tsne`\r\n\u6839\u636e\u77e9\u5f62\u533a\u57df\u4ece t-SNE \u56fe\u4e2d\u63d0\u53d6\u6837\u672c\u3002\r\n\r\n```python\r\nrect_lim = {\r\n 'group1': {'x_lim': [-10, 10], 'y_lim': [-10, 10]}\r\n}\r\npoints = split_patient_from_tsne(X_tsne, rect_lim, df, 'label')\r\n```\r\n\r\n---\r\n\r\n### 6. \u8282\u5047\u65e5\u5904\u7406\uff08Holidays\uff09\r\n\r\n#### `in_easter_holiday`\r\n\u5224\u65ad\u65e5\u671f\u662f\u5426\u5728\u590d\u6d3b\u8282\u5047\u671f\u5185\u3002\r\n\r\n```python\r\nis_easter = in_easter_holiday(datetime(2023, 4, 9))\r\n```\r\n\r\n#### `in_christmas_holiday`\r\n\u5224\u65ad\u65e5\u671f\u662f\u5426\u5728\u5723\u8bde\u8282\u5047\u671f\u5185\u3002\r\n\r\n```python\r\nis_christmas = in_christmas_holiday(datetime(2023, 12, 25))\r\n```\r\n\r\n#### `get_period_of_month`\r\n\u5224\u65ad\u65e5\u671f\u5c5e\u4e8e\u4e0a\u65ec\u3001\u4e2d\u65ec\u8fd8\u662f\u4e0b\u65ec\u3002\r\n\r\n```python\r\nperiod = get_period_of_month(datetime(2023, 7, 15)) # \u8fd4\u56de 2\r\n```\r\n\r\n#### `get_holiday_workday`\r\n\u4ece GitHub \u83b7\u53d6\u8282\u5047\u65e5\u548c\u8c03\u4f11\u4fe1\u606f\u3002\r\n\r\n```python\r\nholidays, workdays = get_holiday_workday('https://raw.githubusercontent.com/xxx/holidays.js')\r\n```\r\n\r\n---\r\n\r\n### 7. \u6a21\u578b\u5de5\u5177\uff08Models\uff09\r\n\r\n#### `ridge_regression`\r\n\u5cad\u56de\u5f52\u95ed\u5f0f\u89e3\u5b9e\u73b0\u3002\r\n\r\n```python\r\ncoef = ridge_regression(X, y, lambda_param=0.1)\r\n```\r\n\r\n---\r\n\r\n### 8. \u65f6\u95f4\u5904\u7406\uff08Time Processing\uff09\r\n\r\n#### `get_last_day_of_previous_month`\r\n\u83b7\u53d6\u4e0a\u4e2a\u6708\u7684\u6700\u540e\u4e00\u5929\u3002\r\n\r\n```python\r\nlast_day = get_last_day_of_previous_month()\r\n# \u6216\u6307\u5b9a\u65e5\u671f\r\nlast_day = get_last_day_of_previous_month('2024-07-01')\r\n```\r\n\r\n---\r\n\r\n## \u4f7f\u7528\u793a\u4f8b\r\n\r\n```python\r\nfrom my_utils import timer, fetch_dataframe, draw_distribute\r\n\r\n@timer\r\ndef process_data():\r\n df = fetch_dataframe('SELECT * FROM users', db_name='test_db')\r\n draw_distribute(df, 'age', v_min=0, v_max=100)\r\n\r\nprocess_data()\r\n```\r\n\r\n---\r\n\r\n## \u6ce8\u610f\u4e8b\u9879\r\n\r\n- \u6570\u636e\u5e93\u8fde\u63a5\u53c2\u6570\u5df2\u786c\u7f16\u7801\uff0c\u8bf7\u6839\u636e\u9700\u8981\u4fee\u6539 `host`\u3001`user`\u3001`passwd` \u7b49\u5b57\u6bb5\u3002\r\n- \u90e8\u5206\u51fd\u6570\u4f9d\u8d56\u5916\u90e8\u5e93\uff0c\u8bf7\u786e\u4fdd\u5df2\u5b89\u88c5\u6240\u9700\u4f9d\u8d56\u3002\r\n- \u53ef\u89c6\u5316\u51fd\u6570\u9ed8\u8ba4\u4f7f\u7528\u4e2d\u6587\u5b57\u4f53\uff08Microsoft YaHei\uff09\uff0c\u8bf7\u786e\u4fdd\u7cfb\u7edf\u4e2d\u5df2\u5b89\u88c5\u8be5\u5b57\u4f53\u6216\u66ff\u6362\u4e3a\u5176\u4ed6\u652f\u6301\u4e2d\u6587\u7684\u5b57\u4f53\u3002\r\n\r\n---\r\n\r\n\u5982\u679c\u6709\u4efb\u4f55\u95ee\u9898\u6216\u5efa\u8bae\uff0c\u6b22\u8fce\u8054\u7cfb\u7ef4\u62a4\u8005\uff1amengvision\r\n",
"bugtrack_url": null,
"license": "MIT License\r\n \r\n Copyright (c) [2025] [mengvision]\r\n \r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated documentation files (the \"Software\"), to deal\r\n in the Software without restriction, including without limitation the rights\r\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n copies of the Software, and to permit persons to whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n \r\n The above copyright notice and this permission notice shall be included in all\r\n copies or substantial portions of the Software.\r\n \r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n SOFTWARE.",
"summary": "A collection of my awesome Python functions to make life easier.",
"version": "0.0.3",
"project_urls": {
"Documentation": "https://github.com/mengvision/pyworkbox#readme",
"Homepage": "https://github.com/mengvision/pyworkbox",
"Issues": "https://github.com/mengvision/pyworkbox/issues"
},
"split_keywords": [
"utilities",
" tools",
" productivity"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "15e5a7d93b2353205ee0073a703db6f2d781bf39832f68aa90a4df353ac2dabe",
"md5": "2c1e2bfceac5a6bca8048a6d4bcaef61",
"sha256": "0b1cc5356c4927e413e43b82844e72bfdef08b94127b35944fc94ddbc1911031"
},
"downloads": -1,
"filename": "pyworkbox-0.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2c1e2bfceac5a6bca8048a6d4bcaef61",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 17222,
"upload_time": "2025-08-27T09:20:25",
"upload_time_iso_8601": "2025-08-27T09:20:25.597740Z",
"url": "https://files.pythonhosted.org/packages/15/e5/a7d93b2353205ee0073a703db6f2d781bf39832f68aa90a4df353ac2dabe/pyworkbox-0.0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "74409f278d1ef7352f261f071675afe19d5804efb2831eba9dc1f1c80c3f0c07",
"md5": "684816b34c0cee711d0a0436bdb676a1",
"sha256": "f8d914f702072b18fbc306bb1d2fa553d784d726a3d9452a12d3b01efd9a7991"
},
"downloads": -1,
"filename": "pyworkbox-0.0.3.tar.gz",
"has_sig": false,
"md5_digest": "684816b34c0cee711d0a0436bdb676a1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 21988,
"upload_time": "2025-08-27T09:20:26",
"upload_time_iso_8601": "2025-08-27T09:20:26.823644Z",
"url": "https://files.pythonhosted.org/packages/74/40/9f278d1ef7352f261f071675afe19d5804efb2831eba9dc1f1c80c3f0c07/pyworkbox-0.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-27 09:20:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mengvision",
"github_project": "pyworkbox#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pyworkbox"
}