universal-mcp-applications 0.1.32__py3-none-any.whl → 0.1.36rc2__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.
Files changed (105) hide show
  1. universal_mcp/applications/ahrefs/app.py +52 -198
  2. universal_mcp/applications/airtable/app.py +23 -122
  3. universal_mcp/applications/apollo/app.py +111 -464
  4. universal_mcp/applications/asana/app.py +417 -1567
  5. universal_mcp/applications/aws_s3/app.py +36 -103
  6. universal_mcp/applications/bill/app.py +546 -1957
  7. universal_mcp/applications/box/app.py +1068 -3981
  8. universal_mcp/applications/braze/app.py +364 -1430
  9. universal_mcp/applications/browser_use/app.py +2 -8
  10. universal_mcp/applications/cal_com_v2/app.py +207 -625
  11. universal_mcp/applications/calendly/app.py +61 -200
  12. universal_mcp/applications/canva/app.py +45 -110
  13. universal_mcp/applications/clickup/app.py +207 -674
  14. universal_mcp/applications/coda/app.py +146 -426
  15. universal_mcp/applications/confluence/app.py +310 -1098
  16. universal_mcp/applications/contentful/app.py +36 -151
  17. universal_mcp/applications/crustdata/app.py +28 -107
  18. universal_mcp/applications/dialpad/app.py +283 -756
  19. universal_mcp/applications/digitalocean/app.py +1766 -5777
  20. universal_mcp/applications/domain_checker/app.py +3 -54
  21. universal_mcp/applications/e2b/app.py +14 -64
  22. universal_mcp/applications/elevenlabs/app.py +9 -47
  23. universal_mcp/applications/exa/app.py +6 -17
  24. universal_mcp/applications/falai/app.py +24 -101
  25. universal_mcp/applications/figma/app.py +53 -137
  26. universal_mcp/applications/file_system/app.py +2 -13
  27. universal_mcp/applications/firecrawl/app.py +51 -152
  28. universal_mcp/applications/fireflies/app.py +59 -281
  29. universal_mcp/applications/fpl/app.py +91 -528
  30. universal_mcp/applications/fpl/utils/fixtures.py +15 -49
  31. universal_mcp/applications/fpl/utils/helper.py +25 -89
  32. universal_mcp/applications/fpl/utils/league_utils.py +20 -64
  33. universal_mcp/applications/ghost_content/app.py +52 -161
  34. universal_mcp/applications/github/app.py +19 -56
  35. universal_mcp/applications/gong/app.py +88 -248
  36. universal_mcp/applications/google_calendar/app.py +16 -68
  37. universal_mcp/applications/google_docs/app.py +85 -189
  38. universal_mcp/applications/google_drive/app.py +141 -463
  39. universal_mcp/applications/google_gemini/app.py +12 -64
  40. universal_mcp/applications/google_mail/app.py +28 -157
  41. universal_mcp/applications/google_searchconsole/app.py +15 -48
  42. universal_mcp/applications/google_sheet/app.py +100 -581
  43. universal_mcp/applications/google_sheet/helper.py +10 -37
  44. universal_mcp/applications/hashnode/app.py +57 -269
  45. universal_mcp/applications/heygen/app.py +44 -122
  46. universal_mcp/applications/http_tools/app.py +10 -32
  47. universal_mcp/applications/hubspot/api_segments/crm_api.py +460 -1573
  48. universal_mcp/applications/hubspot/api_segments/marketing_api.py +74 -262
  49. universal_mcp/applications/hubspot/app.py +23 -87
  50. universal_mcp/applications/jira/app.py +2071 -7986
  51. universal_mcp/applications/klaviyo/app.py +494 -1376
  52. universal_mcp/applications/linkedin/README.md +9 -2
  53. universal_mcp/applications/linkedin/app.py +240 -181
  54. universal_mcp/applications/mailchimp/app.py +450 -1605
  55. universal_mcp/applications/markitdown/app.py +8 -20
  56. universal_mcp/applications/miro/app.py +217 -699
  57. universal_mcp/applications/ms_teams/app.py +64 -186
  58. universal_mcp/applications/neon/app.py +86 -192
  59. universal_mcp/applications/notion/app.py +21 -36
  60. universal_mcp/applications/onedrive/app.py +16 -38
  61. universal_mcp/applications/openai/app.py +42 -165
  62. universal_mcp/applications/outlook/app.py +24 -84
  63. universal_mcp/applications/perplexity/app.py +4 -19
  64. universal_mcp/applications/pipedrive/app.py +832 -3142
  65. universal_mcp/applications/posthog/app.py +163 -432
  66. universal_mcp/applications/reddit/app.py +40 -139
  67. universal_mcp/applications/resend/app.py +41 -107
  68. universal_mcp/applications/retell/app.py +14 -41
  69. universal_mcp/applications/rocketlane/app.py +221 -934
  70. universal_mcp/applications/scraper/README.md +7 -4
  71. universal_mcp/applications/scraper/app.py +50 -109
  72. universal_mcp/applications/semanticscholar/app.py +22 -64
  73. universal_mcp/applications/semrush/app.py +43 -77
  74. universal_mcp/applications/sendgrid/app.py +512 -1262
  75. universal_mcp/applications/sentry/app.py +271 -906
  76. universal_mcp/applications/serpapi/app.py +40 -143
  77. universal_mcp/applications/sharepoint/app.py +17 -39
  78. universal_mcp/applications/shopify/app.py +1551 -4287
  79. universal_mcp/applications/shortcut/app.py +155 -417
  80. universal_mcp/applications/slack/app.py +33 -115
  81. universal_mcp/applications/spotify/app.py +126 -325
  82. universal_mcp/applications/supabase/app.py +104 -213
  83. universal_mcp/applications/tavily/app.py +1 -1
  84. universal_mcp/applications/trello/app.py +693 -2656
  85. universal_mcp/applications/twilio/app.py +14 -50
  86. universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
  87. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
  88. universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
  89. universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
  90. universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
  91. universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
  92. universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
  93. universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
  94. universal_mcp/applications/whatsapp/app.py +35 -186
  95. universal_mcp/applications/whatsapp/audio.py +2 -6
  96. universal_mcp/applications/whatsapp/whatsapp.py +17 -51
  97. universal_mcp/applications/whatsapp_business/app.py +70 -283
  98. universal_mcp/applications/wrike/app.py +45 -118
  99. universal_mcp/applications/yahoo_finance/app.py +19 -65
  100. universal_mcp/applications/youtube/app.py +75 -261
  101. universal_mcp/applications/zenquotes/app.py +2 -2
  102. {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/METADATA +2 -2
  103. {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/RECORD +105 -105
  104. {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/WHEEL +0 -0
  105. {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,4 @@
1
1
  from typing import Any
2
-
3
2
  from universal_mcp.applications.application import APIApplication
4
3
  from universal_mcp.integrations import Integration
5
4
 
@@ -9,7 +8,7 @@ class BrazeApp(APIApplication):
9
8
  super().__init__(name="braze", integration=integration, **kwargs)
10
9
  self.base_url = "https://rest.iad-01.braze.com"
11
10
 
12
- def update_email_template(
11
+ async def update_email_template(
13
12
  self,
14
13
  email_template_id: str | None = None,
15
14
  template_name: str | None = None,
@@ -51,30 +50,19 @@ class BrazeApp(APIApplication):
51
50
  "preheader": preheader,
52
51
  "tags": tags,
53
52
  }
54
- request_body_data = {
55
- k: v for k, v in request_body_data.items() if v is not None
56
- }
53
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
57
54
  url = f"{self.base_url}/templates/email/update"
58
55
  query_params = {}
59
- response = self._post(
60
- url,
61
- data=request_body_data,
62
- params=query_params,
63
- content_type="application/json",
64
- )
56
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
65
57
  response.raise_for_status()
66
- if (
67
- response.status_code == 204
68
- or not response.content
69
- or not response.text.strip()
70
- ):
58
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
71
59
  return None
72
60
  try:
73
61
  return response.json()
74
62
  except ValueError:
75
63
  return None
76
64
 
77
- def track_user_activity(
65
+ async def track_user_activity(
78
66
  self,
79
67
  attributes: list[dict[str, Any]] | None = None,
80
68
  events: list[dict[str, Any]] | None = None,
@@ -99,35 +87,20 @@ class BrazeApp(APIApplication):
99
87
  User Data
100
88
  """
101
89
  request_body_data = None
102
- request_body_data = {
103
- "attributes": attributes,
104
- "events": events,
105
- "purchases": purchases,
106
- }
107
- request_body_data = {
108
- k: v for k, v in request_body_data.items() if v is not None
109
- }
90
+ request_body_data = {"attributes": attributes, "events": events, "purchases": purchases}
91
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
110
92
  url = f"{self.base_url}/users/track"
111
93
  query_params = {}
112
- response = self._post(
113
- url,
114
- data=request_body_data,
115
- params=query_params,
116
- content_type="application/json",
117
- )
94
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
118
95
  response.raise_for_status()
119
- if (
120
- response.status_code == 204
121
- or not response.content
122
- or not response.text.strip()
123
- ):
96
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
124
97
  return None
125
98
  try:
126
99
  return response.json()
127
100
  except ValueError:
128
101
  return None
129
102
 
130
- def delete_catalog_by_name(self, catalog_name: str) -> dict[str, Any]:
103
+ async def delete_catalog_by_name(self, catalog_name: str) -> dict[str, Any]:
131
104
  """
132
105
  Delete Catalog
133
106
 
@@ -150,18 +123,14 @@ class BrazeApp(APIApplication):
150
123
  query_params = {}
151
124
  response = self._delete(url, params=query_params)
152
125
  response.raise_for_status()
153
- if (
154
- response.status_code == 204
155
- or not response.content
156
- or not response.text.strip()
157
- ):
126
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
158
127
  return None
159
128
  try:
160
129
  return response.json()
161
130
  except ValueError:
162
131
  return None
163
132
 
164
- def list_catalogs(self) -> dict[str, Any]:
133
+ async def list_catalogs(self) -> dict[str, Any]:
165
134
  """
166
135
  List Catalogs
167
136
 
@@ -179,20 +148,14 @@ class BrazeApp(APIApplication):
179
148
  query_params = {}
180
149
  response = self._get(url, params=query_params)
181
150
  response.raise_for_status()
182
- if (
183
- response.status_code == 204
184
- or not response.content
185
- or not response.text.strip()
186
- ):
151
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
187
152
  return None
188
153
  try:
189
154
  return response.json()
190
155
  except ValueError:
191
156
  return None
192
157
 
193
- def create_catalog(
194
- self, catalogs: list[dict[str, Any]] | None = None
195
- ) -> dict[str, Any]:
158
+ async def create_catalog(self, catalogs: list[dict[str, Any]] | None = None) -> dict[str, Any]:
196
159
  """
197
160
  Create Catalog
198
161
 
@@ -210,33 +173,20 @@ class BrazeApp(APIApplication):
210
173
  Catalogs > Catalog Management > Synchronous, important
211
174
  """
212
175
  request_body_data = None
213
- request_body_data = {
214
- "catalogs": catalogs,
215
- }
216
- request_body_data = {
217
- k: v for k, v in request_body_data.items() if v is not None
218
- }
176
+ request_body_data = {"catalogs": catalogs}
177
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
219
178
  url = f"{self.base_url}/catalogs"
220
179
  query_params = {}
221
- response = self._post(
222
- url,
223
- data=request_body_data,
224
- params=query_params,
225
- content_type="application/json",
226
- )
180
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
227
181
  response.raise_for_status()
228
- if (
229
- response.status_code == 204
230
- or not response.content
231
- or not response.text.strip()
232
- ):
182
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
233
183
  return None
234
184
  try:
235
185
  return response.json()
236
186
  except ValueError:
237
187
  return None
238
188
 
239
- def delete_catalog_item(self, catalog_name: str) -> dict[str, Any]:
189
+ async def delete_catalog_item(self, catalog_name: str) -> dict[str, Any]:
240
190
  """
241
191
  Delete Multiple Catalog Items
242
192
 
@@ -259,20 +209,14 @@ class BrazeApp(APIApplication):
259
209
  query_params = {}
260
210
  response = self._delete(url, params=query_params)
261
211
  response.raise_for_status()
262
- if (
263
- response.status_code == 204
264
- or not response.content
265
- or not response.text.strip()
266
- ):
212
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
267
213
  return None
268
214
  try:
269
215
  return response.json()
270
216
  except ValueError:
271
217
  return None
272
218
 
273
- def edit_catalog_item(
274
- self, catalog_name: str, items: list[dict[str, Any]] | None = None
275
- ) -> dict[str, Any]:
219
+ async def edit_catalog_item(self, catalog_name: str, items: list[dict[str, Any]] | None = None) -> dict[str, Any]:
276
220
  """
277
221
  Edit Multiple Catalog Items
278
222
 
@@ -293,30 +237,20 @@ class BrazeApp(APIApplication):
293
237
  if catalog_name is None:
294
238
  raise ValueError("Missing required parameter 'catalog_name'.")
295
239
  request_body_data = None
296
- request_body_data = {
297
- "items": items,
298
- }
299
- request_body_data = {
300
- k: v for k, v in request_body_data.items() if v is not None
301
- }
240
+ request_body_data = {"items": items}
241
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
302
242
  url = f"{self.base_url}/catalogs/{catalog_name}/items"
303
243
  query_params = {}
304
244
  response = self._patch(url, data=request_body_data, params=query_params)
305
245
  response.raise_for_status()
306
- if (
307
- response.status_code == 204
308
- or not response.content
309
- or not response.text.strip()
310
- ):
246
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
311
247
  return None
312
248
  try:
313
249
  return response.json()
314
250
  except ValueError:
315
251
  return None
316
252
 
317
- def create_catalog_item(
318
- self, catalog_name: str, items: list[dict[str, Any]] | None = None
319
- ) -> dict[str, Any]:
253
+ async def create_catalog_item(self, catalog_name: str, items: list[dict[str, Any]] | None = None) -> dict[str, Any]:
320
254
  """
321
255
  Create Multiple Catalog Items
322
256
 
@@ -337,35 +271,20 @@ class BrazeApp(APIApplication):
337
271
  if catalog_name is None:
338
272
  raise ValueError("Missing required parameter 'catalog_name'.")
339
273
  request_body_data = None
340
- request_body_data = {
341
- "items": items,
342
- }
343
- request_body_data = {
344
- k: v for k, v in request_body_data.items() if v is not None
345
- }
274
+ request_body_data = {"items": items}
275
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
346
276
  url = f"{self.base_url}/catalogs/{catalog_name}/items"
347
277
  query_params = {}
348
- response = self._post(
349
- url,
350
- data=request_body_data,
351
- params=query_params,
352
- content_type="application/json",
353
- )
278
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
354
279
  response.raise_for_status()
355
- if (
356
- response.status_code == 204
357
- or not response.content
358
- or not response.text.strip()
359
- ):
280
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
360
281
  return None
361
282
  try:
362
283
  return response.json()
363
284
  except ValueError:
364
285
  return None
365
286
 
366
- def update_catalog_items(
367
- self, catalog_name: str, items: list[dict[str, Any]] | None = None
368
- ) -> dict[str, Any]:
287
+ async def update_catalog_items(self, catalog_name: str, items: list[dict[str, Any]] | None = None) -> dict[str, Any]:
369
288
  """
370
289
  Update Catalog Item
371
290
 
@@ -386,33 +305,20 @@ class BrazeApp(APIApplication):
386
305
  if catalog_name is None:
387
306
  raise ValueError("Missing required parameter 'catalog_name'.")
388
307
  request_body_data = None
389
- request_body_data = {
390
- "items": items,
391
- }
392
- request_body_data = {
393
- k: v for k, v in request_body_data.items() if v is not None
394
- }
308
+ request_body_data = {"items": items}
309
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
395
310
  url = f"{self.base_url}/catalogs/{catalog_name}/items"
396
311
  query_params = {}
397
- response = self._put(
398
- url,
399
- data=request_body_data,
400
- params=query_params,
401
- content_type="application/json",
402
- )
312
+ response = self._put(url, data=request_body_data, params=query_params, content_type="application/json")
403
313
  response.raise_for_status()
404
- if (
405
- response.status_code == 204
406
- or not response.content
407
- or not response.text.strip()
408
- ):
314
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
409
315
  return None
410
316
  try:
411
317
  return response.json()
412
318
  except ValueError:
413
319
  return None
414
320
 
415
- def list_catalog_items(self, catalog_name: str) -> dict[str, Any]:
321
+ async def list_catalog_items(self, catalog_name: str) -> dict[str, Any]:
416
322
  """
417
323
  List Multiple Catalog Item Details
418
324
 
@@ -435,20 +341,14 @@ class BrazeApp(APIApplication):
435
341
  query_params = {}
436
342
  response = self._get(url, params=query_params)
437
343
  response.raise_for_status()
438
- if (
439
- response.status_code == 204
440
- or not response.content
441
- or not response.text.strip()
442
- ):
344
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
443
345
  return None
444
346
  try:
445
347
  return response.json()
446
348
  except ValueError:
447
349
  return None
448
350
 
449
- def delete_catalog_item_by_id(
450
- self, catalog_name: str, item_id: str
451
- ) -> dict[str, Any]:
351
+ async def delete_catalog_item_by_id(self, catalog_name: str, item_id: str) -> dict[str, Any]:
452
352
  """
453
353
  Delete a Catalog Item
454
354
 
@@ -474,18 +374,14 @@ class BrazeApp(APIApplication):
474
374
  query_params = {}
475
375
  response = self._delete(url, params=query_params)
476
376
  response.raise_for_status()
477
- if (
478
- response.status_code == 204
479
- or not response.content
480
- or not response.text.strip()
481
- ):
377
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
482
378
  return None
483
379
  try:
484
380
  return response.json()
485
381
  except ValueError:
486
382
  return None
487
383
 
488
- def get_item_detail(self, catalog_name: str, item_id: str) -> dict[str, Any]:
384
+ async def get_item_detail(self, catalog_name: str, item_id: str) -> dict[str, Any]:
489
385
  """
490
386
  List Catalog Item Details
491
387
 
@@ -511,23 +407,14 @@ class BrazeApp(APIApplication):
511
407
  query_params = {}
512
408
  response = self._get(url, params=query_params)
513
409
  response.raise_for_status()
514
- if (
515
- response.status_code == 204
516
- or not response.content
517
- or not response.text.strip()
518
- ):
410
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
519
411
  return None
520
412
  try:
521
413
  return response.json()
522
414
  except ValueError:
523
415
  return None
524
416
 
525
- def update_catalog_item_by_id(
526
- self,
527
- catalog_name: str,
528
- item_id: str,
529
- items: list[dict[str, Any]] | None = None,
530
- ) -> dict[str, Any]:
417
+ async def update_catalog_item_by_id(self, catalog_name: str, item_id: str, items: list[dict[str, Any]] | None = None) -> dict[str, Any]:
531
418
  """
532
419
  Edit Catalog Items
533
420
 
@@ -551,33 +438,20 @@ class BrazeApp(APIApplication):
551
438
  if item_id is None:
552
439
  raise ValueError("Missing required parameter 'item_id'.")
553
440
  request_body_data = None
554
- request_body_data = {
555
- "items": items,
556
- }
557
- request_body_data = {
558
- k: v for k, v in request_body_data.items() if v is not None
559
- }
441
+ request_body_data = {"items": items}
442
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
560
443
  url = f"{self.base_url}/catalogs/{catalog_name}/items/{item_id}"
561
444
  query_params = {}
562
445
  response = self._patch(url, data=request_body_data, params=query_params)
563
446
  response.raise_for_status()
564
- if (
565
- response.status_code == 204
566
- or not response.content
567
- or not response.text.strip()
568
- ):
447
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
569
448
  return None
570
449
  try:
571
450
  return response.json()
572
451
  except ValueError:
573
452
  return None
574
453
 
575
- def add_catalog_item_by_id(
576
- self,
577
- catalog_name: str,
578
- item_id: str,
579
- items: list[dict[str, Any]] | None = None,
580
- ) -> dict[str, Any]:
454
+ async def add_catalog_item_by_id(self, catalog_name: str, item_id: str, items: list[dict[str, Any]] | None = None) -> dict[str, Any]:
581
455
  """
582
456
  Create Catalog Item
583
457
 
@@ -601,38 +475,20 @@ class BrazeApp(APIApplication):
601
475
  if item_id is None:
602
476
  raise ValueError("Missing required parameter 'item_id'.")
603
477
  request_body_data = None
604
- request_body_data = {
605
- "items": items,
606
- }
607
- request_body_data = {
608
- k: v for k, v in request_body_data.items() if v is not None
609
- }
478
+ request_body_data = {"items": items}
479
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
610
480
  url = f"{self.base_url}/catalogs/{catalog_name}/items/{item_id}"
611
481
  query_params = {}
612
- response = self._post(
613
- url,
614
- data=request_body_data,
615
- params=query_params,
616
- content_type="application/json",
617
- )
482
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
618
483
  response.raise_for_status()
619
- if (
620
- response.status_code == 204
621
- or not response.content
622
- or not response.text.strip()
623
- ):
484
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
624
485
  return None
625
486
  try:
626
487
  return response.json()
627
488
  except ValueError:
628
489
  return None
629
490
 
630
- def update_catalog_item(
631
- self,
632
- catalog_name: str,
633
- item_id: str,
634
- items: list[dict[str, Any]] | None = None,
635
- ) -> dict[str, Any]:
491
+ async def update_catalog_item(self, catalog_name: str, item_id: str, items: list[dict[str, Any]] | None = None) -> dict[str, Any]:
636
492
  """
637
493
  Update Catalog Item
638
494
 
@@ -656,33 +512,20 @@ class BrazeApp(APIApplication):
656
512
  if item_id is None:
657
513
  raise ValueError("Missing required parameter 'item_id'.")
658
514
  request_body_data = None
659
- request_body_data = {
660
- "items": items,
661
- }
662
- request_body_data = {
663
- k: v for k, v in request_body_data.items() if v is not None
664
- }
515
+ request_body_data = {"items": items}
516
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
665
517
  url = f"{self.base_url}/catalogs/{catalog_name}/items/{item_id}"
666
518
  query_params = {}
667
- response = self._put(
668
- url,
669
- data=request_body_data,
670
- params=query_params,
671
- content_type="application/json",
672
- )
519
+ response = self._put(url, data=request_body_data, params=query_params, content_type="application/json")
673
520
  response.raise_for_status()
674
- if (
675
- response.status_code == 204
676
- or not response.content
677
- or not response.text.strip()
678
- ):
521
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
679
522
  return None
680
523
  try:
681
524
  return response.json()
682
525
  except ValueError:
683
526
  return None
684
527
 
685
- def list_hard_bounces(
528
+ async def list_hard_bounces(
686
529
  self,
687
530
  start_date: str | None = None,
688
531
  end_date: str | None = None,
@@ -713,29 +556,19 @@ class BrazeApp(APIApplication):
713
556
  url = f"{self.base_url}/email/hard_bounces"
714
557
  query_params = {
715
558
  k: v
716
- for k, v in [
717
- ("start_date", start_date),
718
- ("end_date", end_date),
719
- ("limit", limit),
720
- ("offset", offset),
721
- ("email", email),
722
- ]
559
+ for k, v in [("start_date", start_date), ("end_date", end_date), ("limit", limit), ("offset", offset), ("email", email)]
723
560
  if v is not None
724
561
  }
725
562
  response = self._get(url, params=query_params)
726
563
  response.raise_for_status()
727
- if (
728
- response.status_code == 204
729
- or not response.content
730
- or not response.text.strip()
731
- ):
564
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
732
565
  return None
733
566
  try:
734
567
  return response.json()
735
568
  except ValueError:
736
569
  return None
737
570
 
738
- def list_unsubscribes(
571
+ async def list_unsubscribes(
739
572
  self,
740
573
  start_date: str | None = None,
741
574
  end_date: str | None = None,
@@ -780,20 +613,14 @@ class BrazeApp(APIApplication):
780
613
  }
781
614
  response = self._get(url, params=query_params)
782
615
  response.raise_for_status()
783
- if (
784
- response.status_code == 204
785
- or not response.content
786
- or not response.text.strip()
787
- ):
616
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
788
617
  return None
789
618
  try:
790
619
  return response.json()
791
620
  except ValueError:
792
621
  return None
793
622
 
794
- def post_email_status(
795
- self, email: str | None = None, subscription_state: str | None = None
796
- ) -> dict[str, Any]:
623
+ async def post_email_status(self, email: str | None = None, subscription_state: str | None = None) -> dict[str, Any]:
797
624
  """
798
625
  Change Email Subscription Status
799
626
 
@@ -812,34 +639,20 @@ class BrazeApp(APIApplication):
812
639
  Email Lists & Addresses
813
640
  """
814
641
  request_body_data = None
815
- request_body_data = {
816
- "email": email,
817
- "subscription_state": subscription_state,
818
- }
819
- request_body_data = {
820
- k: v for k, v in request_body_data.items() if v is not None
821
- }
642
+ request_body_data = {"email": email, "subscription_state": subscription_state}
643
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
822
644
  url = f"{self.base_url}/email/status"
823
645
  query_params = {}
824
- response = self._post(
825
- url,
826
- data=request_body_data,
827
- params=query_params,
828
- content_type="application/json",
829
- )
646
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
830
647
  response.raise_for_status()
831
- if (
832
- response.status_code == 204
833
- or not response.content
834
- or not response.text.strip()
835
- ):
648
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
836
649
  return None
837
650
  try:
838
651
  return response.json()
839
652
  except ValueError:
840
653
  return None
841
654
 
842
- def remove_bounced_email(self, email: str | None = None) -> dict[str, Any]:
655
+ async def remove_bounced_email(self, email: str | None = None) -> dict[str, Any]:
843
656
  """
844
657
  Remove Hard Bounced Emails
845
658
 
@@ -857,33 +670,20 @@ class BrazeApp(APIApplication):
857
670
  Email Lists & Addresses
858
671
  """
859
672
  request_body_data = None
860
- request_body_data = {
861
- "email": email,
862
- }
863
- request_body_data = {
864
- k: v for k, v in request_body_data.items() if v is not None
865
- }
673
+ request_body_data = {"email": email}
674
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
866
675
  url = f"{self.base_url}/email/bounce/remove"
867
676
  query_params = {}
868
- response = self._post(
869
- url,
870
- data=request_body_data,
871
- params=query_params,
872
- content_type="application/json",
873
- )
677
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
874
678
  response.raise_for_status()
875
- if (
876
- response.status_code == 204
877
- or not response.content
878
- or not response.text.strip()
879
- ):
679
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
880
680
  return None
881
681
  try:
882
682
  return response.json()
883
683
  except ValueError:
884
684
  return None
885
685
 
886
- def remove_email_spam(self, email: str | None = None) -> dict[str, Any]:
686
+ async def remove_email_spam(self, email: str | None = None) -> dict[str, Any]:
887
687
  """
888
688
  Remove Email Addresses from Spam List
889
689
 
@@ -901,33 +701,20 @@ class BrazeApp(APIApplication):
901
701
  Email Lists & Addresses
902
702
  """
903
703
  request_body_data = None
904
- request_body_data = {
905
- "email": email,
906
- }
907
- request_body_data = {
908
- k: v for k, v in request_body_data.items() if v is not None
909
- }
704
+ request_body_data = {"email": email}
705
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
910
706
  url = f"{self.base_url}/email/spam/remove"
911
707
  query_params = {}
912
- response = self._post(
913
- url,
914
- data=request_body_data,
915
- params=query_params,
916
- content_type="application/json",
917
- )
708
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
918
709
  response.raise_for_status()
919
- if (
920
- response.status_code == 204
921
- or not response.content
922
- or not response.text.strip()
923
- ):
710
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
924
711
  return None
925
712
  try:
926
713
  return response.json()
927
714
  except ValueError:
928
715
  return None
929
716
 
930
- def add_email_to_blocklist(self, email: list[str] | None = None) -> dict[str, Any]:
717
+ async def add_email_to_blocklist(self, email: list[str] | None = None) -> dict[str, Any]:
931
718
  """
932
719
  Blocklist Email Addresses
933
720
 
@@ -945,33 +732,20 @@ class BrazeApp(APIApplication):
945
732
  Email Lists & Addresses
946
733
  """
947
734
  request_body_data = None
948
- request_body_data = {
949
- "email": email,
950
- }
951
- request_body_data = {
952
- k: v for k, v in request_body_data.items() if v is not None
953
- }
735
+ request_body_data = {"email": email}
736
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
954
737
  url = f"{self.base_url}/email/blocklist"
955
738
  query_params = {}
956
- response = self._post(
957
- url,
958
- data=request_body_data,
959
- params=query_params,
960
- content_type="application/json",
961
- )
739
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
962
740
  response.raise_for_status()
963
- if (
964
- response.status_code == 204
965
- or not response.content
966
- or not response.text.strip()
967
- ):
741
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
968
742
  return None
969
743
  try:
970
744
  return response.json()
971
745
  except ValueError:
972
746
  return None
973
747
 
974
- def add_to_blacklist(self, email: list[str] | None = None) -> dict[str, Any]:
748
+ async def add_to_blacklist(self, email: list[str] | None = None) -> dict[str, Any]:
975
749
  """
976
750
  Blacklist Email Addresses
977
751
 
@@ -989,37 +763,21 @@ class BrazeApp(APIApplication):
989
763
  Email Lists & Addresses
990
764
  """
991
765
  request_body_data = None
992
- request_body_data = {
993
- "email": email,
994
- }
995
- request_body_data = {
996
- k: v for k, v in request_body_data.items() if v is not None
997
- }
766
+ request_body_data = {"email": email}
767
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
998
768
  url = f"{self.base_url}/email/blacklist"
999
769
  query_params = {}
1000
- response = self._post(
1001
- url,
1002
- data=request_body_data,
1003
- params=query_params,
1004
- content_type="application/json",
1005
- )
770
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
1006
771
  response.raise_for_status()
1007
- if (
1008
- response.status_code == 204
1009
- or not response.content
1010
- or not response.text.strip()
1011
- ):
772
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1012
773
  return None
1013
774
  try:
1014
775
  return response.json()
1015
776
  except ValueError:
1016
777
  return None
1017
778
 
1018
- def get_campaign_data_series(
1019
- self,
1020
- campaign_id: str | None = None,
1021
- length: int | None = None,
1022
- ending_at: str | None = None,
779
+ async def get_campaign_data_series(
780
+ self, campaign_id: str | None = None, length: int | None = None, ending_at: str | None = None
1023
781
  ) -> dict[str, Any]:
1024
782
  """
1025
783
  Export Campaign Analytics
@@ -1040,29 +798,17 @@ class BrazeApp(APIApplication):
1040
798
  Export > Campaign
1041
799
  """
1042
800
  url = f"{self.base_url}/campaigns/data_series"
1043
- query_params = {
1044
- k: v
1045
- for k, v in [
1046
- ("campaign_id", campaign_id),
1047
- ("length", length),
1048
- ("ending_at", ending_at),
1049
- ]
1050
- if v is not None
1051
- }
801
+ query_params = {k: v for k, v in [("campaign_id", campaign_id), ("length", length), ("ending_at", ending_at)] if v is not None}
1052
802
  response = self._get(url, params=query_params)
1053
803
  response.raise_for_status()
1054
- if (
1055
- response.status_code == 204
1056
- or not response.content
1057
- or not response.text.strip()
1058
- ):
804
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1059
805
  return None
1060
806
  try:
1061
807
  return response.json()
1062
808
  except ValueError:
1063
809
  return None
1064
810
 
1065
- def get_campaign_details(self, campaign_id: str | None = None) -> dict[str, Any]:
811
+ async def get_campaign_details(self, campaign_id: str | None = None) -> dict[str, Any]:
1066
812
  """
1067
813
  Export Campaign Details
1068
814
 
@@ -1080,23 +826,17 @@ class BrazeApp(APIApplication):
1080
826
  Export > Campaign
1081
827
  """
1082
828
  url = f"{self.base_url}/campaigns/details"
1083
- query_params = {
1084
- k: v for k, v in [("campaign_id", campaign_id)] if v is not None
1085
- }
829
+ query_params = {k: v for k, v in [("campaign_id", campaign_id)] if v is not None}
1086
830
  response = self._get(url, params=query_params)
1087
831
  response.raise_for_status()
1088
- if (
1089
- response.status_code == 204
1090
- or not response.content
1091
- or not response.text.strip()
1092
- ):
832
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1093
833
  return None
1094
834
  try:
1095
835
  return response.json()
1096
836
  except ValueError:
1097
837
  return None
1098
838
 
1099
- def list_campaigns(
839
+ async def list_campaigns(
1100
840
  self,
1101
841
  page: int | None = None,
1102
842
  include_archived: bool | None = None,
@@ -1136,23 +876,15 @@ class BrazeApp(APIApplication):
1136
876
  }
1137
877
  response = self._get(url, params=query_params)
1138
878
  response.raise_for_status()
1139
- if (
1140
- response.status_code == 204
1141
- or not response.content
1142
- or not response.text.strip()
1143
- ):
879
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1144
880
  return None
1145
881
  try:
1146
882
  return response.json()
1147
883
  except ValueError:
1148
884
  return None
1149
885
 
1150
- def get_send_data_series(
1151
- self,
1152
- campaign_id: str | None = None,
1153
- send_id: str | None = None,
1154
- length: int | None = None,
1155
- ending_at: str | None = None,
886
+ async def get_send_data_series(
887
+ self, campaign_id: str | None = None, send_id: str | None = None, length: int | None = None, ending_at: str | None = None
1156
888
  ) -> dict[str, Any]:
1157
889
  """
1158
890
  Export Send Analytics
@@ -1176,28 +908,19 @@ class BrazeApp(APIApplication):
1176
908
  url = f"{self.base_url}/sends/data_series"
1177
909
  query_params = {
1178
910
  k: v
1179
- for k, v in [
1180
- ("campaign_id", campaign_id),
1181
- ("send_id", send_id),
1182
- ("length", length),
1183
- ("ending_at", ending_at),
1184
- ]
911
+ for k, v in [("campaign_id", campaign_id), ("send_id", send_id), ("length", length), ("ending_at", ending_at)]
1185
912
  if v is not None
1186
913
  }
1187
914
  response = self._get(url, params=query_params)
1188
915
  response.raise_for_status()
1189
- if (
1190
- response.status_code == 204
1191
- or not response.content
1192
- or not response.text.strip()
1193
- ):
916
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1194
917
  return None
1195
918
  try:
1196
919
  return response.json()
1197
920
  except ValueError:
1198
921
  return None
1199
922
 
1200
- def get_canvas_data_series(
923
+ async def get_canvas_data_series(
1201
924
  self,
1202
925
  canvas_id: str | None = None,
1203
926
  ending_at: str | None = None,
@@ -1245,18 +968,14 @@ class BrazeApp(APIApplication):
1245
968
  }
1246
969
  response = self._get(url, params=query_params)
1247
970
  response.raise_for_status()
1248
- if (
1249
- response.status_code == 204
1250
- or not response.content
1251
- or not response.text.strip()
1252
- ):
971
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1253
972
  return None
1254
973
  try:
1255
974
  return response.json()
1256
975
  except ValueError:
1257
976
  return None
1258
977
 
1259
- def fetch_canvas_data_summary(
978
+ async def fetch_canvas_data_summary(
1260
979
  self,
1261
980
  canvas_id: str | None = None,
1262
981
  ending_at: str | None = None,
@@ -1305,23 +1024,19 @@ class BrazeApp(APIApplication):
1305
1024
  }
1306
1025
  response = self._get(url, params=query_params)
1307
1026
  response.raise_for_status()
1308
- if (
1309
- response.status_code == 204
1310
- or not response.content
1311
- or not response.text.strip()
1312
- ):
1027
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1313
1028
  return None
1314
1029
  try:
1315
1030
  return response.json()
1316
1031
  except ValueError:
1317
1032
  return None
1318
1033
 
1319
- def get_canvas_details(self, canvas_id: str | None = None) -> dict[str, Any]:
1034
+ async def get_canvas_details(self, canvas_id: str | None = None) -> dict[str, Any]:
1320
1035
  """
1321
1036
  Export Canvas Details
1322
1037
 
1323
1038
  Args:
1324
- canvas_id (string): (Required) String See [Canvas API Identifier]( Example: '{{canvas_identifier}}'.
1039
+ canvas_id (string): (Required) String See\xa0[Canvas API Identifier]( Example: '{{canvas_identifier}}'.
1325
1040
 
1326
1041
  Returns:
1327
1042
  dict[str, Any]: Successful response
@@ -1337,18 +1052,14 @@ class BrazeApp(APIApplication):
1337
1052
  query_params = {k: v for k, v in [("canvas_id", canvas_id)] if v is not None}
1338
1053
  response = self._get(url, params=query_params)
1339
1054
  response.raise_for_status()
1340
- if (
1341
- response.status_code == 204
1342
- or not response.content
1343
- or not response.text.strip()
1344
- ):
1055
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1345
1056
  return None
1346
1057
  try:
1347
1058
  return response.json()
1348
1059
  except ValueError:
1349
1060
  return None
1350
1061
 
1351
- def list_canvas(
1062
+ async def list_canvas(
1352
1063
  self,
1353
1064
  page: int | None = None,
1354
1065
  include_archived: bool | None = None,
@@ -1388,18 +1099,14 @@ class BrazeApp(APIApplication):
1388
1099
  }
1389
1100
  response = self._get(url, params=query_params)
1390
1101
  response.raise_for_status()
1391
- if (
1392
- response.status_code == 204
1393
- or not response.content
1394
- or not response.text.strip()
1395
- ):
1102
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1396
1103
  return None
1397
1104
  try:
1398
1105
  return response.json()
1399
1106
  except ValueError:
1400
1107
  return None
1401
1108
 
1402
- def list_events(self, page: int | None = None) -> dict[str, Any]:
1109
+ async def list_events(self, page: int | None = None) -> dict[str, Any]:
1403
1110
  """
1404
1111
  Export Custom Events List
1405
1112
 
@@ -1420,18 +1127,14 @@ class BrazeApp(APIApplication):
1420
1127
  query_params = {k: v for k, v in [("page", page)] if v is not None}
1421
1128
  response = self._get(url, params=query_params)
1422
1129
  response.raise_for_status()
1423
- if (
1424
- response.status_code == 204
1425
- or not response.content
1426
- or not response.text.strip()
1427
- ):
1130
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1428
1131
  return None
1429
1132
  try:
1430
1133
  return response.json()
1431
1134
  except ValueError:
1432
1135
  return None
1433
1136
 
1434
- def fetch_event_series_data(
1137
+ async def fetch_event_series_data(
1435
1138
  self,
1436
1139
  event: str | None = None,
1437
1140
  length: int | None = None,
@@ -1476,22 +1179,15 @@ class BrazeApp(APIApplication):
1476
1179
  }
1477
1180
  response = self._get(url, params=query_params)
1478
1181
  response.raise_for_status()
1479
- if (
1480
- response.status_code == 204
1481
- or not response.content
1482
- or not response.text.strip()
1483
- ):
1182
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1484
1183
  return None
1485
1184
  try:
1486
1185
  return response.json()
1487
1186
  except ValueError:
1488
1187
  return None
1489
1188
 
1490
- def list_new_user_kpi_series(
1491
- self,
1492
- length: int | None = None,
1493
- ending_at: str | None = None,
1494
- app_id: str | None = None,
1189
+ async def list_new_user_kpi_series(
1190
+ self, length: int | None = None, ending_at: str | None = None, app_id: str | None = None
1495
1191
  ) -> dict[str, Any]:
1496
1192
  """
1497
1193
  Export Daily New Users by Date
@@ -1512,33 +1208,18 @@ class BrazeApp(APIApplication):
1512
1208
  Export > KPI
1513
1209
  """
1514
1210
  url = f"{self.base_url}/kpi/new_users/data_series"
1515
- query_params = {
1516
- k: v
1517
- for k, v in [
1518
- ("length", length),
1519
- ("ending_at", ending_at),
1520
- ("app_id", app_id),
1521
- ]
1522
- if v is not None
1523
- }
1211
+ query_params = {k: v for k, v in [("length", length), ("ending_at", ending_at), ("app_id", app_id)] if v is not None}
1524
1212
  response = self._get(url, params=query_params)
1525
1213
  response.raise_for_status()
1526
- if (
1527
- response.status_code == 204
1528
- or not response.content
1529
- or not response.text.strip()
1530
- ):
1214
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1531
1215
  return None
1532
1216
  try:
1533
1217
  return response.json()
1534
1218
  except ValueError:
1535
1219
  return None
1536
1220
 
1537
- def get_daily_active_users_series(
1538
- self,
1539
- length: int | None = None,
1540
- ending_at: str | None = None,
1541
- app_id: str | None = None,
1221
+ async def get_daily_active_users_series(
1222
+ self, length: int | None = None, ending_at: str | None = None, app_id: str | None = None
1542
1223
  ) -> dict[str, Any]:
1543
1224
  """
1544
1225
  Export Daily Active Users by Date
@@ -1560,33 +1241,18 @@ class BrazeApp(APIApplication):
1560
1241
  Export > KPI
1561
1242
  """
1562
1243
  url = f"{self.base_url}/kpi/dau/data_series"
1563
- query_params = {
1564
- k: v
1565
- for k, v in [
1566
- ("length", length),
1567
- ("ending_at", ending_at),
1568
- ("app_id", app_id),
1569
- ]
1570
- if v is not None
1571
- }
1244
+ query_params = {k: v for k, v in [("length", length), ("ending_at", ending_at), ("app_id", app_id)] if v is not None}
1572
1245
  response = self._get(url, params=query_params)
1573
1246
  response.raise_for_status()
1574
- if (
1575
- response.status_code == 204
1576
- or not response.content
1577
- or not response.text.strip()
1578
- ):
1247
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1579
1248
  return None
1580
1249
  try:
1581
1250
  return response.json()
1582
1251
  except ValueError:
1583
1252
  return None
1584
1253
 
1585
- def get_kpimau_data_series(
1586
- self,
1587
- length: int | None = None,
1588
- ending_at: str | None = None,
1589
- app_id: str | None = None,
1254
+ async def get_kpimau_data_series(
1255
+ self, length: int | None = None, ending_at: str | None = None, app_id: str | None = None
1590
1256
  ) -> dict[str, Any]:
1591
1257
  """
1592
1258
  Export Monthly Active Users for Last 30 Days
@@ -1607,33 +1273,18 @@ class BrazeApp(APIApplication):
1607
1273
  Export > KPI
1608
1274
  """
1609
1275
  url = f"{self.base_url}/kpi/mau/data_series"
1610
- query_params = {
1611
- k: v
1612
- for k, v in [
1613
- ("length", length),
1614
- ("ending_at", ending_at),
1615
- ("app_id", app_id),
1616
- ]
1617
- if v is not None
1618
- }
1276
+ query_params = {k: v for k, v in [("length", length), ("ending_at", ending_at), ("app_id", app_id)] if v is not None}
1619
1277
  response = self._get(url, params=query_params)
1620
1278
  response.raise_for_status()
1621
- if (
1622
- response.status_code == 204
1623
- or not response.content
1624
- or not response.text.strip()
1625
- ):
1279
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1626
1280
  return None
1627
1281
  try:
1628
1282
  return response.json()
1629
1283
  except ValueError:
1630
1284
  return None
1631
1285
 
1632
- def get_kpi_uninstalls_data_series(
1633
- self,
1634
- length: int | None = None,
1635
- ending_at: str | None = None,
1636
- app_id: str | None = None,
1286
+ async def get_kpi_uninstalls_data_series(
1287
+ self, length: int | None = None, ending_at: str | None = None, app_id: str | None = None
1637
1288
  ) -> dict[str, Any]:
1638
1289
  """
1639
1290
  Export KPIs for Daily App Uninstalls by Date
@@ -1654,34 +1305,18 @@ class BrazeApp(APIApplication):
1654
1305
  Export > KPI
1655
1306
  """
1656
1307
  url = f"{self.base_url}/kpi/uninstalls/data_series"
1657
- query_params = {
1658
- k: v
1659
- for k, v in [
1660
- ("length", length),
1661
- ("ending_at", ending_at),
1662
- ("app_id", app_id),
1663
- ]
1664
- if v is not None
1665
- }
1308
+ query_params = {k: v for k, v in [("length", length), ("ending_at", ending_at), ("app_id", app_id)] if v is not None}
1666
1309
  response = self._get(url, params=query_params)
1667
1310
  response.raise_for_status()
1668
- if (
1669
- response.status_code == 204
1670
- or not response.content
1671
- or not response.text.strip()
1672
- ):
1311
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1673
1312
  return None
1674
1313
  try:
1675
1314
  return response.json()
1676
1315
  except ValueError:
1677
1316
  return None
1678
1317
 
1679
- def get_feed_data_series(
1680
- self,
1681
- card_id: str | None = None,
1682
- length: int | None = None,
1683
- unit: str | None = None,
1684
- ending_at: str | None = None,
1318
+ async def get_feed_data_series(
1319
+ self, card_id: str | None = None, length: int | None = None, unit: str | None = None, ending_at: str | None = None
1685
1320
  ) -> dict[str, Any]:
1686
1321
  """
1687
1322
  Export News Feed Card Analytics
@@ -1704,29 +1339,18 @@ class BrazeApp(APIApplication):
1704
1339
  """
1705
1340
  url = f"{self.base_url}/feed/data_series"
1706
1341
  query_params = {
1707
- k: v
1708
- for k, v in [
1709
- ("card_id", card_id),
1710
- ("length", length),
1711
- ("unit", unit),
1712
- ("ending_at", ending_at),
1713
- ]
1714
- if v is not None
1342
+ k: v for k, v in [("card_id", card_id), ("length", length), ("unit", unit), ("ending_at", ending_at)] if v is not None
1715
1343
  }
1716
1344
  response = self._get(url, params=query_params)
1717
1345
  response.raise_for_status()
1718
- if (
1719
- response.status_code == 204
1720
- or not response.content
1721
- or not response.text.strip()
1722
- ):
1346
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1723
1347
  return None
1724
1348
  try:
1725
1349
  return response.json()
1726
1350
  except ValueError:
1727
1351
  return None
1728
1352
 
1729
- def get_feed_details(self, card_id: str | None = None) -> dict[str, Any]:
1353
+ async def get_feed_details(self, card_id: str | None = None) -> dict[str, Any]:
1730
1354
  """
1731
1355
  Export News Feed Cards Details
1732
1356
 
@@ -1747,22 +1371,15 @@ class BrazeApp(APIApplication):
1747
1371
  query_params = {k: v for k, v in [("card_id", card_id)] if v is not None}
1748
1372
  response = self._get(url, params=query_params)
1749
1373
  response.raise_for_status()
1750
- if (
1751
- response.status_code == 204
1752
- or not response.content
1753
- or not response.text.strip()
1754
- ):
1374
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1755
1375
  return None
1756
1376
  try:
1757
1377
  return response.json()
1758
1378
  except ValueError:
1759
1379
  return None
1760
1380
 
1761
- def list_feed(
1762
- self,
1763
- page: int | None = None,
1764
- include_archived: bool | None = None,
1765
- sort_direction: str | None = None,
1381
+ async def list_feed(
1382
+ self, page: int | None = None, include_archived: bool | None = None, sort_direction: str | None = None
1766
1383
  ) -> dict[str, Any]:
1767
1384
  """
1768
1385
  Export News Feed Cards List
@@ -1785,28 +1402,18 @@ class BrazeApp(APIApplication):
1785
1402
  """
1786
1403
  url = f"{self.base_url}/feed/list"
1787
1404
  query_params = {
1788
- k: v
1789
- for k, v in [
1790
- ("page", page),
1791
- ("include_archived", include_archived),
1792
- ("sort_direction", sort_direction),
1793
- ]
1794
- if v is not None
1405
+ k: v for k, v in [("page", page), ("include_archived", include_archived), ("sort_direction", sort_direction)] if v is not None
1795
1406
  }
1796
1407
  response = self._get(url, params=query_params)
1797
1408
  response.raise_for_status()
1798
- if (
1799
- response.status_code == 204
1800
- or not response.content
1801
- or not response.text.strip()
1802
- ):
1409
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1803
1410
  return None
1804
1411
  try:
1805
1412
  return response.json()
1806
1413
  except ValueError:
1807
1414
  return None
1808
1415
 
1809
- def list_products(self, page: int | None = None) -> dict[str, Any]:
1416
+ async def list_products(self, page: int | None = None) -> dict[str, Any]:
1810
1417
  """
1811
1418
  Export Product IDs
1812
1419
 
@@ -1827,18 +1434,14 @@ class BrazeApp(APIApplication):
1827
1434
  query_params = {k: v for k, v in [("page", page)] if v is not None}
1828
1435
  response = self._get(url, params=query_params)
1829
1436
  response.raise_for_status()
1830
- if (
1831
- response.status_code == 204
1832
- or not response.content
1833
- or not response.text.strip()
1834
- ):
1437
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1835
1438
  return None
1836
1439
  try:
1837
1440
  return response.json()
1838
1441
  except ValueError:
1839
1442
  return None
1840
1443
 
1841
- def get_purchase_quantity_series(
1444
+ async def get_purchase_quantity_series(
1842
1445
  self,
1843
1446
  ending_at: str | None = None,
1844
1447
  length: int | None = None,
@@ -1874,29 +1477,19 @@ class BrazeApp(APIApplication):
1874
1477
  url = f"{self.base_url}/purchases/quantity_series"
1875
1478
  query_params = {
1876
1479
  k: v
1877
- for k, v in [
1878
- ("ending_at", ending_at),
1879
- ("length", length),
1880
- ("unit", unit),
1881
- ("app_id", app_id),
1882
- ("product", product),
1883
- ]
1480
+ for k, v in [("ending_at", ending_at), ("length", length), ("unit", unit), ("app_id", app_id), ("product", product)]
1884
1481
  if v is not None
1885
1482
  }
1886
1483
  response = self._get(url, params=query_params)
1887
1484
  response.raise_for_status()
1888
- if (
1889
- response.status_code == 204
1890
- or not response.content
1891
- or not response.text.strip()
1892
- ):
1485
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1893
1486
  return None
1894
1487
  try:
1895
1488
  return response.json()
1896
1489
  except ValueError:
1897
1490
  return None
1898
1491
 
1899
- def get_purchases_revenue_series(
1492
+ async def get_purchases_revenue_series(
1900
1493
  self,
1901
1494
  ending_at: str | None = None,
1902
1495
  length: int | None = None,
@@ -1932,31 +1525,19 @@ class BrazeApp(APIApplication):
1932
1525
  url = f"{self.base_url}/purchases/revenue_series"
1933
1526
  query_params = {
1934
1527
  k: v
1935
- for k, v in [
1936
- ("ending_at", ending_at),
1937
- ("length", length),
1938
- ("unit", unit),
1939
- ("app_id", app_id),
1940
- ("product", product),
1941
- ]
1528
+ for k, v in [("ending_at", ending_at), ("length", length), ("unit", unit), ("app_id", app_id), ("product", product)]
1942
1529
  if v is not None
1943
1530
  }
1944
1531
  response = self._get(url, params=query_params)
1945
1532
  response.raise_for_status()
1946
- if (
1947
- response.status_code == 204
1948
- or not response.content
1949
- or not response.text.strip()
1950
- ):
1533
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1951
1534
  return None
1952
1535
  try:
1953
1536
  return response.json()
1954
1537
  except ValueError:
1955
1538
  return None
1956
1539
 
1957
- def list_segments(
1958
- self, page: int | None = None, sort_direction: str | None = None
1959
- ) -> dict[str, Any]:
1540
+ async def list_segments(self, page: int | None = None, sort_direction: str | None = None) -> dict[str, Any]:
1960
1541
  """
1961
1542
  Export Segment List
1962
1543
 
@@ -1976,29 +1557,18 @@ class BrazeApp(APIApplication):
1976
1557
  Export > Segment
1977
1558
  """
1978
1559
  url = f"{self.base_url}/segments/list"
1979
- query_params = {
1980
- k: v
1981
- for k, v in [("page", page), ("sort_direction", sort_direction)]
1982
- if v is not None
1983
- }
1560
+ query_params = {k: v for k, v in [("page", page), ("sort_direction", sort_direction)] if v is not None}
1984
1561
  response = self._get(url, params=query_params)
1985
1562
  response.raise_for_status()
1986
- if (
1987
- response.status_code == 204
1988
- or not response.content
1989
- or not response.text.strip()
1990
- ):
1563
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
1991
1564
  return None
1992
1565
  try:
1993
1566
  return response.json()
1994
1567
  except ValueError:
1995
1568
  return None
1996
1569
 
1997
- def get_segments_data_series(
1998
- self,
1999
- segment_id: str | None = None,
2000
- length: int | None = None,
2001
- ending_at: str | None = None,
1570
+ async def get_segments_data_series(
1571
+ self, segment_id: str | None = None, length: int | None = None, ending_at: str | None = None
2002
1572
  ) -> dict[str, Any]:
2003
1573
  """
2004
1574
  Export Segment Analytics
@@ -2019,29 +1589,17 @@ class BrazeApp(APIApplication):
2019
1589
  Export > Segment
2020
1590
  """
2021
1591
  url = f"{self.base_url}/segments/data_series"
2022
- query_params = {
2023
- k: v
2024
- for k, v in [
2025
- ("segment_id", segment_id),
2026
- ("length", length),
2027
- ("ending_at", ending_at),
2028
- ]
2029
- if v is not None
2030
- }
1592
+ query_params = {k: v for k, v in [("segment_id", segment_id), ("length", length), ("ending_at", ending_at)] if v is not None}
2031
1593
  response = self._get(url, params=query_params)
2032
1594
  response.raise_for_status()
2033
- if (
2034
- response.status_code == 204
2035
- or not response.content
2036
- or not response.text.strip()
2037
- ):
1595
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2038
1596
  return None
2039
1597
  try:
2040
1598
  return response.json()
2041
1599
  except ValueError:
2042
1600
  return None
2043
1601
 
2044
- def get_segment_details(self, segment_id: str | None = None) -> dict[str, Any]:
1602
+ async def get_segment_details(self, segment_id: str | None = None) -> dict[str, Any]:
2045
1603
  """
2046
1604
  Export Segment Details
2047
1605
 
@@ -2062,18 +1620,14 @@ class BrazeApp(APIApplication):
2062
1620
  query_params = {k: v for k, v in [("segment_id", segment_id)] if v is not None}
2063
1621
  response = self._get(url, params=query_params)
2064
1622
  response.raise_for_status()
2065
- if (
2066
- response.status_code == 204
2067
- or not response.content
2068
- or not response.text.strip()
2069
- ):
1623
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2070
1624
  return None
2071
1625
  try:
2072
1626
  return response.json()
2073
1627
  except ValueError:
2074
1628
  return None
2075
1629
 
2076
- def get_sessions_data_series(
1630
+ async def get_sessions_data_series(
2077
1631
  self,
2078
1632
  length: int | None = None,
2079
1633
  unit: str | None = None,
@@ -2104,29 +1658,19 @@ class BrazeApp(APIApplication):
2104
1658
  url = f"{self.base_url}/sessions/data_series"
2105
1659
  query_params = {
2106
1660
  k: v
2107
- for k, v in [
2108
- ("length", length),
2109
- ("unit", unit),
2110
- ("ending_at", ending_at),
2111
- ("app_id", app_id),
2112
- ("segment_id", segment_id),
2113
- ]
1661
+ for k, v in [("length", length), ("unit", unit), ("ending_at", ending_at), ("app_id", app_id), ("segment_id", segment_id)]
2114
1662
  if v is not None
2115
1663
  }
2116
1664
  response = self._get(url, params=query_params)
2117
1665
  response.raise_for_status()
2118
- if (
2119
- response.status_code == 204
2120
- or not response.content
2121
- or not response.text.strip()
2122
- ):
1666
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2123
1667
  return None
2124
1668
  try:
2125
1669
  return response.json()
2126
1670
  except ValueError:
2127
1671
  return None
2128
1672
 
2129
- def export_user_ids_by_post(
1673
+ async def export_user_ids_by_post(
2130
1674
  self,
2131
1675
  external_ids: list[str] | None = None,
2132
1676
  user_aliases: list[dict[str, Any]] | None = None,
@@ -2168,30 +1712,19 @@ class BrazeApp(APIApplication):
2168
1712
  "phone": phone,
2169
1713
  "fields_to_export": fields_to_export,
2170
1714
  }
2171
- request_body_data = {
2172
- k: v for k, v in request_body_data.items() if v is not None
2173
- }
1715
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2174
1716
  url = f"{self.base_url}/users/export/ids"
2175
1717
  query_params = {}
2176
- response = self._post(
2177
- url,
2178
- data=request_body_data,
2179
- params=query_params,
2180
- content_type="application/json",
2181
- )
1718
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2182
1719
  response.raise_for_status()
2183
- if (
2184
- response.status_code == 204
2185
- or not response.content
2186
- or not response.text.strip()
2187
- ):
1720
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2188
1721
  return None
2189
1722
  try:
2190
1723
  return response.json()
2191
1724
  except ValueError:
2192
1725
  return None
2193
1726
 
2194
- def export_users_by_segment_post(
1727
+ async def export_users_by_segment_post(
2195
1728
  self,
2196
1729
  segment_id: str | None = None,
2197
1730
  callback_endpoint: str | None = None,
@@ -2224,34 +1757,20 @@ class BrazeApp(APIApplication):
2224
1757
  "fields_to_export": fields_to_export,
2225
1758
  "output_format": output_format,
2226
1759
  }
2227
- request_body_data = {
2228
- k: v for k, v in request_body_data.items() if v is not None
2229
- }
1760
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2230
1761
  url = f"{self.base_url}/users/export/segment"
2231
1762
  query_params = {}
2232
- response = self._post(
2233
- url,
2234
- data=request_body_data,
2235
- params=query_params,
2236
- content_type="application/json",
2237
- )
1763
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2238
1764
  response.raise_for_status()
2239
- if (
2240
- response.status_code == 204
2241
- or not response.content
2242
- or not response.text.strip()
2243
- ):
1765
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2244
1766
  return None
2245
1767
  try:
2246
1768
  return response.json()
2247
1769
  except ValueError:
2248
1770
  return None
2249
1771
 
2250
- def export_global_control_group_users(
2251
- self,
2252
- callback_endpoint: str | None = None,
2253
- fields_to_export: list[str] | None = None,
2254
- output_format: str | None = None,
1772
+ async def export_global_control_group_users(
1773
+ self, callback_endpoint: str | None = None, fields_to_export: list[str] | None = None, output_format: str | None = None
2255
1774
  ) -> dict[str, Any]:
2256
1775
  """
2257
1776
  Export User Profile by Global Control Group
@@ -2272,35 +1791,20 @@ class BrazeApp(APIApplication):
2272
1791
  Export > Users
2273
1792
  """
2274
1793
  request_body_data = None
2275
- request_body_data = {
2276
- "callback_endpoint": callback_endpoint,
2277
- "fields_to_export": fields_to_export,
2278
- "output_format": output_format,
2279
- }
2280
- request_body_data = {
2281
- k: v for k, v in request_body_data.items() if v is not None
2282
- }
1794
+ request_body_data = {"callback_endpoint": callback_endpoint, "fields_to_export": fields_to_export, "output_format": output_format}
1795
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2283
1796
  url = f"{self.base_url}/users/export/global_control_group"
2284
1797
  query_params = {}
2285
- response = self._post(
2286
- url,
2287
- data=request_body_data,
2288
- params=query_params,
2289
- content_type="application/json",
2290
- )
1798
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2291
1799
  response.raise_for_status()
2292
- if (
2293
- response.status_code == 204
2294
- or not response.content
2295
- or not response.text.strip()
2296
- ):
1800
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2297
1801
  return None
2298
1802
  try:
2299
1803
  return response.json()
2300
1804
  except ValueError:
2301
1805
  return None
2302
1806
 
2303
- def update_live_activity_message(
1807
+ async def update_live_activity_message(
2304
1808
  self,
2305
1809
  app_id: str | None = None,
2306
1810
  activity_id: str | None = None,
@@ -2342,30 +1846,19 @@ class BrazeApp(APIApplication):
2342
1846
  "stale_date": stale_date,
2343
1847
  "notification": notification,
2344
1848
  }
2345
- request_body_data = {
2346
- k: v for k, v in request_body_data.items() if v is not None
2347
- }
1849
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2348
1850
  url = f"{self.base_url}/messages/live_activity/update"
2349
1851
  query_params = {}
2350
- response = self._post(
2351
- url,
2352
- data=request_body_data,
2353
- params=query_params,
2354
- content_type="application/json",
2355
- )
1852
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2356
1853
  response.raise_for_status()
2357
- if (
2358
- response.status_code == 204
2359
- or not response.content
2360
- or not response.text.strip()
2361
- ):
1854
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2362
1855
  return None
2363
1856
  try:
2364
1857
  return response.json()
2365
1858
  except ValueError:
2366
1859
  return None
2367
1860
 
2368
- def list_scheduled_broadcasts(self, end_time: str | None = None) -> dict[str, Any]:
1861
+ async def list_scheduled_broadcasts(self, end_time: str | None = None) -> dict[str, Any]:
2369
1862
  """
2370
1863
  List Upcoming Scheduled Campaigns and Canvases
2371
1864
 
@@ -2386,20 +1879,14 @@ class BrazeApp(APIApplication):
2386
1879
  query_params = {k: v for k, v in [("end_time", end_time)] if v is not None}
2387
1880
  response = self._get(url, params=query_params)
2388
1881
  response.raise_for_status()
2389
- if (
2390
- response.status_code == 204
2391
- or not response.content
2392
- or not response.text.strip()
2393
- ):
1882
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2394
1883
  return None
2395
1884
  try:
2396
1885
  return response.json()
2397
1886
  except ValueError:
2398
1887
  return None
2399
1888
 
2400
- def delete_scheduled_message(
2401
- self, schedule_id: str | None = None
2402
- ) -> dict[str, Any]:
1889
+ async def delete_scheduled_message(self, schedule_id: str | None = None) -> dict[str, Any]:
2403
1890
  """
2404
1891
  Delete Scheduled Messages
2405
1892
 
@@ -2417,35 +1904,20 @@ class BrazeApp(APIApplication):
2417
1904
  Messaging > Schedule Mesages
2418
1905
  """
2419
1906
  request_body_data = None
2420
- request_body_data = {
2421
- "schedule_id": schedule_id,
2422
- }
2423
- request_body_data = {
2424
- k: v for k, v in request_body_data.items() if v is not None
2425
- }
1907
+ request_body_data = {"schedule_id": schedule_id}
1908
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2426
1909
  url = f"{self.base_url}/messages/schedule/delete"
2427
1910
  query_params = {}
2428
- response = self._post(
2429
- url,
2430
- data=request_body_data,
2431
- params=query_params,
2432
- content_type="application/json",
2433
- )
1911
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2434
1912
  response.raise_for_status()
2435
- if (
2436
- response.status_code == 204
2437
- or not response.content
2438
- or not response.text.strip()
2439
- ):
1913
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2440
1914
  return None
2441
1915
  try:
2442
1916
  return response.json()
2443
1917
  except ValueError:
2444
1918
  return None
2445
1919
 
2446
- def schedule_delete_canvas_trigger(
2447
- self, canvas_id: str | None = None, schedule_id: str | None = None
2448
- ) -> dict[str, Any]:
1920
+ async def schedule_delete_canvas_trigger(self, canvas_id: str | None = None, schedule_id: str | None = None) -> dict[str, Any]:
2449
1921
  """
2450
1922
  Delete Scheduled API-Triggered Canvases
2451
1923
 
@@ -2464,36 +1936,20 @@ class BrazeApp(APIApplication):
2464
1936
  Messaging > Schedule Mesages
2465
1937
  """
2466
1938
  request_body_data = None
2467
- request_body_data = {
2468
- "canvas_id": canvas_id,
2469
- "schedule_id": schedule_id,
2470
- }
2471
- request_body_data = {
2472
- k: v for k, v in request_body_data.items() if v is not None
2473
- }
1939
+ request_body_data = {"canvas_id": canvas_id, "schedule_id": schedule_id}
1940
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2474
1941
  url = f"{self.base_url}/canvas/trigger/schedule/delete"
2475
1942
  query_params = {}
2476
- response = self._post(
2477
- url,
2478
- data=request_body_data,
2479
- params=query_params,
2480
- content_type="application/json",
2481
- )
1943
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2482
1944
  response.raise_for_status()
2483
- if (
2484
- response.status_code == 204
2485
- or not response.content
2486
- or not response.text.strip()
2487
- ):
1945
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2488
1946
  return None
2489
1947
  try:
2490
1948
  return response.json()
2491
1949
  except ValueError:
2492
1950
  return None
2493
1951
 
2494
- def delete_campaign_schedule(
2495
- self, campaign_id: str | None = None, schedule_id: str | None = None
2496
- ) -> dict[str, Any]:
1952
+ async def delete_campaign_schedule(self, campaign_id: str | None = None, schedule_id: str | None = None) -> dict[str, Any]:
2497
1953
  """
2498
1954
  Delete Scheduled API Triggered Campaigns
2499
1955
 
@@ -2512,34 +1968,20 @@ class BrazeApp(APIApplication):
2512
1968
  Messaging > Schedule Mesages
2513
1969
  """
2514
1970
  request_body_data = None
2515
- request_body_data = {
2516
- "campaign_id": campaign_id,
2517
- "schedule_id": schedule_id,
2518
- }
2519
- request_body_data = {
2520
- k: v for k, v in request_body_data.items() if v is not None
2521
- }
1971
+ request_body_data = {"campaign_id": campaign_id, "schedule_id": schedule_id}
1972
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2522
1973
  url = f"{self.base_url}/campaigns/trigger/schedule/delete"
2523
1974
  query_params = {}
2524
- response = self._post(
2525
- url,
2526
- data=request_body_data,
2527
- params=query_params,
2528
- content_type="application/json",
2529
- )
1975
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2530
1976
  response.raise_for_status()
2531
- if (
2532
- response.status_code == 204
2533
- or not response.content
2534
- or not response.text.strip()
2535
- ):
1977
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2536
1978
  return None
2537
1979
  try:
2538
1980
  return response.json()
2539
1981
  except ValueError:
2540
1982
  return None
2541
1983
 
2542
- def create_scheduled_message(
1984
+ async def create_scheduled_message(
2543
1985
  self,
2544
1986
  broadcast: bool | None = None,
2545
1987
  external_user_ids: str | None = None,
@@ -2593,30 +2035,19 @@ class BrazeApp(APIApplication):
2593
2035
  "schedule": schedule,
2594
2036
  "messages": messages,
2595
2037
  }
2596
- request_body_data = {
2597
- k: v for k, v in request_body_data.items() if v is not None
2598
- }
2038
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2599
2039
  url = f"{self.base_url}/messages/schedule/create"
2600
2040
  query_params = {}
2601
- response = self._post(
2602
- url,
2603
- data=request_body_data,
2604
- params=query_params,
2605
- content_type="application/json",
2606
- )
2041
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2607
2042
  response.raise_for_status()
2608
- if (
2609
- response.status_code == 204
2610
- or not response.content
2611
- or not response.text.strip()
2612
- ):
2043
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2613
2044
  return None
2614
2045
  try:
2615
2046
  return response.json()
2616
2047
  except ValueError:
2617
2048
  return None
2618
2049
 
2619
- def create_schedule(
2050
+ async def create_schedule(
2620
2051
  self,
2621
2052
  campaign_id: str | None = None,
2622
2053
  send_id: str | None = None,
@@ -2658,30 +2089,19 @@ class BrazeApp(APIApplication):
2658
2089
  "trigger_properties": trigger_properties,
2659
2090
  "schedule": schedule,
2660
2091
  }
2661
- request_body_data = {
2662
- k: v for k, v in request_body_data.items() if v is not None
2663
- }
2092
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2664
2093
  url = f"{self.base_url}/campaigns/trigger/schedule/create"
2665
2094
  query_params = {}
2666
- response = self._post(
2667
- url,
2668
- data=request_body_data,
2669
- params=query_params,
2670
- content_type="application/json",
2671
- )
2095
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2672
2096
  response.raise_for_status()
2673
- if (
2674
- response.status_code == 204
2675
- or not response.content
2676
- or not response.text.strip()
2677
- ):
2097
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2678
2098
  return None
2679
2099
  try:
2680
2100
  return response.json()
2681
2101
  except ValueError:
2682
2102
  return None
2683
2103
 
2684
- def create_schedule_trigger(
2104
+ async def create_schedule_trigger(
2685
2105
  self,
2686
2106
  canvas_id: str | None = None,
2687
2107
  recipients: list[dict[str, Any]] | None = None,
@@ -2720,34 +2140,20 @@ class BrazeApp(APIApplication):
2720
2140
  "canvas_entry_properties": canvas_entry_properties,
2721
2141
  "schedule": schedule,
2722
2142
  }
2723
- request_body_data = {
2724
- k: v for k, v in request_body_data.items() if v is not None
2725
- }
2143
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2726
2144
  url = f"{self.base_url}/canvas/trigger/schedule/create"
2727
2145
  query_params = {}
2728
- response = self._post(
2729
- url,
2730
- data=request_body_data,
2731
- params=query_params,
2732
- content_type="application/json",
2733
- )
2146
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2734
2147
  response.raise_for_status()
2735
- if (
2736
- response.status_code == 204
2737
- or not response.content
2738
- or not response.text.strip()
2739
- ):
2148
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2740
2149
  return None
2741
2150
  try:
2742
2151
  return response.json()
2743
2152
  except ValueError:
2744
2153
  return None
2745
2154
 
2746
- def schedule_message_update(
2747
- self,
2748
- schedule_id: str | None = None,
2749
- schedule: dict[str, Any] | None = None,
2750
- messages: dict[str, Any] | None = None,
2155
+ async def schedule_message_update(
2156
+ self, schedule_id: str | None = None, schedule: dict[str, Any] | None = None, messages: dict[str, Any] | None = None
2751
2157
  ) -> dict[str, Any]:
2752
2158
  """
2753
2159
  Update Scheduled Messages
@@ -2768,39 +2174,21 @@ class BrazeApp(APIApplication):
2768
2174
  Messaging > Schedule Mesages
2769
2175
  """
2770
2176
  request_body_data = None
2771
- request_body_data = {
2772
- "schedule_id": schedule_id,
2773
- "schedule": schedule,
2774
- "messages": messages,
2775
- }
2776
- request_body_data = {
2777
- k: v for k, v in request_body_data.items() if v is not None
2778
- }
2177
+ request_body_data = {"schedule_id": schedule_id, "schedule": schedule, "messages": messages}
2178
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2779
2179
  url = f"{self.base_url}/messages/schedule/update"
2780
2180
  query_params = {}
2781
- response = self._post(
2782
- url,
2783
- data=request_body_data,
2784
- params=query_params,
2785
- content_type="application/json",
2786
- )
2181
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2787
2182
  response.raise_for_status()
2788
- if (
2789
- response.status_code == 204
2790
- or not response.content
2791
- or not response.text.strip()
2792
- ):
2183
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2793
2184
  return None
2794
2185
  try:
2795
2186
  return response.json()
2796
2187
  except ValueError:
2797
2188
  return None
2798
2189
 
2799
- def update_campaign_trigger_schedule(
2800
- self,
2801
- campaign_id: str | None = None,
2802
- schedule_id: str | None = None,
2803
- schedule: dict[str, Any] | None = None,
2190
+ async def update_campaign_trigger_schedule(
2191
+ self, campaign_id: str | None = None, schedule_id: str | None = None, schedule: dict[str, Any] | None = None
2804
2192
  ) -> dict[str, Any]:
2805
2193
  """
2806
2194
  Update Scheduled API Triggered Campaigns
@@ -2821,39 +2209,21 @@ class BrazeApp(APIApplication):
2821
2209
  Messaging > Schedule Mesages
2822
2210
  """
2823
2211
  request_body_data = None
2824
- request_body_data = {
2825
- "campaign_id": campaign_id,
2826
- "schedule_id": schedule_id,
2827
- "schedule": schedule,
2828
- }
2829
- request_body_data = {
2830
- k: v for k, v in request_body_data.items() if v is not None
2831
- }
2212
+ request_body_data = {"campaign_id": campaign_id, "schedule_id": schedule_id, "schedule": schedule}
2213
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2832
2214
  url = f"{self.base_url}/campaigns/trigger/schedule/update"
2833
2215
  query_params = {}
2834
- response = self._post(
2835
- url,
2836
- data=request_body_data,
2837
- params=query_params,
2838
- content_type="application/json",
2839
- )
2216
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2840
2217
  response.raise_for_status()
2841
- if (
2842
- response.status_code == 204
2843
- or not response.content
2844
- or not response.text.strip()
2845
- ):
2218
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2846
2219
  return None
2847
2220
  try:
2848
2221
  return response.json()
2849
2222
  except ValueError:
2850
2223
  return None
2851
2224
 
2852
- def update_canvas_trigger_schedule(
2853
- self,
2854
- canvas_id: str | None = None,
2855
- schedule_id: str | None = None,
2856
- schedule: dict[str, Any] | None = None,
2225
+ async def update_canvas_trigger_schedule(
2226
+ self, canvas_id: str | None = None, schedule_id: str | None = None, schedule: dict[str, Any] | None = None
2857
2227
  ) -> dict[str, Any]:
2858
2228
  """
2859
2229
  Update Scheduled API Triggered Canvases
@@ -2874,37 +2244,20 @@ class BrazeApp(APIApplication):
2874
2244
  Messaging > Schedule Mesages
2875
2245
  """
2876
2246
  request_body_data = None
2877
- request_body_data = {
2878
- "canvas_id": canvas_id,
2879
- "schedule_id": schedule_id,
2880
- "schedule": schedule,
2881
- }
2882
- request_body_data = {
2883
- k: v for k, v in request_body_data.items() if v is not None
2884
- }
2247
+ request_body_data = {"canvas_id": canvas_id, "schedule_id": schedule_id, "schedule": schedule}
2248
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2885
2249
  url = f"{self.base_url}/canvas/trigger/schedule/update"
2886
2250
  query_params = {}
2887
- response = self._post(
2888
- url,
2889
- data=request_body_data,
2890
- params=query_params,
2891
- content_type="application/json",
2892
- )
2251
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2893
2252
  response.raise_for_status()
2894
- if (
2895
- response.status_code == 204
2896
- or not response.content
2897
- or not response.text.strip()
2898
- ):
2253
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2899
2254
  return None
2900
2255
  try:
2901
2256
  return response.json()
2902
2257
  except ValueError:
2903
2258
  return None
2904
2259
 
2905
- def create_send_by_id(
2906
- self, campaign_id: str | None = None, send_id: str | None = None
2907
- ) -> dict[str, Any]:
2260
+ async def create_send_by_id(self, campaign_id: str | None = None, send_id: str | None = None) -> dict[str, Any]:
2908
2261
  """
2909
2262
  Create Send IDs For Message Send Tracking
2910
2263
 
@@ -2923,34 +2276,20 @@ class BrazeApp(APIApplication):
2923
2276
  Messaging > Send Messages
2924
2277
  """
2925
2278
  request_body_data = None
2926
- request_body_data = {
2927
- "campaign_id": campaign_id,
2928
- "send_id": send_id,
2929
- }
2930
- request_body_data = {
2931
- k: v for k, v in request_body_data.items() if v is not None
2932
- }
2279
+ request_body_data = {"campaign_id": campaign_id, "send_id": send_id}
2280
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
2933
2281
  url = f"{self.base_url}/sends/id/create"
2934
2282
  query_params = {}
2935
- response = self._post(
2936
- url,
2937
- data=request_body_data,
2938
- params=query_params,
2939
- content_type="application/json",
2940
- )
2283
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
2941
2284
  response.raise_for_status()
2942
- if (
2943
- response.status_code == 204
2944
- or not response.content
2945
- or not response.text.strip()
2946
- ):
2285
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
2947
2286
  return None
2948
2287
  try:
2949
2288
  return response.json()
2950
2289
  except ValueError:
2951
2290
  return None
2952
2291
 
2953
- def send_message(
2292
+ async def send_message(
2954
2293
  self,
2955
2294
  broadcast: str | None = None,
2956
2295
  external_user_ids: str | None = None,
@@ -3001,30 +2340,19 @@ class BrazeApp(APIApplication):
3001
2340
  "recipient_subscription_state": recipient_subscription_state,
3002
2341
  "messages": messages,
3003
2342
  }
3004
- request_body_data = {
3005
- k: v for k, v in request_body_data.items() if v is not None
3006
- }
2343
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3007
2344
  url = f"{self.base_url}/messages/send"
3008
2345
  query_params = {}
3009
- response = self._post(
3010
- url,
3011
- data=request_body_data,
3012
- params=query_params,
3013
- content_type="application/json",
3014
- )
2346
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
3015
2347
  response.raise_for_status()
3016
- if (
3017
- response.status_code == 204
3018
- or not response.content
3019
- or not response.text.strip()
3020
- ):
2348
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3021
2349
  return None
3022
2350
  try:
3023
2351
  return response.json()
3024
2352
  except ValueError:
3025
2353
  return None
3026
2354
 
3027
- def send_campaign_transactional(
2355
+ async def send_campaign_transactional(
3028
2356
  self,
3029
2357
  campaign_id: str,
3030
2358
  external_send_id: str | None = None,
@@ -3053,35 +2381,20 @@ class BrazeApp(APIApplication):
3053
2381
  if campaign_id is None:
3054
2382
  raise ValueError("Missing required parameter 'campaign_id'.")
3055
2383
  request_body_data = None
3056
- request_body_data = {
3057
- "external_send_id": external_send_id,
3058
- "trigger_properties": trigger_properties,
3059
- "recipient": recipient,
3060
- }
3061
- request_body_data = {
3062
- k: v for k, v in request_body_data.items() if v is not None
3063
- }
2384
+ request_body_data = {"external_send_id": external_send_id, "trigger_properties": trigger_properties, "recipient": recipient}
2385
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3064
2386
  url = f"{self.base_url}/transactional/v1/campaigns/{campaign_id}/send"
3065
2387
  query_params = {}
3066
- response = self._post(
3067
- url,
3068
- data=request_body_data,
3069
- params=query_params,
3070
- content_type="application/json",
3071
- )
2388
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
3072
2389
  response.raise_for_status()
3073
- if (
3074
- response.status_code == 204
3075
- or not response.content
3076
- or not response.text.strip()
3077
- ):
2390
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3078
2391
  return None
3079
2392
  try:
3080
2393
  return response.json()
3081
2394
  except ValueError:
3082
2395
  return None
3083
2396
 
3084
- def send_campaign_trigger(
2397
+ async def send_campaign_trigger(
3085
2398
  self,
3086
2399
  campaign_id: str | None = None,
3087
2400
  send_id: str | None = None,
@@ -3120,30 +2433,19 @@ class BrazeApp(APIApplication):
3120
2433
  "audience": audience,
3121
2434
  "recipients": recipients,
3122
2435
  }
3123
- request_body_data = {
3124
- k: v for k, v in request_body_data.items() if v is not None
3125
- }
2436
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3126
2437
  url = f"{self.base_url}/campaigns/trigger/send"
3127
2438
  query_params = {}
3128
- response = self._post(
3129
- url,
3130
- data=request_body_data,
3131
- params=query_params,
3132
- content_type="application/json",
3133
- )
2439
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
3134
2440
  response.raise_for_status()
3135
- if (
3136
- response.status_code == 204
3137
- or not response.content
3138
- or not response.text.strip()
3139
- ):
2441
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3140
2442
  return None
3141
2443
  try:
3142
2444
  return response.json()
3143
2445
  except ValueError:
3144
2446
  return None
3145
2447
 
3146
- def send_canvas_trigger_post(
2448
+ async def send_canvas_trigger_post(
3147
2449
  self,
3148
2450
  canvas_id: str | None = None,
3149
2451
  canvas_entry_properties: dict[str, Any] | None = None,
@@ -3179,35 +2481,20 @@ class BrazeApp(APIApplication):
3179
2481
  "audience": audience,
3180
2482
  "recipients": recipients,
3181
2483
  }
3182
- request_body_data = {
3183
- k: v for k, v in request_body_data.items() if v is not None
3184
- }
2484
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3185
2485
  url = f"{self.base_url}/canvas/trigger/send"
3186
2486
  query_params = {}
3187
- response = self._post(
3188
- url,
3189
- data=request_body_data,
3190
- params=query_params,
3191
- content_type="application/json",
3192
- )
2487
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
3193
2488
  response.raise_for_status()
3194
- if (
3195
- response.status_code == 204
3196
- or not response.content
3197
- or not response.text.strip()
3198
- ):
2489
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3199
2490
  return None
3200
2491
  try:
3201
2492
  return response.json()
3202
2493
  except ValueError:
3203
2494
  return None
3204
2495
 
3205
- def get_preference_center_url_by_user_id(
3206
- self,
3207
- PreferenceCenterExternalID: str,
3208
- UserID: str,
3209
- preference_center_api_id: str | None = None,
3210
- external_id: str | None = None,
2496
+ async def get_preference_center_url_by_user_id(
2497
+ self, PreferenceCenterExternalID: str, UserID: str, preference_center_api_id: str | None = None, external_id: str | None = None
3211
2498
  ) -> dict[str, Any]:
3212
2499
  """
3213
2500
  Generate Preference Center URL
@@ -3234,27 +2521,18 @@ class BrazeApp(APIApplication):
3234
2521
  raise ValueError("Missing required parameter 'UserID'.")
3235
2522
  url = f"{self.base_url}/preference_center_v1/{PreferenceCenterExternalID}/url/{UserID}"
3236
2523
  query_params = {
3237
- k: v
3238
- for k, v in [
3239
- ("preference_center_api_id", preference_center_api_id),
3240
- ("external_id", external_id),
3241
- ]
3242
- if v is not None
2524
+ k: v for k, v in [("preference_center_api_id", preference_center_api_id), ("external_id", external_id)] if v is not None
3243
2525
  }
3244
2526
  response = self._get(url, params=query_params)
3245
2527
  response.raise_for_status()
3246
- if (
3247
- response.status_code == 204
3248
- or not response.content
3249
- or not response.text.strip()
3250
- ):
2528
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3251
2529
  return None
3252
2530
  try:
3253
2531
  return response.json()
3254
2532
  except ValueError:
3255
2533
  return None
3256
2534
 
3257
- def list_preferences(self) -> dict[str, Any]:
2535
+ async def list_preferences(self) -> dict[str, Any]:
3258
2536
  """
3259
2537
  List Preference Centers
3260
2538
 
@@ -3272,20 +2550,14 @@ class BrazeApp(APIApplication):
3272
2550
  query_params = {}
3273
2551
  response = self._get(url, params=query_params)
3274
2552
  response.raise_for_status()
3275
- if (
3276
- response.status_code == 204
3277
- or not response.content
3278
- or not response.text.strip()
3279
- ):
2553
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3280
2554
  return None
3281
2555
  try:
3282
2556
  return response.json()
3283
2557
  except ValueError:
3284
2558
  return None
3285
2559
 
3286
- def get_preference_center_by_id(
3287
- self, PreferenceCenterExternalID: str
3288
- ) -> dict[str, Any]:
2560
+ async def get_preference_center_by_id(self, PreferenceCenterExternalID: str) -> dict[str, Any]:
3289
2561
  """
3290
2562
  View Details for Preference Center
3291
2563
 
@@ -3308,18 +2580,14 @@ class BrazeApp(APIApplication):
3308
2580
  query_params = {}
3309
2581
  response = self._get(url, params=query_params)
3310
2582
  response.raise_for_status()
3311
- if (
3312
- response.status_code == 204
3313
- or not response.content
3314
- or not response.text.strip()
3315
- ):
2583
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3316
2584
  return None
3317
2585
  try:
3318
2586
  return response.json()
3319
2587
  except ValueError:
3320
2588
  return None
3321
2589
 
3322
- def update_preference_center_by_id(
2590
+ async def update_preference_center_by_id(
3323
2591
  self,
3324
2592
  PreferenceCenterExternalID: str,
3325
2593
  external_send_id: str | None = None,
@@ -3348,35 +2616,20 @@ class BrazeApp(APIApplication):
3348
2616
  if PreferenceCenterExternalID is None:
3349
2617
  raise ValueError("Missing required parameter 'PreferenceCenterExternalID'.")
3350
2618
  request_body_data = None
3351
- request_body_data = {
3352
- "external_send_id": external_send_id,
3353
- "trigger_properties": trigger_properties,
3354
- "recipient": recipient,
3355
- }
3356
- request_body_data = {
3357
- k: v for k, v in request_body_data.items() if v is not None
3358
- }
2619
+ request_body_data = {"external_send_id": external_send_id, "trigger_properties": trigger_properties, "recipient": recipient}
2620
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3359
2621
  url = f"{self.base_url}/preference_center/v1/{PreferenceCenterExternalID}"
3360
2622
  query_params = {}
3361
- response = self._put(
3362
- url,
3363
- data=request_body_data,
3364
- params=query_params,
3365
- content_type="application/json",
3366
- )
2623
+ response = self._put(url, data=request_body_data, params=query_params, content_type="application/json")
3367
2624
  response.raise_for_status()
3368
- if (
3369
- response.status_code == 204
3370
- or not response.content
3371
- or not response.text.strip()
3372
- ):
2625
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3373
2626
  return None
3374
2627
  try:
3375
2628
  return response.json()
3376
2629
  except ValueError:
3377
2630
  return None
3378
2631
 
3379
- def create_preference_center_entry(
2632
+ async def create_preference_center_entry(
3380
2633
  self,
3381
2634
  name: str | None = None,
3382
2635
  preference_center_title: str | None = None,
@@ -3415,30 +2668,19 @@ class BrazeApp(APIApplication):
3415
2668
  "state": state,
3416
2669
  "options": options,
3417
2670
  }
3418
- request_body_data = {
3419
- k: v for k, v in request_body_data.items() if v is not None
3420
- }
2671
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3421
2672
  url = f"{self.base_url}/preference_center/v1"
3422
2673
  query_params = {}
3423
- response = self._post(
3424
- url,
3425
- data=request_body_data,
3426
- params=query_params,
3427
- content_type="application/json",
3428
- )
2674
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
3429
2675
  response.raise_for_status()
3430
- if (
3431
- response.status_code == 204
3432
- or not response.content
3433
- or not response.text.strip()
3434
- ):
2676
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3435
2677
  return None
3436
2678
  try:
3437
2679
  return response.json()
3438
2680
  except ValueError:
3439
2681
  return None
3440
2682
 
3441
- def delete_user_by_id(self, id: str) -> dict[str, Any]:
2683
+ async def delete_user_by_id(self, id: str) -> dict[str, Any]:
3442
2684
  """
3443
2685
  Remove Dashboard User Account
3444
2686
 
@@ -3461,18 +2703,14 @@ class BrazeApp(APIApplication):
3461
2703
  query_params = {}
3462
2704
  response = self._delete(url, params=query_params)
3463
2705
  response.raise_for_status()
3464
- if (
3465
- response.status_code == 204
3466
- or not response.content
3467
- or not response.text.strip()
3468
- ):
2706
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3469
2707
  return None
3470
2708
  try:
3471
2709
  return response.json()
3472
2710
  except ValueError:
3473
2711
  return None
3474
2712
 
3475
- def get_user_by_id(self, id: str) -> dict[str, Any]:
2713
+ async def get_user_by_id(self, id: str) -> dict[str, Any]:
3476
2714
  """
3477
2715
  Look Up an Existing Dashboard User Account
3478
2716
 
@@ -3495,18 +2733,14 @@ class BrazeApp(APIApplication):
3495
2733
  query_params = {}
3496
2734
  response = self._get(url, params=query_params)
3497
2735
  response.raise_for_status()
3498
- if (
3499
- response.status_code == 204
3500
- or not response.content
3501
- or not response.text.strip()
3502
- ):
2736
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3503
2737
  return None
3504
2738
  try:
3505
2739
  return response.json()
3506
2740
  except ValueError:
3507
2741
  return None
3508
2742
 
3509
- def update_user_by_id(
2743
+ async def update_user_by_id(
3510
2744
  self,
3511
2745
  id: str,
3512
2746
  schemas: list[str] | None = None,
@@ -3537,36 +2771,20 @@ class BrazeApp(APIApplication):
3537
2771
  if id is None:
3538
2772
  raise ValueError("Missing required parameter 'id'.")
3539
2773
  request_body_data = None
3540
- request_body_data = {
3541
- "schemas": schemas,
3542
- "name": name,
3543
- "department": department,
3544
- "permissions": permissions,
3545
- }
3546
- request_body_data = {
3547
- k: v for k, v in request_body_data.items() if v is not None
3548
- }
2774
+ request_body_data = {"schemas": schemas, "name": name, "department": department, "permissions": permissions}
2775
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3549
2776
  url = f"{self.base_url}/scim/v2/Users/{id}"
3550
2777
  query_params = {}
3551
- response = self._put(
3552
- url,
3553
- data=request_body_data,
3554
- params=query_params,
3555
- content_type="application/json",
3556
- )
2778
+ response = self._put(url, data=request_body_data, params=query_params, content_type="application/json")
3557
2779
  response.raise_for_status()
3558
- if (
3559
- response.status_code == 204
3560
- or not response.content
3561
- or not response.text.strip()
3562
- ):
2780
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3563
2781
  return None
3564
2782
  try:
3565
2783
  return response.json()
3566
2784
  except ValueError:
3567
2785
  return None
3568
2786
 
3569
- def list_users(self, filter: str | None = None) -> dict[str, Any]:
2787
+ async def list_users(self, filter: str | None = None) -> dict[str, Any]:
3570
2788
  """
3571
2789
  Search Existing Dashboard User by Email
3572
2790
 
@@ -3587,18 +2805,14 @@ class BrazeApp(APIApplication):
3587
2805
  query_params = {k: v for k, v in [("filter", filter)] if v is not None}
3588
2806
  response = self._get(url, params=query_params)
3589
2807
  response.raise_for_status()
3590
- if (
3591
- response.status_code == 204
3592
- or not response.content
3593
- or not response.text.strip()
3594
- ):
2808
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3595
2809
  return None
3596
2810
  try:
3597
2811
  return response.json()
3598
2812
  except ValueError:
3599
2813
  return None
3600
2814
 
3601
- def create_user(
2815
+ async def create_user(
3602
2816
  self,
3603
2817
  schemas: list[str] | None = None,
3604
2818
  userName: str | None = None,
@@ -3627,37 +2841,20 @@ class BrazeApp(APIApplication):
3627
2841
  SCIM, important
3628
2842
  """
3629
2843
  request_body_data = None
3630
- request_body_data = {
3631
- "schemas": schemas,
3632
- "userName": userName,
3633
- "name": name,
3634
- "department": department,
3635
- "permissions": permissions,
3636
- }
3637
- request_body_data = {
3638
- k: v for k, v in request_body_data.items() if v is not None
3639
- }
2844
+ request_body_data = {"schemas": schemas, "userName": userName, "name": name, "department": department, "permissions": permissions}
2845
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3640
2846
  url = f"{self.base_url}/scim/v2/Users"
3641
2847
  query_params = {}
3642
- response = self._post(
3643
- url,
3644
- data=request_body_data,
3645
- params=query_params,
3646
- content_type="application/json",
3647
- )
2848
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
3648
2849
  response.raise_for_status()
3649
- if (
3650
- response.status_code == 204
3651
- or not response.content
3652
- or not response.text.strip()
3653
- ):
2850
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3654
2851
  return None
3655
2852
  try:
3656
2853
  return response.json()
3657
2854
  except ValueError:
3658
2855
  return None
3659
2856
 
3660
- def list_invalid_phone_numbers(
2857
+ async def list_invalid_phone_numbers(
3661
2858
  self,
3662
2859
  start_date: str | None = None,
3663
2860
  end_date: str | None = None,
@@ -3702,20 +2899,14 @@ class BrazeApp(APIApplication):
3702
2899
  }
3703
2900
  response = self._get(url, params=query_params)
3704
2901
  response.raise_for_status()
3705
- if (
3706
- response.status_code == 204
3707
- or not response.content
3708
- or not response.text.strip()
3709
- ):
2902
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3710
2903
  return None
3711
2904
  try:
3712
2905
  return response.json()
3713
2906
  except ValueError:
3714
2907
  return None
3715
2908
 
3716
- def remove_invalid_phone_numbers(
3717
- self, phone_numbers: list[str] | None = None
3718
- ) -> dict[str, Any]:
2909
+ async def remove_invalid_phone_numbers(self, phone_numbers: list[str] | None = None) -> dict[str, Any]:
3719
2910
  """
3720
2911
  Remove Invalid Phone Numbers
3721
2912
 
@@ -3733,37 +2924,21 @@ class BrazeApp(APIApplication):
3733
2924
  SMS
3734
2925
  """
3735
2926
  request_body_data = None
3736
- request_body_data = {
3737
- "phone_numbers": phone_numbers,
3738
- }
3739
- request_body_data = {
3740
- k: v for k, v in request_body_data.items() if v is not None
3741
- }
2927
+ request_body_data = {"phone_numbers": phone_numbers}
2928
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3742
2929
  url = f"{self.base_url}/sms/invalid_phone_numbers/remove"
3743
2930
  query_params = {}
3744
- response = self._post(
3745
- url,
3746
- data=request_body_data,
3747
- params=query_params,
3748
- content_type="application/json",
3749
- )
2931
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
3750
2932
  response.raise_for_status()
3751
- if (
3752
- response.status_code == 204
3753
- or not response.content
3754
- or not response.text.strip()
3755
- ):
2933
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3756
2934
  return None
3757
2935
  try:
3758
2936
  return response.json()
3759
2937
  except ValueError:
3760
2938
  return None
3761
2939
 
3762
- def get_subscription_status(
3763
- self,
3764
- subscription_group_id: str | None = None,
3765
- external_id: str | None = None,
3766
- phone: str | None = None,
2940
+ async def get_subscription_status(
2941
+ self, subscription_group_id: str | None = None, external_id: str | None = None, phone: str | None = None
3767
2942
  ) -> dict[str, Any]:
3768
2943
  """
3769
2944
  List User's Subscription Group Status - SMS
@@ -3786,32 +2961,20 @@ class BrazeApp(APIApplication):
3786
2961
  url = f"{self.base_url}/subscription/status/get"
3787
2962
  query_params = {
3788
2963
  k: v
3789
- for k, v in [
3790
- ("subscription_group_id", subscription_group_id),
3791
- ("external_id", external_id),
3792
- ("phone", phone),
3793
- ]
2964
+ for k, v in [("subscription_group_id", subscription_group_id), ("external_id", external_id), ("phone", phone)]
3794
2965
  if v is not None
3795
2966
  }
3796
2967
  response = self._get(url, params=query_params)
3797
2968
  response.raise_for_status()
3798
- if (
3799
- response.status_code == 204
3800
- or not response.content
3801
- or not response.text.strip()
3802
- ):
2969
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3803
2970
  return None
3804
2971
  try:
3805
2972
  return response.json()
3806
2973
  except ValueError:
3807
2974
  return None
3808
2975
 
3809
- def get_subscription_user_status(
3810
- self,
3811
- external_id: str | None = None,
3812
- limit: int | None = None,
3813
- offset: int | None = None,
3814
- phone: str | None = None,
2976
+ async def get_subscription_user_status(
2977
+ self, external_id: str | None = None, limit: int | None = None, offset: int | None = None, phone: str | None = None
3815
2978
  ) -> dict[str, Any]:
3816
2979
  """
3817
2980
  List User's Subscription Group - SMS
@@ -3834,29 +2997,18 @@ class BrazeApp(APIApplication):
3834
2997
  """
3835
2998
  url = f"{self.base_url}/subscription/user/status"
3836
2999
  query_params = {
3837
- k: v
3838
- for k, v in [
3839
- ("external_id", external_id),
3840
- ("limit", limit),
3841
- ("offset", offset),
3842
- ("phone", phone),
3843
- ]
3844
- if v is not None
3000
+ k: v for k, v in [("external_id", external_id), ("limit", limit), ("offset", offset), ("phone", phone)] if v is not None
3845
3001
  }
3846
3002
  response = self._get(url, params=query_params)
3847
3003
  response.raise_for_status()
3848
- if (
3849
- response.status_code == 204
3850
- or not response.content
3851
- or not response.text.strip()
3852
- ):
3004
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3853
3005
  return None
3854
3006
  try:
3855
3007
  return response.json()
3856
3008
  except ValueError:
3857
3009
  return None
3858
3010
 
3859
- def set_subscription_status(
3011
+ async def set_subscription_status(
3860
3012
  self,
3861
3013
  subscription_group_id: str | None = None,
3862
3014
  subscription_state: str | None = None,
@@ -3889,32 +3041,19 @@ class BrazeApp(APIApplication):
3889
3041
  "external_id": external_id,
3890
3042
  "phone": phone,
3891
3043
  }
3892
- request_body_data = {
3893
- k: v for k, v in request_body_data.items() if v is not None
3894
- }
3044
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3895
3045
  url = f"{self.base_url}/subscription/status/set"
3896
3046
  query_params = {}
3897
- response = self._post(
3898
- url,
3899
- data=request_body_data,
3900
- params=query_params,
3901
- content_type="application/json",
3902
- )
3047
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
3903
3048
  response.raise_for_status()
3904
- if (
3905
- response.status_code == 204
3906
- or not response.content
3907
- or not response.text.strip()
3908
- ):
3049
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3909
3050
  return None
3910
3051
  try:
3911
3052
  return response.json()
3912
3053
  except ValueError:
3913
3054
  return None
3914
3055
 
3915
- def set_subscription_status_post(
3916
- self, subscription_groups: list[dict[str, Any]] | None = None
3917
- ) -> dict[str, Any]:
3056
+ async def set_subscription_status_post(self, subscription_groups: list[dict[str, Any]] | None = None) -> dict[str, Any]:
3918
3057
  """
3919
3058
  Update User's Subscription Group Status V2
3920
3059
 
@@ -3932,38 +3071,21 @@ class BrazeApp(APIApplication):
3932
3071
  Subscription Groups > SMS and WhatsApp
3933
3072
  """
3934
3073
  request_body_data = None
3935
- request_body_data = {
3936
- "subscription_groups": subscription_groups,
3937
- }
3938
- request_body_data = {
3939
- k: v for k, v in request_body_data.items() if v is not None
3940
- }
3074
+ request_body_data = {"subscription_groups": subscription_groups}
3075
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
3941
3076
  url = f"{self.base_url}/v2/subscription/status/set"
3942
3077
  query_params = {}
3943
- response = self._post(
3944
- url,
3945
- data=request_body_data,
3946
- params=query_params,
3947
- content_type="application/json",
3948
- )
3078
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
3949
3079
  response.raise_for_status()
3950
- if (
3951
- response.status_code == 204
3952
- or not response.content
3953
- or not response.text.strip()
3954
- ):
3080
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
3955
3081
  return None
3956
3082
  try:
3957
3083
  return response.json()
3958
3084
  except ValueError:
3959
3085
  return None
3960
3086
 
3961
- def list_content_blocks(
3962
- self,
3963
- modified_after: str | None = None,
3964
- modified_before: str | None = None,
3965
- limit: int | None = None,
3966
- offset: int | None = None,
3087
+ async def list_content_blocks(
3088
+ self, modified_after: str | None = None, modified_before: str | None = None, limit: int | None = None, offset: int | None = None
3967
3089
  ) -> dict[str, Any]:
3968
3090
  """
3969
3091
  List Available Content Blocks
@@ -3987,31 +3109,20 @@ class BrazeApp(APIApplication):
3987
3109
  url = f"{self.base_url}/content_blocks/list"
3988
3110
  query_params = {
3989
3111
  k: v
3990
- for k, v in [
3991
- ("modified_after", modified_after),
3992
- ("modified_before", modified_before),
3993
- ("limit", limit),
3994
- ("offset", offset),
3995
- ]
3112
+ for k, v in [("modified_after", modified_after), ("modified_before", modified_before), ("limit", limit), ("offset", offset)]
3996
3113
  if v is not None
3997
3114
  }
3998
3115
  response = self._get(url, params=query_params)
3999
3116
  response.raise_for_status()
4000
- if (
4001
- response.status_code == 204
4002
- or not response.content
4003
- or not response.text.strip()
4004
- ):
3117
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4005
3118
  return None
4006
3119
  try:
4007
3120
  return response.json()
4008
3121
  except ValueError:
4009
3122
  return None
4010
3123
 
4011
- def get_info_content_block(
4012
- self,
4013
- content_block_id: str | None = None,
4014
- include_inclusion_data: bool | None = None,
3124
+ async def get_info_content_block(
3125
+ self, content_block_id: str | None = None, include_inclusion_data: bool | None = None
4015
3126
  ) -> dict[str, Any]:
4016
3127
  """
4017
3128
  See Content Block Information
@@ -4032,27 +3143,18 @@ class BrazeApp(APIApplication):
4032
3143
  """
4033
3144
  url = f"{self.base_url}/content_blocks/info"
4034
3145
  query_params = {
4035
- k: v
4036
- for k, v in [
4037
- ("content_block_id", content_block_id),
4038
- ("include_inclusion_data", include_inclusion_data),
4039
- ]
4040
- if v is not None
3146
+ k: v for k, v in [("content_block_id", content_block_id), ("include_inclusion_data", include_inclusion_data)] if v is not None
4041
3147
  }
4042
3148
  response = self._get(url, params=query_params)
4043
3149
  response.raise_for_status()
4044
- if (
4045
- response.status_code == 204
4046
- or not response.content
4047
- or not response.text.strip()
4048
- ):
3150
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4049
3151
  return None
4050
3152
  try:
4051
3153
  return response.json()
4052
3154
  except ValueError:
4053
3155
  return None
4054
3156
 
4055
- def create_content_block(
3157
+ async def create_content_block(
4056
3158
  self,
4057
3159
  name: str | None = None,
4058
3160
  description: str | None = None,
@@ -4081,37 +3183,20 @@ class BrazeApp(APIApplication):
4081
3183
  Templates > Content Blocks, important
4082
3184
  """
4083
3185
  request_body_data = None
4084
- request_body_data = {
4085
- "name": name,
4086
- "description": description,
4087
- "content": content,
4088
- "state": state,
4089
- "tags": tags,
4090
- }
4091
- request_body_data = {
4092
- k: v for k, v in request_body_data.items() if v is not None
4093
- }
3186
+ request_body_data = {"name": name, "description": description, "content": content, "state": state, "tags": tags}
3187
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4094
3188
  url = f"{self.base_url}/content_blocks/create"
4095
3189
  query_params = {}
4096
- response = self._post(
4097
- url,
4098
- data=request_body_data,
4099
- params=query_params,
4100
- content_type="application/json",
4101
- )
3190
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4102
3191
  response.raise_for_status()
4103
- if (
4104
- response.status_code == 204
4105
- or not response.content
4106
- or not response.text.strip()
4107
- ):
3192
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4108
3193
  return None
4109
3194
  try:
4110
3195
  return response.json()
4111
3196
  except ValueError:
4112
3197
  return None
4113
3198
 
4114
- def update_content_block(
3199
+ async def update_content_block(
4115
3200
  self,
4116
3201
  content_block_id: str | None = None,
4117
3202
  name: str | None = None,
@@ -4150,35 +3235,20 @@ class BrazeApp(APIApplication):
4150
3235
  "state": state,
4151
3236
  "tags": tags,
4152
3237
  }
4153
- request_body_data = {
4154
- k: v for k, v in request_body_data.items() if v is not None
4155
- }
3238
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4156
3239
  url = f"{self.base_url}/content_blocks/update"
4157
3240
  query_params = {}
4158
- response = self._post(
4159
- url,
4160
- data=request_body_data,
4161
- params=query_params,
4162
- content_type="application/json",
4163
- )
3241
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4164
3242
  response.raise_for_status()
4165
- if (
4166
- response.status_code == 204
4167
- or not response.content
4168
- or not response.text.strip()
4169
- ):
3243
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4170
3244
  return None
4171
3245
  try:
4172
3246
  return response.json()
4173
3247
  except ValueError:
4174
3248
  return None
4175
3249
 
4176
- def list_email_templates(
4177
- self,
4178
- modified_after: str | None = None,
4179
- modified_before: str | None = None,
4180
- limit: int | None = None,
4181
- offset: int | None = None,
3250
+ async def list_email_templates(
3251
+ self, modified_after: str | None = None, modified_before: str | None = None, limit: int | None = None, offset: int | None = None
4182
3252
  ) -> dict[str, Any]:
4183
3253
  """
4184
3254
  List Available Email Templates
@@ -4202,30 +3272,19 @@ class BrazeApp(APIApplication):
4202
3272
  url = f"{self.base_url}/templates/email/list"
4203
3273
  query_params = {
4204
3274
  k: v
4205
- for k, v in [
4206
- ("modified_after", modified_after),
4207
- ("modified_before", modified_before),
4208
- ("limit", limit),
4209
- ("offset", offset),
4210
- ]
3275
+ for k, v in [("modified_after", modified_after), ("modified_before", modified_before), ("limit", limit), ("offset", offset)]
4211
3276
  if v is not None
4212
3277
  }
4213
3278
  response = self._get(url, params=query_params)
4214
3279
  response.raise_for_status()
4215
- if (
4216
- response.status_code == 204
4217
- or not response.content
4218
- or not response.text.strip()
4219
- ):
3280
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4220
3281
  return None
4221
3282
  try:
4222
3283
  return response.json()
4223
3284
  except ValueError:
4224
3285
  return None
4225
3286
 
4226
- def get_email_template_info(
4227
- self, email_template_id: str | None = None
4228
- ) -> dict[str, Any]:
3287
+ async def get_email_template_info(self, email_template_id: str | None = None) -> dict[str, Any]:
4229
3288
  """
4230
3289
  See Email Template Information
4231
3290
 
@@ -4243,23 +3302,17 @@ class BrazeApp(APIApplication):
4243
3302
  Templates > Email Templates
4244
3303
  """
4245
3304
  url = f"{self.base_url}/templates/email/info"
4246
- query_params = {
4247
- k: v for k, v in [("email_template_id", email_template_id)] if v is not None
4248
- }
3305
+ query_params = {k: v for k, v in [("email_template_id", email_template_id)] if v is not None}
4249
3306
  response = self._get(url, params=query_params)
4250
3307
  response.raise_for_status()
4251
- if (
4252
- response.status_code == 204
4253
- or not response.content
4254
- or not response.text.strip()
4255
- ):
3308
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4256
3309
  return None
4257
3310
  try:
4258
3311
  return response.json()
4259
3312
  except ValueError:
4260
3313
  return None
4261
3314
 
4262
- def create_email_template(
3315
+ async def create_email_template(
4263
3316
  self,
4264
3317
  template_name: str | None = None,
4265
3318
  subject: str | None = None,
@@ -4298,32 +3351,19 @@ class BrazeApp(APIApplication):
4298
3351
  "preheader": preheader,
4299
3352
  "tags": tags,
4300
3353
  }
4301
- request_body_data = {
4302
- k: v for k, v in request_body_data.items() if v is not None
4303
- }
3354
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4304
3355
  url = f"{self.base_url}/templates/email/create"
4305
3356
  query_params = {}
4306
- response = self._post(
4307
- url,
4308
- data=request_body_data,
4309
- params=query_params,
4310
- content_type="application/json",
4311
- )
3357
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4312
3358
  response.raise_for_status()
4313
- if (
4314
- response.status_code == 204
4315
- or not response.content
4316
- or not response.text.strip()
4317
- ):
3359
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4318
3360
  return None
4319
3361
  try:
4320
3362
  return response.json()
4321
3363
  except ValueError:
4322
3364
  return None
4323
3365
 
4324
- def rename_external_id(
4325
- self, external_id_renames: list[dict[str, Any]] | None = None
4326
- ) -> dict[str, Any]:
3366
+ async def rename_external_id(self, external_id_renames: list[dict[str, Any]] | None = None) -> dict[str, Any]:
4327
3367
  """
4328
3368
  Rename External ID
4329
3369
 
@@ -4341,35 +3381,20 @@ class BrazeApp(APIApplication):
4341
3381
  User Data > External ID Migration
4342
3382
  """
4343
3383
  request_body_data = None
4344
- request_body_data = {
4345
- "external_id_renames": external_id_renames,
4346
- }
4347
- request_body_data = {
4348
- k: v for k, v in request_body_data.items() if v is not None
4349
- }
3384
+ request_body_data = {"external_id_renames": external_id_renames}
3385
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4350
3386
  url = f"{self.base_url}/users/external_ids/rename"
4351
3387
  query_params = {}
4352
- response = self._post(
4353
- url,
4354
- data=request_body_data,
4355
- params=query_params,
4356
- content_type="application/json",
4357
- )
3388
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4358
3389
  response.raise_for_status()
4359
- if (
4360
- response.status_code == 204
4361
- or not response.content
4362
- or not response.text.strip()
4363
- ):
3390
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4364
3391
  return None
4365
3392
  try:
4366
3393
  return response.json()
4367
3394
  except ValueError:
4368
3395
  return None
4369
3396
 
4370
- def remove_external_id(
4371
- self, external_ids: list[str] | None = None
4372
- ) -> dict[str, Any]:
3397
+ async def remove_external_id(self, external_ids: list[str] | None = None) -> dict[str, Any]:
4373
3398
  """
4374
3399
  Remove External ID
4375
3400
 
@@ -4387,35 +3412,20 @@ class BrazeApp(APIApplication):
4387
3412
  User Data > External ID Migration
4388
3413
  """
4389
3414
  request_body_data = None
4390
- request_body_data = {
4391
- "external_ids": external_ids,
4392
- }
4393
- request_body_data = {
4394
- k: v for k, v in request_body_data.items() if v is not None
4395
- }
3415
+ request_body_data = {"external_ids": external_ids}
3416
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4396
3417
  url = f"{self.base_url}/users/external_ids/remove"
4397
3418
  query_params = {}
4398
- response = self._post(
4399
- url,
4400
- data=request_body_data,
4401
- params=query_params,
4402
- content_type="application/json",
4403
- )
3419
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4404
3420
  response.raise_for_status()
4405
- if (
4406
- response.status_code == 204
4407
- or not response.content
4408
- or not response.text.strip()
4409
- ):
3421
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4410
3422
  return None
4411
3423
  try:
4412
3424
  return response.json()
4413
3425
  except ValueError:
4414
3426
  return None
4415
3427
 
4416
- def update_user_alias(
4417
- self, alias_updates: list[dict[str, Any]] | None = None
4418
- ) -> dict[str, Any]:
3428
+ async def update_user_alias(self, alias_updates: list[dict[str, Any]] | None = None) -> dict[str, Any]:
4419
3429
  """
4420
3430
  Update User Alias
4421
3431
 
@@ -4433,35 +3443,20 @@ class BrazeApp(APIApplication):
4433
3443
  User Data
4434
3444
  """
4435
3445
  request_body_data = None
4436
- request_body_data = {
4437
- "alias_updates": alias_updates,
4438
- }
4439
- request_body_data = {
4440
- k: v for k, v in request_body_data.items() if v is not None
4441
- }
3446
+ request_body_data = {"alias_updates": alias_updates}
3447
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4442
3448
  url = f"{self.base_url}/users/alias/update"
4443
3449
  query_params = {}
4444
- response = self._post(
4445
- url,
4446
- data=request_body_data,
4447
- params=query_params,
4448
- content_type="application/json",
4449
- )
3450
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4450
3451
  response.raise_for_status()
4451
- if (
4452
- response.status_code == 204
4453
- or not response.content
4454
- or not response.text.strip()
4455
- ):
3452
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4456
3453
  return None
4457
3454
  try:
4458
3455
  return response.json()
4459
3456
  except ValueError:
4460
3457
  return None
4461
3458
 
4462
- def create_user_alias_new(
4463
- self, user_aliases: list[dict[str, Any]] | None = None
4464
- ) -> dict[str, Any]:
3459
+ async def create_user_alias_new(self, user_aliases: list[dict[str, Any]] | None = None) -> dict[str, Any]:
4465
3460
  """
4466
3461
  Create New User Aliases
4467
3462
 
@@ -4479,37 +3474,21 @@ class BrazeApp(APIApplication):
4479
3474
  User Data
4480
3475
  """
4481
3476
  request_body_data = None
4482
- request_body_data = {
4483
- "user_aliases": user_aliases,
4484
- }
4485
- request_body_data = {
4486
- k: v for k, v in request_body_data.items() if v is not None
4487
- }
3477
+ request_body_data = {"user_aliases": user_aliases}
3478
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4488
3479
  url = f"{self.base_url}/users/alias/new"
4489
3480
  query_params = {}
4490
- response = self._post(
4491
- url,
4492
- data=request_body_data,
4493
- params=query_params,
4494
- content_type="application/json",
4495
- )
3481
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4496
3482
  response.raise_for_status()
4497
- if (
4498
- response.status_code == 204
4499
- or not response.content
4500
- or not response.text.strip()
4501
- ):
3483
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4502
3484
  return None
4503
3485
  try:
4504
3486
  return response.json()
4505
3487
  except ValueError:
4506
3488
  return None
4507
3489
 
4508
- def delete_user(
4509
- self,
4510
- external_ids: list[str] | None = None,
4511
- braze_ids: list[str] | None = None,
4512
- user_aliases: list[dict[str, Any]] | None = None,
3490
+ async def delete_user(
3491
+ self, external_ids: list[str] | None = None, braze_ids: list[str] | None = None, user_aliases: list[dict[str, Any]] | None = None
4513
3492
  ) -> dict[str, Any]:
4514
3493
  """
4515
3494
  Delete Users
@@ -4530,37 +3509,20 @@ class BrazeApp(APIApplication):
4530
3509
  User Data
4531
3510
  """
4532
3511
  request_body_data = None
4533
- request_body_data = {
4534
- "external_ids": external_ids,
4535
- "braze_ids": braze_ids,
4536
- "user_aliases": user_aliases,
4537
- }
4538
- request_body_data = {
4539
- k: v for k, v in request_body_data.items() if v is not None
4540
- }
3512
+ request_body_data = {"external_ids": external_ids, "braze_ids": braze_ids, "user_aliases": user_aliases}
3513
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4541
3514
  url = f"{self.base_url}/users/delete"
4542
3515
  query_params = {}
4543
- response = self._post(
4544
- url,
4545
- data=request_body_data,
4546
- params=query_params,
4547
- content_type="application/json",
4548
- )
3516
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4549
3517
  response.raise_for_status()
4550
- if (
4551
- response.status_code == 204
4552
- or not response.content
4553
- or not response.text.strip()
4554
- ):
3518
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4555
3519
  return None
4556
3520
  try:
4557
3521
  return response.json()
4558
3522
  except ValueError:
4559
3523
  return None
4560
3524
 
4561
- def identify_user(
4562
- self, aliases_to_identify: list[dict[str, Any]] | None = None
4563
- ) -> dict[str, Any]:
3525
+ async def identify_user(self, aliases_to_identify: list[dict[str, Any]] | None = None) -> dict[str, Any]:
4564
3526
  """
4565
3527
  Identify Users
4566
3528
 
@@ -4578,35 +3540,20 @@ class BrazeApp(APIApplication):
4578
3540
  User Data
4579
3541
  """
4580
3542
  request_body_data = None
4581
- request_body_data = {
4582
- "aliases_to_identify": aliases_to_identify,
4583
- }
4584
- request_body_data = {
4585
- k: v for k, v in request_body_data.items() if v is not None
4586
- }
3543
+ request_body_data = {"aliases_to_identify": aliases_to_identify}
3544
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4587
3545
  url = f"{self.base_url}/users/identify"
4588
3546
  query_params = {}
4589
- response = self._post(
4590
- url,
4591
- data=request_body_data,
4592
- params=query_params,
4593
- content_type="application/json",
4594
- )
3547
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4595
3548
  response.raise_for_status()
4596
- if (
4597
- response.status_code == 204
4598
- or not response.content
4599
- or not response.text.strip()
4600
- ):
3549
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4601
3550
  return None
4602
3551
  try:
4603
3552
  return response.json()
4604
3553
  except ValueError:
4605
3554
  return None
4606
3555
 
4607
- def merge_users_post(
4608
- self, merge_updates: list[dict[str, Any]] | None = None
4609
- ) -> dict[str, Any]:
3556
+ async def merge_users_post(self, merge_updates: list[dict[str, Any]] | None = None) -> dict[str, Any]:
4610
3557
  """
4611
3558
  Merge Users
4612
3559
 
@@ -4624,26 +3571,13 @@ class BrazeApp(APIApplication):
4624
3571
  User Data
4625
3572
  """
4626
3573
  request_body_data = None
4627
- request_body_data = {
4628
- "merge_updates": merge_updates,
4629
- }
4630
- request_body_data = {
4631
- k: v for k, v in request_body_data.items() if v is not None
4632
- }
3574
+ request_body_data = {"merge_updates": merge_updates}
3575
+ request_body_data = {k: v for k, v in request_body_data.items() if v is not None}
4633
3576
  url = f"{self.base_url}/users/merge"
4634
3577
  query_params = {}
4635
- response = self._post(
4636
- url,
4637
- data=request_body_data,
4638
- params=query_params,
4639
- content_type="application/json",
4640
- )
3578
+ response = self._post(url, data=request_body_data, params=query_params, content_type="application/json")
4641
3579
  response.raise_for_status()
4642
- if (
4643
- response.status_code == 204
4644
- or not response.content
4645
- or not response.text.strip()
4646
- ):
3580
+ if response.status_code == 204 or not response.content or (not response.text.strip()):
4647
3581
  return None
4648
3582
  try:
4649
3583
  return response.json()