python-qdairlines-helper 0.0.6__py3-none-any.whl → 0.2.6__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.
Files changed (26) hide show
  1. {python_qdairlines_helper-0.0.6.dist-info → python_qdairlines_helper-0.2.6.dist-info}/METADATA +2 -1
  2. python_qdairlines_helper-0.2.6.dist-info/RECORD +35 -0
  3. qdairlines_helper/config/url_const.py +2 -1
  4. qdairlines_helper/controller/add_passenger.py +29 -26
  5. qdairlines_helper/controller/book_payment.py +73 -41
  6. qdairlines_helper/controller/book_search.py +105 -52
  7. qdairlines_helper/controller/cash_pax_info.py +11 -8
  8. qdairlines_helper/controller/home.py +4 -3
  9. qdairlines_helper/controller/nhlms_cashdesk.py +32 -18
  10. qdairlines_helper/controller/order_detail.py +43 -34
  11. qdairlines_helper/controller/order_query.py +9 -6
  12. qdairlines_helper/controller/order_verify.py +9 -4
  13. qdairlines_helper/controller/pay_success.py +66 -0
  14. qdairlines_helper/controller/user_login.py +14 -9
  15. qdairlines_helper/po/add_passenger_page.py +3 -2
  16. qdairlines_helper/po/book_search_page.py +46 -28
  17. qdairlines_helper/po/cash_pax_info_page.py +10 -10
  18. qdairlines_helper/po/nhlms_cash_desk_page.py +2 -1
  19. qdairlines_helper/po/order_verify_page.py +0 -2
  20. qdairlines_helper/po/pay_success_page.py +33 -0
  21. qdairlines_helper/utils/exception_utils.py +91 -3
  22. python_qdairlines_helper-0.0.6.dist-info/RECORD +0 -34
  23. qdairlines_helper/utils/log_utils.py +0 -14
  24. {python_qdairlines_helper-0.0.6.dist-info → python_qdairlines_helper-0.2.6.dist-info}/WHEEL +0 -0
  25. {python_qdairlines_helper-0.0.6.dist-info → python_qdairlines_helper-0.2.6.dist-info}/licenses/LICENSE +0 -0
  26. {python_qdairlines_helper-0.0.6.dist-info → python_qdairlines_helper-0.2.6.dist-info}/top_level.txt +0 -0
@@ -12,7 +12,6 @@
12
12
  from typing import Optional
13
13
  from playwright.async_api import Page, Locator
14
14
  from playwright_helper.libs.base_po import BasePo
15
- from qdairlines_helper.utils.log_utils import logger
16
15
  import qdairlines_helper.config.url_const as url_const
17
16
  from playwright.async_api import Error as PlaywrightError, TimeoutError as PlaywrightTimeoutError
18
17
 
@@ -40,7 +39,6 @@ class OrderVerifyPage(BasePo):
40
39
  return await self.get_locator(selector=selector, timeout=timeout)
41
40
  except (PlaywrightError, PlaywrightTimeoutError, EnvironmentError, RuntimeError, Exception) as e:
42
41
  attempt += 1
43
- logger.error(f"订单校验页面,第<{attempt}>次尝试刷新加载订单数据失败,原因:{e}")
44
42
  raise RuntimeError("订单校验页面中的订单信息加载出现异常,可能是网络拥塞或者用户被风控")
45
43
 
