ny-sync 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ny_sync-0.1.0/MANIFEST.in +3 -0
- ny_sync-0.1.0/PKG-INFO +109 -0
- ny_sync-0.1.0/README.md +81 -0
- ny_sync-0.1.0/ny_sync/__init__.py +37 -0
- ny_sync-0.1.0/ny_sync/dashboard.py +642 -0
- ny_sync-0.1.0/ny_sync/decorators.py +36 -0
- ny_sync-0.1.0/ny_sync/rate_limiter/__init__.py +19 -0
- ny_sync-0.1.0/ny_sync/rate_limiter/base_bucket.py +156 -0
- ny_sync-0.1.0/ny_sync/rate_limiter/lua_implementation.py +104 -0
- ny_sync-0.1.0/ny_sync/rate_limiter/numeric_bucket.py +120 -0
- ny_sync-0.1.0/ny_sync/rate_limiter/string_bucket.py +219 -0
- ny_sync-0.1.0/ny_sync.egg-info/PKG-INFO +109 -0
- ny_sync-0.1.0/ny_sync.egg-info/SOURCES.txt +18 -0
- ny_sync-0.1.0/ny_sync.egg-info/dependency_links.txt +1 -0
- ny_sync-0.1.0/ny_sync.egg-info/requires.txt +6 -0
- ny_sync-0.1.0/ny_sync.egg-info/top_level.txt +1 -0
- ny_sync-0.1.0/requirements.txt +6 -0
- ny_sync-0.1.0/run_dashboard.bat +14 -0
- ny_sync-0.1.0/setup.cfg +4 -0
- ny_sync-0.1.0/setup.py +47 -0
ny_sync-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ny_sync
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A Python SDK for AnySync: Distributed Token Bucket Rate Limiter
|
|
5
|
+
Home-page: https://github.com/djmin/ny_sync
|
|
6
|
+
Author: AnySync Team
|
|
7
|
+
Author-email: readerror000@outlook.com
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Requires-Python: >=3.7
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: redis>=4.0.0
|
|
14
|
+
Provides-Extra: dashboard
|
|
15
|
+
Requires-Dist: streamlit>=1.0.0; extra == "dashboard"
|
|
16
|
+
Requires-Dist: plotly>=5.0.0; extra == "dashboard"
|
|
17
|
+
Requires-Dist: pandas>=1.0.0; extra == "dashboard"
|
|
18
|
+
Dynamic: author
|
|
19
|
+
Dynamic: author-email
|
|
20
|
+
Dynamic: classifier
|
|
21
|
+
Dynamic: description
|
|
22
|
+
Dynamic: description-content-type
|
|
23
|
+
Dynamic: home-page
|
|
24
|
+
Dynamic: provides-extra
|
|
25
|
+
Dynamic: requires-dist
|
|
26
|
+
Dynamic: requires-python
|
|
27
|
+
Dynamic: summary
|
|
28
|
+
|
|
29
|
+
# NySync
|
|
30
|
+
|
|
31
|
+
> **Any Data, Any Source, Any Destination.**
|
|
32
|
+
|
|
33
|
+
NySync 是一个 **AI-First** 的数据同步与任务编排平台:用声明式任务把“任何数据源”持续、可靠地同步到“任何目的地”,并让 Agent 能够安全地生成、校验与运维这些任务。
|
|
34
|
+
|
|
35
|
+
## 当前进展(Milestone)
|
|
36
|
+
|
|
37
|
+
- 已完成:分布式令牌桶限流(Python SDK,基于 Redis)
|
|
38
|
+
- 实现包含:LuaTokenBucket(默认)、NumericTokenBucket(GCRA)、StringTokenBucket(Slot-based)
|
|
39
|
+
- 支持 Dashboard 可视化与并发/批量场景验证
|
|
40
|
+
- 主线目标:平台层的作业管理、调度编排、执行引擎与观测体系
|
|
41
|
+
|
|
42
|
+
快速开始(Python SDK):
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
import redis
|
|
46
|
+
from ny_sync import TokenBucket, RateUnit
|
|
47
|
+
|
|
48
|
+
r = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True)
|
|
49
|
+
bucket = TokenBucket(r)
|
|
50
|
+
|
|
51
|
+
key = "demo"
|
|
52
|
+
capacity = 10
|
|
53
|
+
rate = 60 / RateUnit.MINUTE # 每分钟 60 个
|
|
54
|
+
|
|
55
|
+
allowed = bucket.allow(key, capacity, rate)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 提供分布式令牌桶限流,基于 Redis 实现。内置三种实现:
|
|
59
|
+
|
|
60
|
+
- LuaTokenBucket(默认):并发能力强,适合通用场景
|
|
61
|
+
- NumericTokenBucket(GCRA):高吞吐批量场景
|
|
62
|
+
- StringTokenBucket(Slot-based):一个 Token 一个 String Key,便于峰值与历史可视化
|
|
63
|
+
|
|
64
|
+
## 安装
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pip install any-sync
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 快速开始
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
import redis
|
|
74
|
+
from ny_sync import TokenBucket, RateUnit, RateLimit, RateLimitExceeded
|
|
75
|
+
|
|
76
|
+
r = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True)
|
|
77
|
+
|
|
78
|
+
# 手动使用(TokenBucket 是 RedisTokenBucket 的简化别名)
|
|
79
|
+
bucket = TokenBucket(r)
|
|
80
|
+
key = "demo"
|
|
81
|
+
capacity = 10 # 桶容量10个
|
|
82
|
+
rate = 60 / RateUnit.MINUTE # 每分钟补充 60 个
|
|
83
|
+
allowed = bucket.allow(key, capacity, rate)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
# 装饰器使用(RateLimit 是 RateLimitDecorator 的简化别名)
|
|
87
|
+
@RateLimit(r, "api", capacity, rate)
|
|
88
|
+
def my_api():
|
|
89
|
+
return "ok"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## 可视化 Dashboard
|
|
93
|
+
|
|
94
|
+
运行简单的 Streamlit Dashboard:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Windows
|
|
98
|
+
c:\project\anysync\python_sdk\run_dashboard.bat
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 主要导出
|
|
102
|
+
|
|
103
|
+
- TokenBucket / RedisTokenBucket / LuaTokenBucket / NumericTokenBucket / StringTokenBucket
|
|
104
|
+
- RateUnit(SECOND / MINUTE / HOUR / DAY / WEEK)
|
|
105
|
+
- RateLimit / RateLimitExceeded
|
|
106
|
+
|
|
107
|
+
## 许可证
|
|
108
|
+
|
|
109
|
+
MIT
|
ny_sync-0.1.0/README.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# NySync
|
|
2
|
+
|
|
3
|
+
> **Any Data, Any Source, Any Destination.**
|
|
4
|
+
|
|
5
|
+
NySync 是一个 **AI-First** 的数据同步与任务编排平台:用声明式任务把“任何数据源”持续、可靠地同步到“任何目的地”,并让 Agent 能够安全地生成、校验与运维这些任务。
|
|
6
|
+
|
|
7
|
+
## 当前进展(Milestone)
|
|
8
|
+
|
|
9
|
+
- 已完成:分布式令牌桶限流(Python SDK,基于 Redis)
|
|
10
|
+
- 实现包含:LuaTokenBucket(默认)、NumericTokenBucket(GCRA)、StringTokenBucket(Slot-based)
|
|
11
|
+
- 支持 Dashboard 可视化与并发/批量场景验证
|
|
12
|
+
- 主线目标:平台层的作业管理、调度编排、执行引擎与观测体系
|
|
13
|
+
|
|
14
|
+
快速开始(Python SDK):
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
import redis
|
|
18
|
+
from ny_sync import TokenBucket, RateUnit
|
|
19
|
+
|
|
20
|
+
r = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True)
|
|
21
|
+
bucket = TokenBucket(r)
|
|
22
|
+
|
|
23
|
+
key = "demo"
|
|
24
|
+
capacity = 10
|
|
25
|
+
rate = 60 / RateUnit.MINUTE # 每分钟 60 个
|
|
26
|
+
|
|
27
|
+
allowed = bucket.allow(key, capacity, rate)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 提供分布式令牌桶限流,基于 Redis 实现。内置三种实现:
|
|
31
|
+
|
|
32
|
+
- LuaTokenBucket(默认):并发能力强,适合通用场景
|
|
33
|
+
- NumericTokenBucket(GCRA):高吞吐批量场景
|
|
34
|
+
- StringTokenBucket(Slot-based):一个 Token 一个 String Key,便于峰值与历史可视化
|
|
35
|
+
|
|
36
|
+
## 安装
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pip install any-sync
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 快速开始
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
import redis
|
|
46
|
+
from ny_sync import TokenBucket, RateUnit, RateLimit, RateLimitExceeded
|
|
47
|
+
|
|
48
|
+
r = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True)
|
|
49
|
+
|
|
50
|
+
# 手动使用(TokenBucket 是 RedisTokenBucket 的简化别名)
|
|
51
|
+
bucket = TokenBucket(r)
|
|
52
|
+
key = "demo"
|
|
53
|
+
capacity = 10 # 桶容量10个
|
|
54
|
+
rate = 60 / RateUnit.MINUTE # 每分钟补充 60 个
|
|
55
|
+
allowed = bucket.allow(key, capacity, rate)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# 装饰器使用(RateLimit 是 RateLimitDecorator 的简化别名)
|
|
59
|
+
@RateLimit(r, "api", capacity, rate)
|
|
60
|
+
def my_api():
|
|
61
|
+
return "ok"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 可视化 Dashboard
|
|
65
|
+
|
|
66
|
+
运行简单的 Streamlit Dashboard:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Windows
|
|
70
|
+
c:\project\anysync\python_sdk\run_dashboard.bat
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 主要导出
|
|
74
|
+
|
|
75
|
+
- TokenBucket / RedisTokenBucket / LuaTokenBucket / NumericTokenBucket / StringTokenBucket
|
|
76
|
+
- RateUnit(SECOND / MINUTE / HOUR / DAY / WEEK)
|
|
77
|
+
- RateLimit / RateLimitExceeded
|
|
78
|
+
|
|
79
|
+
## 许可证
|
|
80
|
+
|
|
81
|
+
MIT
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from .rate_limiter import (
|
|
2
|
+
RedisTokenBucket,
|
|
3
|
+
LuaTokenBucket,
|
|
4
|
+
NumericTokenBucket,
|
|
5
|
+
StringTokenBucket,
|
|
6
|
+
RateUnit
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
from .decorators import (
|
|
10
|
+
RateLimitDecorator,
|
|
11
|
+
RateLimitExceededError
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
# Aliases for simplicity
|
|
15
|
+
TokenBucket = RedisTokenBucket
|
|
16
|
+
StringBucket = StringTokenBucket
|
|
17
|
+
NumericBucket = NumericTokenBucket
|
|
18
|
+
RateLimit = RateLimitDecorator
|
|
19
|
+
RateLimitExceeded = RateLimitExceededError
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
# Core Classes
|
|
23
|
+
"RedisTokenBucket",
|
|
24
|
+
"LuaTokenBucket",
|
|
25
|
+
"NumericTokenBucket",
|
|
26
|
+
"StringTokenBucket",
|
|
27
|
+
"RateUnit",
|
|
28
|
+
"RateLimitDecorator",
|
|
29
|
+
"RateLimitExceededError",
|
|
30
|
+
|
|
31
|
+
# Simple Aliases
|
|
32
|
+
"TokenBucket",
|
|
33
|
+
"StringBucket",
|
|
34
|
+
"NumericBucket",
|
|
35
|
+
"RateLimit",
|
|
36
|
+
"RateLimitExceeded"
|
|
37
|
+
]
|