marqetive-lib 0.2.4__py3-none-any.whl → 0.2.6__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.
marqetive/core/models.py CHANGED
@@ -423,6 +423,8 @@ class PostCreateRequest(BaseModel):
423
423
  link: str | None = None
424
424
  tags: list[str] = Field(default_factory=list)
425
425
  location: str | None = None
426
+ is_quoted: bool | None = None
427
+ quoted_card_id: str | None = None # for future we can quote other than first tweet
426
428
  additional_data: dict[str, Any] = Field(default_factory=dict)
427
429
 
428
430
 
@@ -48,21 +48,23 @@ from marqetive.platforms.linkedin.models import (
48
48
 
49
49
  # Valid CTA (Call-To-Action) labels per LinkedIn API documentation
50
50
  # Note: BUY_NOW and SHOP_NOW require API version 202504 or later
51
- VALID_CTA_LABELS = frozenset({
52
- "APPLY",
53
- "DOWNLOAD",
54
- "VIEW_QUOTE",
55
- "LEARN_MORE",
56
- "SIGN_UP",
57
- "SUBSCRIBE",
58
- "REGISTER",
59
- "JOIN",
60
- "ATTEND",
61
- "REQUEST_DEMO",
62
- "SEE_MORE",
63
- "BUY_NOW", # Requires API version 202504+
64
- "SHOP_NOW", # Requires API version 202504+
65
- })
51
+ VALID_CTA_LABELS = frozenset(
52
+ {
53
+ "APPLY",
54
+ "DOWNLOAD",
55
+ "VIEW_QUOTE",
56
+ "LEARN_MORE",
57
+ "SIGN_UP",
58
+ "SUBSCRIBE",
59
+ "REGISTER",
60
+ "JOIN",
61
+ "ATTEND",
62
+ "REQUEST_DEMO",
63
+ "SEE_MORE",
64
+ "BUY_NOW", # Requires API version 202504+
65
+ "SHOP_NOW", # Requires API version 202504+
66
+ }
67
+ )
66
68
 
67
69
 
68
70
  class LinkedInClient(SocialMediaPlatform):
@@ -257,7 +257,9 @@ class TikTokClient(SocialMediaPlatform):
257
257
  # 4. Return minimal Post object without fetching details
258
258
  video_id = upload_result.video_id or upload_result.publish_id
259
259
  url = (
260
- HttpUrl(f"https://www.tiktok.com/@{self.credentials.username}/video/{video_id}")
260
+ HttpUrl(
261
+ f"https://www.tiktok.com/@{self.credentials.username}/video/{video_id}"
262
+ )
261
263
  if self.credentials.username and video_id
262
264
  else None
263
265
  )
@@ -621,6 +621,9 @@ class TwitterClient(SocialMediaPlatform):
621
621
  url=HttpUrl(media_url),
622
622
  )
623
623
 
624
+ except PlatformAuthError:
625
+ # Re-raise auth errors (including TwitterUnauthorizedError) directly
626
+ raise
624
627
  except Exception as e:
625
628
  raise MediaUploadError(
626
629
  f"Failed to upload media: {e}",
@@ -784,6 +787,11 @@ class TwitterClient(SocialMediaPlatform):
784
787
  post_request = post_request.model_copy(
785
788
  update={"reply_to_post_id": reply_to_id}
786
789
  )
790
+ if post_request.is_quoted and created_posts:
791
+ post_request = post_request.model_copy(
792
+ update={"quote_post_id": created_posts[0].post_id}
793
+ )
794
+
787
795
  # TwitterPostRequest works with create_post via duck typing
788
796
  final_request = post_request
789
797
  else:
@@ -795,6 +803,10 @@ class TwitterClient(SocialMediaPlatform):
795
803
  }
796
804
  if reply_to_id is not None:
797
805
  request_data["reply_to_post_id"] = reply_to_id
806
+
807
+ if post_request.is_quoted and created_posts:
808
+ request_data["quote_post_id"] = created_posts[0].post_id
809
+
798
810
  final_request = TwitterPostRequest(**request_data)
799
811
 
800
812
  # TwitterPostRequest has compatible interface with PostCreateRequest