46
44
  async def get_agree_checkbox(self, timeout: float = 5.0) -> Locator:
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ # ---------------------------------------------------------------------------------------------------------
4
+ # ProjectName: python-qdairlines-helper
5
+ # FileName: pay_success_page.py
6
+ # Description: 支付成功页面对象
7
+ # Author: ASUS
8
+ # CreateDate: 2026/01/09
9
+ # Copyright ©2011-2026. Hunan xxxxxxx Company limited. All rights reserved.
10
+ # ---------------------------------------------------------------------------------------------------------
11
+ """
12
+ from typing import Optional
13
+ from playwright.async_api import Page, Locator
14
+ from playwright_helper.libs.base_po import BasePo
15
+ import qdairlines_helper.config.url_const as url_const
16
+
17
+
18
+ class PaySuccessPage(BasePo):
19
+ url: str = url_const.pay_success_url
20
+ __page: Page
21
+
22
+ def __init__(self, page: Page, url: Optional[str] = None) -> None:
23
+ super().__init__(page, url or url_const.pay_success_url)
24
+ self.__page = page
25
+
26
+ async def get_pay_success_image(self, timeout: float = 5.0) -> Locator:
27
+ """
28
+ 获取支付成功image图标
29
+ :param timeout: 超时时间(秒)
30
+ :return: (是否存在, 错误信息|元素对象)
31
+ """
32
+ selector: str = '//img[@alt="支付成功"]'
33
+ return await self.get_locator(selector=selector, timeout=timeout)
@@ -9,9 +9,97 @@
9
9
  # Copyright ©2011-2026. Hunan xxxxxxx Company limited. All rights reserved.
10
10
  # ---------------------------------------------------------------------------------------------------------
11
11
  """
12
+ from typing import Literal
12
13
 
13
14
 
14
15
  class DuplicatePaymentError(Exception):
