universal-mcp-applications 0.1.22__py3-none-any.whl → 0.1.39rc8__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/ahrefs/app.py +92 -238
- universal_mcp/applications/airtable/app.py +23 -122
- universal_mcp/applications/apollo/app.py +122 -475
- universal_mcp/applications/asana/app.py +605 -1755
- universal_mcp/applications/aws_s3/app.py +36 -103
- 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 +94 -37
- 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 +36 -151
- universal_mcp/applications/crustdata/app.py +42 -121
- 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 +14 -64
- universal_mcp/applications/elevenlabs/app.py +9 -47
- universal_mcp/applications/exa/README.md +8 -4
- universal_mcp/applications/exa/app.py +408 -186
- universal_mcp/applications/falai/app.py +24 -101
- universal_mcp/applications/figma/app.py +91 -175
- universal_mcp/applications/file_system/app.py +2 -13
- universal_mcp/applications/firecrawl/app.py +186 -163
- 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 +66 -175
- universal_mcp/applications/github/app.py +28 -65
- universal_mcp/applications/gong/app.py +140 -300
- universal_mcp/applications/google_calendar/app.py +26 -78
- universal_mcp/applications/google_docs/app.py +324 -354
- universal_mcp/applications/google_drive/app.py +194 -793
- universal_mcp/applications/google_gemini/app.py +29 -64
- 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/app.py +174 -623
- universal_mcp/applications/google_sheet/helper.py +26 -53
- universal_mcp/applications/hashnode/app.py +57 -269
- universal_mcp/applications/heygen/app.py +77 -155
- 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 +737 -1619
- universal_mcp/applications/linkedin/README.md +23 -4
- universal_mcp/applications/linkedin/app.py +861 -155
- 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 +85 -207
- universal_mcp/applications/neon/app.py +144 -250
- universal_mcp/applications/notion/app.py +36 -51
- universal_mcp/applications/onedrive/README.md +24 -0
- universal_mcp/applications/onedrive/__init__.py +1 -0
- universal_mcp/applications/onedrive/app.py +316 -0
- universal_mcp/applications/openai/app.py +42 -165
- universal_mcp/applications/outlook/README.md +22 -9
- universal_mcp/applications/outlook/app.py +606 -262
- universal_mcp/applications/perplexity/README.md +2 -1
- universal_mcp/applications/perplexity/app.py +162 -20
- universal_mcp/applications/pipedrive/app.py +1021 -3331
- universal_mcp/applications/posthog/app.py +272 -541
- universal_mcp/applications/reddit/app.py +88 -204
- universal_mcp/applications/resend/app.py +41 -107
- universal_mcp/applications/retell/app.py +23 -50
- universal_mcp/applications/rocketlane/app.py +250 -963
- universal_mcp/applications/scraper/README.md +7 -4
- universal_mcp/applications/scraper/app.py +245 -283
- universal_mcp/applications/semanticscholar/app.py +36 -78
- universal_mcp/applications/semrush/app.py +43 -77
- universal_mcp/applications/sendgrid/app.py +826 -1576
- universal_mcp/applications/sentry/app.py +444 -1079
- universal_mcp/applications/serpapi/app.py +40 -143
- universal_mcp/applications/sharepoint/README.md +16 -14
- universal_mcp/applications/sharepoint/app.py +245 -154
- universal_mcp/applications/shopify/app.py +1743 -4479
- universal_mcp/applications/shortcut/app.py +272 -534
- universal_mcp/applications/slack/app.py +58 -109
- 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 +14 -50
- 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 +4 -4
- {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/METADATA +4 -2
- {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/RECORD +113 -117
- {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.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/unipile/README.md +0 -28
- universal_mcp/applications/unipile/__init__.py +0 -1
- universal_mcp/applications/unipile/app.py +0 -1077
- {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from collections.abc import Callable
|
|
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
|
|
@@ -26,8 +25,8 @@ class GhostContentApp(APIApplication):
|
|
|
26
25
|
"""
|
|
27
26
|
super().__init__(name="ghost_content", integration=integration)
|
|
28
27
|
self._base_url = None
|
|
29
|
-
self._api_key = None
|
|
30
|
-
self._version = None
|
|
28
|
+
self._api_key = None
|
|
29
|
+
self._version = None
|
|
31
30
|
|
|
32
31
|
@property
|
|
33
32
|
def base_url(self) -> str:
|
|
@@ -39,13 +38,8 @@ class GhostContentApp(APIApplication):
|
|
|
39
38
|
credentials = self.integration.get_credentials()
|
|
40
39
|
ghost_url = credentials.get("url") or credentials.get("admin_domain")
|
|
41
40
|
if not ghost_url:
|
|
42
|
-
logger.error(
|
|
43
|
-
|
|
44
|
-
)
|
|
45
|
-
raise ValueError(
|
|
46
|
-
"Integration credentials must include 'url' or 'admin_domain' for the Ghost site."
|
|
47
|
-
)
|
|
48
|
-
|
|
41
|
+
logger.error("GhostContentApp: Missing 'url' or 'admin_domain' in integration credentials.")
|
|
42
|
+
raise ValueError("Integration credentials must include 'url' or 'admin_domain' for the Ghost site.")
|
|
49
43
|
self._base_url = f"{ghost_url.rstrip('/')}/api/content/"
|
|
50
44
|
logger.info(f"GhostContentApp: Constructed base URL as {self._base_url}")
|
|
51
45
|
return self._base_url
|
|
@@ -70,18 +64,10 @@ class GhostContentApp(APIApplication):
|
|
|
70
64
|
"""
|
|
71
65
|
if not self._api_key:
|
|
72
66
|
credentials = self.integration.get_credentials()
|
|
73
|
-
api_key = (
|
|
74
|
-
credentials.get("key")
|
|
75
|
-
or credentials.get("api_key")
|
|
76
|
-
or credentials.get("API_KEY")
|
|
77
|
-
)
|
|
67
|
+
api_key = credentials.get("key") or credentials.get("api_key") or credentials.get("API_KEY")
|
|
78
68
|
if not api_key:
|
|
79
|
-
logger.error(
|
|
80
|
-
|
|
81
|
-
)
|
|
82
|
-
raise ValueError(
|
|
83
|
-
"Integration credentials must include the Ghost Content API 'key'."
|
|
84
|
-
)
|
|
69
|
+
logger.error("GhostContentApp: Content API key ('key') not found in integration credentials.")
|
|
70
|
+
raise ValueError("Integration credentials must include the Ghost Content API 'key'.")
|
|
85
71
|
self._api_key = api_key
|
|
86
72
|
return self._api_key
|
|
87
73
|
|
|
@@ -95,10 +81,8 @@ class GhostContentApp(APIApplication):
|
|
|
95
81
|
credentials = self.integration.get_credentials()
|
|
96
82
|
version = credentials.get("api_version")
|
|
97
83
|
if not version:
|
|
98
|
-
logger.warning(
|
|
99
|
-
|
|
100
|
-
)
|
|
101
|
-
version = "v5.0" # Default to a common version if not specified
|
|
84
|
+
logger.warning("GhostContentApp: 'version' not found in integration credentials. Defaulting to 'v5.0'.")
|
|
85
|
+
version = "v5.0"
|
|
102
86
|
self._version = version
|
|
103
87
|
return self._version
|
|
104
88
|
|
|
@@ -107,37 +91,32 @@ class GhostContentApp(APIApplication):
|
|
|
107
91
|
Get the headers for Ghost Content API requests.
|
|
108
92
|
Overrides the base class method to include the `Accept-Version` header.
|
|
109
93
|
"""
|
|
110
|
-
headers = super()._get_headers()
|
|
111
|
-
|
|
112
|
-
# Add the Accept-Version header as per Ghost Content API documentation
|
|
94
|
+
headers = super()._get_headers()
|
|
113
95
|
headers["Accept-Version"] = self._get_version
|
|
114
|
-
logger.debug(
|
|
115
|
-
f"GhostContentApp: Using Accept-Version: {self._get_version} in headers."
|
|
116
|
-
)
|
|
96
|
+
logger.debug(f"GhostContentApp: Using Accept-Version: {self._get_version} in headers.")
|
|
117
97
|
return headers
|
|
118
98
|
|
|
119
99
|
def _build_common_params(
|
|
120
100
|
self,
|
|
121
101
|
include: list[str] | None = None,
|
|
122
102
|
fields: list[str] | None = None,
|
|
123
|
-
filter: str | None = None,
|
|
103
|
+
filter: str | None = None,
|
|
124
104
|
limit: int | None = None,
|
|
125
105
|
order: str | None = None,
|
|
126
106
|
page: int | None = None,
|
|
127
|
-
formats: list[str] | None = None,
|
|
128
|
-
visibility: str | None = None,
|
|
107
|
+
formats: list[str] | None = None,
|
|
108
|
+
visibility: str | None = None,
|
|
129
109
|
) -> dict[str, Any]:
|
|
130
110
|
"""
|
|
131
111
|
Helper to build common query parameters for Ghost Content API requests,
|
|
132
112
|
including the mandatory API key.
|
|
133
113
|
"""
|
|
134
114
|
params: dict[str, Any] = {"key": self._get_api_key}
|
|
135
|
-
|
|
136
115
|
if include:
|
|
137
116
|
params["include"] = ",".join(include)
|
|
138
117
|
if fields:
|
|
139
118
|
params["fields"] = ",".join(fields)
|
|
140
|
-
if filter:
|
|
119
|
+
if filter:
|
|
141
120
|
params["filter"] = filter
|
|
142
121
|
if limit is not None:
|
|
143
122
|
params["limit"] = limit
|
|
@@ -151,8 +130,7 @@ class GhostContentApp(APIApplication):
|
|
|
151
130
|
params["visibility"] = visibility
|
|
152
131
|
return params
|
|
153
132
|
|
|
154
|
-
|
|
155
|
-
def browse_posts(
|
|
133
|
+
async def browse_posts(
|
|
156
134
|
self,
|
|
157
135
|
include: list[str] | None = None,
|
|
158
136
|
fields: list[str] | None = None,
|
|
@@ -161,7 +139,7 @@ class GhostContentApp(APIApplication):
|
|
|
161
139
|
page: int | None = None,
|
|
162
140
|
order: str | None = None,
|
|
163
141
|
formats: list[str] | None = None,
|
|
164
|
-
) -> dict[str, Any]:
|
|
142
|
+
) -> dict[str, Any]:
|
|
165
143
|
"""
|
|
166
144
|
Retrieves and browses posts from a data source based on provided parameters.
|
|
167
145
|
|
|
@@ -184,26 +162,15 @@ class GhostContentApp(APIApplication):
|
|
|
184
162
|
browse, fetch, posts, management, important
|
|
185
163
|
"""
|
|
186
164
|
url = f"{self.base_url}posts/"
|
|
187
|
-
# Removed 'visibility' from params as it's not in the method signature
|
|
188
165
|
params = self._build_common_params(
|
|
189
|
-
include=include,
|
|
190
|
-
fields=fields,
|
|
191
|
-
filter=filter,
|
|
192
|
-
limit=limit,
|
|
193
|
-
page=page,
|
|
194
|
-
order=order,
|
|
195
|
-
formats=formats,
|
|
166
|
+
include=include, fields=fields, filter=filter, limit=limit, page=page, order=order, formats=formats
|
|
196
167
|
)
|
|
197
|
-
response = self.
|
|
168
|
+
response = await self._aget(url, params=params)
|
|
198
169
|
return response.json()
|
|
199
170
|
|
|
200
|
-
def read_post_by_id(
|
|
201
|
-
self,
|
|
202
|
-
|
|
203
|
-
include: list[str] | None = None,
|
|
204
|
-
fields: list[str] | None = None,
|
|
205
|
-
formats: list[str] | None = None,
|
|
206
|
-
) -> dict[str, Any]: # Changed return type
|
|
171
|
+
async def read_post_by_id(
|
|
172
|
+
self, id: str, include: list[str] | None = None, fields: list[str] | None = None, formats: list[str] | None = None
|
|
173
|
+
) -> dict[str, Any]:
|
|
207
174
|
"""
|
|
208
175
|
Retrieves a post by its ID, optionally including additional data or specific fields.
|
|
209
176
|
|
|
@@ -223,19 +190,13 @@ class GhostContentApp(APIApplication):
|
|
|
223
190
|
read, post, management
|
|
224
191
|
"""
|
|
225
192
|
url = f"{self.base_url}posts/{id}/"
|
|
226
|
-
params = self._build_common_params(
|
|
227
|
-
|
|
228
|
-
)
|
|
229
|
-
response = self._get(url, params=params)
|
|
193
|
+
params = self._build_common_params(include=include, fields=fields, formats=formats)
|
|
194
|
+
response = await self._aget(url, params=params)
|
|
230
195
|
return response.json()
|
|
231
196
|
|
|
232
|
-
def read_post_by_slug(
|
|
233
|
-
self,
|
|
234
|
-
|
|
235
|
-
include: list[str] | None = None,
|
|
236
|
-
fields: list[str] | None = None,
|
|
237
|
-
formats: list[str] | None = None,
|
|
238
|
-
) -> dict[str, Any]: # Changed return type
|
|
197
|
+
async def read_post_by_slug(
|
|
198
|
+
self, slug: str, include: list[str] | None = None, fields: list[str] | None = None, formats: list[str] | None = None
|
|
199
|
+
) -> dict[str, Any]:
|
|
239
200
|
"""
|
|
240
201
|
Retrieves a post by its slug, with optional parameters to specify included data, select specific fields, or request particular data formats.
|
|
241
202
|
|
|
@@ -255,14 +216,11 @@ class GhostContentApp(APIApplication):
|
|
|
255
216
|
read, post, fetch, management
|
|
256
217
|
"""
|
|
257
218
|
url = f"{self.base_url}posts/slug/{slug}/"
|
|
258
|
-
params = self._build_common_params(
|
|
259
|
-
|
|
260
|
-
)
|
|
261
|
-
response = self._get(url, params=params)
|
|
219
|
+
params = self._build_common_params(include=include, fields=fields, formats=formats)
|
|
220
|
+
response = await self._aget(url, params=params)
|
|
262
221
|
return response.json()
|
|
263
222
|
|
|
264
|
-
|
|
265
|
-
def browse_authors(
|
|
223
|
+
async def browse_authors(
|
|
266
224
|
self,
|
|
267
225
|
include: list[str] | None = None,
|
|
268
226
|
fields: list[str] | None = None,
|
|
@@ -270,7 +228,7 @@ class GhostContentApp(APIApplication):
|
|
|
270
228
|
limit: int | None = None,
|
|
271
229
|
page: int | None = None,
|
|
272
230
|
order: str | None = None,
|
|
273
|
-
) -> dict[str, Any]:
|
|
231
|
+
) -> dict[str, Any]:
|
|
274
232
|
"""
|
|
275
233
|
Browse authors using various filtering and pagination options.
|
|
276
234
|
|
|
@@ -292,23 +250,11 @@ class GhostContentApp(APIApplication):
|
|
|
292
250
|
list, management, important
|
|
293
251
|
"""
|
|
294
252
|
url = f"{self.base_url}authors/"
|
|
295
|
-
params = self._build_common_params(
|
|
296
|
-
|
|
297
|
-
fields=fields,
|
|
298
|
-
filter=filter,
|
|
299
|
-
limit=limit,
|
|
300
|
-
page=page,
|
|
301
|
-
order=order,
|
|
302
|
-
)
|
|
303
|
-
response = self._get(url, params=params)
|
|
253
|
+
params = self._build_common_params(include=include, fields=fields, filter=filter, limit=limit, page=page, order=order)
|
|
254
|
+
response = await self._aget(url, params=params)
|
|
304
255
|
return response.json()
|
|
305
256
|
|
|
306
|
-
def read_author_by_id(
|
|
307
|
-
self,
|
|
308
|
-
id: str,
|
|
309
|
-
include: list[str] | None = None,
|
|
310
|
-
fields: list[str] | None = None,
|
|
311
|
-
) -> dict[str, Any]: # Changed return type
|
|
257
|
+
async def read_author_by_id(self, id: str, include: list[str] | None = None, fields: list[str] | None = None) -> dict[str, Any]:
|
|
312
258
|
"""
|
|
313
259
|
Read an author from the database by their unique ID.
|
|
314
260
|
|
|
@@ -328,15 +274,10 @@ class GhostContentApp(APIApplication):
|
|
|
328
274
|
"""
|
|
329
275
|
url = f"{self.base_url}authors/{id}/"
|
|
330
276
|
params = self._build_common_params(include=include, fields=fields)
|
|
331
|
-
response = self.
|
|
277
|
+
response = await self._aget(url, params=params)
|
|
332
278
|
return response.json()
|
|
333
279
|
|
|
334
|
-
def read_author_by_slug(
|
|
335
|
-
self,
|
|
336
|
-
slug: str,
|
|
337
|
-
include: list[str] | None = None,
|
|
338
|
-
fields: list[str] | None = None,
|
|
339
|
-
) -> dict[str, Any]: # Changed return type
|
|
280
|
+
async def read_author_by_slug(self, slug: str, include: list[str] | None = None, fields: list[str] | None = None) -> dict[str, Any]:
|
|
340
281
|
"""
|
|
341
282
|
Retrieve an author's information by their slug.
|
|
342
283
|
|
|
@@ -356,11 +297,10 @@ class GhostContentApp(APIApplication):
|
|
|
356
297
|
"""
|
|
357
298
|
url = f"{self.base_url}authors/slug/{slug}/"
|
|
358
299
|
params = self._build_common_params(include=include, fields=fields)
|
|
359
|
-
response = self.
|
|
300
|
+
response = await self._aget(url, params=params)
|
|
360
301
|
return response.json()
|
|
361
302
|
|
|
362
|
-
|
|
363
|
-
def browse_tags(
|
|
303
|
+
async def browse_tags(
|
|
364
304
|
self,
|
|
365
305
|
include: list[str] | None = None,
|
|
366
306
|
fields: list[str] | None = None,
|
|
@@ -368,7 +308,7 @@ class GhostContentApp(APIApplication):
|
|
|
368
308
|
limit: int | None = None,
|
|
369
309
|
page: int | None = None,
|
|
370
310
|
order: str | None = None,
|
|
371
|
-
) -> dict[str, Any]:
|
|
311
|
+
) -> dict[str, Any]:
|
|
372
312
|
"""
|
|
373
313
|
Browse and retrieve tags based on specified parameters.
|
|
374
314
|
|
|
@@ -390,23 +330,11 @@ class GhostContentApp(APIApplication):
|
|
|
390
330
|
browse, tags, management, important
|
|
391
331
|
"""
|
|
392
332
|
url = f"{self.base_url}tags/"
|
|
393
|
-
params = self._build_common_params(
|
|
394
|
-
|
|
395
|
-
fields=fields,
|
|
396
|
-
filter=filter,
|
|
397
|
-
limit=limit,
|
|
398
|
-
page=page,
|
|
399
|
-
order=order,
|
|
400
|
-
)
|
|
401
|
-
response = self._get(url, params=params)
|
|
333
|
+
params = self._build_common_params(include=include, fields=fields, filter=filter, limit=limit, page=page, order=order)
|
|
334
|
+
response = await self._aget(url, params=params)
|
|
402
335
|
return response.json()
|
|
403
336
|
|
|
404
|
-
def read_tag_by_id(
|
|
405
|
-
self,
|
|
406
|
-
id: str,
|
|
407
|
-
include: list[str] | None = None,
|
|
408
|
-
fields: list[str] | None = None,
|
|
409
|
-
) -> dict[str, Any]: # Changed return type
|
|
337
|
+
async def read_tag_by_id(self, id: str, include: list[str] | None = None, fields: list[str] | None = None) -> dict[str, Any]:
|
|
410
338
|
"""
|
|
411
339
|
Retrieves a tag's details by its unique identifier, optionally filtering by included and field sets.
|
|
412
340
|
|
|
@@ -426,15 +354,10 @@ class GhostContentApp(APIApplication):
|
|
|
426
354
|
"""
|
|
427
355
|
url = f"{self.base_url}tags/{id}/"
|
|
428
356
|
params = self._build_common_params(include=include, fields=fields)
|
|
429
|
-
response = self.
|
|
357
|
+
response = await self._aget(url, params=params)
|
|
430
358
|
return response.json()
|
|
431
359
|
|
|
432
|
-
def read_tag_by_slug(
|
|
433
|
-
self,
|
|
434
|
-
slug: str,
|
|
435
|
-
include: list[str] | None = None,
|
|
436
|
-
fields: list[str] | None = None,
|
|
437
|
-
) -> dict[str, Any]: # Changed return type
|
|
360
|
+
async def read_tag_by_slug(self, slug: str, include: list[str] | None = None, fields: list[str] | None = None) -> dict[str, Any]:
|
|
438
361
|
"""
|
|
439
362
|
Retrieve tag information identified by a unique slug, with optional inclusion of related data and selective fields.
|
|
440
363
|
|
|
@@ -454,11 +377,10 @@ class GhostContentApp(APIApplication):
|
|
|
454
377
|
"""
|
|
455
378
|
url = f"{self.base_url}tags/slug/{slug}/"
|
|
456
379
|
params = self._build_common_params(include=include, fields=fields)
|
|
457
|
-
response = self.
|
|
380
|
+
response = await self._aget(url, params=params)
|
|
458
381
|
return response.json()
|
|
459
382
|
|
|
460
|
-
|
|
461
|
-
def browse_pages(
|
|
383
|
+
async def browse_pages(
|
|
462
384
|
self,
|
|
463
385
|
include: list[str] | None = None,
|
|
464
386
|
fields: list[str] | None = None,
|
|
@@ -467,7 +389,7 @@ class GhostContentApp(APIApplication):
|
|
|
467
389
|
page: int | None = None,
|
|
468
390
|
order: str | None = None,
|
|
469
391
|
formats: list[str] | None = None,
|
|
470
|
-
) -> dict[str, Any]:
|
|
392
|
+
) -> dict[str, Any]:
|
|
471
393
|
"""
|
|
472
394
|
Retrieves a list of pages using optional filtering, pagination, and formatting parameters.
|
|
473
395
|
|
|
@@ -490,26 +412,15 @@ class GhostContentApp(APIApplication):
|
|
|
490
412
|
browse, list, management, important
|
|
491
413
|
"""
|
|
492
414
|
url = f"{self.base_url}pages/"
|
|
493
|
-
# Removed 'visibility' from params as it's not in the method signature
|
|
494
415
|
params = self._build_common_params(
|
|
495
|
-
include=include,
|
|
496
|
-
fields=fields,
|
|
497
|
-
filter=filter,
|
|
498
|
-
limit=limit,
|
|
499
|
-
page=page,
|
|
500
|
-
order=order,
|
|
501
|
-
formats=formats,
|
|
416
|
+
include=include, fields=fields, filter=filter, limit=limit, page=page, order=order, formats=formats
|
|
502
417
|
)
|
|
503
|
-
response = self.
|
|
418
|
+
response = await self._aget(url, params=params)
|
|
504
419
|
return response.json()
|
|
505
420
|
|
|
506
|
-
def read_page_by_id(
|
|
507
|
-
self,
|
|
508
|
-
|
|
509
|
-
include: list[str] | None = None,
|
|
510
|
-
fields: list[str] | None = None,
|
|
511
|
-
formats: list[str] | None = None,
|
|
512
|
-
) -> dict[str, Any]: # Changed return type
|
|
421
|
+
async def read_page_by_id(
|
|
422
|
+
self, id: str, include: list[str] | None = None, fields: list[str] | None = None, formats: list[str] | None = None
|
|
423
|
+
) -> dict[str, Any]:
|
|
513
424
|
"""
|
|
514
425
|
Read a page by ID, allowing for optional inclusion of additional data, specific fields, and formats.
|
|
515
426
|
|
|
@@ -529,19 +440,13 @@ class GhostContentApp(APIApplication):
|
|
|
529
440
|
read, page, data-retrieval
|
|
530
441
|
"""
|
|
531
442
|
url = f"{self.base_url}pages/{id}/"
|
|
532
|
-
params = self._build_common_params(
|
|
533
|
-
|
|
534
|
-
)
|
|
535
|
-
response = self._get(url, params=params)
|
|
443
|
+
params = self._build_common_params(include=include, fields=fields, formats=formats)
|
|
444
|
+
response = await self._aget(url, params=params)
|
|
536
445
|
return response.json()
|
|
537
446
|
|
|
538
|
-
def read_page_by_slug(
|
|
539
|
-
self,
|
|
540
|
-
|
|
541
|
-
include: list[str] | None = None,
|
|
542
|
-
fields: list[str] | None = None,
|
|
543
|
-
formats: list[str] | None = None,
|
|
544
|
-
) -> dict[str, Any]: # Changed return type
|
|
447
|
+
async def read_page_by_slug(
|
|
448
|
+
self, slug: str, include: list[str] | None = None, fields: list[str] | None = None, formats: list[str] | None = None
|
|
449
|
+
) -> dict[str, Any]:
|
|
545
450
|
"""
|
|
546
451
|
Retrieve a page's content and metadata by its slug identifier, optionally including related data, specific fields, and content formats.
|
|
547
452
|
|
|
@@ -561,14 +466,11 @@ class GhostContentApp(APIApplication):
|
|
|
561
466
|
read, get, page, slug, http-request
|
|
562
467
|
"""
|
|
563
468
|
url = f"{self.base_url}pages/slug/{slug}/"
|
|
564
|
-
params = self._build_common_params(
|
|
565
|
-
|
|
566
|
-
)
|
|
567
|
-
response = self._get(url, params=params)
|
|
469
|
+
params = self._build_common_params(include=include, fields=fields, formats=formats)
|
|
470
|
+
response = await self._aget(url, params=params)
|
|
568
471
|
return response.json()
|
|
569
472
|
|
|
570
|
-
|
|
571
|
-
def browse_tiers(
|
|
473
|
+
async def browse_tiers(
|
|
572
474
|
self,
|
|
573
475
|
include: list[str] | None = None,
|
|
574
476
|
fields: list[str] | None = None,
|
|
@@ -576,7 +478,7 @@ class GhostContentApp(APIApplication):
|
|
|
576
478
|
limit: int | None = None,
|
|
577
479
|
page: int | None = None,
|
|
578
480
|
order: str | None = None,
|
|
579
|
-
) -> dict[str, Any]:
|
|
481
|
+
) -> dict[str, Any]:
|
|
580
482
|
"""
|
|
581
483
|
Browse tiers based on optional filters and pagination.
|
|
582
484
|
|
|
@@ -598,20 +500,11 @@ class GhostContentApp(APIApplication):
|
|
|
598
500
|
browse, pagination, filter, management, important
|
|
599
501
|
"""
|
|
600
502
|
url = f"{self.base_url}tiers/"
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
include=include,
|
|
604
|
-
fields=fields,
|
|
605
|
-
filter=filter,
|
|
606
|
-
limit=limit,
|
|
607
|
-
page=page,
|
|
608
|
-
order=order,
|
|
609
|
-
)
|
|
610
|
-
response = self._get(url, params=params)
|
|
503
|
+
params = self._build_common_params(include=include, fields=fields, filter=filter, limit=limit, page=page, order=order)
|
|
504
|
+
response = await self._aget(url, params=params)
|
|
611
505
|
return response.json()
|
|
612
506
|
|
|
613
|
-
|
|
614
|
-
def browse_settings(self) -> dict[str, Any]: # Changed return type
|
|
507
|
+
async def browse_settings(self) -> dict[str, Any]:
|
|
615
508
|
"""
|
|
616
509
|
Fetches site settings by making a GET request to the settings endpoint.
|
|
617
510
|
|
|
@@ -628,10 +521,8 @@ class GhostContentApp(APIApplication):
|
|
|
628
521
|
fetch, settings, management, important
|
|
629
522
|
"""
|
|
630
523
|
url = f"{self.base_url}settings/"
|
|
631
|
-
params = (
|
|
632
|
-
|
|
633
|
-
) # Only the API key is needed for this endpoint via _build_common_params
|
|
634
|
-
response = self._get(url, params=params)
|
|
524
|
+
params = self._build_common_params()
|
|
525
|
+
response = await self._aget(url, params=params)
|
|
635
526
|
return response.json()
|
|
636
527
|
|
|
637
528
|
def list_tools(self) -> list[Callable]:
|