Metadata-Version: 2.4
Name: jcutils
Version: 0.6.2
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Dist: python-dotenv
Requires-Dist: pydantic
Requires-Dist: pyodps==0.11.6.1 ; extra == 'alibabacloud'
Requires-Dist: alibabacloud-maxcompute20220104>=2.3.0 ; extra == 'alibabacloud'
Requires-Dist: alibabacloud-ecs20140526>=3.0.12 ; extra == 'alibabacloud'
Requires-Dist: alibabacloud-dataworks-public20200518>=4.7.2 ; extra == 'alibabacloud'
Requires-Dist: jcutils[config,mysql,postgresql,pymssql,redis,kafka,clickhouse,alibabacloud,huaweicloud,sentry,data,elasticsearch,utils] ; extra == 'all'
Requires-Dist: boto3>=1.26.0 ; extra == 'boto3'
Requires-Dist: clickhouse-driver==0.2.6 ; extra == 'clickhouse'
Requires-Dist: nacos-sdk-python>=2.0.11 ; extra == 'config'
Requires-Dist: pyapollo-zenkilan>=0.2.0 ; extra == 'config'
Requires-Dist: numpy>=1.21,<2 ; python_full_version < '3.9' and extra == 'data'
Requires-Dist: numpy>=2 ; python_full_version >= '3.9' and extra == 'data'
Requires-Dist: openpyxl>=3.1.5 ; extra == 'data'
Requires-Dist: elasticsearch>=8.10.0 ; extra == 'elasticsearch'
Requires-Dist: pyarrow>=12.0.0 ; extra == 'hdfs'
Requires-Dist: pyhdfs>=0.1.1 ; extra == 'hdfs'
Requires-Dist: huaweicloudsdkdli==3.1.19 ; extra == 'huaweicloud'
Requires-Dist: esdk-obs-python>=3.23.9.1 ; extra == 'huaweicloud'
Requires-Dist: kafka-python ; extra == 'kafka'
Requires-Dist: pymysql ; extra == 'mysql'
Requires-Dist: aiomysql>=0.2.0 ; extra == 'mysql'
Requires-Dist: dbutils>=3.0.2 ; extra == 'mysql'
Requires-Dist: psycopg[pool] ; extra == 'postgresql'
Requires-Dist: asyncpg>=0.30.0 ; extra == 'postgresql'
Requires-Dist: dbutils>=3.0.2 ; extra == 'postgresql'
Requires-Dist: pymssql ; extra == 'pymssql'
Requires-Dist: redis>=3.5.3 ; extra == 'redis'
Requires-Dist: retry>=0.9.2 ; extra == 'sentry'
Requires-Dist: apscheduler~=3.10.1 ; extra == 'utils'
Requires-Dist: ldap3>=2.9.1 ; extra == 'utils'
Requires-Dist: pyquery~=2.0.0 ; extra == 'utils'
Requires-Dist: imbox~=0.9.8 ; extra == 'utils'
Requires-Dist: happybase~=1.2.0 ; extra == 'utils'
Requires-Dist: easybase~=1.1.3 ; extra == 'utils'
Requires-Dist: func-timeout~=4.3.5 ; extra == 'utils'
Requires-Dist: datamodel-code-generator>=0.25.9 ; extra == 'utils'
Requires-Dist: retry>=0.9.2 ; extra == 'utils'
Requires-Dist: rich>=13.7.1 ; extra == 'utils'
Requires-Dist: tabulate[widechars]>=0.9.0 ; extra == 'utils'
Requires-Dist: wcwidth>=0.2.13 ; extra == 'utils'
Requires-Dist: fire>=0.5.0 ; extra == 'utils'
Requires-Dist: urllib3>=1.26.15 ; extra == 'utils'
Requires-Dist: chardet>=4.0.0 ; extra == 'utils'
Requires-Dist: line-profiler>=5.0.2 ; extra == 'utils'
Requires-Dist: python-dateutil>=2.8.2 ; extra == 'utils'
Requires-Dist: requests>=2.26.0 ; extra == 'utils'
Provides-Extra: alibabacloud
Provides-Extra: all
Provides-Extra: boto3
Provides-Extra: clickhouse
Provides-Extra: config
Provides-Extra: data
Provides-Extra: elasticsearch
Provides-Extra: hdfs
Provides-Extra: huaweicloud
Provides-Extra: kafka
Provides-Extra: mysql
Provides-Extra: postgresql
Provides-Extra: pymssql
Provides-Extra: redis
Provides-Extra: sentry
Provides-Extra: utils
Summary: python utils
Keywords: utils,toolkit,tools,python
Author-email: lijc210 <lijc210@163.com>
License: MIT License
Requires-Python: >=3.9
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Documentation, https://github.com/lijic210/jcutils
Project-URL: Homepage, https://github.com/lijc210/jcutils
Project-URL: Source, https://github.com/lijic210/jcutils
Project-URL: Tracker, https://github.com/lijc210/jcutils/issues

# jcutils - Python 多功能工具库

一个高效封装的 Python 工具库，集成数据库客户端、云服务 API、消息队列及常用开发工具，助力快速开发与运维自动化。

## 特性

- 🚀 **开箱即用**：统一接口设计，降低学习成本
- 🛡️ **生产级代码**：内置连接池、异常重试、日志记录
- 📦 **模块化设计**：按需引用，无冗余依赖
- 📝 **完整类型注解**：Python 3.8+ 兼容，支持 IDE 智能提示

## 核心模块

### Client（客户端）

