codosdk 1.0.17__tar.gz → 1.0.19__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.
- {codosdk-1.0.17 → codosdk-1.0.19}/PKG-INFO +1 -1
- {codosdk-1.0.17 → codosdk-1.0.19}/codosdk.egg-info/PKG-INFO +1 -1
- {codosdk-1.0.17 → codosdk-1.0.19}/setup.py +1 -1
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/crud_utils.py +29 -2
- {codosdk-1.0.17 → codosdk-1.0.19}/LICENSE +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/README.md +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/codosdk.egg-info/SOURCES.txt +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/codosdk.egg-info/dependency_links.txt +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/codosdk.egg-info/requires.txt +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/codosdk.egg-info/top_level.txt +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/opssdk/__init__.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/opssdk/utils/__init__.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/pyproject.toml +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/setup.cfg +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/__init__.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/api_set.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/apis/__init__.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/apis/admin_apis.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/apis/agent_apis.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/apis/cmdb_apis.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/apis/kerrigan_apis.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/apis/mgv4_apis.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/apis/task_apis.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/application.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/base_handler.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/cache.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/cache_context.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/client.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/cloud/__init__.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/cloud/qcloud_api.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/cloud/ucloud_api.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/cloud_utils.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/configs.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/consts.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/db_context.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/error.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/fetch_coroutine.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/jwt_token.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/ldap.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/logger.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/model_utils.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/mqhelper.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/program.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/salt_api.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/sqlalchemy_pagination.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/tools.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/utils/__init__.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/utils/cc_crypto.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/utils/date_format.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/utils/pydantic_utils.py +0 -0
- {codosdk-1.0.17 → codosdk-1.0.19}/websdk2/web_logs.py +0 -0
|
@@ -9,7 +9,7 @@ desc : CODO SDK
|
|
|
9
9
|
import sys
|
|
10
10
|
from setuptools import setup, find_packages
|
|
11
11
|
|
|
12
|
-
VERSION = '1.0.
|
|
12
|
+
VERSION = '1.0.19'
|
|
13
13
|
|
|
14
14
|
if sys.version_info < (2, 7) or (3, 0) <= sys.version_info < (3, 6):
|
|
15
15
|
print('This program requires at least Python 2.7 or 3.6 to run.')
|
|
@@ -5,11 +5,12 @@ Author : shenshuo
|
|
|
5
5
|
Date : 2025年02月08日
|
|
6
6
|
Desc : 存储类
|
|
7
7
|
"""
|
|
8
|
-
|
|
8
|
+
import json
|
|
9
9
|
import time
|
|
10
10
|
import logging
|
|
11
11
|
from sqlalchemy import true
|
|
12
12
|
from sqlalchemy.exc import IntegrityError
|
|
13
|
+
from typing import List, Union, Optional
|
|
13
14
|
from .db_context import DBContextV2 as DBContext
|
|
14
15
|
from .utils.pydantic_utils import sqlalchemy_to_pydantic, ValidationError, PydanticDelList
|
|
15
16
|
from .sqlalchemy_pagination import paginate
|
|
@@ -32,6 +33,28 @@ class ModelCRUDView:
|
|
|
32
33
|
def prepare(self):
|
|
33
34
|
pass
|
|
34
35
|
|
|
36
|
+
@staticmethod
|
|
37
|
+
def parse_id_list(id_list: Union[str, List[int]]) -> Optional[List[int]]:
|
|
38
|
+
"""
|
|
39
|
+
解析和验证 id_list 参数。
|
|
40
|
+
"""
|
|
41
|
+
if isinstance(id_list, str):
|
|
42
|
+
try:
|
|
43
|
+
id_list = json.loads(id_list)
|
|
44
|
+
except json.JSONDecodeError as e:
|
|
45
|
+
logging.error(f"Failed to parse id_list: {e}, input: {id_list}")
|
|
46
|
+
return None
|
|
47
|
+
if isinstance(id_list, list):
|
|
48
|
+
try:
|
|
49
|
+
# 尝试将所有元素转换为整数
|
|
50
|
+
id_list = [int(i) for i in id_list]
|
|
51
|
+
return id_list
|
|
52
|
+
except Exception as e:
|
|
53
|
+
logging.error(f"Invalid id_list element: {e}, input: {id_list}")
|
|
54
|
+
return None
|
|
55
|
+
logging.error(f"Invalid id_list format: {id_list}")
|
|
56
|
+
return None
|
|
57
|
+
|
|
35
58
|
@staticmethod
|
|
36
59
|
def del_data(data) -> dict:
|
|
37
60
|
for key in ['_index', '_rowKey', 'update_time']:
|
|
@@ -63,6 +86,7 @@ class ModelCRUDView:
|
|
|
63
86
|
self.prepare()
|
|
64
87
|
|
|
65
88
|
value = params.get('searchValue', params.get('searchVal'))
|
|
89
|
+
id_list = params.get('id_list', [])
|
|
66
90
|
filter_map = params.pop('filter_map', {})
|
|
67
91
|
params.setdefault('page_size', 300) # 统一处理默认值
|
|
68
92
|
|
|
@@ -89,6 +113,10 @@ class ModelCRUDView:
|
|
|
89
113
|
try:
|
|
90
114
|
with DBContext('r') as session:
|
|
91
115
|
query = session.query(self.model).filter(filter_condition).filter_by(**filter_map)
|
|
116
|
+
id_list = self.parse_id_list(id_list)
|
|
117
|
+
if id_list:
|
|
118
|
+
query = query.filter(self.model.id.in_(id_list))
|
|
119
|
+
|
|
92
120
|
page = paginate(query, **params)
|
|
93
121
|
except Exception as e:
|
|
94
122
|
return dict(code=2, msg='查询失败', data=None, reason=str(e), timestamp=get_millisecond_timestamp())
|
|
@@ -100,7 +128,6 @@ class ModelCRUDView:
|
|
|
100
128
|
timestamp=get_millisecond_timestamp(),
|
|
101
129
|
data={
|
|
102
130
|
'items': page.items,
|
|
103
|
-
'current_page': page.page, # 当前页
|
|
104
131
|
'total_pages': page.pages, # 总页数
|
|
105
132
|
'count': page.total # 总数
|
|
106
133
|
}
|
|
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
|
|
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
|
|
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
|