pixelarraythirdparty 1.0.5__tar.gz → 1.0.7__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.
Files changed (20) hide show
  1. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/PKG-INFO +1 -1
  2. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty/__init__.py +3 -3
  3. pixelarraythirdparty-1.0.5/pixelarraythirdparty/celery/celery.py → pixelarraythirdparty-1.0.7/pixelarraythirdparty/cron/cron.py +16 -16
  4. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty/order/order.py +79 -38
  5. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty.egg-info/PKG-INFO +1 -1
  6. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty.egg-info/SOURCES.txt +2 -2
  7. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pyproject.toml +1 -1
  8. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/LICENSE +0 -0
  9. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/MANIFEST.in +0 -0
  10. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty/client.py +0 -0
  11. {pixelarraythirdparty-1.0.5/pixelarraythirdparty/celery → pixelarraythirdparty-1.0.7/pixelarraythirdparty/cron}/__init__.py +0 -0
  12. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty/order/__init__.py +0 -0
  13. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty/product/__init__.py +0 -0
  14. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty/product/product.py +0 -0
  15. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty/user/__init__.py +0 -0
  16. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty/user/user.py +0 -0
  17. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty.egg-info/dependency_links.txt +0 -0
  18. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty.egg-info/requires.txt +0 -0
  19. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/pixelarraythirdparty.egg-info/top_level.txt +0 -0
  20. {pixelarraythirdparty-1.0.5 → pixelarraythirdparty-1.0.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pixelarraythirdparty
3
- Version: 1.0.5
3
+ Version: 1.0.7
4
4
  Summary: PixelArray 第三方微服务客户端
5
5
  Author-email: Lu qi <qi.lu@pixelarrayai.com>
6
6
  License-Expression: MIT
@@ -6,18 +6,18 @@ PixelArray 第三方微服务客户端
6
6
  这个库包含了常用的开发工具和服务集成:
7
7
  - order: 订单管理模块和支付模块
8
8
  - product: 产品管理模块
9
- - celery: 定时任务管理模块
9
+ - cron: 定时任务管理模块
10
10
  - user: 用户管理模块
11
11
  """
12
12
 
13
- __version__ = "1.0.5"
13
+ __version__ = "1.0.7"
14
14
  __author__ = "Lu qi"
15
15
  __email__ = "qi.lu@pixelarrayai.com"
16
16
 
17
17
  # 导出主要模块
18
18
  __all__ = [
19
19
  "product",
20
- "celery",
20
+ "cron",
21
21
  "user",
22
22
  "order",
23
23
  ]
@@ -1,19 +1,19 @@
1
1
  from pixelarraythirdparty.client import Client
2
2
 
3
3
 
4
- class CeleryManager(Client):
5
- def get_celery_status(self):
4
+ class CronManager(Client):
5
+ def get_cron_status(self):
6
6
  """
7
- 获取Celery服务状态
7
+ 获取Cron服务状态
8
8
 
9
9
  功能说明:
10
- 获取Celery服务的运行状态,包括已注册的任务、工作节点状态等。
10
+ 获取Cron服务的运行状态,包括已注册的任务、工作节点状态等。
11
11
 
12
12
  输入参数:
13
13
 
14
14
 
15
15
  返回字段:
16
- data (dict): Celery服务状态信息
16
+ data (dict): Cron服务状态信息
17
17
  - registered_tasks (dict): 已注册的任务列表,按工作节点分组
18
18
  - worker_stats (dict): 工作节点统计信息
19
19
  - scheduled_task_count (int): 定时任务数量
@@ -21,19 +21,19 @@ class CeleryManager(Client):
21
21
  success (bool): 操作是否成功
22
22
 
23
23
  异常情况:
24
- - 获取Celery状态失败:返回错误信息"获取Celery状态失败"
24
+ - 获取Cron状态失败:返回错误信息"获取Cron状态失败"
25
25
  """
26
- data, success = self._request("GET", "/api/celery/status")
26
+ data, success = self._request("GET", "/api/cron/status")
27
27
  if not success:
28
28
  return {}, False
29
29
  return data, True
30
30
 
31
- def get_celery_tasks(self):
31
+ def get_cron_tasks(self):
32
32
  """
33
33
  获取已注册任务列表
34
34
 
35
35
  功能说明:
36
- 获取所有已注册的Celery任务列表。
36
+ 获取所有已注册的Cron任务列表。
37
37
 
38
38
  输入参数:
39
39
 
@@ -48,12 +48,12 @@ class CeleryManager(Client):
48
48
  异常情况:
49
49
  - 获取任务列表失败:返回错误信息"获取任务列表失败"
50
50
  """
51
- data, success = self._request("GET", "/api/celery/tasks")
51
+ data, success = self._request("GET", "/api/cron/tasks")
52
52
  if not success:
53
53
  return {}, False
54
54
  return data, True
55
55
 
56
- def get_celery_tasks_scheduled(self):
56
+ def get_cron_tasks_scheduled(self):
57
57
  """
58
58
  获取定时任务列表
59
59
 
@@ -85,12 +85,12 @@ class CeleryManager(Client):
85
85
  异常情况:
86
86
  - 获取定时任务列表失败:返回错误信息"获取定时任务列表失败"
87
87
  """
88
- data, success = self._request("GET", "/api/celery/tasks/scheduled")
88
+ data, success = self._request("GET", "/api/cron/tasks/scheduled")
89
89
  if not success:
90
90
  return {}, False
91
91
  return data, True
92
92
 
93
- def get_celery_tasks_detail(self, task_name: str):
93
+ def get_cron_tasks_detail(self, task_name: str):
94
94
  """
95
95
  获取任务详情
96
96
 
@@ -117,12 +117,12 @@ class CeleryManager(Client):
117
117
  - 任务不存在:返回错误信息"任务不存在"
118
118
  - 获取任务详情失败:返回错误信息"获取任务详情失败"
119
119
  """
120
- data, success = self._request("GET", f"/api/celery/tasks/{task_name}")
120
+ data, success = self._request("GET", f"/api/cron/tasks/{task_name}")
121
121
  if not success:
122
122
  return {}, False
123
123
  return data, True
124
124
 
125
- def trigger_celery_task(self, task_name: str, args: list, kwargs: dict):
125
+ def trigger_cron_task(self, task_name: str, args: list, kwargs: dict):
126
126
  """
127
127
  触发任务执行
128
128
 
@@ -148,7 +148,7 @@ class CeleryManager(Client):
148
148
  """
149
149
  data, success = self._request(
150
150
  "POST",
151
- f"/api/celery/tasks/{task_name}/trigger",
151
+ f"/api/cron/tasks/{task_name}/trigger",
152
152
  json={"args": args, "kwargs": kwargs},
153
153
  )
154
154
  if not success:
@@ -98,9 +98,12 @@ class OrderManager(Client):
98
98
  params = {
99
99
  "page": page,
100
100
  "page_size": page_size,
101
- "payment_status": payment_status,
102
- "out_trade_no": out_trade_no,
103
101
  }
102
+ # 只添加非None的参数
103
+ if payment_status is not None:
104
+ params["payment_status"] = payment_status
105
+ if out_trade_no is not None:
106
+ params["out_trade_no"] = out_trade_no
104
107
  data, success = self._request("GET", "/api/orders/list", params=params)
105
108
  if not success:
106
109
  return {}, False
@@ -251,8 +254,7 @@ class OrderManager(Client):
251
254
 
252
255
  def generate_qr_code(
253
256
  self,
254
- out_trade_no: str,
255
- payment_channel: str = "WECHAT",
257
+ out_trade_no: str
256
258
  ):
257
259
  """
258
260
  生成支付二维码
@@ -262,9 +264,6 @@ class OrderManager(Client):
262
264
 
263
265
  输入参数:
264
266
  out_trade_no (str): 商户订单号,必填
265
- payment_channel (str, 可选): 支付渠道,默认为"WECHAT",可选值:
266
- - "WECHAT": 微信支付
267
- - "ALIPAY": 支付宝(暂未实现)
268
267
 
269
268
  返回字段:
270
269
  data (dict): 二维码信息
@@ -278,24 +277,35 @@ class OrderManager(Client):
278
277
  - 不支持的支付渠道:抛出ValueError异常
279
278
  - 生成支付二维码失败:返回错误信息"生成支付二维码失败"
280
279
  """
281
- if payment_channel == "WECHAT":
280
+ order_detail, detail_success = self.get_order_detail(out_trade_no)
281
+ if not detail_success:
282
+ return {}, False
283
+
284
+ if order_detail.get("payment_channel") == "WECHAT":
282
285
  url = "/api/orders/wx_pay/generate_qr_code"
283
- elif payment_channel == "ALIPAY":
286
+ request_data = {
287
+ "out_trade_no": out_trade_no,
288
+ }
289
+ elif order_detail.get("payment_channel") == "ALIPAY":
284
290
  url = "/api/orders/ali_pay/generate_qr_code"
291
+ # 支付宝需要total_fee和subject,从已获取的订单详情中提取
292
+ request_data = {
293
+ "out_trade_no": out_trade_no,
294
+ "total_fee": order_detail.get("total_fee"),
295
+ "subject": order_detail.get("body", ""),
296
+ }
285
297
  else:
286
298
  raise ValueError("Invalid payment channel")
287
299
  data, success = self._request(
288
300
  "POST",
289
301
  url,
290
- json={
291
- "out_trade_no": out_trade_no,
292
- },
302
+ json=request_data,
293
303
  )
294
304
  if not success:
295
305
  return {}, False
296
306
  return data, True
297
307
 
298
- def refund_order(self, out_trade_no: str, payment_channel: str = "WECHAT"):
308
+ def refund_order(self, out_trade_no: str):
299
309
  """
300
310
  申请订单退款
301
311
 
@@ -304,15 +314,13 @@ class OrderManager(Client):
304
314
 
305
315
  输入参数:
306
316
  out_trade_no (str): 商户订单号,必填
307
- payment_channel (str, 可选): 支付渠道,默认为"WECHAT",可选值:
308
- - "WECHAT": 微信支付
309
- - "ALIPAY": 支付宝(暂未实现)
310
317
 
311
318
  返回字段:
312
319
  data (dict): 退款信息
313
320
  - out_refund_no (str): 退款单号,格式为"REFUND_订单号_时间戳"
314
321
  - out_trade_no (str): 商户订单号
315
- - total_fee (int): 退款金额(分)
322
+ - total_fee (int): 退款金额(分,微信支付)
323
+ - refund_amount (float): 退款金额(元,支付宝)
316
324
  success (bool): 操作是否成功
317
325
 
318
326
  异常情况:
@@ -322,16 +330,26 @@ class OrderManager(Client):
322
330
  - 不支持的支付渠道:抛出ValueError异常
323
331
  - 退款申请失败:返回错误信息"退款申请失败"
324
332
  """
325
- if payment_channel == "WECHAT":
333
+ order_detail, detail_success = self.get_order_detail(out_trade_no)
334
+ if not detail_success:
335
+ return {}, False
336
+
337
+ if order_detail.get("payment_channel") == "WECHAT":
326
338
  url = "/api/orders/wx_pay/refund"
327
- elif payment_channel == "ALIPAY":
339
+ request_data = {"out_trade_no": out_trade_no}
340
+ elif order_detail.get("payment_channel") == "ALIPAY":
328
341
  url = "/api/orders/ali_pay/refund"
342
+ request_data = {
343
+ "out_trade_no": out_trade_no,
344
+ "refund_amount": order_detail.get("total_fee"),
345
+ "refund_reason": "用户退款",
346
+ }
329
347
  else:
330
348
  raise ValueError("Invalid payment channel")
331
349
  data, success = self._request(
332
350
  "POST",
333
351
  url,
334
- json={"out_trade_no": out_trade_no},
352
+ json=request_data,
335
353
  )
336
354
  if not success:
337
355
  return {}, False
@@ -435,9 +453,12 @@ class OrderManagerAsync(AsyncClient):
435
453
  params = {
436
454
  "page": page,
437
455
  "page_size": page_size,
438
- "payment_status": payment_status,
439
- "out_trade_no": out_trade_no,
440
456
  }
457
+ # 只添加非None的参数
458
+ if payment_status is not None:
459
+ params["payment_status"] = payment_status
460
+ if out_trade_no is not None:
461
+ params["out_trade_no"] = out_trade_no
441
462
  data, success = await self._request("GET", "/api/orders/list", params=params)
442
463
  if not success:
443
464
  return {}, False
@@ -581,19 +602,17 @@ class OrderManagerAsync(AsyncClient):
581
602
  return data, True
582
603
 
583
604
  async def generate_qr_code(
584
- self, out_trade_no: str, payment_channel: str = "WECHAT"
605
+ self, out_trade_no: str
585
606
  ):
586
607
  """
587
608
  生成支付二维码(异步版本)
588
609
 
589
610
  功能说明:
590
611
  为指定订单生成支付二维码,支持微信支付和支付宝。二维码会自动上传到OSS并返回访问URL。
612
+ 如果不指定payment_channel,会自动从订单详情中获取支付渠道。
591
613
 
592
614
  输入参数:
593
615
  out_trade_no (str): 商户订单号,必填
594
- payment_channel (str, 可选): 支付渠道,默认为"WECHAT",可选值:
595
- - "WECHAT": 微信支付
596
- - "ALIPAY": 支付宝(暂未实现)
597
616
 
598
617
  返回字段:
599
618
  data (dict): 二维码信息
@@ -607,20 +626,34 @@ class OrderManagerAsync(AsyncClient):
607
626
  - 不支持的支付渠道:抛出ValueError异常
608
627
  - 生成支付二维码失败:返回错误信息"生成支付二维码失败"
609
628
  """
610
- if payment_channel == "WECHAT":
629
+ order_detail, success = await self.get_order_detail(out_trade_no)
630
+ print(order_detail)
631
+ if not success:
632
+ return {}, False
633
+
634
+ if order_detail.get("payment_channel") == "WECHAT":
611
635
  url = "/api/orders/wx_pay/generate_qr_code"
612
- elif payment_channel == "ALIPAY":
636
+ request_data = {
637
+ "out_trade_no": out_trade_no,
638
+ }
639
+ elif order_detail.get("payment_channel") == "ALIPAY":
613
640
  url = "/api/orders/ali_pay/generate_qr_code"
641
+ # 支付宝需要total_fee和subject,从已获取的订单详情中提取
642
+ request_data = {
643
+ "out_trade_no": out_trade_no,
644
+ "total_fee": order_detail.get("total_fee"),
645
+ "subject": order_detail.get("body", ""),
646
+ }
614
647
  else:
615
648
  raise ValueError("Invalid payment channel")
616
649
  data, success = await self._request(
617
- "POST", url, json={"out_trade_no": out_trade_no}
650
+ "POST", url, json=request_data
618
651
  )
619
652
  if not success:
620
653
  return {}, False
621
654
  return data, True
622
655
 
623
- async def refund_order(self, out_trade_no: str, payment_channel: str = "WECHAT"):
656
+ async def refund_order(self, out_trade_no: str):
624
657
  """
625
658
  申请订单退款(异步版本)
626
659
 
@@ -629,15 +662,13 @@ class OrderManagerAsync(AsyncClient):
629
662
 
630
663
  输入参数:
631
664
  out_trade_no (str): 商户订单号,必填
632
- payment_channel (str, 可选): 支付渠道,默认为"WECHAT",可选值:
633
- - "WECHAT": 微信支付
634
- - "ALIPAY": 支付宝(暂未实现)
635
665
 
636
666
  返回字段:
637
667
  data (dict): 退款信息
638
668
  - out_refund_no (str): 退款单号,格式为"REFUND_订单号_时间戳"
639
669
  - out_trade_no (str): 商户订单号
640
- - total_fee (int): 退款金额(分)
670
+ - total_fee (int): 退款金额(分,微信支付)
671
+ - refund_amount (float): 退款金额(元,支付宝)
641
672
  success (bool): 操作是否成功
642
673
 
643
674
  异常情况:
@@ -647,14 +678,24 @@ class OrderManagerAsync(AsyncClient):
647
678
  - 不支持的支付渠道:抛出ValueError异常
648
679
  - 退款申请失败:返回错误信息"退款申请失败"
649
680
  """
650
- if payment_channel == "WECHAT":
681
+ order_detail, success = await self.get_order_detail(out_trade_no)
682
+ if not success:
683
+ return {}, False
684
+
685
+ if order_detail.get("payment_channel") == "WECHAT":
651
686
  url = "/api/orders/wx_pay/refund"
652
- elif payment_channel == "ALIPAY":
687
+ request_data = {"out_trade_no": out_trade_no}
688
+ elif order_detail.get("payment_channel") == "ALIPAY":
653
689
  url = "/api/orders/ali_pay/refund"
690
+ request_data = {
691
+ "out_trade_no": out_trade_no,
692
+ "refund_amount": order_detail.get("total_fee") / 100.0,
693
+ "refund_reason": "用户退款",
694
+ }
654
695
  else:
655
- raise ValueError("Invalid payment channel")
696
+ raise ValueError("Invalid payment channel")
656
697
  data, success = await self._request(
657
- "POST", url, json={"out_trade_no": out_trade_no}
698
+ "POST", url, json=request_data
658
699
  )
659
700
  if not success:
660
701
  return {}, False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pixelarraythirdparty
3
- Version: 1.0.5
3
+ Version: 1.0.7
4
4
  Summary: PixelArray 第三方微服务客户端
5
5
  Author-email: Lu qi <qi.lu@pixelarrayai.com>
6
6
  License-Expression: MIT
@@ -8,8 +8,8 @@ pixelarraythirdparty.egg-info/SOURCES.txt
8
8
  pixelarraythirdparty.egg-info/dependency_links.txt
9
9
  pixelarraythirdparty.egg-info/requires.txt
10
10
  pixelarraythirdparty.egg-info/top_level.txt
11
- pixelarraythirdparty/celery/__init__.py
12
- pixelarraythirdparty/celery/celery.py
11
+ pixelarraythirdparty/cron/__init__.py
12
+ pixelarraythirdparty/cron/cron.py
13
13
  pixelarraythirdparty/order/__init__.py
14
14
  pixelarraythirdparty/order/order.py
15
15
  pixelarraythirdparty/product/__init__.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pixelarraythirdparty"
7
- version = "1.0.5"
7
+ version = "1.0.7"
8
8
  authors = [
9
9
  {name = "Lu qi", email = "qi.lu@pixelarrayai.com"},
10
10
  ]