@@ -914,9 +926,11 @@ class TwitterClient(SocialMediaPlatform):
914
926
  return MediaAttachment(
915
927
  media_id=result.media_id,
916
928
  media_type=MediaType.IMAGE, # Simplified type
917
- url=HttpUrl(media_url)
918
- if media_url.startswith("http")
919
- else HttpUrl(f"file://{media_url}"),
929
+ url=(
930
+ HttpUrl(media_url)
931
+ if media_url.startswith("http")
932
+ else HttpUrl(f"file://{media_url}")
933
+ ),
920
934
  )
921
935
 
922
936
  except Exception as e:
marqetive/utils/retry.py CHANGED
@@ -93,7 +93,7 @@ def is_retryable_error(error: Exception) -> bool:
93
93
 
94
94
  # Network/connection errors are retryable
95
95
  if isinstance(
96
- error, (httpx.ConnectError, httpx.TimeoutException, httpx.NetworkError)
96
+ error, httpx.ConnectError | httpx.TimeoutException | httpx.NetworkError
97
97
  ):
98
98
  return True
99
99
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: marqetive-lib
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: Modern Python utilities for web APIs
5
5
  Keywords: api,utilities,web,http,marqetive
6
6
  Requires-Python: >=3.12
@@ -3,7 +3,7 @@ marqetive/core/__init__.py,sha256=0_0vzxJ619YIJkz1yzSvhnGDJRkrErs_QSg2q3Bloss,11
3
3
  marqetive/core/base.py,sha256=I2pRHJWIizSgUtGum1pW1TrJwCRgLE5vljLmJI7Z2Og,20323
4
4
  marqetive/core/client.py,sha256=eCtvL100dkxYQHC_TJzHbs3dGjgsa_me9VTHo-CUN2M,3900
5
5
  marqetive/core/exceptions.py,sha256=h4boyxGY2tUQXMfnDcpVzAKVW71VpqvOZtGkQ-oVkYM,9710
6
- marqetive/core/models.py,sha256=0n5z1GcrNJWmPCgc_k5glxd3dLGUANwp4qvHCM5FIC4,19287
6
+ marqetive/core/models.py,sha256=AGbRuQFhO3VMEF5ZP7mww0-ojKWlCLeuGQKIiWNsyzQ,19409
7
7
  marqetive/factory.py,sha256=SfHsp6mdIZpDBtryUvHSwljBRkCyAHhtwV7qDfgL9k4,15268
8
8
  marqetive/platforms/__init__.py,sha256=RBxlQSGyELsulSnwf5uaE1ohxFc7jC61OO9CrKaZp48,1312
9
9
  marqetive/platforms/instagram/__init__.py,sha256=c1Gs0ozG6D7Z-Uz_UQ7S3joL0qUTT9eUZPWcePyESk8,229
@@ -12,17 +12,17 @@ marqetive/platforms/instagram/exceptions.py,sha256=TcD_pX4eSx_k4yW8DgfA6SGPiAz3V
12
12
  marqetive/platforms/instagram/media.py,sha256=0ZbUbpwJ025_hccL9X8qced_-LJGoL_-NdS84Op97VE,23228
13
13
  marqetive/platforms/instagram/models.py,sha256=20v3m1037y3b_WlsKF8zAOgV23nFu63tfmmUN1CefOI,2769
14
14
  marqetive/platforms/linkedin/__init__.py,sha256=_FrdZpqcXjcUW6C-25zGV7poGih9yzs6y1AFnuizTUQ,1384
15
- marqetive/platforms/linkedin/client.py,sha256=-0YiAPv75zwsjuOoCEb7OFFH5gIlaRLd7eHDTWmLg3U,74826
15
+ marqetive/platforms/linkedin/client.py,sha256=KOcg31aFVglAF0P48MagSLfZHAQxzsdhDFWOJedI-iY,74888
16
16
  marqetive/platforms/linkedin/exceptions.py,sha256=i5fARUkZik46bS3htZBwUInVzetsZx1APpKEXLrCKf0,9762
