bizyengine 1.1.2__py3-none-any.whl → 1.2.1__py3-none-any.whl

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.
@@ -6,15 +6,18 @@ import bizyengine.core as core
6
6
  from bizyengine.core.common import get_api_key
7
7
  from bizyengine.core.common.env_var import (
8
8
  BIZYAIR_PRODUCTION_TEST,
9
- BIZYAIR_SERVER_ADDRESS,
9
+ BIZYAIR_X_SERVER,
10
+ BIZYAIR_Y_SERVER,
10
11
  )
11
12
 
12
13
  from .errno import ErrorNo, errnos
13
14
  from .error_handler import ErrorHandler
15
+ from .profile import user_profile
14
16
  from .utils import is_string_valid
15
17
 
16
- with open(os.path.join(os.path.dirname(__file__), "..", "version.txt"), "r") as file:
17
- CLIENT_VERSION = file.read()
18
+ version_path = os.path.join(os.path.dirname(__file__), "..", "version.txt")
19
+ with open(version_path, "r") as file:
20
+ CLIENT_VERSION = file.read().strip()
18
21
 
19
22
 
20
23
  class APIClient:
@@ -34,9 +37,13 @@ class APIClient:
34
37
  "content-type": "application/json",
35
38
  "authorization": auth,
36
39
  "x-bizyair-client-version": CLIENT_VERSION,
40
+ "X-Client-Type": "bizyair",
37
41
  }
38
42
  if BIZYAIR_PRODUCTION_TEST != None:
39
43
  headers["x-bizyair-production-test"] = BIZYAIR_PRODUCTION_TEST
44
+ if user_profile.getLang():
45
+ headers["lang"] = user_profile.getLang()
46
+
40
47
  return headers, None
41
48
  except ValueError as e:
42
49
  error_message = e.args[0] if e.args else "Invalid API key"
@@ -55,7 +62,11 @@ class APIClient:
55
62
  response.status,
56
63
  resp_json.get("code", response.status),
57
64
  None,
58
- resp_json.get("message", await response.text()),
65
+ {
66
+ user_profile.getLang(): resp_json.get(
67
+ "message", await response.text()
68
+ )
69
+ },
59
70
  )
60
71
  return resp_json, None
61
72
 
@@ -68,7 +79,11 @@ class APIClient:
68
79
  response.status,
69
80
  resp_json.get("code", response.status),
70
81
  None,
71
- resp_json.get("message", await response.text()),
82
+ {
83
+ user_profile.getLang(): resp_json.get(
84
+ "message", await response.text()
85
+ )
86
+ },
72
87
  )
73
88
  return resp_json, None
74
89
 
@@ -81,7 +96,11 @@ class APIClient:
81
96
  response.status,
82
97
  resp_json.get("code", response.status),
83
98
  None,
84
- resp_json.get("message", await response.text()),
99
+ {
100
+ user_profile.getLang(): resp_json.get(
101
+ "message", await response.text()
102
+ )
103
+ },
85
104
  )
86
105
  return resp_json, None
87
106
 
@@ -94,7 +113,11 @@ class APIClient:
94
113
  response.status,
95
114
  resp_json.get("code", response.status),
96
115
  None,
97
- resp_json.get("message", await response.text()),
116
+ {
117
+ user_profile.getLang(): resp_json.get(
118
+ "message", await response.text()
119
+ )
120
+ },
98
121
  )
99
122
  return resp_json, None
100
123
 
@@ -103,7 +126,7 @@ class APIClient:
103
126
  if err is not None:
104
127
  return None, err
105
128
 
106
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/user/info"
129
+ server_url = f"{BIZYAIR_X_SERVER}/user/info"
107
130
  try:
108
131
  ret, err = await self.do_get(server_url, headers=headers)
109
132
  if err is not None:
@@ -117,7 +140,7 @@ class APIClient:
117
140
  async def sign(
118
141
  self, signature: str, type: str
119
142
  ) -> tuple[dict | None, ErrorNo | None]:
