smartrack-sdk 1.0.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.
- smartrack_sdk-1.0.0/PKG-INFO +557 -0
- smartrack_sdk-1.0.0/README.md +502 -0
- smartrack_sdk-1.0.0/examples/__init__.py +7 -0
- smartrack_sdk-1.0.0/examples/basic_usage.py +360 -0
- smartrack_sdk-1.0.0/examples/callback_server.py +435 -0
- smartrack_sdk-1.0.0/examples/test_client.py +303 -0
- smartrack_sdk-1.0.0/setup.cfg +4 -0
- smartrack_sdk-1.0.0/setup.py +78 -0
- smartrack_sdk-1.0.0/smartrack_sdk/__init__.py +129 -0
- smartrack_sdk-1.0.0/smartrack_sdk/callback/__init__.py +19 -0
- smartrack_sdk-1.0.0/smartrack_sdk/callback/fastapi_handler.py +151 -0
- smartrack_sdk-1.0.0/smartrack_sdk/callback/flask_handler.py +137 -0
- smartrack_sdk-1.0.0/smartrack_sdk/callback/handler.py +220 -0
- smartrack_sdk-1.0.0/smartrack_sdk/callback/service.py +14 -0
- smartrack_sdk-1.0.0/smartrack_sdk/client/__init__.py +13 -0
- smartrack_sdk-1.0.0/smartrack_sdk/client/smart_rack_client.py +523 -0
- smartrack_sdk-1.0.0/smartrack_sdk/exceptions/__init__.py +21 -0
- smartrack_sdk-1.0.0/smartrack_sdk/exceptions/api.py +29 -0
- smartrack_sdk-1.0.0/smartrack_sdk/exceptions/base.py +25 -0
- smartrack_sdk-1.0.0/smartrack_sdk/exceptions/configuration.py +28 -0
- smartrack_sdk-1.0.0/smartrack_sdk/exceptions/network.py +50 -0
- smartrack_sdk-1.0.0/smartrack_sdk/exceptions/validation.py +28 -0
- smartrack_sdk-1.0.0/smartrack_sdk/models/__init__.py +85 -0
- smartrack_sdk-1.0.0/smartrack_sdk/models/callback.py +184 -0
- smartrack_sdk-1.0.0/smartrack_sdk/models/enums.py +203 -0
- smartrack_sdk-1.0.0/smartrack_sdk/models/requests.py +291 -0
- smartrack_sdk-1.0.0/smartrack_sdk/models/responses.py +209 -0
- smartrack_sdk-1.0.0/smartrack_sdk/tests/__init__.py +7 -0
- smartrack_sdk-1.0.0/smartrack_sdk/tests/test_callback.py +295 -0
- smartrack_sdk-1.0.0/smartrack_sdk/tests/test_client.py +264 -0
- smartrack_sdk-1.0.0/smartrack_sdk.egg-info/PKG-INFO +557 -0
- smartrack_sdk-1.0.0/smartrack_sdk.egg-info/SOURCES.txt +35 -0
- smartrack_sdk-1.0.0/smartrack_sdk.egg-info/dependency_links.txt +1 -0
- smartrack_sdk-1.0.0/smartrack_sdk.egg-info/entry_points.txt +2 -0
- smartrack_sdk-1.0.0/smartrack_sdk.egg-info/not-zip-safe +1 -0
- smartrack_sdk-1.0.0/smartrack_sdk.egg-info/requires.txt +19 -0
- smartrack_sdk-1.0.0/smartrack_sdk.egg-info/top_level.txt +2 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: smartrack-sdk
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: 广东浩鲸科技智能料架系统Python SDK
|
|
5
|
+
Home-page: https://www.gdhjtech.com/
|
|
6
|
+
Author: SmartRack SDK Team
|
|
7
|
+
Author-email: support@hjwms.com
|
|
8
|
+
Project-URL: Bug Reports, https://www.gdhjtech.com/
|
|
9
|
+
Project-URL: Source, https://github.com/smartrack/smartrack-sdk-python
|
|
10
|
+
Project-URL: Documentation, https://s.apifox.cn/dd344f34-40cf-4049-a2a5-7ed52a34f398
|
|
11
|
+
Keywords: smartrack 广东浩鲸科技 wms仓储管理 智能料架 api sdk
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.6
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
25
|
+
Requires-Python: >=3.6
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
Requires-Dist: requests>=2.25.1
|
|
28
|
+
Requires-Dist: urllib3>=1.26.0
|
|
29
|
+
Requires-Dist: certifi>=2021.5.30
|
|
30
|
+
Requires-Dist: python-dateutil>=2.8.2
|
|
31
|
+
Requires-Dist: jsonschema>=3.2.0
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: pytest>=6.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-cov>=2.0; extra == "dev"
|
|
35
|
+
Requires-Dist: black>=21.0; extra == "dev"
|
|
36
|
+
Requires-Dist: flake8>=3.8; extra == "dev"
|
|
37
|
+
Requires-Dist: mypy>=0.800; extra == "dev"
|
|
38
|
+
Provides-Extra: flask
|
|
39
|
+
Requires-Dist: Flask>=2.0; extra == "flask"
|
|
40
|
+
Provides-Extra: fastapi
|
|
41
|
+
Requires-Dist: fastapi>=0.68; extra == "fastapi"
|
|
42
|
+
Requires-Dist: uvicorn>=0.15; extra == "fastapi"
|
|
43
|
+
Dynamic: author
|
|
44
|
+
Dynamic: author-email
|
|
45
|
+
Dynamic: classifier
|
|
46
|
+
Dynamic: description
|
|
47
|
+
Dynamic: description-content-type
|
|
48
|
+
Dynamic: home-page
|
|
49
|
+
Dynamic: keywords
|
|
50
|
+
Dynamic: project-url
|
|
51
|
+
Dynamic: provides-extra
|
|
52
|
+
Dynamic: requires-dist
|
|
53
|
+
Dynamic: requires-python
|
|
54
|
+
Dynamic: summary
|
|
55
|
+
|
|
56
|
+
# SmartRack SDK for Python
|
|
57
|
+
|
|
58
|
+
SmartRack智能料架系统Python SDK,提供与智能料架系统Web API的集成接口。
|
|
59
|
+
|
|
60
|
+
## 特性
|
|
61
|
+
|
|
62
|
+
- ✅ 完整的API接口支持
|
|
63
|
+
- ✅ 强类型模型(dataclasses)
|
|
64
|
+
- ✅ 完善的异常处理
|
|
65
|
+
- ✅ 自动序列化/反序列化
|
|
66
|
+
- ✅ 认证支持
|
|
67
|
+
- ✅ 超时控制
|
|
68
|
+
- ✅ WebAPI回调处理
|
|
69
|
+
- ✅ Flask/FastAPI集成支持
|
|
70
|
+
- ✅ 详细日志记录
|
|
71
|
+
- ✅ 单元测试覆盖
|
|
72
|
+
|
|
73
|
+
## 快速开始
|
|
74
|
+
|
|
75
|
+
### 安装
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pip install smartrack-sdk
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
或从源码安装:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
git clone https://github.com/smartrack/smartrack-sdk-python.git
|
|
85
|
+
cd smartrack-sdk-python
|
|
86
|
+
pip install -e .
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 基本使用
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
import logging
|
|
93
|
+
from smartrack_sdk import SmartRackClient
|
|
94
|
+
from smartrack_sdk.models.requests import StockInRequest
|
|
95
|
+
from smartrack_sdk.models.enums import LedColors
|
|
96
|
+
|
|
97
|
+
# 配置日志
|
|
98
|
+
logging.basicConfig(level=logging.INFO)
|
|
99
|
+
|
|
100
|
+
# 创建客户端
|
|
101
|
+
with SmartRackClient("https://your-smartrack-api.com") as client:
|
|
102
|
+
# 创建入库请求
|
|
103
|
+
request = StockInRequest("test123", "MES001")
|
|
104
|
+
request.set_sheet_id("SI-20240101001")
|
|
105
|
+
request.set_rack_id("A001")
|
|
106
|
+
request.set_grn("PRODUCT001")
|
|
107
|
+
request.set_led_color(LedColors.GREEN)
|
|
108
|
+
request.set_blink(True)
|
|
109
|
+
|
|
110
|
+
# 发送请求
|
|
111
|
+
response = client.stock_in_request(request)
|
|
112
|
+
print(f"入库请求结果: Code={response.code}, Message={response.message}")
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 功能模块
|
|
116
|
+
|
|
117
|
+
### 1. 入库管理
|
|
118
|
+
|
|
119
|
+
#### 入库请求
|
|
120
|
+
```python
|
|
121
|
+
from smartrack_sdk.models.requests import StockInRequest
|
|
122
|
+
|
|
123
|
+
request = StockInRequest("test", "MES")
|
|
124
|
+
request.set_sheet_id("入库单号")
|
|
125
|
+
request.set_rack_id("料架编号")
|
|
126
|
+
request.set_grn("产品朔源码")
|
|
127
|
+
request.set_led_color(LedColors.GREEN)
|
|
128
|
+
request.set_blink(True)
|
|
129
|
+
|
|
130
|
+
response = client.stock_in_request(request)
|
|
131
|
+
print(f"入库请求结果: {response.message}")
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### 入库完成
|
|
135
|
+
```python
|
|
136
|
+
from smartrack_sdk.models.requests import StockInFinishRequest
|
|
137
|
+
|
|
138
|
+
request = StockInFinishRequest("test", "MES")
|
|
139
|
+
request.set_sheet_id("入库单号")
|
|
140
|
+
|
|
141
|
+
response = client.stock_in_finish(request)
|
|
142
|
+
print(f"入库完成结果: {response.message}")
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 2. 出库管理
|
|
146
|
+
|
|
147
|
+
#### 出库请求
|
|
148
|
+
```python
|
|
149
|
+
from smartrack_sdk.models.requests import StockOutRequest
|
|
150
|
+
|
|
151
|
+
request = StockOutRequest("test", "MES")
|
|
152
|
+
request.set_sheet_id("出库单号")
|
|
153
|
+
request.add_grn("朔源码1")
|
|
154
|
+
request.add_grn("朔源码2")
|
|
155
|
+
request.set_led_color(LedColors.RED)
|
|
156
|
+
request.set_blink(True)
|
|
157
|
+
|
|
158
|
+
response = client.stock_out_request(request)
|
|
159
|
+
for item in response.result_data:
|
|
160
|
+
print(f"储位: {item.cell}, GRN: {item.grn}")
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### 单号出库请求
|
|
164
|
+
```python
|
|
165
|
+
from smartrack_sdk.models.requests import StockOutSheetRequest
|
|
166
|
+
|
|
167
|
+
request = StockOutSheetRequest("test", "MES")
|
|
168
|
+
request.set_sheet_id("工单号/领料单号")
|
|
169
|
+
request.add_grn("朔源码1")
|
|
170
|
+
request.add_grn("朔源码2")
|
|
171
|
+
|
|
172
|
+
response = client.stock_out_sheet_request(request)
|
|
173
|
+
print(f"亮灯颜色: {response.led_color}")
|
|
174
|
+
print(f"颜色名称: {response.color_name}")
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
#### 单号出库完成
|
|
178
|
+
```python
|
|
179
|
+
from smartrack_sdk.models.requests import StockOutSheetFinishRequest
|
|
180
|
+
|
|
181
|
+
request = StockOutSheetFinishRequest("test", "MES")
|
|
182
|
+
request.set_sheet_id("工单号/领料单号")
|
|
183
|
+
|
|
184
|
+
response = client.stock_out_sheet_finish(request)
|
|
185
|
+
print(f"单号出库完成结果: {response.message}")
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
#### 单号出库取消
|
|
189
|
+
```python
|
|
190
|
+
from smartrack_sdk.models.requests import StockOutSheetCancelRequest
|
|
191
|
+
|
|
192
|
+
request = StockOutSheetCancelRequest("test", "MES")
|
|
193
|
+
request.set_sheet_id("工单号/领料单号")
|
|
194
|
+
|
|
195
|
+
response = client.stock_out_sheet_cancel(request)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 3. 库存查询
|
|
199
|
+
|
|
200
|
+
#### 查询库存数据
|
|
201
|
+
```python
|
|
202
|
+
response = client.get_stock_data(
|
|
203
|
+
grn="PRODUCT001", # GRN
|
|
204
|
+
rack_id="A001", # 料架号
|
|
205
|
+
cell_id="A0010001", # 储位号
|
|
206
|
+
led_color=LedColors.GREEN, # LED颜色
|
|
207
|
+
is_blink=False, # 是否闪烁
|
|
208
|
+
skip_count=0, # 跳过数量
|
|
209
|
+
max_result_count=50 # 最大结果数量
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
print(f"查询到 {response.total} 条库存记录")
|
|
213
|
+
for stock in response.result_data:
|
|
214
|
+
print(f"料架: {stock.rack_id}, 储位: {stock.cell_id}, GRN: {stock.grn}")
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
#### 通过GRN列表查询库存
|
|
218
|
+
```python
|
|
219
|
+
from smartrack_sdk.models.requests import GetStockByGRNListRequest
|
|
220
|
+
|
|
221
|
+
request = GetStockByGRNListRequest("test", "MES")
|
|
222
|
+
request.add_grn("GRN001")
|
|
223
|
+
request.add_grn("GRN002")
|
|
224
|
+
request.add_grn("GRN003")
|
|
225
|
+
|
|
226
|
+
response = client.get_stock_by_grn_list(request)
|
|
227
|
+
print(f"查询到 {response.total} 条库存记录")
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### 4. 料架管理
|
|
231
|
+
|
|
232
|
+
#### 料架测试
|
|
233
|
+
```python
|
|
234
|
+
from smartrack_sdk.models.requests import RackTestRequest
|
|
235
|
+
from smartrack_sdk.models.enums import RackTestMode
|
|
236
|
+
|
|
237
|
+
request = RackTestRequest("test", "MES")
|
|
238
|
+
request.set_rack_id("A001")
|
|
239
|
+
request.set_test_mode(RackTestMode.RGB_TEST)
|
|
240
|
+
request.set_blink(False)
|
|
241
|
+
|
|
242
|
+
response = client.rack_test(request)
|
|
243
|
+
print(f"料架测试结果: {response.message}")
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
#### 重置储位状态
|
|
247
|
+
```python
|
|
248
|
+
from smartrack_sdk.models.requests import ResetCellRequest
|
|
249
|
+
|
|
250
|
+
request = ResetCellRequest("test", "MES")
|
|
251
|
+
request.add_cell("A0010001")
|
|
252
|
+
request.add_cell("A0010002")
|
|
253
|
+
request.add_cell("A0010003")
|
|
254
|
+
|
|
255
|
+
response = client.reset_cell(request)
|
|
256
|
+
print(f"重置储位状态结果: {response.message}")
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
#### 清除错误
|
|
260
|
+
```python
|
|
261
|
+
from smartrack_sdk.models.requests import ClearErrorRequest
|
|
262
|
+
|
|
263
|
+
request = ClearErrorRequest("test", "MES")
|
|
264
|
+
request.set_cell_id("A0010001") # 或者使用 set_rack_id("A001")
|
|
265
|
+
|
|
266
|
+
response = client.clear_error(request)
|
|
267
|
+
for item in response.result_data:
|
|
268
|
+
status_text = "空" if item.is_empty() else "非空"
|
|
269
|
+
print(f"储位: {item.cell}, GRN: {item.grn}, 状态: {status_text}")
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### 5. WebAPI回调处理
|
|
273
|
+
|
|
274
|
+
#### 使用Flask(推荐)
|
|
275
|
+
```python
|
|
276
|
+
from smartrack_sdk.callback import FlaskCellEventHandler, CellEventCallbackService
|
|
277
|
+
from flask import Flask
|
|
278
|
+
|
|
279
|
+
# 创建Flask应用
|
|
280
|
+
app = Flask(__name__)
|
|
281
|
+
|
|
282
|
+
# 创建回调处理器
|
|
283
|
+
handler = CellEventCallbackService()
|
|
284
|
+
flask_handler = FlaskCellEventHandler(app, handler)
|
|
285
|
+
|
|
286
|
+
# 启动服务器
|
|
287
|
+
if __name__ == "__main__":
|
|
288
|
+
app.run(host="0.0.0.0", port=8080)
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
#### 使用FastAPI
|
|
292
|
+
```python
|
|
293
|
+
from smartrack_sdk.callback import FastAPICellEventHandler
|
|
294
|
+
import uvicorn
|
|
295
|
+
|
|
296
|
+
# 创建FastAPI应用
|
|
297
|
+
app = FastAPICellEventHandler()
|
|
298
|
+
uvicorn.run(app, host="0.0.0.0", port=8080)
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
#### 自定义回调处理器
|
|
302
|
+
```python
|
|
303
|
+
from smartrack_sdk.callback import CellEventHandler
|
|
304
|
+
from smartrack_sdk.models.callback import CellEventHandleRequest, CellEventHandleResponse
|
|
305
|
+
|
|
306
|
+
class CustomCellEventHandler(CellEventHandler):
|
|
307
|
+
def handle(self, request: CellEventHandleRequest) -> CellEventHandleResponse:
|
|
308
|
+
# 自定义处理逻辑
|
|
309
|
+
print(f"收到储位事件回调: {request.user_id}")
|
|
310
|
+
|
|
311
|
+
# 处理事件数据
|
|
312
|
+
for event_data in request.data:
|
|
313
|
+
print(f"储位: {event_data.cell_id}, GRN: {event_data.grn}")
|
|
314
|
+
|
|
315
|
+
# 返回成功响应
|
|
316
|
+
return CellEventHandleResponse.success(request.session_id)
|
|
317
|
+
|
|
318
|
+
# 使用自定义处理器
|
|
319
|
+
handler = CustomCellEventHandler()
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## 枚举类型
|
|
323
|
+
|
|
324
|
+
### LedColors (LED灯颜色)
|
|
325
|
+
```python
|
|
326
|
+
from smartrack_sdk.models.enums import LedColors
|
|
327
|
+
|
|
328
|
+
# 颜色值
|
|
329
|
+
LedColors.OFF # 0 - 关闭
|
|
330
|
+
LedColors.RED # 1 - 红色
|
|
331
|
+
LedColors.GREEN # 2 - 绿色
|
|
332
|
+
LedColors.YELLOW # 3 - 黄色
|
|
333
|
+
LedColors.BLUE # 4 - 蓝色
|
|
334
|
+
LedColors.MAGENTA # 5 - 洋红色
|
|
335
|
+
LedColors.CYAN # 6 - 青色
|
|
336
|
+
LedColors.WHITE # 7 - 白色
|
|
337
|
+
LedColors.BLINK # 128 - 闪烁
|
|
338
|
+
LedColors.RED_BLINK # 129 - 红色闪烁
|
|
339
|
+
LedColors.GREEN_BLINK # 130 - 绿色闪烁
|
|
340
|
+
LedColors.YELLOW_BLINK # 131 - 黄色闪烁
|
|
341
|
+
LedColors.BLUE_BLINK # 132 - 蓝色闪烁
|
|
342
|
+
LedColors.MAGENTA_BLINK # 133 - 洋红色闪烁
|
|
343
|
+
LedColors.CYAN_BLINK # 134 - 青色闪烁
|
|
344
|
+
LedColors.WHITE_BLINK # 135 - 白色闪烁
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### CellStatus (储位状态)
|
|
348
|
+
```python
|
|
349
|
+
from smartrack_sdk.models.enums import CellStatus
|
|
350
|
+
|
|
351
|
+
CellStatus.EMPTY # 0 - 空
|
|
352
|
+
CellStatus.HOLD # 1 - 非空
|
|
353
|
+
CellStatus.LOCKED # 2 - 预定状态
|
|
354
|
+
CellStatus.TAKE_OUT # 3 - 已取料
|
|
355
|
+
CellStatus.CHECKED # 4 - 已复核
|
|
356
|
+
CellStatus.MOVE # 5 - 移库已取出
|
|
357
|
+
CellStatus.ILLEGAL_TAKE_OUT # -3 - 非法取料
|
|
358
|
+
CellStatus.ILLEGAL_TAKE_IN # -2 - 非法上料
|
|
359
|
+
CellStatus.DISABLED # -1 - 禁用储位
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### RackTestMode (料架测试模式)
|
|
363
|
+
```python
|
|
364
|
+
from smartrack_sdk.models.enums import RackTestMode
|
|
365
|
+
|
|
366
|
+
RackTestMode.ALL_OFF # 0 - 全部灭灯
|
|
367
|
+
RackTestMode.RGB_TEST # 1 - RGB测试
|
|
368
|
+
RackTestMode.LIGHT_SEQUENCE_TEST # 2 - 灯序测试
|
|
369
|
+
RackTestMode.WARNING_LIGHT_TEST # 3 - 警示灯测试
|
|
370
|
+
RackTestMode.EMPTY_LIGHT # 4 - 空位亮灯
|
|
371
|
+
RackTestMode.NON_EMPTY_LIGHT # 5 - 非空亮灯
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
## 异常处理
|
|
375
|
+
|
|
376
|
+
### SmartRackException
|
|
377
|
+
所有SDK异常的基类。
|
|
378
|
+
|
|
379
|
+
### SmartRackApiException
|
|
380
|
+
API调用返回错误时抛出:
|
|
381
|
+
```python
|
|
382
|
+
try:
|
|
383
|
+
response = client.stock_in_request(request)
|
|
384
|
+
except SmartRackApiException as e:
|
|
385
|
+
print(f"API错误: {e.message}")
|
|
386
|
+
print(f"错误代码: {e.api_code}")
|
|
387
|
+
print(f"会话ID: {e.session_id}")
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### SmartRackNetworkException
|
|
391
|
+
网络相关错误时抛出:
|
|
392
|
+
```python
|
|
393
|
+
try:
|
|
394
|
+
response = client.stock_in_request(request)
|
|
395
|
+
except SmartRackNetworkException as e:
|
|
396
|
+
print(f"网络错误: {e.message}")
|
|
397
|
+
print(f"HTTP状态码: {e.status_code}")
|
|
398
|
+
|
|
399
|
+
if e.is_timeout:
|
|
400
|
+
print("请求超时")
|
|
401
|
+
elif e.is_connection_error:
|
|
402
|
+
print("连接错误")
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### SmartRackConfigurationException
|
|
406
|
+
配置错误时抛出:
|
|
407
|
+
```python
|
|
408
|
+
try:
|
|
409
|
+
client = SmartRackClient("") # 空的URL
|
|
410
|
+
except SmartRackConfigurationException as e:
|
|
411
|
+
print(f"配置错误: {e.message}")
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
## 高级配置
|
|
415
|
+
|
|
416
|
+
### 自定义HTTP客户端
|
|
417
|
+
```python
|
|
418
|
+
import requests
|
|
419
|
+
|
|
420
|
+
# 创建自定义session
|
|
421
|
+
session = requests.Session()
|
|
422
|
+
session.timeout = 60 # 60秒超时
|
|
423
|
+
session.verify = False # 跳过SSL验证
|
|
424
|
+
|
|
425
|
+
# 使用自定义session创建客户端
|
|
426
|
+
client = SmartRackClient("https://api.smartrack.com", timeout=60)
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### 设置认证Token
|
|
430
|
+
```python
|
|
431
|
+
client = SmartRackClient("https://api.smartrack.com")
|
|
432
|
+
client.set_auth_token("your-auth-token")
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### 日志配置
|
|
436
|
+
```python
|
|
437
|
+
import logging
|
|
438
|
+
|
|
439
|
+
# 配置详细日志
|
|
440
|
+
logging.basicConfig(
|
|
441
|
+
level=logging.DEBUG,
|
|
442
|
+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
# SDK会自动使用配置的logger
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### 使用上下文管理器
|
|
449
|
+
```python
|
|
450
|
+
with SmartRackClient("https://api.smartrack.com") as client:
|
|
451
|
+
# 使用client...
|
|
452
|
+
response = client.stock_in_request(request)
|
|
453
|
+
# 客户端会自动关闭
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
## 测试
|
|
457
|
+
|
|
458
|
+
### 运行基本示例
|
|
459
|
+
```bash
|
|
460
|
+
python examples/basic_usage.py
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### 运行测试客户端
|
|
464
|
+
```bash
|
|
465
|
+
# 测试所有API
|
|
466
|
+
python examples/test_client.py
|
|
467
|
+
|
|
468
|
+
# 测试单个API
|
|
469
|
+
python examples/test_client.py stock_in
|
|
470
|
+
python examples/test_client.py rack_test
|
|
471
|
+
python examples/test_client.py clear_error
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### 启动回调服务器
|
|
475
|
+
```bash
|
|
476
|
+
# 使用Flask启动WebAPI回调服务器
|
|
477
|
+
python examples/callback_server.py --server
|
|
478
|
+
|
|
479
|
+
# 查看手动设置说明
|
|
480
|
+
python examples/callback_server.py --manual
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### 运行单元测试
|
|
484
|
+
```bash
|
|
485
|
+
python -m pytest smartrack_sdk/tests/
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
## 项目结构
|
|
489
|
+
|
|
490
|
+
```
|
|
491
|
+
smartrack-sdk-python/
|
|
492
|
+
├── smartrack_sdk/ # 主包
|
|
493
|
+
│ ├── __init__.py
|
|
494
|
+
│ ├── client/ # 客户端
|
|
495
|
+
│ │ ├── __init__.py
|
|
496
|
+
│ │ └── smart_rack_client.py
|
|
497
|
+
│ ├── models/ # 数据模型
|
|
498
|
+
│ │ ├── __init__.py
|
|
499
|
+
│ │ ├── enums.py # 枚举定义
|
|
500
|
+
│ │ ├── requests.py # 请求模型
|
|
501
|
+
│ │ ├── responses.py # 响应模型
|
|
502
|
+
│ │ └── callback.py # 回调模型
|
|
503
|
+
│ ├── exceptions/ # 异常类
|
|
504
|
+
│ │ ├── __init__.py
|
|
505
|
+
│ │ ├── base.py # 基础异常
|
|
506
|
+
│ │ ├── api.py # API异常
|
|
507
|
+
│ │ ├── network.py # 网络异常
|
|
508
|
+
│ │ ├── configuration.py # 配置异常
|
|
509
|
+
│ │ └── validation.py # 验证异常
|
|
510
|
+
│ └── callback/ # 回调处理
|
|
511
|
+
│ ├── __init__.py
|
|
512
|
+
│ ├── handler.py # 回调处理器
|
|
513
|
+
│ ├── service.py # 默认回调服务
|
|
514
|
+
│ ├── flask_handler.py # Flask处理器
|
|
515
|
+
│ └── fastapi_handler.py # FastAPI处理器
|
|
516
|
+
├── examples/ # 使用示例
|
|
517
|
+
│ ├── basic_usage.py # 基本使用示例
|
|
518
|
+
│ ├── callback_server.py # 回调服务器示例
|
|
519
|
+
│ └── test_client.py # 测试客户端
|
|
520
|
+
├── smartrack_sdk/tests/ # 单元测试
|
|
521
|
+
├── setup.py # 安装配置
|
|
522
|
+
├── requirements.txt # 依赖文件
|
|
523
|
+
└── README.md # 文档
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
## 依赖项
|
|
527
|
+
|
|
528
|
+
### 核心依赖
|
|
529
|
+
- `requests` >= 2.25.1 - HTTP客户端
|
|
530
|
+
- `urllib3` >= 1.26.0 - URL处理
|
|
531
|
+
- `python-dateutil` >= 2.8.2 - 日期处理
|
|
532
|
+
|
|
533
|
+
### 可选依赖
|
|
534
|
+
- `Flask` >= 2.0.0 - Web框架(用于回调处理)
|
|
535
|
+
- `FastAPI` >= 0.68 - Web框架(用于回调处理)
|
|
536
|
+
- `uvicorn` >= 0.15 - ASGI服务器(用于FastAPI)
|
|
537
|
+
|
|
538
|
+
## 开发依赖
|
|
539
|
+
- `pytest` >= 6.0 - 测试框架
|
|
540
|
+
- `pytest-cov` >= 2.0 - 测试覆盖率
|
|
541
|
+
- `black` >= 21.0 - 代码格式化
|
|
542
|
+
- `flake8` >= 3.8 - 代码检查
|
|
543
|
+
- `mypy` >= 0.800 - 类型检查
|
|
544
|
+
|
|
545
|
+
## 许可证
|
|
546
|
+
|
|
547
|
+
本项目基于MIT许可证开源。
|
|
548
|
+
|
|
549
|
+
## 支持
|
|
550
|
+
|
|
551
|
+
如有问题或建议,请提交Issue或联系开发团队。
|
|
552
|
+
|
|
553
|
+
---
|
|
554
|
+
|
|
555
|
+
**SmartRack SDK Team**
|
|
556
|
+
版本: 1.0.0
|
|
557
|
+
最后更新: 2024年11月
|