17
17
  marqetive/platforms/linkedin/media.py,sha256=-kpkL5brYhx8cZlFS5ueDgY4eSZWqHoB6xp8jZU2cyI,25931
18
18
  marqetive/platforms/linkedin/models.py,sha256=n7DqwVxYSbGYBmeEJ1woCZ6XhUIHcLx8Gpm8uCBACzI,12620
19
19
  marqetive/platforms/tiktok/__init__.py,sha256=BqjkXTZDyBlcY3lvREy13yP9h3RcDga8E6Rl6f5KPp8,238
20
- marqetive/platforms/tiktok/client.py,sha256=IhLCphzu_qxTSP6CDFqLBQqM3zJ7bLy7uHDSErc-qA8,18968
20
+ marqetive/platforms/tiktok/client.py,sha256=vp2kJnlsywL339N_p-aXtKdmNrragKlKfbyzij6UB7Y,18998
21
21
  marqetive/platforms/tiktok/exceptions.py,sha256=vxwyAKujMGZJh0LetG1QsLF95QfUs_kR6ujsWSHGqL0,10124
22
22
  marqetive/platforms/tiktok/media.py,sha256=NmvzvzfaZMmzIx88wkXI5tWLd4vYN1VJXN-IkaEAO2c,28638
23
23
  marqetive/platforms/tiktok/models.py,sha256=WWdjuFqhTIR8SnHkz-8UaNc5Mm2PrGomwQ3W7pJcQFg,2962
24
24
  marqetive/platforms/twitter/__init__.py,sha256=etiNzWd0EznrDbFTlc71dc_Cm-aqAM7RIwpj8qrYEiE,447
25
- marqetive/platforms/twitter/client.py,sha256=u9eKm4NOO8NpzdfpwzxBYJ8zn6OXbMTIa4Zv9xhvPdQ,44370
25
+ marqetive/platforms/twitter/client.py,sha256=hs18YKBqdu0pBO0hgpHt_E0ZXUFQpNJ6_e-_nfSJh5Q,44910
26
26
  marqetive/platforms/twitter/exceptions.py,sha256=AvXzucqF2P6F3-lynayt461oj9e1luCh2-El5pXqZL4,9832
27
27
  marqetive/platforms/twitter/media.py,sha256=cWELUTDFlyS7WIjEzkCaXOMOiSZZ3eAwpmiX90-CDjM,28954
28
28
  marqetive/platforms/twitter/models.py,sha256=afFK1jJyrIC6BvY6ShkHlg-KnvawdeLGS-hB-GoloWA,4579
@@ -32,7 +32,7 @@ marqetive/utils/file_handlers.py,sha256=mDBGLQpCBYD-AN3W_qysZn0JmXxQE017_lnURdkk
32
32
  marqetive/utils/helpers.py,sha256=Sh5HZD6AOJig_6T84n6JsKLosIkKIkpkiYTl69rnOOw,1321
33
33
  marqetive/utils/media.py,sha256=reVousdueG-h5jeI6uLGqVCfjYxlsMiWhx6XZwg-iHY,14664
34
34
  marqetive/utils/oauth.py,sha256=3TtbUCVuGxtOBxIUvVJH_DUMIHrP76XDpabPYaLXhTU,15392
35
- marqetive/utils/retry.py,sha256=UcgrmVBVG5zd30_11mZnRnTaSFrbUYXBO1DrXPR0f8E,7627
36
- marqetive_lib-0.2.4.dist-info/METADATA,sha256=rTSJWTpbCg-6PABv2BvrpYpwxOZUFmB8e-0HOWqHcyo,7875
37
- marqetive_lib-0.2.4.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
38
- marqetive_lib-0.2.4.dist-info/RECORD,,
35
+ marqetive/utils/retry.py,sha256=f75gWSSz4B6tt-GfoKyWa8HNZhrw3XDGFddwCPFSfoA,7627
36
+ marqetive_lib-0.2.6.dist-info/METADATA,sha256=ZxvYoKe8odjVjN86bn0vOsEtsa9SWnDRVJSppBrbfk0,7875
37
+ marqetive_lib-0.2.6.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
38
+ marqetive_lib-0.2.6.dist-info/RECORD,,