120
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/files/{signature}"
143
+ server_url = f"{BIZYAIR_X_SERVER}/files/{signature}"
121
144
  params = None
122
145
  if is_string_valid(type):
123
146
  params = {"type": type}
@@ -140,7 +163,7 @@ class APIClient:
140
163
  async def commit_file(
141
164
  self, signature: str, object_key: str, md5_hash: str, type: str
142
165
  ) -> tuple[dict | None, ErrorNo | None]:
143
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/files"
166
+ server_url = f"{BIZYAIR_X_SERVER}/files"
144
167
 
145
168
  payload = {
146
169
  "sign": signature,
@@ -163,7 +186,7 @@ class APIClient:
163
186
  return None, errnos.COMMIT_FILE
164
187
 
165
188
  async def commit_bizy_model(self, payload) -> tuple[dict | None, ErrorNo | None]:
166
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models"
189
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models"
167
190
 
168
191
  headers, err = self.auth_header()
169
192
  if err is not None:
@@ -182,7 +205,7 @@ class APIClient:
182
205
  async def delete_bizy_model(
183
206
  self, model_id: int
184
207
  ) -> tuple[dict | None, ErrorNo | None]:
185
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/{model_id}"
208
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/{model_id}"
186
209
 
187
210
  headers, err = self.auth_header()
188
211
  if err is not None:
@@ -207,7 +230,7 @@ class APIClient:
207
230
  base_models: list[str] = None,
208
231
  sort: str = None,
209
232
  ) -> tuple[dict | None, ErrorNo | None]:
210
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/community"
233
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/community"
211
234
  params = {"current": current, "page_size": page_size}
212
235
  if keyword:
213
236
  params["keyword"] = keyword
@@ -241,7 +264,7 @@ class APIClient:
241
264
  base_models: list[str] = None,
242
265
  sort: str = None,
243
266
  ) -> tuple[dict | None, ErrorNo | None]:
244
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/official"
267
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/official"
245
268
  params = {"current": current, "page_size": page_size}
246
269
  if keyword:
247
270
  params["keyword"] = keyword
@@ -276,7 +299,7 @@ class APIClient:
276
299
  base_models: list[str] = None,
277
300
  sort: str = None,
278
301
  ) -> tuple[dict | None, ErrorNo | None]:
279
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/{mode}"
302
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/{mode}"
280
303
  params = {"current": current, "page_size": page_size}
281
304
  if keyword:
282
305
  params["keyword"] = keyword
@@ -304,9 +327,7 @@ class APIClient:
304
327
  async def get_model_detail(
305
328
  self, model_id: int, source: str
306
329
  ) -> tuple[dict | None, ErrorNo | None]:
307
- server_url = (
308
- f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/{model_id}/detail?source={source}"
309
- )
330
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/{model_id}/detail?source={source}"
310
331
 
311
332
  headers, err = self.auth_header()
312
333
  if err is not None:
@@ -325,7 +346,7 @@ class APIClient:
325
346
  async def get_model_version_detail(
326
347
  self, version_id: int
327
348
  ) -> tuple[dict | None, ErrorNo | None]:
328
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/versions/{version_id}"
349
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/versions/{version_id}"
329
350
 
330
351
  headers, err = self.auth_header()
331
352
  if err is not None:
@@ -344,7 +365,7 @@ class APIClient:
344
365
  return None, errnos.GET_MODEL_VERSION_DETAIL
345
366
 
346
367
  async def fork_model_version(self, version_id: int) -> tuple[None, ErrorNo | None]:
347
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/versions/{version_id}/fork"
368
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/versions/{version_id}/fork"
348
369
 
349
370
  headers, err = self.auth_header()
350
371
  if err is not None:
@@ -363,7 +384,7 @@ class APIClient:
363
384
  async def unfork_model_version(
364
385
  self, version_id: int
365
386
  ) -> tuple[None, ErrorNo | None]:
366
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/versions/{version_id}/fork"
387
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/versions/{version_id}/fork"
367
388
 
368
389
  headers, err = self.auth_header()
369
390
  if err is not None:
@@ -382,7 +403,7 @@ class APIClient:
382
403
  async def update_model(
383
404
  self, model_id: int, name: str, type_: str, versions: list[dict]
384
405
  ) -> tuple[dict | None, ErrorNo | None]:
385
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/{model_id}"
406
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/{model_id}"
386
407
 
387
408
  headers, err = self.auth_header()
388
409
  if err is not None:
@@ -403,7 +424,7 @@ class APIClient:
403
424
  async def get_upload_token(
404
425
  self, filename: str
405
426
  ) -> tuple[dict | None, ErrorNo | None]:
406
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/upload/token?file_name={filename}"
427
+ server_url = f"{BIZYAIR_X_SERVER}/upload/token?file_name={filename}"
407
428
 
408
429
  headers, err = self.auth_header()
409
430
  if err is not None:
@@ -423,9 +444,7 @@ class APIClient:
423
444
  self, like_type: str, object_id: str
424
445
  ) -> tuple[dict | None, ErrorNo | None]:
425
446
  if like_type == "model_version":
426
- server_url = (
427
- f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/versions/{object_id}/like"
428
- )
447
+ server_url = f"{BIZYAIR_X_SERVER}/bizy_models/versions/{object_id}/like"
429
448
  else:
430
449
  return None, errnos.UNSUPPORT_LIKE_TYPE
431
450
 
@@ -446,7 +465,7 @@ class APIClient:
446
465
  async def get_download_url(
447
466
  self, sign: str, model_version_id: int
448
467
  ) -> tuple[str | None, ErrorNo | None]:
449
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/files/temp-download/{sign}?version_id={model_version_id}"
468
+ server_url = f"{BIZYAIR_X_SERVER}/files/temp-download/{sign}?version_id={model_version_id}"
450
469
 
451
470
  headers, err = self.auth_header()
452
471
  if err is not None:
@@ -463,12 +482,14 @@ class APIClient:
463
482
  return None, errnos.GET_DOWNLOAD_URL
464
483
 
465
484
  async def get_share_model_files(self, shareId, payload) -> (dict, ErrorNo):
466
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/{shareId}/models/files"
485
+ server_url = f"{BIZYAIR_X_SERVER}/{shareId}/models/files"
467
486
  try:
468
487
 
469
488
  def callback(ret: dict):
470
489
  if ret["code"] != errnos.OK.code:
471
- return [], ErrorNo(500, ret["code"], None, f"{ret}")
490
+ return [], ErrorNo(
491
+ 500, ret["code"], None, {user_profile.getLang(): ret["message"]}
492
+ )
472
493
  if not ret or "data" not in ret or ret["data"] is None:
473
494
  return [], None
474
495
 
@@ -492,7 +513,7 @@ class APIClient:
492
513
  return [], errnos.LIST_SHARE_MODEL_FILE_ERR
493
514
 
494
515
  async def commit_dataset(self, payload) -> tuple[dict | None, ErrorNo | None]:
495
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets"
516
+ server_url = f"{BIZYAIR_X_SERVER}/datasets"
496
517
 
497
518
  headers, err = self.auth_header()
498
519
  if err is not None:
@@ -511,7 +532,7 @@ class APIClient:
511
532
  async def update_dataset(
512
533
  self, dataset_id: int, name: str, versions: list[dict]
513
534
  ) -> tuple[dict | None, ErrorNo | None]:
514
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets/{dataset_id}"
535
+ server_url = f"{BIZYAIR_X_SERVER}/datasets/{dataset_id}"
515
536
 
516
537
  headers, err = self.auth_header()
517
538
  if err is not None:
@@ -532,7 +553,7 @@ class APIClient:
532
553
  async def get_dataset_version_detail(
533
554
  self, version_id: int
534
555
  ) -> tuple[dict | None, ErrorNo | None]:
535
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets/versions/{version_id}"
556
+ server_url = f"{BIZYAIR_X_SERVER}/datasets/versions/{version_id}"
536
557
 
537
558
  headers, err = self.auth_header()
538
559
  if err is not None:
@@ -553,7 +574,7 @@ class APIClient:
553
574
  async def delete_dataset(
554
575
  self, dataset_id: int
555
576
  ) -> tuple[dict | None, ErrorNo | None]:
556
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets/{dataset_id}"
577
+ server_url = f"{BIZYAIR_X_SERVER}/datasets/{dataset_id}"
557
578
 
558
579
  headers, err = self.auth_header()
559
580
  if err is not None:
@@ -576,7 +597,7 @@ class APIClient:
576
597
  keyword: str = None,
577
598
  annotated: str = None,
578
599
  ) -> tuple[dict | None, ErrorNo | None]:
579
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets"
600
+ server_url = f"{BIZYAIR_X_SERVER}/datasets"
580
601
  params = {"current": current, "page_size": page_size}
581
602
  if keyword:
582
603
  params["keyword"] = keyword
@@ -600,7 +621,7 @@ class APIClient:
600
621
  async def get_dataset_detail(
601
622
  self, dataset_id: int
602
623
  ) -> tuple[dict | None, ErrorNo | None]:
603
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets/{dataset_id}/detail"
624
+ server_url = f"{BIZYAIR_X_SERVER}/datasets/{dataset_id}/detail"
604
625
 
605
626
  headers, err = self.auth_header()
606
627
  if err is not None:
@@ -617,7 +638,7 @@ class APIClient:
617
638
  return None, errnos.GET_DATASET_DETAIL
618
639
 
619
640
  async def create_share(self, payload) -> tuple[dict | None, ErrorNo | None]:
620
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/share"
641
+ server_url = f"{BIZYAIR_X_SERVER}/share"
621
642
 
622
643
  headers, err = self.auth_header()
623
644
  if err is not None:
@@ -633,7 +654,7 @@ class APIClient:
633
654
  return None, errnos.CREATE_SHARE
634
655
 
635
656
  async def get_share_detail(self, code: str) -> tuple[dict | None, ErrorNo | None]:
636
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/share/{code}"
657
+ server_url = f"{BIZYAIR_X_SERVER}/share/{code}"
637
658
 
638
659
  headers, err = self.auth_header()
639
660
  if err is not None:
@@ -650,7 +671,7 @@ class APIClient:
650
671
  return None, errnos.GET_SHARE_DETAIL
651
672
 
652
673
  async def get_data_dict(self) -> tuple[dict | None, ErrorNo | None]:
653
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/dict"
674
+ server_url = f"{BIZYAIR_X_SERVER}/dict"
654
675
  headers, err = self.auth_header()
655
676
  if err is not None:
656
677
  return None, err
@@ -666,7 +687,7 @@ class APIClient:
666
687
  return None, errnos.GET_DATA_DICT
667
688
 
668
689
  async def get_notification_unread_count(self) -> tuple[dict | None, ErrorNo | None]:
669
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/notifications/unread_count"
690
+ server_url = f"{BIZYAIR_X_SERVER}/notifications/unread_count"
670
691
  headers, err = self.auth_header()
671
692
  if err is not None:
672
693
  return None, err
@@ -691,7 +712,7 @@ class APIClient:
691
712
  types: list | None,
692
713
  read_status: bool | None,
693
714
  ) -> tuple[dict | None, ErrorNo | None]:
694
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/notifications"
715
+ server_url = f"{BIZYAIR_X_SERVER}/notifications"
695
716
  headers, err = self.auth_header()
696
717
  if err is not None:
697
718
  return None, err
@@ -719,7 +740,7 @@ class APIClient:
719
740
  async def read_notifications(
720
741
  self, notif_ids: list[int]
721
742
  ) -> tuple[dict | None, ErrorNo | None]:
722
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/notifications/read"
743
+ server_url = f"{BIZYAIR_X_SERVER}/notifications/read"
723
744
  headers, err = self.auth_header()
724
745
  if err is not None:
725
746
  return None, err
@@ -744,7 +765,7 @@ class APIClient:
744
765
  async def read_all_notifications(
745
766
  self, type: int
746
767
  ) -> tuple[dict | None, ErrorNo | None]:
747
- server_url = f"{BIZYAIR_SERVER_ADDRESS}/notifications/read_all"
768
+ server_url = f"{BIZYAIR_X_SERVER}/notifications/read_all"
748
769
  headers, err = self.auth_header()
749
770
  if err is not None:
750
771
  return None, err
@@ -764,3 +785,289 @@ class APIClient:
764
785
  f"\033[31m[BizyAir]\033[0m Fail to mark all notifications as read: {str(e)}"
765
786
  )
766
787
  return None, errnos.READ_ALL_NOTIF
788
+
789
+ async def get_wallet(self) -> tuple[dict | None, ErrorNo | None]:
790
+ server_url = f"{BIZYAIR_Y_SERVER}/wallet"
791
+ headers, err = self.auth_header()
792
+ if err is not None:
793
+ return None, err
794
+
795
+ try:
796
+ ret, err = await self.do_get(server_url, headers=headers)
797
+ if err is not None:
798
+ return None, err
799
+
800
+ return ret["data"], None
801
+ except Exception as e:
802
+ print(f"\033[31m[BizyAir]\033[0m Fail to get wallet info: {str(e)}")
803
+ return None, errnos.GET_WALLET_INFO
804
+
805
+ async def query_coins(
806
+ self, current: int, page_size: int, coin_type: int = 0, expire_days: int = 0
807
+ ) -> tuple[dict | None, ErrorNo | None]:
808
+ server_url = f"{BIZYAIR_Y_SERVER}/coins"
809
+ headers, err = self.auth_header()
810
+ if err is not None:
811
+ return None, err
812
+
813
+ params = {"current": current, "page_size": page_size}
814
+ if coin_type > 0:
815
+ params["coin_type"] = coin_type
816
+ if expire_days > 0:
817
+ params["expire_days"] = expire_days
818
+
819
+ try:
820
+ ret, err = await self.do_get(server_url, headers=headers, params=params)
821
+ if err is not None:
822
+ return None, err
823
+
824
+ return ret["data"], None
825
+ except Exception as e:
826
+ print(f"\033[31m[BizyAir]\033[0m Fail to query coins: {str(e)}")
827
+ return None, errnos.QUERY_COINS
828
+
829
+ async def get_user_metadata(self) -> tuple[dict | None, ErrorNo | None]:
830
+ server_url = f"{BIZYAIR_X_SERVER}/user/metadata"
831
+ headers, err = self.auth_header()
832
+ if err is not None:
833
+ return None, err
834
+
835
+ try:
836
+ ret, err = await self.do_get(server_url, headers=headers)
837
+ if err is not None:
838
+ return None, err
839
+
840
+ return ret["data"], None
841
+ except Exception as e:
842
+ print(f"\033[31m[BizyAir]\033[0m Fail to get user metadata: {str(e)}")
843
+ return None, errnos.GET_USER_METADATA
844
+
845
+ async def update_user_info(
846
+ self, name: str = None, avatar: str = None, introduction: str = None
847
+ ) -> tuple[dict | None, ErrorNo | None]:
848
+ server_url = f"{BIZYAIR_X_SERVER}/user/metadata"
849
+ headers, err = self.auth_header()
850
+ if err is not None:
851
+ return None, err
852
+
853
+ payload = {}
854
+ if name is not None:
855
+ payload["name"] = name
856
+ if avatar is not None:
857
+ payload["avatar"] = avatar
858
+ if introduction is not None:
859
+ payload["introduction"] = introduction
860
+
861
+ try:
862
+ ret, err = await self.do_put(server_url, headers=headers, data=payload)
863
+ if err is not None:
864
+ return None, err
865
+
866
+ return ret["data"], None
867
+ except Exception as e:
868
+ print(f"\033[31m[BizyAir]\033[0m Fail to update user info: {str(e)}")
869
+ return None, errnos.UPDATE_USER_INFO
870
+
871
+ async def user_real_name(self) -> tuple[dict | None, ErrorNo | None]:
872
+ server_url = f"{BIZYAIR_X_SERVER}/user/real_name"
873
+ headers, err = self.auth_header()
874
+ if err is not None:
875
+ return None, err
876
+
877
+ try:
878
+ ret, err = await self.do_post(server_url, headers=headers)
879
+ if err is not None:
880
+ return None, err
881
+
882
+ return ret["data"], None
883
+ except Exception as e:
884
+ print(f"\033[31m[BizyAir]\033[0m Fail to verify real name: {str(e)}")
885
+ return None, errnos.USER_REAL_NAME
886
+
887
+ async def buy_product(
888
+ self, product_id: int, platform: str
889
+ ) -> tuple[dict | None, ErrorNo | None]:
890
+ server_url = f"{BIZYAIR_Y_SERVER}/pay/product/{product_id}"
891
+ headers, err = self.auth_header()
892
+ if err is not None:
893
+ return None, err
894
+
895
+ payload = {}
896
+ if platform is not None:
897
+ payload["platform"] = platform
898
+
899
+ try:
900
+ ret, err = await self.do_post(server_url, headers=headers, data=payload)
901
+ if err is not None:
902
+ return None, err
903
+
904
+ return ret["data"], None
905
+ except Exception as e:
906
+ print(f"\033[31m[BizyAir]\033[0m Fail to buy product: {str(e)}")
907
+ return None, errnos.BUY_PRODUCT
908
+
909
+ async def get_pay_status(self, orderNum: str) -> tuple[dict | None, ErrorNo | None]:
910
+ server_url = f"{BIZYAIR_Y_SERVER}/pay/orders/{orderNum}"
911
+ headers, err = self.auth_header()
912
+ if err is not None:
913
+ return None, err
914
+
915
+ try:
916
+ ret, err = await self.do_get(server_url, headers=headers)
917
+ if err is not None:
918
+ return None, err
919
+
920
+ return ret["data"], None
921
+ except Exception as e:
922
+ print(f"\033[31m[BizyAir]\033[0m Fail to get pay status: {str(e)}")
923
+ return None, errnos.PAY_STATUS
924
+
925
+ async def cancel_pay_order(
926
+ self, orderNum: str
927
+ ) -> tuple[dict | None, ErrorNo | None]:
928
+ server_url = f"{BIZYAIR_Y_SERVER}/pay/orders/{orderNum}"
929
+ headers, err = self.auth_header()
930
+ if err is not None:
931
+ return None, err
932
+
933
+ try:
934
+ ret, err = await self.do_delete(server_url, headers=headers)
935
+ if err is not None:
936
+ return None, err
937
+
938
+ return ret["data"], None
939
+ except Exception as e:
940
+ print(f"\033[31m[BizyAir]\033[0m Fail to cancel payment: {str(e)}")
941
+ return None, errnos.PAY_CANCEL
942
+
943
+ async def list_pay_orders(
944
+ self, current: int, page_size: int, status: str | None
945
+ ) -> tuple[dict | None, ErrorNo | None]:
946
+ server_url = f"{BIZYAIR_Y_SERVER}/pay/page"
947
+ headers, err = self.auth_header()
948
+ if err is not None:
949
+ return None, err
950
+
951
+ params = {"current": current, "page_size": page_size}
952
+ if status is not None:
953
+ params["status"] = status
954
+
955
+ try:
956
+ ret, err = await self.do_get(server_url, headers=headers, params=params)
957
+ if err is not None:
958
+ return None, err
959
+
960
+ return ret["data"], None
961
+ except Exception as e:
962
+ print(f"\033[31m[BizyAir]\033[0m Fail to list pay orders: {str(e)}")
963
+ return None, errnos.LIST_PAY_ORDER
964
+
965
+ async def list_products(self) -> tuple[dict | None, ErrorNo | None]:
966
+ server_url = f"{BIZYAIR_Y_SERVER}/products"
967
+ headers, err = self.auth_header()
968
+ if err is not None:
969
+ return None, err
970
+
971
+ try:
972
+ ret, err = await self.do_get(server_url, headers=headers)
973
+ if err is not None:
974
+ return None, err
975
+
976
+ return ret["data"], None
977
+ except Exception as e:
978
+ print(f"\033[31m[BizyAir]\033[0m Fail to list products: {str(e)}")
979
+ return None, errnos.LIST_PRODUCTS
980
+
981
+ async def get_year_cost(
982
+ self, year: str = None, api_key: str = None
983
+ ) -> tuple[dict | None, ErrorNo | None]:
984
+ server_url = f"{BIZYAIR_Y_SERVER}/invoices/year_cost"
985
+ params = {}
986
+ if year:
987
+ params["year"] = year
988
+ if api_key:
989
+ params["api_key"] = api_key
990
+
991
+ headers, err = self.auth_header()
992
+ if err is not None:
993
+ return None, err
994
+
995
+ try:
996
+ ret, err = await self.do_get(server_url, params=params, headers=headers)
997
+ if err is not None:
998
+ return None, err
999
+
1000
+ return ret["data"], None
1001
+ except Exception as e:
1002
+ print(f"\033[31m[BizyAir]\033[0m Fail to get year cost: {str(e)}")
1003
+ return None, errnos.GET_YEAR_COST
1004
+
1005
+ async def get_month_cost(
1006
+ self, month: str = None, api_key: str = None
1007
+ ) -> tuple[dict | None, ErrorNo | None]:
1008
+ server_url = f"{BIZYAIR_Y_SERVER}/invoices/month_cost"
1009
+ params = {}
1010
+ if month:
1011
+ params["month"] = month
1012
+ if api_key:
1013
+ params["api_key"] = api_key
1014
+
1015
+ headers, err = self.auth_header()
1016
+ if err is not None:
1017
+ return None, err
1018
+
1019
+ try:
1020
+ ret, err = await self.do_get(server_url, params=params, headers=headers)
1021
+ if err is not None:
1022
+ return None, err
1023
+
1024
+ return ret["data"], None
1025
+ except Exception as e:
1026
+ print(f"\033[31m[BizyAir]\033[0m Fail to get month cost: {str(e)}")
1027
+ return None, errnos.GET_MONTH_COST
1028
+
1029
+ async def get_day_cost(
1030
+ self, day: str = None, api_key: str = None
1031
+ ) -> tuple[dict | None, ErrorNo | None]:
1032
+ server_url = f"{BIZYAIR_Y_SERVER}/invoices/day_cost"
1033
+ params = {}
1034
+ if day:
1035
+ params["date"] = day
1036
+ if api_key:
1037
+ params["api_key"] = api_key
1038
+
1039
+ headers, err = self.auth_header()
1040
+ if err is not None:
1041
+ return None, err
1042
+
1043
+ try:
1044
+ ret, err = await self.do_get(server_url, params=params, headers=headers)
1045
+ if err is not None:
1046
+ return None, err
1047
+
1048
+ return ret["data"], None
1049
+ except Exception as e:
1050
+ print(f"\033[31m[BizyAir]\033[0m Fail to get day cost: {str(e)}")
1051
+ return None, errnos.GET_DAY_COST
1052
+
1053
+ async def get_recent_cost(
1054
+ self, api_key: str = None
1055
+ ) -> tuple[dict | None, ErrorNo | None]:
1056
+ server_url = f"{BIZYAIR_Y_SERVER}/invoices/recent_cost"
1057
+ params = {}
1058
+ if api_key:
1059
+ params["api_key"] = api_key
1060
+
1061
+ headers, err = self.auth_header()
1062
+ if err is not None:
1063
+ return None, err
1064
+
1065
+ try:
1066
+ ret, err = await self.do_get(server_url, params=params, headers=headers)
1067
+ if err is not None:
1068
+ return None, err
1069
+
1070
+ return ret["data"], None
1071
+ except Exception as e:
1072
+ print(f"\033[31m[BizyAir]\033[0m Fail to get recent cost: {str(e)}")
1073
+ return None, errnos.GET_RECENT_COST