统一在 `jcutils.client` 包下，按功能模块化组织：

#### 数据库客户端
- **关系型数据库**
  - `mysql.client.MySqlClient` / `mysql.async_client.AsyncMySQLClient`：MySQL 客户端（同步/异步）
  - `postgres.client.PostgresClient` / `postgres.async_client.AsyncPostgresClient`：PostgreSQL 客户端（同步/异步）
  - `mssql.client.MsSqlClient`：SQL Server 客户端
  - `sqlite.client.Sqlite3Client`：SQLite 客户端
  - `odbc.client.PyodbcClient`：通用 ODBC 客户端

- **OLAP/大数据**
  - `clickhouse.client.ClickhouseClient`：ClickHouse 客户端
  - `presto.client.PrestoClient`：Presto/Trino 客户端
  - `hive.client.HiveClient`：Hive 客户端

- **NoSQL**
  - `mongo.client.MongoClient`：MongoDB 客户端
  - `redis.client.RedisClient` / `redis.async_client.AsyncRedisClient`：Redis 客户端（同步/异步）
  - `elasticsearch.client.EsClient` / `elasticsearch.client.EsClient6`：Elasticsearch 客户端（7.x/6.x）
  - `hbase.client.HbaseClient` / `hbase.thrift2_client.HbaseThrift2Client`：HBase 客户端

#### 云服务与存储
- `maxcompute.client.MaxComputeClient`：阿里云 MaxCompute（ODPS）
- `dataworks.client.DataworksClient`：阿里云 DataWorks
- `s3.client.S3Bucket`：AWS S3 兼容存储
- `qiniu.client.Qiniu`：七牛云存储
- `hdfs.client.HdfsClient`：HDFS 客户端

#### 消息与通信
- `kafka.client.KafkaClient`：Kafka 客户端
- `qyweixin.bot.QyWeixinBot` / `qyweixin.client.QyWeixinClient`：企业微信机器人/API
- `wecom.offiaccount.WeixinOffiaccount` / `wecom.qyapi.QYWeixinSend`：企业微信消息推送
- `weixin.client.WeixinClient`：微信公众号工具

#### 其他
- `ftp.client.FtpClient`：FTP 客户端
- `ldap.client.LdapClient`：LDAP 客户端
- `email.client.ImaplibClient`：IMAP 邮件客户端

### Utils（工具集）

所有工具位于 `jcutils.utils` 包下：

#### 日期时间
- `datetime_.py`：日期时间操作（转换、计算、范围查询）
- `relative_time.py`：相对时间计算（如"3分钟前"）
- `date_encoder.py`：日期 JSON 序列化
- `holiday.py`：节假日查询

#### 性能监控
- `run_time.py` / `run_func_time.py`：函数执行时间装饰器
- `run_line_time.py`：行级性能分析装饰器
- `run_log_time.py`：带日志的执行时间装饰器

#### 格式化与处理
- `format_utils.py`：字符串格式化（支持宽字符）
- `tabulate_utils.py`：表格美化输出
- `html.py` / `htmlstrip.py`：HTML 标签去除

#### 开发工具
- `try_except_.py`：异常捕获装饰器
- `logging_.py`：日志配置工具
- `tool_threading.py`：多线程工具
- `lazy_import.py`：懒加载模块导入
- `convert.py`：类型转换工具
- `built_in_tools.py`：pickle 序列化工具

#### 配置管理
- `config_holder.py`：配置持有器
- `config_loader.py`：配置加载器

#### 系统与网络
- `os_path.py` / `os_platform.py` / `platform_.py`：系统平台检测
- `nginx_log.py`：Nginx 日志分析
- `apscheduler_.py`：Cron 定时任务触发器
- `regeo.py`：高德地图逆地理编码

#### 通讯与集成
- `dingtalk.py` / `dingtalkoapi.py`：钉钉 API 客户端
- `nacos_client.py`：Nacos 配置中心客户端

## 安装

```bash
# 安装基础包
pip install jcutils
# 安装指定扩展
pip install jcutils[config]
pip install jcutils[mysql]
pip install jcutils[postgresql]
pip install jcutils[pymssql]
pip install jcutils[boto3]
pip install jcutils[redis]
pip install jcutils[kafka]
pip install jcutils[hdfs]
pip install jcutils[clickhouse]
pip install jcutils[alibabacloud]
pip install jcutils[huaweicloud]
pip install jcutils[sentry]
pip install jcutils[data]
pip install jcutils[elasticsearch]
pip install jcutils[utils]
# 安装所有
pip install jcutils[all]
```

## 快速开始

### 数据库查询

```python
from jcutils.client import ClickhouseClient

client = ClickhouseClient(host="localhost", user="default", passwd="", db="default")
result = client.execute("SELECT * FROM system.tables")
print(result)
```

### 消息推送

```python
from jcutils.client import QyWeixinBot

bot = QyWeixinBot()
bot.send_text("Alert: 服务器CPU负载超过90%",key="YOUR_WEBHOOK_KEY")
```

### 性能监控

```python
from jcutils.utils.run_func_time import run_time

@run_time
def slow_function():
    import time
    time.sleep(2)

slow_function()  # 输出执行时间
```

### 日期处理

```python
from jcutils.utils.datetime_ import day_ops, dt2ts, ts2dt

# 当前时间加一天
print(day_ops(days=1))

# 时间戳转换
print(ts2dt(1640995200))
```

## 贡献

欢迎提交 Issue 或 Pull Request！

## License

MIT