15
- def __init__(self, order_id: int):
16
- self.order_id = order_id
17
- super().__init__(f"订单<{order_id}>重复支付错误")
16
+ def __init__(self, order_no: str):
17
+ self.order_no = order_no
18
+ super().__init__(f"订单<{order_no}>重复支付")
19
+
20
+
21
+ class NotEnoughTicketsError(Exception):
22
+ def __init__(self, flight_no: str, seats_status: int, passengers: int):
23
+ self.flight_no = flight_no
24
+ self.seats_status = seats_status
25
+ self.passengers = passengers
26
+ super().__init__(f"青岛航空官网显示航班<{flight_no}>的余票<{seats_status}>少于乘客人数<{passengers}>")
27
+
28
+
29
+ class ExcessiveProfitdError(Exception):
30
+ def __init__(
31
+ self, flight_no: str, query_price: float, order_price: float, reduction_threshold: float,
32
+ asset: Literal["票面价", "销售价"] = "票面价"
33
+ ):
34
+ self.flight_no = flight_no
35
+ self.query_price = query_price
36
+ self.order_price = order_price
37
+ self.reduction_threshold = reduction_threshold
38
+ self.asset = asset
39
+ super().__init__(
40
+ f"航班<{flight_no}>官网价:{query_price} 低于:订单{asset}[{order_price}] - 下降阈值[{reduction_threshold}],收益过高"
41
+ )
42
+
43
+
44
+ class ExcessiveLossesError(Exception):
45
+ def __init__(
46
+ self, flight_no: str, query_price: float, order_price: float, increase_threshold: float,
47
+ asset: Literal["票面价", "销售价"] = "票面价"
48
+ ):
49
+ self.flight_no = flight_no
50
+ self.query_price = query_price
51
+ self.order_price = order_price
52
+ self.increase_threshold = increase_threshold
53
+ self.asset = asset
54
+ super().__init__(
55
+ f"航班<{flight_no}>官网价:{query_price} 高于:订单{asset}[{order_price}] + 上浮阈值[{increase_threshold}],亏损太多"
56
+ )
57
+
58
+
59
+ class PaymentChannelError(Exception):
60
+ def __init__(self, channel_name: str):
61
+ self.channel_name = channel_name
62
+ super().__init__(f"支付渠道<{channel_name}>暂不支持")
63
+
64
+
65
+ class PaymentChannelMissError(Exception):
66
+ def __init__(self):
67
+ super().__init__(f"支付渠道参数丢失")
68
+
69
+
70
+ class PaymentTypeError(Exception):
71
+ def __init__(self, payment_type: str):
72
+ self.payment_type = payment_type
73
+ super().__init__(f"付款方式<{payment_type}>暂不支持")
74
+
75
+
76
+ class PassengerTypeError(Exception):
77
+ def __init__(self, passenger_type: str):
78
+ self.passenger_type = passenger_type
79
+ super().__init__(f"乘客类型<{passenger_type}>暂不支持")
80
+
81
+
82
+ class ProductTypeError(Exception):
83
+ def __init__(self, product_type: str):
84
+ self.product_type = product_type
85
+ super().__init__(f"产品类型<{product_type}>暂不支持")
86
+
87
+
88
+ class HFPaymentTypeError(Exception):
89
+ def __init__(self, payment_type: str):
90
+ self.payment_type = payment_type
91
+ super().__init__(f"汇付天下的付款方式<{payment_type}>暂不支持")
92
+
93
+
94
+ class PaymentFailedError(Exception):
95
+ def __init__(self, pre_order_no: str, order_status: str):
96
+ self.pre_order_no = pre_order_no
97
+ self.order_status = order_status
98
+ super().__init__(f"青岛航空官网订单<{pre_order_no}>支付失败,支付结束后的状态<{order_status}>")
99
+
100
+
101
+ class IPBlockError(Exception):
102
+
103
+ def __init__(self, message: str):
104
+ self.message = message
105
+ super().__init__(message)
@@ -1,34 +0,0 @@
1
- python_qdairlines_helper-0.0.6.dist-info/licenses/LICENSE,sha256=WtjCEwlcVzkh1ziO35P2qfVEkLjr87Flro7xlHz3CEY,11556
2
- qdairlines_helper/__init__.py,sha256=bN1FqEK_jvefO_HU_8HFJpjuOzHTsuhmRe5KAzmraR4,479
3
- qdairlines_helper/config/__init__.py,sha256=JjIRocePx3gwFNpdauuiwBU6B2Ug565xaHLEMu5Oo0I,479
4
- qdairlines_helper/config/url_const.py,sha256=nN-n7s4lYuUHUVcTN09CVIdg57ObPQUsR6Wx_O85R_A,2064
5
- qdairlines_helper/controller/__init__.py,sha256=oyeciEBlDLNpqHblB0R-nXQG3HsI8L5mmlWulQ7Y38Q,482
6
- qdairlines_helper/controller/add_passenger.py,sha256=aAwYu2g3xfDudsA0k1XPIYTp7nS9aRAqiJyFmjG4c_U,4838
7
- qdairlines_helper/controller/book_payment.py,sha256=SQdO_aCdYx6Ymtt4qKdR9cRVd_ExJ4dfsKLpZbamvIA,4820
8
- qdairlines_helper/controller/book_search.py,sha256=hnOUaFyyIkVuOxK46PLg38dBYBx67G8prRphL8J4Iy0,6043
9
- qdairlines_helper/controller/cash_pax_info.py,sha256=1UvN27Iw5Jho-MUhdhdIsqlBqBpZFXYGk3VcbvEq5Xg,2422
10
- qdairlines_helper/controller/home.py,sha256=YsVY8IO9TAv2DKbDya18HeT8j4EbaOBVrFg-cOfXziE,1342
11
- qdairlines_helper/controller/nhlms_cashdesk.py,sha256=9hu-goJa1aeQItNZM9irE-9Lg50c6L8eKN9teUxm54A,3686
12
- qdairlines_helper/controller/order_detail.py,sha256=dGsFo2hB7T8cFVtMDX7CxDtPokCAwL8EhkffnZ23k_o,2775
13
- qdairlines_helper/controller/order_query.py,sha256=qXZd-o6XpAOf19BrOxl02Xd-lHsaRRyW3RzmzQDqk6I,1794
14
- qdairlines_helper/controller/order_verify.py,sha256=pNKt2pypAJ-ZZoJryyLPtTh7_8WeAmHz-EJR3pDsv0c,2181
15
- qdairlines_helper/controller/user_login.py,sha256=JtcRkIz7-4ZD5Bo2POmHxoVaSRMGQzNjoOAdU684LXE,4576
16
- qdairlines_helper/http/__init__.py,sha256=96AJPf2zgw_rm3Wv-boIBltWFgZH3Yo-fn5M9SRK280,489
17
- qdairlines_helper/http/flight_order.py,sha256=tC25YNk1pDzMmk4Zy6v120PwNuuaDhlHFh5xPBxtKco,3665
18
- qdairlines_helper/po/__init__.py,sha256=HoouLJGLu_dI6IAKTVjBRraGHMcAUgntayTph-BUBAE,481
19
- qdairlines_helper/po/add_passenger_page.py,sha256=kylElFfCYDgzHYS4Pwh7jnK0cUZPAYxffNkJqb5ak9M,7956
20
- qdairlines_helper/po/air_order_page.py,sha256=0Ux0B2hUGKCoFLRpJqGHS2w690o0A2PDnvRf9-UKfJE,930
21
- qdairlines_helper/po/book_search_page.py,sha256=XBMu9_1F1eCIvrgAACsAOUVmi4MC16gYkY9qD62iux4,9881
22
- qdairlines_helper/po/cash_pax_info_page.py,sha256=PwVFosIcoGVerx-2DFlC0ZvY7XuXL6bFjOwZ3fOFjd4,3473
23
- qdairlines_helper/po/home_page.py,sha256=KvoOZOYwKjlJjZOT522K_8ic3_2zaYOPWkuklUHVSlM,907
24
- qdairlines_helper/po/login_page.py,sha256=SdWmkP_47GeosbFRcfvXLeQxxdM7b9UESvmajWq4-nA,2975
25
- qdairlines_helper/po/nhlms_cash_desk_page.py,sha256=nh7X7Jzygm_JhY0gECZtTKdZ4j5ey8gv5RIr6jtjdWQ,4510
26
- qdairlines_helper/po/order_verify_page.py,sha256=rdXn34SM6GGt-if7KLx9x6fYG-iPFOJINIklhqIi9hk,3095
27
- qdairlines_helper/utils/__init__.py,sha256=sti2S709puM2mQbQisk0KGq_YNjW6T4zz2vyYXonNB0,479
28
- qdairlines_helper/utils/exception_utils.py,sha256=LutPeb-RZ58qYTfwwvaF0GtVAE-cpDtCoQZWSyGilhQ,681
29
- qdairlines_helper/utils/log_utils.py,sha256=QLu4fcwaO__4c_ZA6zwy-7LnygX9Ds2PSrr9nEWcrvA,542
30
- qdairlines_helper/utils/po_utils.py,sha256=74ZVyyxPmPk1tcGQoMauXhBE3qsZJej8urni1ch27io,2417
31
- python_qdairlines_helper-0.0.6.dist-info/METADATA,sha256=LRkNzxGCpIbwkk3GLX1oSxbrQA9AB-ANtmDnyMlpbf0,14387
32
- python_qdairlines_helper-0.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
33
- python_qdairlines_helper-0.0.6.dist-info/top_level.txt,sha256=MRbQkBMdSG4f5mx2RWfu6aXoDSyM-2KwL-YFqNBdbng,18
34
- python_qdairlines_helper-0.0.6.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- # ---------------------------------------------------------------------------------------------------------
4
- # ProjectName: python-qdairlines-helper
5
- # FileName: log_utils.py
6
- # Description: 日志模块
7
- # Author: ASUS
8
- # CreateDate: 2026/01/04
9
- # Copyright ©2011-2026. Hunan xxxxxxx Company limited. All rights reserved.
10
- # ---------------------------------------------------------------------------------------------------------
11
- """
12
- from logging import getLogger
13
-
14
- logger = getLogger("root")