Skip to main content

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 服务的基础 URL
  • timeout (float): 请求超时时间,默认 30 秒
  • verify_ssl (bool): 是否验证 SSL 证书,默认 True
  • headers (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 对象,包含 startend 属性

异常:

  • OpenIdAPIError: API 返回错误
  • OpenIdConnectionError: 连接失败
  • OpenIdTimeoutError: 请求超时

allocate_segment_async(system_code, db_name, table_name, field_name, segment_count=10000)

异步分配 ID 段(参数和返回值同上)。

数据模型

SegmentRequest

  • system_code: str
  • db_name: str
  • table_name: str
  • field_name: str
  • segment_count: int (默认 10000,最大 2^63-1)

SegmentResponse

  • start: int - 段起始 ID
  • end: 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

相关项目

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.1.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kxy_open_id_client-0.1.1-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file kxy_open_id_client-0.1.1.tar.gz.

File metadata

  • Download URL: kxy_open_id_client-0.1.1.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

Hashes for kxy_open_id_client-0.1.1.tar.gz
Algorithm Hash digest
SHA256 63822e69a75d5282599af47db8527dbcbaa575f9d70df833340c46c447eb5be0
MD5 9c367a40e80d711e84c8b447635e5c61
BLAKE2b-256 29717d4042d9e76ea7269ab75a71844ffc622b38729f3f4d790c3876f959c3c4

See more details on using hashes here.

File details

Details for the file kxy_open_id_client-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for kxy_open_id_client-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6e60000089b0143b6fc0f86688fc312a823bc65a428db6ebd9da4530069f634f
MD5 0ccecbec1da70607b6b60512c42cdb40
BLAKE2b-256 76cf969aadce4fdb1c3acda17dd27da38a68678eda412aab8583be41c959956c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page