Client library for KXY Open ID Service - ID segment allocation
Project description
kxy-open-id-client
Python 客户端库,用于对接 KXY Open ID 服务,实现分布式 ID 分段分配。
特性
- 简洁易用的 API
- 支持同步和异步调用
- 完整的类型提示支持
- 详细的错误处理
- 基于 httpx 的高性能 HTTP 客户端
安装
使用 pip 安装
pip install kxy-open-id-client
从源码安装
git clone https://github.com/kxy/kxy-open-id-client.git
cd kxy-open-id-client
pip install -e .
快速开始
基础用法(同步)
from kxy_open_id_client import SegmentClient
# 创建客户端实例
client = SegmentClient(base_url="http://localhost:5801")
# 分配 ID 段
segment = client.allocate_segment(
system_code="my-system",
db_name="my_database",
table_name="users",
field_name="id",
segment_count=10000 # 可选,默认 10000
)
print(f"分配到的 ID 段: {segment.start} 到 {segment.end}")
# 输出: 分配到的 ID 段: 1 到 10000
异步用法
import asyncio
from kxy_open_id_client import SegmentClient
async def main():
client = SegmentClient(base_url="http://localhost:5801")
# 异步分配 ID 段
segment = await client.allocate_segment_async(
system_code="my-system",
db_name="my_database",
table_name="orders",
field_name="order_id",
segment_count=5000
)
print(f"分配到的 ID 段: {segment.start} 到 {segment.end}")
asyncio.run(main())
详细用法
客户端配置
from kxy_open_id_client import SegmentClient
client = SegmentClient(
base_url="http://localhost:5801", # 服务地址
timeout=30.0, # 请求超时时间(秒)
verify_ssl=True, # 是否验证 SSL 证书
headers={ # 自定义请求头
"X-Custom-Header": "value"
}
)
错误处理
from kxy_open_id_client import (
SegmentClient,
OpenIdAPIError,
OpenIdConnectionError,
OpenIdTimeoutError
)
client = SegmentClient(base_url="http://localhost:5801")
try:
segment = client.allocate_segment(
system_code="my-system",
db_name="my_database",
table_name="users",
field_name="id"
)
except OpenIdAPIError as e:
# API 返回错误响应
print(f"API 错误 {e.code}: {e.msg}")
if e.trace_id:
print(f"Trace ID: {e.trace_id}")
except OpenIdConnectionError as e:
# 连接失败
print(f"连接错误: {e}")
except OpenIdTimeoutError as e:
# 请求超时
print(f"请求超时: {e}")
实际应用示例
from kxy_open_id_client import SegmentClient
class IDGenerator:
"""ID 生成器,基于分段分配"""
def __init__(self, client: SegmentClient, system_code: str,
db_name: str, table_name: str, field_name: str):
self.client = client
self.system_code = system_code
self.db_name = db_name
self.table_name = table_name
self.field_name = field_name
self.current = 0
self.end = 0
def next_id(self) -> int:
"""获取下一个 ID"""
if self.current >= self.end:
# 当前段已用完,分配新的段
self._allocate_new_segment()
self.current += 1
return self.current
def _allocate_new_segment(self):
"""分配新的 ID 段"""
segment = self.client.allocate_segment(
system_code=self.system_code,
db_name=self.db_name,
table_name=self.table_name,
field_name=self.field_name,
segment_count=10000
)
self.current = segment.start - 1
self.end = segment.end
# 使用示例
client = SegmentClient(base_url="http://localhost:5801")
id_gen = IDGenerator(
client=client,
system_code="my-system",
db_name="my_database",
table_name="users",
field_name="id"
)
# 生成 ID
for _ in range(5):
print(f"Generated ID: {id_gen.next_id()}")
API 参考
SegmentClient
__init__(base_url, timeout=30.0, verify_ssl=True, headers=None)
创建客户端实例。
参数:
base_url(str): KXY Open ID 服务的基础 URLtimeout(float): 请求超时时间,默认 30 秒verify_ssl(bool): 是否验证 SSL 证书,默认 Trueheaders(dict): 自定义请求头,可选
allocate_segment(system_code, db_name, table_name, field_name, segment_count=10000)
同步分配 ID 段。
参数:
system_code(str): 系统代码db_name(str): 数据库名称table_name(str): 表名field_name(str): 字段名segment_count(int): 分配的 ID 数量,默认 10000
返回: SegmentResponse 对象,包含 start 和 end 属性
异常:
OpenIdAPIError: API 返回错误OpenIdConnectionError: 连接失败OpenIdTimeoutError: 请求超时
allocate_segment_async(system_code, db_name, table_name, field_name, segment_count=10000)
异步分配 ID 段(参数和返回值同上)。
数据模型
SegmentRequest
system_code: strdb_name: strtable_name: strfield_name: strsegment_count: int (默认 10000,最大 2^63-1)
SegmentResponse
start: int - 段起始 IDend: int - 段结束 ID
ApiResponse[T]
code: int - 状态码 (0 表示成功)msg: str - 消息data: Optional[T] - 数据traceId: Optional[str] - 追踪 ID
开发
安装开发依赖
pip install -e ".[dev]"
运行测试
pytest
代码格式化
black kxy_open_id_client
类型检查
mypy kxy_open_id_client
许可证
MIT License
相关项目
- kxy-open-id - KXY Open ID 服务端
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
kxy_open_id_client-0.1.0.tar.gz
(10.3 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kxy_open_id_client-0.1.0.tar.gz.
File metadata
- Download URL: kxy_open_id_client-0.1.0.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef4fc51636c76b2934915dfe029d00be92821b8fdb8eb0d5edc4e42df32cf938
|
|
| MD5 |
6712cfcbf94158c9347f2f34932fc22d
|
|
| BLAKE2b-256 |
695f48fbc9433106c80e87755692e0e1ffca26fac87f7d75026f2e5771b4b6ff
|
File details
Details for the file kxy_open_id_client-0.1.0-py3-none-any.whl.
File metadata
- Download URL: kxy_open_id_client-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2266828180e450a06b9c5194935f7a9554e6044fdb6d981d102954430eceed07
|
|
| MD5 |
8998b8e475879aa43786564df583e0da
|
|
| BLAKE2b-256 |
9e631b324ab7025ee3b0d6084565285cf1a490cdf1c58343993660e0485803f7
|