fiuai-sdk-python 0.16.0__tar.gz → 0.16.2__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.
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/CHANGELOG.md +6 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/PKG-INFO +1 -1
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/pyproject.toml +1 -2
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/__init__.py +1 -1
- fiuai_sdk_python-0.16.2/src/fiuai_sdk_python/bank.py +175 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/client.py +20 -3
- fiuai_sdk_python-0.16.0/src/fiuai_sdk_python/bank.py +0 -175
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/.gitignore +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/LICENSE +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/README.md +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/_resp_helpers.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/auth/__init__.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/auth/context_mgr.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/auth/header.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/auth/helper.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/auth/type.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/company.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/config.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/const.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/context.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/datatype.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/doctype.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/error.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/error_code.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/error_parsers.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/examples/fastapi_integration.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/http/__init__.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/http/client.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/item.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/perm.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/__init__.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/cache_client.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/circuit_breaker.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/decorator.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/redis_manager.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/types.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/scheduler/__init__.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/scheduler/runner.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/profile.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/resp.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/setup.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/type.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/util.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/utils/__init__.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/utils/ids.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/utils/logger.py +0 -0
- {fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/utils/text.py +0 -0
|
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.16.1] - 2026-07-18
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- Bank Account 已存在但未关联标准 Bank/Branch 时仍返回 `exists=True`,关联字段作为可选 enrichment。
|
|
12
|
+
- 修正 `CompanyBankAccountSearchResult.bank_id` 错误返回银行账号 ID。
|
|
13
|
+
|
|
8
14
|
## [0.16.0] - 2026-07-15
|
|
9
15
|
|
|
10
16
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fiuai_sdk_python
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.2
|
|
4
4
|
Summary: FiuAI Python SDK - 企业级AI服务集成开发工具包
|
|
5
5
|
Project-URL: Homepage, https://github.com/fiuai/fiuai-sdk-python
|
|
6
6
|
Project-URL: Documentation, https://github.com/fiuai/fiuai-sdk-python#readme
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fiuai_sdk_python"
|
|
3
|
-
version = "0.16.
|
|
3
|
+
version = "0.16.2"
|
|
4
4
|
description = "FiuAI Python SDK - 企业级AI服务集成开发工具包"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -74,4 +74,3 @@ dev-dependencies = [
|
|
|
74
74
|
"mypy>=1.0.0",
|
|
75
75
|
"pre-commit>=3.0.0",
|
|
76
76
|
]
|
|
77
|
-
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# -- coding: utf-8 --
|
|
2
|
+
# Project: fiuaiclient
|
|
3
|
+
# Created Date: 2025 06 Fr
|
|
4
|
+
# Author: liming
|
|
5
|
+
# Email: lmlala@aliyun.com
|
|
6
|
+
# Copyright (c) 2025 FiuAI
|
|
7
|
+
import logging
|
|
8
|
+
from typing import Optional
|
|
9
|
+
|
|
10
|
+
from pydantic import BaseModel, Field
|
|
11
|
+
|
|
12
|
+
from .client import FiuaiSDK
|
|
13
|
+
from .type import BankAccount
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class CompanyBankAccountSearchResult(BaseModel):
|
|
19
|
+
bank_account_id: str = Field(description="银行账号id", default="")
|
|
20
|
+
bank_account_no: str = Field(description="银行账号", default="")
|
|
21
|
+
bank_account_name: str = Field(description="银行账号", default="")
|
|
22
|
+
bank_id: str = Field(description="银行id", default="")
|
|
23
|
+
bank_name: str = Field(description="银行名称", default="")
|
|
24
|
+
opening_bank_branch_id: str = Field(description="开户行id", default="")
|
|
25
|
+
opening_bank_branch_name: str = Field(description="开户行名称", default="")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
exists: bool = Field(description="是否存在", default=False)
|
|
29
|
+
|
|
30
|
+
comment: str = Field(description="备注", default="")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_bank_account(
|
|
34
|
+
client: FiuaiSDK,
|
|
35
|
+
bank_account_no: str,
|
|
36
|
+
) -> Optional[CompanyBankAccountSearchResult]:
|
|
37
|
+
"""
|
|
38
|
+
根据银行账号获取银行账号信息
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
bank_account_no: 银行账号
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
CompanyBankAccountSearchResult: 银行账号信息
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
if not bank_account_no:
|
|
48
|
+
logger.error("bank_account_no is empty, return None")
|
|
49
|
+
return None
|
|
50
|
+
|
|
51
|
+
bank_account_response = client.internal_get(
|
|
52
|
+
doctype="Bank Account",
|
|
53
|
+
name=bank_account_no,
|
|
54
|
+
fields=[
|
|
55
|
+
"name",
|
|
56
|
+
"bank_account_no",
|
|
57
|
+
"account_name",
|
|
58
|
+
"bank",
|
|
59
|
+
"opening_bank_branch",
|
|
60
|
+
],
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
if not bank_account_response.is_success():
|
|
64
|
+
return CompanyBankAccountSearchResult(exists=False)
|
|
65
|
+
|
|
66
|
+
bank_account = bank_account_response.data
|
|
67
|
+
if not bank_account:
|
|
68
|
+
return CompanyBankAccountSearchResult(exists=False)
|
|
69
|
+
|
|
70
|
+
bank_id = str(bank_account.get("bank") or "")
|
|
71
|
+
bank_name = ""
|
|
72
|
+
if bank_id:
|
|
73
|
+
bank_response = client.internal_get(
|
|
74
|
+
doctype="Bank",
|
|
75
|
+
name=bank_id,
|
|
76
|
+
fields=["name", "bank_name"],
|
|
77
|
+
)
|
|
78
|
+
if bank_response.is_success() and bank_response.data:
|
|
79
|
+
bank_name = str(bank_response.data.get("bank_name") or "")
|
|
80
|
+
else:
|
|
81
|
+
logger.warning("bank enrichment failed for id %s", bank_id)
|
|
82
|
+
|
|
83
|
+
opening_value = str(bank_account.get("opening_bank_branch") or "")
|
|
84
|
+
opening_bank_branch_id = ""
|
|
85
|
+
opening_bank_branch_name = opening_value
|
|
86
|
+
if bank_id and opening_value:
|
|
87
|
+
branch_response = client.internal_get(
|
|
88
|
+
doctype="Bank Branch",
|
|
89
|
+
name=opening_value,
|
|
90
|
+
fields=["name", "bank_branch_name"],
|
|
91
|
+
)
|
|
92
|
+
if branch_response.is_success() and branch_response.data:
|
|
93
|
+
opening_bank_branch_id = str(branch_response.data.get("name") or "")
|
|
94
|
+
opening_bank_branch_name = str(
|
|
95
|
+
branch_response.data.get("bank_branch_name") or ""
|
|
96
|
+
)
|
|
97
|
+
else:
|
|
98
|
+
logger.warning("bank branch enrichment failed for id %s", opening_value)
|
|
99
|
+
|
|
100
|
+
return CompanyBankAccountSearchResult(
|
|
101
|
+
exists=True,
|
|
102
|
+
bank_account_id=str(bank_account.get("name") or ""),
|
|
103
|
+
bank_account_no=str(bank_account.get("bank_account_no") or ""),
|
|
104
|
+
bank_account_name=str(bank_account.get("account_name") or ""),
|
|
105
|
+
bank_id=bank_id,
|
|
106
|
+
bank_name=bank_name,
|
|
107
|
+
opening_bank_branch_id=opening_bank_branch_id,
|
|
108
|
+
opening_bank_branch_name=opening_bank_branch_name,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def get_bank_account_by_account_no(
|
|
113
|
+
client: FiuaiSDK,
|
|
114
|
+
account_no: str,
|
|
115
|
+
) -> BankAccount | None:
|
|
116
|
+
"""
|
|
117
|
+
根据银行账号id获取银行账号信息
|
|
118
|
+
"""
|
|
119
|
+
response = client.internal_get_list(
|
|
120
|
+
doctype="Bank Account",
|
|
121
|
+
filters=[["bank_account_no", "=", account_no]],
|
|
122
|
+
fields=[
|
|
123
|
+
"name",
|
|
124
|
+
"account_name",
|
|
125
|
+
"bank",
|
|
126
|
+
"bank_account_no",
|
|
127
|
+
"opening_bank_branch",
|
|
128
|
+
],
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
if not response.is_success():
|
|
132
|
+
logger.warning("bank account is not found by account no %s", account_no)
|
|
133
|
+
return None
|
|
134
|
+
|
|
135
|
+
rows = response.data
|
|
136
|
+
if not rows:
|
|
137
|
+
logger.warning("bank account is not found by account no %s", account_no)
|
|
138
|
+
return None
|
|
139
|
+
|
|
140
|
+
bank_account = rows[0]
|
|
141
|
+
bank_id = str(bank_account.get("bank") or "")
|
|
142
|
+
bank_name = ""
|
|
143
|
+
if bank_id:
|
|
144
|
+
bank_response = client.internal_get(
|
|
145
|
+
doctype="Bank",
|
|
146
|
+
name=bank_id,
|
|
147
|
+
fields=["name", "bank_name"],
|
|
148
|
+
)
|
|
149
|
+
if bank_response.is_success() and bank_response.data:
|
|
150
|
+
bank_name = str(bank_response.data.get("bank_name") or "")
|
|
151
|
+
else:
|
|
152
|
+
logger.warning("bank enrichment failed for id %s", bank_id)
|
|
153
|
+
|
|
154
|
+
opening_value = str(bank_account.get("opening_bank_branch") or "")
|
|
155
|
+
opening_bank_branch_name = opening_value
|
|
156
|
+
if bank_id and opening_value:
|
|
157
|
+
branch_response = client.internal_get(
|
|
158
|
+
doctype="Bank Branch",
|
|
159
|
+
name=opening_value,
|
|
160
|
+
fields=["name", "bank_branch_name"],
|
|
161
|
+
)
|
|
162
|
+
if branch_response.is_success() and branch_response.data:
|
|
163
|
+
opening_bank_branch_name = str(
|
|
164
|
+
branch_response.data.get("bank_branch_name") or ""
|
|
165
|
+
)
|
|
166
|
+
else:
|
|
167
|
+
logger.warning("bank branch enrichment failed for id %s", opening_value)
|
|
168
|
+
|
|
169
|
+
return BankAccount(
|
|
170
|
+
name=str(bank_account.get("name") or ""),
|
|
171
|
+
account_name=str(bank_account.get("account_name") or ""),
|
|
172
|
+
bank=bank_name,
|
|
173
|
+
bank_account_no=account_no,
|
|
174
|
+
bank_branch=opening_bank_branch_name,
|
|
175
|
+
)
|
|
@@ -299,13 +299,30 @@ class FiuaiSDK(object):
|
|
|
299
299
|
|
|
300
300
|
|
|
301
301
|
|
|
302
|
-
def internal_post_req(
|
|
302
|
+
def internal_post_req(
|
|
303
|
+
self,
|
|
304
|
+
uri: str,
|
|
305
|
+
postdata: Optional[Dict[str, Any]] = None,
|
|
306
|
+
extra_headers: Optional[Dict[str, Any]] = None,
|
|
307
|
+
*,
|
|
308
|
+
timeout: float | httpx.Timeout | None = None,
|
|
309
|
+
) -> ApiResponse:
|
|
310
|
+
"""调用 internal POST 接口,并允许慢写操作覆盖本次请求超时。
|
|
311
|
+
|
|
312
|
+
``timeout`` 未提供时沿用客户端全局配置;该方法不自动重试 POST 请求。
|
|
313
|
+
网络超时仍按 SDK 契约返回状态为 504 的结构化 ``ApiResponse``。
|
|
314
|
+
"""
|
|
303
315
|
headers = self._get_merged_headers(extra_headers)
|
|
316
|
+
request_kwargs: Dict[str, Any] = {
|
|
317
|
+
"data": postdata or {},
|
|
318
|
+
"headers": headers,
|
|
319
|
+
}
|
|
320
|
+
if timeout is not None:
|
|
321
|
+
request_kwargs["timeout"] = timeout
|
|
304
322
|
return self._safe_request(
|
|
305
323
|
"POST",
|
|
306
324
|
self.url + '/api/v2/internal/' + uri.lstrip('/'),
|
|
307
|
-
|
|
308
|
-
headers=headers,
|
|
325
|
+
**request_kwargs,
|
|
309
326
|
)
|
|
310
327
|
|
|
311
328
|
def internal_get_req(self, uri, params={}, extra_headers: Optional[Dict[str, Any]] = None) -> ApiResponse:
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
# -- coding: utf-8 --
|
|
2
|
-
# Project: fiuaiclient
|
|
3
|
-
# Created Date: 2025 06 Fr
|
|
4
|
-
# Author: liming
|
|
5
|
-
# Email: lmlala@aliyun.com
|
|
6
|
-
# Copyright (c) 2025 FiuAI
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
from pydantic import BaseModel, Field
|
|
11
|
-
import logging
|
|
12
|
-
from .type import BankAccount
|
|
13
|
-
from .client import FiuaiSDK
|
|
14
|
-
from typing import Literal, Optional
|
|
15
|
-
|
|
16
|
-
logger = logging.getLogger(__name__)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class CompanyBankAccountSearchResult(BaseModel):
|
|
20
|
-
bank_account_id: str = Field(description="银行账号id", default="")
|
|
21
|
-
bank_account_no: str = Field(description="银行账号", default="")
|
|
22
|
-
bank_account_name: str = Field(description="银行账号", default="")
|
|
23
|
-
bank_id: str = Field(description="银行id", default="")
|
|
24
|
-
bank_name: str = Field(description="银行名称", default="")
|
|
25
|
-
opening_bank_branch_id: str = Field(description="开户行id", default="")
|
|
26
|
-
opening_bank_branch_name: str = Field(description="开户行名称", default="")
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
exists: bool = Field(description="是否存在", default=False)
|
|
30
|
-
|
|
31
|
-
comment: str = Field(description="备注", default="")
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def get_bank_account(client: FiuaiSDK, bank_account_no: str) -> Optional[CompanyBankAccountSearchResult]:
|
|
35
|
-
"""
|
|
36
|
-
根据银行账号获取银行账号信息
|
|
37
|
-
|
|
38
|
-
Args:
|
|
39
|
-
back_account: 银行账号
|
|
40
|
-
|
|
41
|
-
Returns:
|
|
42
|
-
CompanyBankAccountSearchResult: 银行账号信息
|
|
43
|
-
"""
|
|
44
|
-
|
|
45
|
-
if not bank_account_no:
|
|
46
|
-
logger.error(f"bank_account_no is empty, return None")
|
|
47
|
-
return None
|
|
48
|
-
|
|
49
|
-
_bank_account_response = client.internal_get(
|
|
50
|
-
doctype="Bank Account",
|
|
51
|
-
name=bank_account_no,
|
|
52
|
-
fields=["name","bank_account_no", "account_name", "bank", "opening_bank_branch"]
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if not _bank_account_response.is_success():
|
|
57
|
-
return CompanyBankAccountSearchResult(exists=False)
|
|
58
|
-
|
|
59
|
-
_bank_account = _bank_account_response.data
|
|
60
|
-
if not _bank_account:
|
|
61
|
-
return CompanyBankAccountSearchResult(exists=False)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
# 获取银行信息
|
|
65
|
-
_bank_detail_response = client.internal_get(
|
|
66
|
-
doctype="Bank",
|
|
67
|
-
name=_bank_account["bank"],
|
|
68
|
-
fields=["name", "bank_name"]
|
|
69
|
-
)
|
|
70
|
-
if not _bank_detail_response.is_success():
|
|
71
|
-
return CompanyBankAccountSearchResult(exists=False)
|
|
72
|
-
|
|
73
|
-
_bank_detail = _bank_detail_response.data
|
|
74
|
-
if not _bank_detail:
|
|
75
|
-
logger.error(f"bank is not found by id {_bank_account["bank"]}")
|
|
76
|
-
return CompanyBankAccountSearchResult(exists=False)
|
|
77
|
-
|
|
78
|
-
# 获取支行信息
|
|
79
|
-
_bank_branch_response = client.internal_get(
|
|
80
|
-
doctype="Bank Branch",
|
|
81
|
-
name=_bank_account["opening_bank_branch"],
|
|
82
|
-
fields=["name", "bank_branch_name"]
|
|
83
|
-
)
|
|
84
|
-
if not _bank_branch_response.is_success():
|
|
85
|
-
return CompanyBankAccountSearchResult(exists=False)
|
|
86
|
-
|
|
87
|
-
_bank_branch = _bank_branch_response.data
|
|
88
|
-
if not _bank_branch:
|
|
89
|
-
logger.error(f"bank branch is not found by id {_bank_account["opening_bank_branch"]}")
|
|
90
|
-
return CompanyBankAccountSearchResult(exists=False)
|
|
91
|
-
|
|
92
|
-
return CompanyBankAccountSearchResult(
|
|
93
|
-
exists=True,
|
|
94
|
-
bank_account_id=_bank_account["name"],
|
|
95
|
-
bank_account_no=_bank_account["bank_account_no"],
|
|
96
|
-
bank_account_name=_bank_account["account_name"],
|
|
97
|
-
bank_id=_bank_account["name"],
|
|
98
|
-
bank_name=_bank_detail["bank_name"],
|
|
99
|
-
opening_bank_branch_id=_bank_branch["name"],
|
|
100
|
-
opening_bank_branch_name=_bank_branch["bank_branch_name"]
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
def get_bank_account_by_account_no(client: FiuaiSDK, account_no: str) -> BankAccount|None:
|
|
105
|
-
"""
|
|
106
|
-
根据银行账号id获取银行账号信息
|
|
107
|
-
"""
|
|
108
|
-
resp_response = client.internal_get_list(
|
|
109
|
-
doctype="Bank Account",
|
|
110
|
-
filters=[["bank_account_no", "=", account_no]],
|
|
111
|
-
fields=[
|
|
112
|
-
"name",
|
|
113
|
-
"account_name",
|
|
114
|
-
"bank",
|
|
115
|
-
"bank_account_no",
|
|
116
|
-
"opening_bank_branch",
|
|
117
|
-
],
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
if not resp_response.is_success():
|
|
121
|
-
logger.warning(f"bank account is not found by account no {account_no}")
|
|
122
|
-
return None
|
|
123
|
-
|
|
124
|
-
resp = resp_response.data
|
|
125
|
-
if not resp:
|
|
126
|
-
logger.warning(f"bank account is not found by account no {account_no}")
|
|
127
|
-
return None
|
|
128
|
-
|
|
129
|
-
resp = resp[0]
|
|
130
|
-
|
|
131
|
-
# 获取支行信息
|
|
132
|
-
if resp["opening_bank_branch"] != "":
|
|
133
|
-
_bank_branch_response = client.internal_get_list(
|
|
134
|
-
doctype="Bank Branch",
|
|
135
|
-
filters=[["bank_branch_name", "=", resp["opening_bank_branch"]]],
|
|
136
|
-
fields=["parent_bank", "bank_branch_name"]
|
|
137
|
-
)
|
|
138
|
-
if not _bank_branch_response.is_success():
|
|
139
|
-
logger.warning(f"bank branch is not found by id {resp["opening_bank_branch"]}")
|
|
140
|
-
return None
|
|
141
|
-
|
|
142
|
-
if not _bank_branch_response.data:
|
|
143
|
-
logger.warning(f"bank branch is not found by id {resp["opening_bank_branch"]}")
|
|
144
|
-
return None
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
_parent_bank_id = _bank_branch_response.data[0]["parent_bank"]
|
|
148
|
-
if not _parent_bank_id:
|
|
149
|
-
logger.warning(f"parent bank is not found by id {resp["opening_bank_branch"]}")
|
|
150
|
-
return None
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
# 获取银行信息
|
|
154
|
-
_bank_detail_response = client.internal_get(
|
|
155
|
-
doctype="Bank",
|
|
156
|
-
name=_parent_bank_id,
|
|
157
|
-
fields=["name", "bank_name"]
|
|
158
|
-
)
|
|
159
|
-
|
|
160
|
-
if not _bank_detail_response.is_success():
|
|
161
|
-
logger.warning(f"bank is not found by id {_parent_bank_id}")
|
|
162
|
-
return None
|
|
163
|
-
|
|
164
|
-
_bank_detail = _bank_detail_response.data
|
|
165
|
-
if not _bank_detail:
|
|
166
|
-
logger.warning(f"bank is not found by id {_parent_bank_id}")
|
|
167
|
-
return None
|
|
168
|
-
|
|
169
|
-
return BankAccount(
|
|
170
|
-
name=resp["name"],
|
|
171
|
-
account_name=resp["account_name"],
|
|
172
|
-
bank=_bank_detail["bank_name"],
|
|
173
|
-
bank_account_no=account_no,
|
|
174
|
-
bank_branch=resp["opening_bank_branch"],
|
|
175
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/auth/context_mgr.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/__init__.py
RENAMED
|
File without changes
|
{fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/cache_client.py
RENAMED
|
File without changes
|
|
File without changes
|
{fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/decorator.py
RENAMED
|
File without changes
|
{fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/cache/redis_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/scheduler/__init__.py
RENAMED
|
File without changes
|
{fiuai_sdk_python-0.16.0 → fiuai_sdk_python-0.16.2}/src/fiuai_sdk_python/pkg/scheduler/runner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|