universal-mcp-applications 0.1.33__py3-none-any.whl → 0.1.39rc16__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/BEST_PRACTICES.md +1 -1
- universal_mcp/applications/ahrefs/app.py +92 -238
- universal_mcp/applications/airtable/app.py +36 -135
- universal_mcp/applications/apollo/app.py +124 -477
- universal_mcp/applications/asana/app.py +605 -1755
- universal_mcp/applications/aws_s3/app.py +63 -119
- universal_mcp/applications/bill/app.py +644 -2055
- universal_mcp/applications/box/app.py +1246 -4159
- universal_mcp/applications/braze/app.py +410 -1476
- universal_mcp/applications/browser_use/README.md +15 -1
- universal_mcp/applications/browser_use/__init__.py +1 -0
- universal_mcp/applications/browser_use/app.py +91 -26
- universal_mcp/applications/cal_com_v2/app.py +207 -625
- universal_mcp/applications/calendly/app.py +103 -242
- universal_mcp/applications/canva/app.py +75 -140
- universal_mcp/applications/clickup/app.py +331 -798
- universal_mcp/applications/coda/app.py +240 -520
- universal_mcp/applications/confluence/app.py +497 -1285
- universal_mcp/applications/contentful/app.py +40 -155
- universal_mcp/applications/crustdata/app.py +44 -123
- universal_mcp/applications/dialpad/app.py +451 -924
- universal_mcp/applications/digitalocean/app.py +2071 -6082
- universal_mcp/applications/domain_checker/app.py +3 -54
- universal_mcp/applications/e2b/app.py +17 -68
- universal_mcp/applications/elevenlabs/README.md +27 -3
- universal_mcp/applications/elevenlabs/app.py +741 -74
- universal_mcp/applications/exa/README.md +8 -4
- universal_mcp/applications/exa/app.py +415 -186
- universal_mcp/applications/falai/README.md +5 -7
- universal_mcp/applications/falai/app.py +156 -232
- universal_mcp/applications/figma/app.py +91 -175
- universal_mcp/applications/file_system/app.py +2 -13
- universal_mcp/applications/firecrawl/app.py +198 -176
- universal_mcp/applications/fireflies/app.py +59 -281
- universal_mcp/applications/fpl/app.py +92 -529
- universal_mcp/applications/fpl/utils/fixtures.py +15 -49
- universal_mcp/applications/fpl/utils/helper.py +25 -89
- universal_mcp/applications/fpl/utils/league_utils.py +20 -64
- universal_mcp/applications/ghost_content/app.py +70 -179
- universal_mcp/applications/github/app.py +30 -67
- universal_mcp/applications/gong/app.py +142 -302
- universal_mcp/applications/google_calendar/app.py +26 -78
- universal_mcp/applications/google_docs/README.md +15 -14
- universal_mcp/applications/google_docs/app.py +103 -206
- universal_mcp/applications/google_drive/app.py +194 -793
- universal_mcp/applications/google_gemini/app.py +68 -59
- universal_mcp/applications/google_mail/README.md +1 -0
- universal_mcp/applications/google_mail/app.py +93 -214
- universal_mcp/applications/google_searchconsole/app.py +25 -58
- universal_mcp/applications/google_sheet/README.md +2 -1
- universal_mcp/applications/google_sheet/app.py +226 -624
- universal_mcp/applications/google_sheet/helper.py +26 -53
- universal_mcp/applications/hashnode/app.py +57 -269
- universal_mcp/applications/heygen/README.md +10 -32
- universal_mcp/applications/heygen/app.py +339 -811
- universal_mcp/applications/http_tools/app.py +10 -32
- universal_mcp/applications/hubspot/README.md +1 -1
- universal_mcp/applications/hubspot/app.py +7508 -99
- universal_mcp/applications/jira/app.py +2419 -8334
- universal_mcp/applications/klaviyo/app.py +739 -1621
- universal_mcp/applications/linkedin/README.md +18 -1
- universal_mcp/applications/linkedin/app.py +729 -251
- universal_mcp/applications/mailchimp/app.py +696 -1851
- universal_mcp/applications/markitdown/app.py +8 -20
- universal_mcp/applications/miro/app.py +333 -815
- universal_mcp/applications/ms_teams/app.py +420 -1407
- universal_mcp/applications/neon/app.py +144 -250
- universal_mcp/applications/notion/app.py +38 -53
- universal_mcp/applications/onedrive/app.py +26 -48
- universal_mcp/applications/openai/app.py +43 -166
- universal_mcp/applications/outlook/README.md +22 -9
- universal_mcp/applications/outlook/app.py +403 -141
- universal_mcp/applications/perplexity/README.md +2 -1
- universal_mcp/applications/perplexity/app.py +161 -20
- universal_mcp/applications/pipedrive/app.py +1021 -3331
- universal_mcp/applications/posthog/app.py +272 -541
- universal_mcp/applications/reddit/app.py +65 -164
- universal_mcp/applications/resend/app.py +72 -139
- universal_mcp/applications/retell/app.py +23 -50
- universal_mcp/applications/rocketlane/app.py +252 -965
- universal_mcp/applications/scraper/app.py +114 -142
- universal_mcp/applications/semanticscholar/app.py +36 -78
- universal_mcp/applications/semrush/app.py +44 -78
- universal_mcp/applications/sendgrid/app.py +826 -1576
- universal_mcp/applications/sentry/app.py +444 -1079
- universal_mcp/applications/serpapi/app.py +44 -146
- universal_mcp/applications/sharepoint/app.py +27 -49
- universal_mcp/applications/shopify/app.py +1748 -4486
- universal_mcp/applications/shortcut/app.py +275 -536
- universal_mcp/applications/slack/app.py +43 -125
- universal_mcp/applications/spotify/app.py +206 -405
- universal_mcp/applications/supabase/app.py +174 -283
- universal_mcp/applications/tavily/app.py +2 -2
- universal_mcp/applications/trello/app.py +853 -2816
- universal_mcp/applications/twilio/app.py +27 -62
- universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
- universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
- universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
- universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
- universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
- universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
- universal_mcp/applications/whatsapp/app.py +35 -186
- universal_mcp/applications/whatsapp/audio.py +2 -6
- universal_mcp/applications/whatsapp/whatsapp.py +17 -51
- universal_mcp/applications/whatsapp_business/app.py +86 -299
- universal_mcp/applications/wrike/app.py +80 -153
- universal_mcp/applications/yahoo_finance/app.py +19 -65
- universal_mcp/applications/youtube/app.py +120 -306
- universal_mcp/applications/zenquotes/app.py +3 -3
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/METADATA +4 -2
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/RECORD +115 -119
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/WHEEL +1 -1
- universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
- universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -54
- universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -7337
- universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -1467
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from datetime import UTC, datetime, timedelta
|
|
2
2
|
from typing import Any
|
|
3
|
-
|
|
4
3
|
from loguru import logger
|
|
5
4
|
from universal_mcp.applications.application import APIApplication
|
|
6
5
|
from universal_mcp.integrations import Integration
|
|
@@ -24,34 +23,19 @@ class GoogleCalendarApp(APIApplication):
|
|
|
24
23
|
"""
|
|
25
24
|
if not dt_string or dt_string == "Unknown":
|
|
26
25
|
return "Unknown"
|
|
27
|
-
|
|
28
|
-
# Check if it's just a date (all-day event) or a datetime
|
|
29
26
|
if "T" in dt_string:
|
|
30
|
-
# It's a datetime - parse and format it
|
|
31
27
|
try:
|
|
32
|
-
# Handle Z (UTC) suffix by replacing with +00:00 timezone
|
|
33
28
|
if dt_string.endswith("Z"):
|
|
34
29
|
dt_string = dt_string.replace("Z", "+00:00")
|
|
35
|
-
|
|
36
|
-
# Parse the ISO datetime string
|
|
37
30
|
dt = datetime.fromisoformat(dt_string)
|
|
38
|
-
|
|
39
|
-
# Format to a more readable form
|
|
40
31
|
return dt.strftime("%Y-%m-%d %I:%M %p")
|
|
41
32
|
except ValueError:
|
|
42
|
-
# In case of parsing error, return the original
|
|
43
33
|
logger.warning(f"Could not parse datetime string: {dt_string}")
|
|
44
34
|
return dt_string
|
|
45
35
|
else:
|
|
46
|
-
# It's just a date (all-day event)
|
|
47
36
|
return f"{dt_string} (All day)"
|
|
48
37
|
|
|
49
|
-
def get_upcoming_events(
|
|
50
|
-
self,
|
|
51
|
-
days: int = 1,
|
|
52
|
-
max_results: int | None = None,
|
|
53
|
-
time_zone: str | None = None,
|
|
54
|
-
) -> dict[str, Any]:
|
|
38
|
+
async def get_upcoming_events(self, days: int = 1, max_results: int | None = None, time_zone: str | None = None) -> dict[str, Any]:
|
|
55
39
|
"""
|
|
56
40
|
Retrieves events for a specified number of days, starting from today. This function simplifies date-range queries by auto-calculating start/end times, unlike the more comprehensive `list_events` function, which offers granular control with explicit time filters, text search, and custom sorting.
|
|
57
41
|
|
|
@@ -74,28 +58,17 @@ class GoogleCalendarApp(APIApplication):
|
|
|
74
58
|
time_min = f"{today.isoformat()}T00:00:00Z"
|
|
75
59
|
time_max = f"{end_date.isoformat()}T00:00:00Z"
|
|
76
60
|
url = f"{self.base_api_url}/events"
|
|
77
|
-
params = {
|
|
78
|
-
"timeMin": time_min,
|
|
79
|
-
"timeMax": time_max,
|
|
80
|
-
"singleEvents": "true",
|
|
81
|
-
"orderBy": "startTime",
|
|
82
|
-
}
|
|
61
|
+
params = {"timeMin": time_min, "timeMax": time_max, "singleEvents": "true", "orderBy": "startTime"}
|
|
83
62
|
if max_results is not None:
|
|
84
63
|
params["maxResults"] = str(max_results)
|
|
85
64
|
if time_zone:
|
|
86
65
|
params["timeZone"] = time_zone
|
|
87
66
|
date_range = "today" if days == 1 else f"the next {days} days"
|
|
88
67
|
logger.info(f"Retrieving calendar events for {date_range}")
|
|
89
|
-
response = self.
|
|
90
|
-
|
|
68
|
+
response = await self._aget(url, params=params)
|
|
91
69
|
return self._handle_response(response)
|
|
92
70
|
|
|
93
|
-
def get_event_by_id(
|
|
94
|
-
self,
|
|
95
|
-
event_id: str,
|
|
96
|
-
max_attendees: int | None = None,
|
|
97
|
-
time_zone: str | None = None,
|
|
98
|
-
) -> dict[str, Any]:
|
|
71
|
+
async def get_event_by_id(self, event_id: str, max_attendees: int | None = None, time_zone: str | None = None) -> dict[str, Any]:
|
|
99
72
|
"""
|
|
100
73
|
Retrieves a specific calendar event using its unique ID. Unlike `list_events`, which fetches multiple events based on date ranges or search queries, this function targets a single, known event. It can optionally limit attendees returned and specify a time zone for date formatting in the response.
|
|
101
74
|
|
|
@@ -121,10 +94,10 @@ class GoogleCalendarApp(APIApplication):
|
|
|
121
94
|
if time_zone:
|
|
122
95
|
params["timeZone"] = time_zone
|
|
123
96
|
logger.info(f"Retrieving calendar event with ID: {event_id}")
|
|
124
|
-
response = self.
|
|
97
|
+
response = await self._aget(url, params=params)
|
|
125
98
|
return self._handle_response(response)
|
|
126
99
|
|
|
127
|
-
def list_events(
|
|
100
|
+
async def list_events(
|
|
128
101
|
self,
|
|
129
102
|
max_results: int = 10,
|
|
130
103
|
time_min: str | None = None,
|
|
@@ -159,16 +132,11 @@ class GoogleCalendarApp(APIApplication):
|
|
|
159
132
|
list, retrieve, calendar, events, pagination, api, important
|
|
160
133
|
"""
|
|
161
134
|
url = f"{self.base_api_url}/events"
|
|
162
|
-
params = {
|
|
163
|
-
"maxResults": str(max_results),
|
|
164
|
-
"orderBy": order_by,
|
|
165
|
-
"singleEvents": str(single_events).lower(),
|
|
166
|
-
}
|
|
135
|
+
params = {"maxResults": str(max_results), "orderBy": order_by, "singleEvents": str(single_events).lower()}
|
|
167
136
|
if time_min:
|
|
168
137
|
params["timeMin"] = time_min
|
|
169
138
|
else:
|
|
170
|
-
|
|
171
|
-
now = datetime.utcnow().isoformat() + "Z" # 'Z' indicates UTC time
|
|
139
|
+
now = datetime.utcnow().isoformat() + "Z"
|
|
172
140
|
params["timeMin"] = now
|
|
173
141
|
if time_max:
|
|
174
142
|
params["timeMax"] = time_max
|
|
@@ -179,11 +147,10 @@ class GoogleCalendarApp(APIApplication):
|
|
|
179
147
|
if page_token:
|
|
180
148
|
params["pageToken"] = page_token
|
|
181
149
|
logger.info(f"Retrieving calendar events with params: {params}")
|
|
182
|
-
response = self.
|
|
183
|
-
|
|
150
|
+
response = await self._aget(url, params=params)
|
|
184
151
|
return self._handle_response(response)
|
|
185
152
|
|
|
186
|
-
def create_event(
|
|
153
|
+
async def create_event(
|
|
187
154
|
self,
|
|
188
155
|
start: dict[str, Any],
|
|
189
156
|
end: dict[str, Any],
|
|
@@ -231,7 +198,6 @@ class GoogleCalendarApp(APIApplication):
|
|
|
231
198
|
Tags:
|
|
232
199
|
create, calendar, event, insert, recurring, important
|
|
233
200
|
"""
|
|
234
|
-
|
|
235
201
|
request_body_data = {
|
|
236
202
|
"start": start,
|
|
237
203
|
"end": end,
|
|
@@ -241,19 +207,12 @@ class GoogleCalendarApp(APIApplication):
|
|
|
241
207
|
"attendees": attendees,
|
|
242
208
|
"recurrence": recurrence,
|
|
243
209
|
}
|
|
244
|
-
request_body_data = {
|
|
245
|
-
k: v for k, v in request_body_data.items() if v is not None
|
|
246
|
-
}
|
|
247
|
-
|
|
210
|
+
request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
|
|
248
211
|
url = f"{self.base_url}/calendars/{calendar_id}/events"
|
|
249
|
-
|
|
250
|
-
response = self._post(url, data=request_body_data)
|
|
251
|
-
|
|
212
|
+
response = await self._apost(url, data=request_body_data)
|
|
252
213
|
return self._handle_response(response)
|
|
253
214
|
|
|
254
|
-
def create_event_from_text(
|
|
255
|
-
self, text: str, send_updates: str = "none"
|
|
256
|
-
) -> dict[str, Any]:
|
|
215
|
+
async def create_event_from_text(self, text: str, send_updates: str = "none") -> dict[str, Any]:
|
|
257
216
|
"""
|
|
258
217
|
Creates a calendar event by parsing a natural language string (e.g., "Meeting tomorrow at 10am"). This offers a user-friendly shortcut, contrasting with the structured `create_event` function which requires explicit fields like start and end times.
|
|
259
218
|
|
|
@@ -273,11 +232,10 @@ class GoogleCalendarApp(APIApplication):
|
|
|
273
232
|
url = f"{self.base_api_url}/events/quickAdd"
|
|
274
233
|
params = {"text": text, "sendUpdates": send_updates}
|
|
275
234
|
logger.info(f"Creating event via quickAdd: '{text}'")
|
|
276
|
-
response = self.
|
|
277
|
-
|
|
235
|
+
response = await self._apost(url, data=None, params=params)
|
|
278
236
|
return self._handle_response(response)
|
|
279
237
|
|
|
280
|
-
def list_recurring_event_instances(
|
|
238
|
+
async def list_recurring_event_instances(
|
|
281
239
|
self,
|
|
282
240
|
event_id: str,
|
|
283
241
|
max_results: int = 25,
|
|
@@ -310,10 +268,7 @@ class GoogleCalendarApp(APIApplication):
|
|
|
310
268
|
list, retrieve, calendar, events, recurring, pagination, api, important
|
|
311
269
|
"""
|
|
312
270
|
url = f"{self.base_api_url}/events/{event_id}/instances"
|
|
313
|
-
params = {
|
|
314
|
-
"maxResults": str(max_results),
|
|
315
|
-
"showDeleted": str(show_deleted).lower(),
|
|
316
|
-
}
|
|
271
|
+
params = {"maxResults": str(max_results), "showDeleted": str(show_deleted).lower()}
|
|
317
272
|
if time_min:
|
|
318
273
|
params["timeMin"] = time_min
|
|
319
274
|
if time_max:
|
|
@@ -323,11 +278,10 @@ class GoogleCalendarApp(APIApplication):
|
|
|
323
278
|
if page_token:
|
|
324
279
|
params["pageToken"] = page_token
|
|
325
280
|
logger.info(f"Retrieving instances of recurring event with ID: {event_id}")
|
|
326
|
-
response = self.
|
|
327
|
-
|
|
281
|
+
response = await self._aget(url, params=params)
|
|
328
282
|
return self._handle_response(response)
|
|
329
283
|
|
|
330
|
-
def delete_event(
|
|
284
|
+
async def delete_event(
|
|
331
285
|
self,
|
|
332
286
|
calendarId,
|
|
333
287
|
eventId,
|
|
@@ -383,10 +337,10 @@ class GoogleCalendarApp(APIApplication):
|
|
|
383
337
|
]
|
|
384
338
|
if v is not None
|
|
385
339
|
}
|
|
386
|
-
response = self.
|
|
340
|
+
response = await self._adelete(url, params=query_params)
|
|
387
341
|
return self._handle_response(response)
|
|
388
342
|
|
|
389
|
-
def replace_event(
|
|
343
|
+
async def replace_event(
|
|
390
344
|
self,
|
|
391
345
|
event_id: str,
|
|
392
346
|
start: dict[str, Any],
|
|
@@ -443,21 +397,16 @@ class GoogleCalendarApp(APIApplication):
|
|
|
443
397
|
"attendees": attendees,
|
|
444
398
|
"recurrence": recurrence,
|
|
445
399
|
}
|
|
446
|
-
request_body_data = {
|
|
447
|
-
k: v for k, v in request_body_data.items() if v is not None
|
|
448
|
-
}
|
|
449
|
-
|
|
400
|
+
request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
|
|
450
401
|
url = f"{self.base_url}/calendars/{calendar_id}/events/{event_id}"
|
|
451
402
|
params = {"sendUpdates": send_updates}
|
|
452
403
|
if max_attendees is not None:
|
|
453
404
|
params["maxAttendees"] = str(max_attendees)
|
|
454
|
-
|
|
455
405
|
logger.info(f"Updating calendar event with ID: {event_id}")
|
|
456
|
-
response = self.
|
|
457
|
-
|
|
406
|
+
response = await self._aput(url, data=request_body_data, params=params)
|
|
458
407
|
return self._handle_response(response)
|
|
459
408
|
|
|
460
|
-
def get_primary_calendar_details(self) -> dict[str, Any]:
|
|
409
|
+
async def get_primary_calendar_details(self) -> dict[str, Any]:
|
|
461
410
|
"""
|
|
462
411
|
Retrieves metadata for the user's primary calendar, including its default timezone. This information is essential for creating new events with accurate, timezone-aware start and end times using other functions like `create_event`, preventing potential scheduling errors across different regions.
|
|
463
412
|
|
|
@@ -472,10 +421,10 @@ class GoogleCalendarApp(APIApplication):
|
|
|
472
421
|
"""
|
|
473
422
|
url = f"{self.base_api_url}"
|
|
474
423
|
logger.info("Retrieving user's calendar timezone settings")
|
|
475
|
-
response = self.
|
|
424
|
+
response = await self._aget(url)
|
|
476
425
|
return self._handle_response(response)
|
|
477
426
|
|
|
478
|
-
def get_free_busy_info(
|
|
427
|
+
async def get_free_busy_info(
|
|
479
428
|
self,
|
|
480
429
|
alt=None,
|
|
481
430
|
fields=None,
|
|
@@ -554,7 +503,7 @@ class GoogleCalendarApp(APIApplication):
|
|
|
554
503
|
]
|
|
555
504
|
if v is not None
|
|
556
505
|
}
|
|
557
|
-
response = self.
|
|
506
|
+
response = await self._apost(url, data=request_body, params=query_params)
|
|
558
507
|
response.raise_for_status()
|
|
559
508
|
return response.json()
|
|
560
509
|
|
|
@@ -568,7 +517,6 @@ class GoogleCalendarApp(APIApplication):
|
|
|
568
517
|
self.replace_event,
|
|
569
518
|
self.list_recurring_event_instances,
|
|
570
519
|
self.get_primary_calendar_details,
|
|
571
|
-
# Auto Generated from Openapi spec
|
|
572
520
|
self.delete_event,
|
|
573
521
|
self.get_free_busy_info,
|
|
574
522
|
]
|
|
@@ -9,17 +9,18 @@ This is automatically generated from OpenAPI schema for the GoogleDocsApp API.
|
|
|
9
9
|
|
|
10
10
|
| Tool | Description |
|
|
11
11
|
|------|-------------|
|
|
12
|
-
| `create_document` | Creates a blank Google Document with a specified title
|
|
13
|
-
| `get_document` | Retrieves the complete
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
25
|
-
| `
|
|
12
|
+
| `create_document` | Creates a blank Google Document with a specified title by sending a POST request to the Google Docs API. The function returns a dictionary containing the new document's metadata, including the unique document ID required by other functions for subsequent modifications or retrieval. Note that you need to call other google_docs functions (e.g. `google_docs__insert_text`) to actually add content after creating the document. |
|
|
13
|
+
| `get_document` | Retrieves the complete, raw JSON object for a Google Document by its ID. This function returns the full, unprocessed API response with all metadata and structural elements, distinguishing it from `get_document_content`, which parses this data to extract only the title and plain text. |
|
|
14
|
+
| `get_document_content` | Retrieves and converts a Google Docs document into Markdown-formatted content. |
|
|
15
|
+
| `insert_text` | Inserts a text string at a specified index within a Google Document using the batchUpdate API. Unlike functions that format existing text or delete content ranges, this method specifically adds new textual content to the document body. |
|
|
16
|
+
| `apply_text_style` | Applies character-level formatting (e.g., bold, italic, color, links) to a specified text range. This function modifies text attributes directly, distinguishing it from `update_paragraph_style` which handles block-level properties like alignment. |
|
|
17
|
+
| `update_paragraph_style` | Applies paragraph-level formatting like alignment, named styles (e.g., 'HEADING_1'), and text direction to a text range in a Google Doc. Distinct from `apply_text_style`, which handles character formatting, this method modifies properties for entire paragraphs using the batchUpdate API. |
|
|
18
|
+
| `delete_content_range` | Removes content from a specified index range in a Google Document via the batchUpdate API. Unlike functions that delete entire elements (e.g., `delete_header`), this provides granular control by targeting content based on its precise start and end location, optionally within a specific segment or tab. |
|
|
19
|
+
| `insert_table` | Inserts a table with specified rows and columns at a given index in a Google Document using the batchUpdate API. It can optionally place the table within specific document segments, such as headers or footers, handling structural additions rather than text or style modifications. |
|
|
20
|
+
| `create_footer` | Creates a footer of a specified type in a Google Document using the batch update API. This function, distinct from `create_header`, can optionally associate the new footer with a specific section break, enabling section-specific footers within the document. |
|
|
21
|
+
| `create_footnote` | Inserts a numbered footnote reference into a Google Document using the batchUpdate API. The footnote can be placed at a precise index or at the end of a document segment, distinct from the `create_footer` function which adds standard page footers. |
|
|
22
|
+
| `delete_footer` | Deletes a specific footer from a Google Document using its unique ID via a batchUpdate API request. This operation removes the entire footer object, optionally within a specific tab, distinguishing it from functions that delete headers (`delete_header`) or general content (`delete_content_range`). |
|
|
23
|
+
| `create_header` | Creates a header of a specified type in a Google Document using the batchUpdate API. This function can optionally associate the new header with a specific section break, distinguishing it from the `create_footer` method, which performs the equivalent action for footers. |
|
|
24
|
+
| `delete_header` | Deletes a specific header from a Google Document using its unique ID via a batchUpdate API request. This function, the counterpart to `create_header`, removes headers and can optionally target a header within a specific tab. It requires both the document and header IDs for the operation. |
|
|
25
|
+
| `apply_list_style` | Applies a predefined list style (bulleted or numbered) to paragraphs within a specified range using a chosen preset. Unlike `delete_paragraph_bullets`, which removes list formatting, this function creates it, distinguishing it from other text and paragraph styling methods in the class. |
|
|
26
|
+
| `delete_paragraph_bullets` | Removes bullet points or numbering from paragraphs within a specified index range in a Google Document. This reverts list formatting to normal text while preserving content, acting as the inverse operation to the `apply_list_style` function. |
|