codosdk 1.0.6__tar.gz → 1.0.8__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.6 → codosdk-1.0.8}/PKG-INFO +1 -1
- {codosdk-1.0.6 → codosdk-1.0.8}/codosdk.egg-info/PKG-INFO +1 -1
- {codosdk-1.0.6 → codosdk-1.0.8}/setup.py +2 -2
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/apis/mgv4_apis.py +19 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/base_handler.py +3 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/client.py +50 -18
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/model_utils.py +2 -4
- {codosdk-1.0.6 → codosdk-1.0.8}/LICENSE +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/README.md +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/codosdk.egg-info/SOURCES.txt +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/codosdk.egg-info/dependency_links.txt +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/codosdk.egg-info/requires.txt +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/codosdk.egg-info/top_level.txt +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/opssdk/__init__.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/opssdk/utils/__init__.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/pyproject.toml +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/setup.cfg +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/__init__.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/api_set.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/apis/__init__.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/apis/admin_apis.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/apis/agent_apis.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/apis/cmdb_apis.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/apis/kerrigan_apis.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/apis/task_apis.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/application.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/cache.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/cache_context.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/cloud/__init__.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/cloud/qcloud_api.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/cloud/ucloud_api.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/cloud_utils.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/configs.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/consts.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/db_context.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/error.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/fetch_coroutine.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/jwt_token.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/ldap.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/logger.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/mqhelper.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/program.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/salt_api.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/sqlalchemy_pagination.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/tools.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/utils/__init__.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/utils/cc_crypto.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/utils/date_format.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/utils/pydantic_utils.py +0 -0
- {codosdk-1.0.6 → codosdk-1.0.8}/websdk2/web_logs.py +0 -0
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
# -*-coding:utf-8-*-
|
|
3
3
|
""""
|
|
4
4
|
author : shenshuo
|
|
5
|
-
date :
|
|
5
|
+
date : 2024年12月12日
|
|
6
6
|
desc : CODO SDK
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import sys
|
|
10
10
|
from distutils.core import setup
|
|
11
11
|
|
|
12
|
-
VERSION = '1.0.
|
|
12
|
+
VERSION = '1.0.8'
|
|
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.')
|
|
@@ -93,3 +93,22 @@ class AdminV4APIS:
|
|
|
93
93
|
field_help={
|
|
94
94
|
},
|
|
95
95
|
description='获取所有角色和角色内内用户信息')
|
|
96
|
+
|
|
97
|
+
get_favorites_v4 = dict(method='GET',
|
|
98
|
+
url=f'{route_prefix}/v4/favorites/',
|
|
99
|
+
params={
|
|
100
|
+
},
|
|
101
|
+
field_help={
|
|
102
|
+
},
|
|
103
|
+
description='PAAS-基础功能-公用收藏接口-查看')
|
|
104
|
+
|
|
105
|
+
opt_favorites_v4 = dict(method='POST',
|
|
106
|
+
url=f'{route_prefix}/v4/favorites/',
|
|
107
|
+
body={
|
|
108
|
+
"key": "",
|
|
109
|
+
"app_code": "overall",
|
|
110
|
+
"value": {}
|
|
111
|
+
},
|
|
112
|
+
field_help={
|
|
113
|
+
},
|
|
114
|
+
description='PAAS-基础功能-公用收藏接口-添加修改')
|
|
@@ -56,6 +56,9 @@ class BaseHandler(RequestHandler):
|
|
|
56
56
|
if self.request.method in ("POST", "PUT", "PATCH", "DELETE"):
|
|
57
57
|
try:
|
|
58
58
|
self.req_data = json.loads(self.request.body.decode("utf-8"))
|
|
59
|
+
for key in ['_index', '_rowKey', 'update_time']:
|
|
60
|
+
self.req_data.pop(key, None)
|
|
61
|
+
return self.req_data
|
|
59
62
|
except json.JSONDecodeError as err:
|
|
60
63
|
logging.error(f"Error parsing JSON data in request {self.request.method} at {self.request.path}: {err}")
|
|
61
64
|
except Exception as err:
|
|
@@ -10,6 +10,7 @@ Desc : 处理API请求
|
|
|
10
10
|
import json
|
|
11
11
|
import requests
|
|
12
12
|
from urllib.parse import urlencode
|
|
13
|
+
from typing import Union, Optional
|
|
13
14
|
import logging
|
|
14
15
|
from .consts import const
|
|
15
16
|
from .configs import configs
|
|
@@ -98,32 +99,63 @@ class AcsClient:
|
|
|
98
99
|
# timeout=self.request_timeout) as response:
|
|
99
100
|
# return await response.read()
|
|
100
101
|
|
|
101
|
-
def with_params_data_url(self, **kwargs):
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
# def with_params_data_url(self, **kwargs):
|
|
103
|
+
# # 重新组装URL
|
|
104
|
+
# url = "{}{}".format(self.endpoint, kwargs['url'])
|
|
105
|
+
# kwargs['url'] = url
|
|
106
|
+
#
|
|
107
|
+
# if not kwargs['method']: kwargs['method'] = 'GET'
|
|
108
|
+
#
|
|
109
|
+
# # logging.debug(f"with_params_data_url {kwargs}")
|
|
110
|
+
# body = kwargs.get('body', {})
|
|
111
|
+
# req_json = kwargs.get('json')
|
|
112
|
+
#
|
|
113
|
+
# if kwargs['method'] in ['POST', 'post', 'PATCH', 'patch', 'PUT', 'put']:
|
|
114
|
+
# if not (body or req_json):
|
|
115
|
+
# raise TypeError('method {}, body can not be empty'.format(kwargs['method']))
|
|
116
|
+
# else:
|
|
117
|
+
# if not isinstance(body, dict):
|
|
118
|
+
# json.loads(body)
|
|
119
|
+
#
|
|
120
|
+
# if body and isinstance(body, dict): kwargs['body'] = json.dumps(body)
|
|
121
|
+
#
|
|
122
|
+
# params = kwargs.get('params')
|
|
123
|
+
# if params: kwargs['url'] = "{}?{}".format(url, urlencode(params))
|
|
124
|
+
#
|
|
125
|
+
# if not self.headers: self.headers = kwargs.get('headers', {})
|
|
126
|
+
#
|
|
127
|
+
# if kwargs['method'] not in ['GET', 'get']: self.headers['Content-Type'] = 'application/json'
|
|
128
|
+
#
|
|
129
|
+
# return kwargs
|
|
105
130
|
|
|
106
|
-
|
|
131
|
+
def with_params_data_url(self, **kwargs) -> dict:
|
|
132
|
+
endpoint = self.endpoint.strip("'").strip('"')
|
|
133
|
+
kwargs['url'] = f"{endpoint}{kwargs.get('url', '')}"
|
|
134
|
+
kwargs['method'] = kwargs.get('method', 'GET').upper()
|
|
107
135
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
req_json = kwargs.get('json')
|
|
136
|
+
body: Union[dict, str] = kwargs.get('body', {})
|
|
137
|
+
req_json: Optional[dict] = kwargs.get('json')
|
|
111
138
|
|
|
112
|
-
if kwargs['method'] in
|
|
139
|
+
if kwargs['method'] in {'POST', 'PATCH', 'PUT'}:
|
|
113
140
|
if not (body or req_json):
|
|
114
|
-
raise TypeError('method
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
json.loads(body)
|
|
141
|
+
raise TypeError(f"Method {kwargs['method']} requires a non-empty body or JSON payload.")
|
|
142
|
+
if body and not isinstance(body, dict):
|
|
143
|
+
try:
|
|
144
|
+
body = json.loads(body)
|
|
145
|
+
except json.JSONDecodeError as e:
|
|
146
|
+
raise TypeError(f"Invalid JSON body: {e}")
|
|
118
147
|
|
|
119
|
-
if body and isinstance(body, dict):
|
|
148
|
+
if body and isinstance(body, dict):
|
|
149
|
+
kwargs['body'] = json.dumps(body)
|
|
120
150
|
|
|
121
|
-
params = kwargs.get('params')
|
|
122
|
-
if params:
|
|
151
|
+
params: Optional[dict] = kwargs.get('params')
|
|
152
|
+
if params:
|
|
153
|
+
kwargs['url'] = f"{kwargs['url']}?{urlencode(params)}"
|
|
123
154
|
|
|
124
|
-
|
|
155
|
+
kwargs['headers'] = kwargs.get('headers', self.headers or {})
|
|
125
156
|
|
|
126
|
-
if kwargs['method']
|
|
157
|
+
if kwargs['method'] != 'GET':
|
|
158
|
+
kwargs['headers'].setdefault('Content-Type', 'application/json')
|
|
127
159
|
|
|
128
160
|
return kwargs
|
|
129
161
|
|
|
@@ -99,10 +99,8 @@ class CommonOptView:
|
|
|
99
99
|
|
|
100
100
|
@staticmethod
|
|
101
101
|
def del_data(data) -> dict:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if '_rowKey' in data:
|
|
105
|
-
del data['_rowKey']
|
|
102
|
+
for key in ['_index', '_rowKey', 'update_time']:
|
|
103
|
+
data.pop(key, None)
|
|
106
104
|
return data
|
|
107
105
|
|
|
108
106
|
def handle_add(self, data: dict) -> dict:
|
|
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
|