universal-mcp-applications 0.1.13__py3-none-any.whl → 0.1.15__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.
Potentially problematic release.
This version of universal-mcp-applications might be problematic. Click here for more details.
- universal_mcp/applications/aws_s3/app.py +71 -71
- universal_mcp/applications/calendly/app.py +199 -199
- universal_mcp/applications/canva/app.py +189 -189
- universal_mcp/applications/domain_checker/app.py +31 -24
- universal_mcp/applications/e2b/app.py +6 -7
- universal_mcp/applications/elevenlabs/app.py +24 -20
- universal_mcp/applications/exa/app.py +25 -20
- universal_mcp/applications/falai/app.py +44 -41
- universal_mcp/applications/file_system/app.py +20 -12
- universal_mcp/applications/firecrawl/app.py +46 -47
- universal_mcp/applications/fireflies/app.py +79 -79
- universal_mcp/applications/fpl/app.py +83 -74
- universal_mcp/applications/github/README.md +0 -1028
- universal_mcp/applications/github/app.py +55 -50227
- universal_mcp/applications/google_calendar/app.py +63 -65
- universal_mcp/applications/google_docs/app.py +78 -78
- universal_mcp/applications/google_drive/app.py +361 -440
- universal_mcp/applications/google_gemini/app.py +34 -17
- universal_mcp/applications/google_mail/app.py +117 -117
- universal_mcp/applications/google_searchconsole/app.py +41 -47
- universal_mcp/applications/google_sheet/app.py +157 -164
- universal_mcp/applications/http_tools/app.py +16 -16
- universal_mcp/applications/linkedin/app.py +26 -31
- universal_mcp/applications/ms_teams/app.py +190 -190
- universal_mcp/applications/openai/app.py +55 -56
- universal_mcp/applications/outlook/app.py +71 -71
- universal_mcp/applications/perplexity/app.py +17 -17
- universal_mcp/applications/reddit/app.py +225 -4053
- universal_mcp/applications/replicate/app.py +40 -42
- universal_mcp/applications/resend/app.py +157 -154
- universal_mcp/applications/scraper/app.py +24 -24
- universal_mcp/applications/serpapi/app.py +18 -20
- universal_mcp/applications/sharepoint/app.py +46 -36
- universal_mcp/applications/slack/app.py +66 -66
- universal_mcp/applications/tavily/app.py +7 -7
- universal_mcp/applications/twitter/api_segments/compliance_api.py +17 -20
- universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +35 -40
- universal_mcp/applications/twitter/api_segments/dm_events_api.py +18 -21
- universal_mcp/applications/twitter/api_segments/likes_api.py +19 -22
- universal_mcp/applications/twitter/api_segments/lists_api.py +59 -68
- universal_mcp/applications/twitter/api_segments/spaces_api.py +36 -42
- universal_mcp/applications/twitter/api_segments/trends_api.py +7 -8
- universal_mcp/applications/twitter/api_segments/tweets_api.py +159 -185
- universal_mcp/applications/twitter/api_segments/usage_api.py +5 -6
- universal_mcp/applications/twitter/api_segments/users_api.py +230 -264
- universal_mcp/applications/unipile/app.py +99 -105
- universal_mcp/applications/whatsapp/app.py +86 -82
- universal_mcp/applications/whatsapp_business/app.py +147 -147
- universal_mcp/applications/youtube/app.py +290 -290
- universal_mcp/applications/zenquotes/app.py +6 -6
- {universal_mcp_applications-0.1.13.dist-info → universal_mcp_applications-0.1.15.dist-info}/METADATA +2 -2
- {universal_mcp_applications-0.1.13.dist-info → universal_mcp_applications-0.1.15.dist-info}/RECORD +54 -54
- {universal_mcp_applications-0.1.13.dist-info → universal_mcp_applications-0.1.15.dist-info}/WHEEL +0 -0
- {universal_mcp_applications-0.1.13.dist-info → universal_mcp_applications-0.1.15.dist-info}/licenses/LICENSE +0 -0
|
@@ -30,7 +30,7 @@ class AwsS3App(BaseApplication):
|
|
|
30
30
|
@property
|
|
31
31
|
def client(self):
|
|
32
32
|
"""
|
|
33
|
-
|
|
33
|
+
Lazily initializes and returns a cached Boto3 S3 client instance. It retrieves authentication credentials from the associated `integration` object. This property is the core mechanism used by all other methods in the class to interact with AWS S3, raising an error if the integration is not set.
|
|
34
34
|
"""
|
|
35
35
|
if not self.integration:
|
|
36
36
|
raise ValueError("Integration not initialized")
|
|
@@ -48,8 +48,8 @@ class AwsS3App(BaseApplication):
|
|
|
48
48
|
|
|
49
49
|
def list_buckets(self) -> list[str]:
|
|
50
50
|
"""
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
Retrieves all S3 buckets accessible by the configured AWS credentials. It calls the S3 API's list_buckets operation and processes the response to return a simple list containing just the names of the buckets.
|
|
52
|
+
|
|
53
53
|
Returns:
|
|
54
54
|
List[str]: A list of bucket names.
|
|
55
55
|
"""
|
|
@@ -58,12 +58,12 @@ class AwsS3App(BaseApplication):
|
|
|
58
58
|
|
|
59
59
|
def create_bucket(self, bucket_name: str, region: str | None = None) -> bool:
|
|
60
60
|
"""
|
|
61
|
-
Creates a new S3 bucket.
|
|
62
|
-
|
|
61
|
+
Creates a new Amazon S3 bucket with a specified name and optional region. Returns `True` upon successful creation, or `False` if an AWS client error, such as a naming conflict or permission issue, occurs.
|
|
62
|
+
|
|
63
63
|
Args:
|
|
64
64
|
bucket_name (str): The name of the bucket to create.
|
|
65
65
|
region (str, optional): The region to create the bucket in.
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
Returns:
|
|
68
68
|
bool: True if the bucket was created successfully.
|
|
69
69
|
Tags:
|
|
@@ -83,11 +83,11 @@ class AwsS3App(BaseApplication):
|
|
|
83
83
|
|
|
84
84
|
def delete_bucket(self, bucket_name: str) -> bool:
|
|
85
85
|
"""
|
|
86
|
-
Deletes
|
|
87
|
-
|
|
86
|
+
Deletes a specified S3 bucket. The operation requires the bucket to be empty to succeed. It returns `True` if the bucket is successfully deleted and `False` if an error occurs, such as the bucket not being found or containing objects.
|
|
87
|
+
|
|
88
88
|
Args:
|
|
89
89
|
bucket_name (str): The name of the bucket to delete.
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
Returns:
|
|
92
92
|
bool: True if the bucket was deleted successfully.
|
|
93
93
|
Tags:
|
|
@@ -101,11 +101,11 @@ class AwsS3App(BaseApplication):
|
|
|
101
101
|
|
|
102
102
|
def get_bucket_policy(self, bucket_name: str) -> dict[str, Any]:
|
|
103
103
|
"""
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
Retrieves the IAM resource policy for a specified S3 bucket, parsing the JSON string into a dictionary. If the operation fails due to permissions or a non-existent policy, it returns an error dictionary. This complements `put_bucket_policy`, which applies a new policy.
|
|
105
|
+
|
|
106
106
|
Args:
|
|
107
107
|
bucket_name (str): The name of the S3 bucket.
|
|
108
|
-
|
|
108
|
+
|
|
109
109
|
Returns:
|
|
110
110
|
Dict[str, Any]: The bucket policy as a dictionary.
|
|
111
111
|
Tags:
|
|
@@ -117,14 +117,14 @@ class AwsS3App(BaseApplication):
|
|
|
117
117
|
except ClientError as e:
|
|
118
118
|
return {"error": str(e)}
|
|
119
119
|
|
|
120
|
-
def
|
|
120
|
+
def set_bucket_policy(self, bucket_name: str, policy: dict[str, Any]) -> bool:
|
|
121
121
|
"""
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
Applies or replaces the access policy for a specified S3 bucket. The function accepts the policy as a dictionary, converts it to JSON, and assigns it to the bucket. This write operation is the counterpart to `get_bucket_policy` and returns `True` on success.
|
|
123
|
+
|
|
124
124
|
Args:
|
|
125
125
|
bucket_name (str): The name of the S3 bucket.
|
|
126
126
|
policy (Dict[str, Any]): The bucket policy as a dictionary.
|
|
127
|
-
|
|
127
|
+
|
|
128
128
|
Returns:
|
|
129
129
|
bool: True if the policy was set successfully.
|
|
130
130
|
Tags:
|
|
@@ -136,14 +136,14 @@ class AwsS3App(BaseApplication):
|
|
|
136
136
|
except ClientError:
|
|
137
137
|
return False
|
|
138
138
|
|
|
139
|
-
def
|
|
139
|
+
def list_subdirectories(self, bucket_name: str, prefix: str | None = None) -> list[str]:
|
|
140
140
|
"""
|
|
141
|
-
Lists common prefixes
|
|
142
|
-
|
|
141
|
+
Lists immediate subdirectories (common prefixes) within an S3 bucket. If a prefix is provided, it returns subdirectories under that path; otherwise, it lists top-level directories. This function specifically lists folders, distinguishing it from `list_objects`, which lists files.
|
|
142
|
+
|
|
143
143
|
Args:
|
|
144
144
|
bucket_name (str): The name of the S3 bucket.
|
|
145
145
|
prefix (str, optional): The prefix to list folders under.
|
|
146
|
-
|
|
146
|
+
|
|
147
147
|
Returns:
|
|
148
148
|
List[str]: A list of folder prefixes.
|
|
149
149
|
Tags:
|
|
@@ -163,17 +163,17 @@ class AwsS3App(BaseApplication):
|
|
|
163
163
|
prefixes.append(cp.get("Prefix"))
|
|
164
164
|
return prefixes
|
|
165
165
|
|
|
166
|
-
def
|
|
166
|
+
def create_prefix(
|
|
167
167
|
self, bucket_name: str, prefix_name: str, parent_prefix: str | None = None
|
|
168
168
|
) -> bool:
|
|
169
169
|
"""
|
|
170
|
-
Creates a prefix (
|
|
171
|
-
|
|
170
|
+
Creates a prefix (folder) in an S3 bucket, optionally nested under a parent prefix. It simulates a directory by creating a zero-byte object with a key ending in a slash ('/'), distinguishing it from put_object, which uploads content.
|
|
171
|
+
|
|
172
172
|
Args:
|
|
173
173
|
bucket_name (str): The name of the S3 bucket.
|
|
174
174
|
prefix_name (str): The name of the prefix to create.
|
|
175
175
|
parent_prefix (str, optional): The parent prefix (folder path).
|
|
176
|
-
|
|
176
|
+
|
|
177
177
|
Returns:
|
|
178
178
|
bool: True if the prefix was created successfully.
|
|
179
179
|
Tags:
|
|
@@ -188,12 +188,12 @@ class AwsS3App(BaseApplication):
|
|
|
188
188
|
|
|
189
189
|
def list_objects(self, bucket_name: str, prefix: str) -> list[dict[str, Any]]:
|
|
190
190
|
"""
|
|
191
|
-
|
|
192
|
-
|
|
191
|
+
Paginates through and lists all objects within a specified S3 bucket prefix. It returns a curated list of metadata for each object (key, name, size, last modified), excluding folder placeholders. This function specifically lists files, distinguishing it from `list_prefixes` which lists folders.
|
|
192
|
+
|
|
193
193
|
Args:
|
|
194
194
|
bucket_name (str): The name of the S3 bucket.
|
|
195
195
|
prefix (str): The prefix (folder path) to list objects under.
|
|
196
|
-
|
|
196
|
+
|
|
197
197
|
Returns:
|
|
198
198
|
List[Dict[str, Any]]: A list of dictionaries containing object metadata.
|
|
199
199
|
Tags:
|
|
@@ -217,18 +217,18 @@ class AwsS3App(BaseApplication):
|
|
|
217
217
|
)
|
|
218
218
|
return objects
|
|
219
219
|
|
|
220
|
-
def
|
|
220
|
+
def put_text_object(
|
|
221
221
|
self, bucket_name: str, prefix: str, object_name: str, content: str
|
|
222
222
|
) -> bool:
|
|
223
223
|
"""
|
|
224
|
-
Uploads an object
|
|
225
|
-
|
|
224
|
+
Uploads string content to create an object in a specified S3 bucket and prefix. The content is UTF-8 encoded before being written. This method is for text, distinguishing it from `put_object_from_base64` which handles binary data.
|
|
225
|
+
|
|
226
226
|
Args:
|
|
227
227
|
bucket_name (str): The name of the S3 bucket.
|
|
228
228
|
prefix (str): The prefix (folder path) where the object will be created.
|
|
229
229
|
object_name (str): The name of the object to create.
|
|
230
230
|
content (str): The content to write into the object.
|
|
231
|
-
|
|
231
|
+
|
|
232
232
|
Returns:
|
|
233
233
|
bool: True if the object was created successfully.
|
|
234
234
|
Tags:
|
|
@@ -244,14 +244,14 @@ class AwsS3App(BaseApplication):
|
|
|
244
244
|
self, bucket_name: str, prefix: str, object_name: str, base64_content: str
|
|
245
245
|
) -> bool:
|
|
246
246
|
"""
|
|
247
|
-
|
|
248
|
-
|
|
247
|
+
Decodes a base64 string into binary data and uploads it as an object to a specified S3 location. This method is designed for binary files, differentiating it from `put_object` which handles plain text content. Returns true on success.
|
|
248
|
+
|
|
249
249
|
Args:
|
|
250
250
|
bucket_name (str): The name of the S3 bucket.
|
|
251
251
|
prefix (str): The prefix (folder path) where the object will be created.
|
|
252
252
|
object_name (str): The name of the object to create.
|
|
253
253
|
base64_content (str): The base64-encoded content to upload.
|
|
254
|
-
|
|
254
|
+
|
|
255
255
|
Returns:
|
|
256
256
|
bool: True if the object was created successfully.
|
|
257
257
|
Tags:
|
|
@@ -265,14 +265,14 @@ class AwsS3App(BaseApplication):
|
|
|
265
265
|
except Exception:
|
|
266
266
|
return False
|
|
267
267
|
|
|
268
|
-
def
|
|
268
|
+
def get_object_with_content(self, bucket_name: str, key: str) -> dict[str, Any]:
|
|
269
269
|
"""
|
|
270
|
-
|
|
271
|
-
|
|
270
|
+
Retrieves an S3 object's content. It decodes text files as UTF-8 or encodes binary files as base64 based on the object's key. This function downloads the full object body, unlike `get_object_metadata` which only fetches metadata without content, returning the content, name, size, and type.
|
|
271
|
+
|
|
272
272
|
Args:
|
|
273
273
|
bucket_name (str): The name of the S3 bucket.
|
|
274
274
|
key (str): The key (path) to the object.
|
|
275
|
-
|
|
275
|
+
|
|
276
276
|
Returns:
|
|
277
277
|
Dict[str, Any]: A dictionary containing the object's name, content type, content (as text or base64), and size.
|
|
278
278
|
Tags:
|
|
@@ -300,12 +300,12 @@ class AwsS3App(BaseApplication):
|
|
|
300
300
|
|
|
301
301
|
def get_object_metadata(self, bucket_name: str, key: str) -> dict[str, Any]:
|
|
302
302
|
"""
|
|
303
|
-
|
|
304
|
-
|
|
303
|
+
Efficiently retrieves metadata for a specified S3 object, such as size and last modified date, without downloading its content. This function uses a HEAD request, making it faster than `get_object_content` for accessing object properties. Returns a dictionary of metadata or an error message on failure.
|
|
304
|
+
|
|
305
305
|
Args:
|
|
306
306
|
bucket_name (str): The name of the S3 bucket.
|
|
307
307
|
key (str): The key (path) to the object.
|
|
308
|
-
|
|
308
|
+
|
|
309
309
|
Returns:
|
|
310
310
|
Dict[str, Any]: A dictionary containing the object's metadata.
|
|
311
311
|
Tags:
|
|
@@ -331,14 +331,14 @@ class AwsS3App(BaseApplication):
|
|
|
331
331
|
self, source_bucket: str, source_key: str, dest_bucket: str, dest_key: str
|
|
332
332
|
) -> bool:
|
|
333
333
|
"""
|
|
334
|
-
Copies an object from
|
|
335
|
-
|
|
334
|
+
Copies an S3 object from a specified source location to a destination, which can be in the same or a different bucket. Unlike `move_object`, the original object remains at the source after the copy operation. It returns `True` for a successful operation.
|
|
335
|
+
|
|
336
336
|
Args:
|
|
337
337
|
source_bucket (str): The source bucket name.
|
|
338
338
|
source_key (str): The source object key.
|
|
339
339
|
dest_bucket (str): The destination bucket name.
|
|
340
340
|
dest_key (str): The destination object key.
|
|
341
|
-
|
|
341
|
+
|
|
342
342
|
Returns:
|
|
343
343
|
bool: True if the object was copied successfully.
|
|
344
344
|
Tags:
|
|
@@ -357,14 +357,14 @@ class AwsS3App(BaseApplication):
|
|
|
357
357
|
self, source_bucket: str, source_key: str, dest_bucket: str, dest_key: str
|
|
358
358
|
) -> bool:
|
|
359
359
|
"""
|
|
360
|
-
Moves an object from
|
|
361
|
-
|
|
360
|
+
Moves an S3 object from a source to a destination. This is achieved by first copying the object to the new location and subsequently deleting the original. The move can occur within the same bucket or between different ones, returning `True` on success.
|
|
361
|
+
|
|
362
362
|
Args:
|
|
363
363
|
source_bucket (str): The source bucket name.
|
|
364
364
|
source_key (str): The source object key.
|
|
365
365
|
dest_bucket (str): The destination bucket name.
|
|
366
366
|
dest_key (str): The destination object key.
|
|
367
|
-
|
|
367
|
+
|
|
368
368
|
Returns:
|
|
369
369
|
bool: True if the object was moved successfully.
|
|
370
370
|
Tags:
|
|
@@ -374,14 +374,14 @@ class AwsS3App(BaseApplication):
|
|
|
374
374
|
return self.delete_object(source_bucket, source_key)
|
|
375
375
|
return False
|
|
376
376
|
|
|
377
|
-
def
|
|
377
|
+
def delete_single_object(self, bucket_name: str, key: str) -> bool:
|
|
378
378
|
"""
|
|
379
|
-
Deletes
|
|
380
|
-
|
|
379
|
+
Deletes a single, specified object from an S3 bucket using its key. Returns `True` if successful, otherwise `False`. For bulk deletions in a single request, the `delete_objects` function should be used instead.
|
|
380
|
+
|
|
381
381
|
Args:
|
|
382
382
|
bucket_name (str): The name of the S3 bucket.
|
|
383
383
|
key (str): The key (path) to the object to delete.
|
|
384
|
-
|
|
384
|
+
|
|
385
385
|
Returns:
|
|
386
386
|
bool: True if the object was deleted successfully.
|
|
387
387
|
Tags:
|
|
@@ -395,12 +395,12 @@ class AwsS3App(BaseApplication):
|
|
|
395
395
|
|
|
396
396
|
def delete_objects(self, bucket_name: str, keys: list[str]) -> dict[str, Any]:
|
|
397
397
|
"""
|
|
398
|
-
|
|
399
|
-
|
|
398
|
+
Performs a bulk deletion of objects from a specified S3 bucket in a single request. Given a list of keys, it returns a dictionary detailing successful deletions and any errors. This method is the batch-processing counterpart to the singular `delete_object` function, designed for efficiency.
|
|
399
|
+
|
|
400
400
|
Args:
|
|
401
401
|
bucket_name (str): The name of the S3 bucket.
|
|
402
402
|
keys (List[str]): List of object keys to delete.
|
|
403
|
-
|
|
403
|
+
|
|
404
404
|
Returns:
|
|
405
405
|
Dict[str, Any]: Results of the deletion operation.
|
|
406
406
|
Tags:
|
|
@@ -426,14 +426,14 @@ class AwsS3App(BaseApplication):
|
|
|
426
426
|
http_method: str = "GET",
|
|
427
427
|
) -> str:
|
|
428
428
|
"""
|
|
429
|
-
Generates a
|
|
430
|
-
|
|
429
|
+
Generates a temporary, secure URL for a specific S3 object. This URL grants time-limited permissions for actions like GET, PUT, or DELETE, expiring after a defined period. It allows object access without sharing permanent AWS credentials.
|
|
430
|
+
|
|
431
431
|
Args:
|
|
432
432
|
bucket_name (str): The name of the S3 bucket.
|
|
433
433
|
key (str): The key (path) to the object.
|
|
434
434
|
expiration (int): Time in seconds for the presigned URL to remain valid (default: 3600).
|
|
435
435
|
http_method (str): HTTP method for the presigned URL (default: 'GET').
|
|
436
|
-
|
|
436
|
+
|
|
437
437
|
Returns:
|
|
438
438
|
str: The presigned URL or error message.
|
|
439
439
|
Tags:
|
|
@@ -464,15 +464,15 @@ class AwsS3App(BaseApplication):
|
|
|
464
464
|
max_size: int | None = None,
|
|
465
465
|
) -> list[dict[str, Any]]:
|
|
466
466
|
"""
|
|
467
|
-
|
|
468
|
-
|
|
467
|
+
Filters objects within an S3 bucket and prefix based on a name pattern and size range. It retrieves all objects via `list_objects` and then applies the specified criteria client-side, returning a refined list of matching objects and their metadata.
|
|
468
|
+
|
|
469
469
|
Args:
|
|
470
470
|
bucket_name (str): The name of the S3 bucket.
|
|
471
471
|
prefix (str): The prefix to search within.
|
|
472
472
|
name_pattern (str): Pattern to match in object names (case-insensitive).
|
|
473
473
|
min_size (int, optional): Minimum object size in bytes.
|
|
474
474
|
max_size (int, optional): Maximum object size in bytes.
|
|
475
|
-
|
|
475
|
+
|
|
476
476
|
Returns:
|
|
477
477
|
List[Dict[str, Any]]: List of matching objects with metadata.
|
|
478
478
|
Tags:
|
|
@@ -496,14 +496,14 @@ class AwsS3App(BaseApplication):
|
|
|
496
496
|
|
|
497
497
|
return filtered_objects
|
|
498
498
|
|
|
499
|
-
def
|
|
499
|
+
def get_storage_summary(self, bucket_name: str, prefix: str = "") -> dict[str, Any]:
|
|
500
500
|
"""
|
|
501
|
-
Calculates the total size and
|
|
502
|
-
|
|
501
|
+
Calculates and returns statistics for an S3 bucket or prefix. The result includes the total number of objects, their combined size in bytes, and a human-readable string representation of the size (e.g., '15.2 MB').
|
|
502
|
+
|
|
503
503
|
Args:
|
|
504
504
|
bucket_name (str): The name of the S3 bucket.
|
|
505
505
|
prefix (str): The prefix to calculate size for (default: entire bucket).
|
|
506
|
-
|
|
506
|
+
|
|
507
507
|
Returns:
|
|
508
508
|
Dict[str, Any]: Dictionary containing total size, object count, and human-readable size.
|
|
509
509
|
Tags:
|
|
@@ -533,19 +533,19 @@ class AwsS3App(BaseApplication):
|
|
|
533
533
|
self.create_bucket,
|
|
534
534
|
self.delete_bucket,
|
|
535
535
|
self.get_bucket_policy,
|
|
536
|
-
self.
|
|
537
|
-
self.
|
|
538
|
-
self.
|
|
536
|
+
self.set_bucket_policy,
|
|
537
|
+
self.list_subdirectories,
|
|
538
|
+
self.create_prefix,
|
|
539
539
|
self.list_objects,
|
|
540
|
-
self.
|
|
540
|
+
self.put_text_object,
|
|
541
541
|
self.put_object_from_base64,
|
|
542
|
-
self.
|
|
542
|
+
self.get_object_with_content,
|
|
543
543
|
self.get_object_metadata,
|
|
544
544
|
self.copy_object,
|
|
545
545
|
self.move_object,
|
|
546
|
-
self.
|
|
546
|
+
self.delete_single_object,
|
|
547
547
|
self.delete_objects,
|
|
548
548
|
self.generate_presigned_url,
|
|
549
549
|
self.search_objects,
|
|
550
|
-
self.
|
|
550
|
+
self.get_storage_summary,
|
|
551
551
|
]
|