Skip to content

Commit 692740e

Browse files
author
wenfeng.wf
committed
Json array to cvs.
1 parent 45887c1 commit 692740e

File tree

3 files changed

+38
-18
lines changed

3 files changed

+38
-18
lines changed

src/alibabacloud_rds_openapi_mcp_server/server.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
import os
44
import sys
5+
import csv
56
from datetime import datetime
67
from typing import Dict, Any, List
78

@@ -15,7 +16,7 @@
1516
from utils import (transform_to_iso_8601,
1617
transform_to_datetime,
1718
transform_perf_key,
18-
compress_json_array,
19+
json_array_to_csv,
1920
get_rds_client,
2021
get_vpc_client,
2122
get_bill_client)
@@ -40,9 +41,12 @@ async def describe_db_instances(region_id: str):
4041
"""
4142
client = get_rds_client(region_id)
4243
try:
43-
request = rds_20140815_models.DescribeDBInstancesRequest(region_id=region_id)
44+
request = rds_20140815_models.DescribeDBInstancesRequest(
45+
region_id=region_id,
46+
page_size=100
47+
)
4448
response = client.describe_dbinstances(request)
45-
return response.body.to_map()
49+
return json_array_to_csv(response.body.items.dbinstance)
4650
except Exception as e:
4751
raise e
4852

@@ -113,7 +117,7 @@ def _compress_performance(performance_value, max_items=10):
113117
response = client.describe_dbinstance_performance(request)
114118
responses = []
115119
for perf_key in response.body.performance_keys.performance_key:
116-
perf_key_info = f"""Key={perf_key.key}; Unit={perf_key.unit}; ValueFormat={perf_key.value_format}; Values={compress_json_array([item.to_map() for item in _compress_performance(perf_key.values.performance_value)])}"""
120+
perf_key_info = f"""Key={perf_key.key}; Unit={perf_key.unit}; ValueFormat={perf_key.value_format}; Values={json_array_to_csv(_compress_performance(perf_key.values.performance_value))}"""
117121
responses.append(perf_key_info)
118122
return responses
119123
except Exception as e:
@@ -905,12 +909,8 @@ async def describe_db_instance_parameters(
905909

906910
db_instance_parameters[db_instance_id] = {
907911
"ParamGroupInfo": response.body.param_group_info.to_map(),
908-
"ConfigParameters": compress_json_array([
909-
config_parameter.to_map() for config_parameter in response.body.config_parameters.dbinstance_parameter
910-
]),
911-
"RunningParameters": compress_json_array([
912-
running_parameter.to_map() for running_parameter in response.body.running_parameters.dbinstance_parameter
913-
])
912+
"ConfigParameters": json_array_to_csv(response.body.config_parameters.dbinstance_parameter),
913+
"RunningParameters": json_array_to_csv(response.body.running_parameters.dbinstance_parameter)
914914
}
915915
return db_instance_parameters
916916
except Exception as e:
@@ -978,7 +978,7 @@ async def describe_bills(
978978
"BillingItemUsage": item.usage,
979979
}
980980
)
981-
res[billing_cycle] = compress_json_array(item_filters)
981+
res[billing_cycle] = json_array_to_csv(item_filters)
982982
return res
983983
except Exception as e:
984984
raise e

src/alibabacloud_rds_openapi_mcp_server/utils.py

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import csv
12
import os
23
from datetime import datetime, timezone
4+
from io import StringIO
35

46
from alibabacloud_bssopenapi20171214.client import Client as BssOpenApi20171214Client
57
from alibabacloud_rds20140815.client import Client as RdsClient
@@ -66,13 +68,31 @@ def transform_perf_key(db_type: str, perf_keys: list[str]):
6668
return perf_key_after_transform
6769

6870

69-
def compress_json_array(json_array: list[dict]):
70-
if not json_array or len(json_array) == 0:
71+
def json_array_to_csv(data):
72+
if not data or not isinstance(data, list):
7173
return ""
72-
compress_str = ";".join(json_array[0].keys())
73-
for item in json_array:
74-
compress_str += "|" + ";".join([str(item[key] if key in item else "") for key in json_array[0].keys()])
75-
return compress_str
74+
75+
fieldnames = set()
76+
for item in data:
77+
if isinstance(item, dict):
78+
fieldnames.update(item.keys())
79+
elif hasattr(item, 'to_map'):
80+
fieldnames.update(item.to_map().keys())
81+
82+
if not fieldnames:
83+
return ""
84+
85+
output = StringIO()
86+
writer = csv.DictWriter(output, fieldnames=sorted(fieldnames))
87+
88+
writer.writeheader()
89+
for item in data:
90+
if isinstance(item, dict):
91+
writer.writerow({k: v if v is not None else '' for k, v in item.items()})
92+
elif hasattr(item, 'to_map'):
93+
writer.writerow({k: v if v is not None else '' for k, v in item.to_map().items()})
94+
95+
return output.getvalue()
7696

7797

7898
def get_rds_client(region_id: str):

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)