marqetive-lib 0.1.2__py3-none-any.whl → 0.1.3__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 (41) hide show
  1. marqetive/__init__.py +13 -13
  2. marqetive/core/__init__.py +1 -1
  3. marqetive/core/account_factory.py +2 -2
  4. marqetive/core/base_manager.py +4 -4
  5. marqetive/core/registry.py +3 -3
  6. marqetive/platforms/__init__.py +6 -6
  7. marqetive/platforms/base.py +3 -3
  8. marqetive/platforms/instagram/__init__.py +3 -3
  9. marqetive/platforms/instagram/client.py +4 -4
  10. marqetive/platforms/instagram/exceptions.py +1 -1
  11. marqetive/platforms/instagram/factory.py +5 -5
  12. marqetive/platforms/instagram/manager.py +4 -4
  13. marqetive/platforms/instagram/media.py +2 -2
  14. marqetive/platforms/linkedin/__init__.py +3 -3
  15. marqetive/platforms/linkedin/client.py +4 -4
  16. marqetive/platforms/linkedin/exceptions.py +1 -1
  17. marqetive/platforms/linkedin/factory.py +5 -5
  18. marqetive/platforms/linkedin/manager.py +4 -4
  19. marqetive/platforms/linkedin/media.py +4 -4
  20. marqetive/platforms/tiktok/__init__.py +3 -3
  21. marqetive/platforms/tiktok/client.py +319 -104
  22. marqetive/platforms/tiktok/exceptions.py +170 -66
  23. marqetive/platforms/tiktok/factory.py +5 -5
  24. marqetive/platforms/tiktok/manager.py +5 -5
  25. marqetive/platforms/tiktok/media.py +547 -159
  26. marqetive/platforms/twitter/__init__.py +3 -3
  27. marqetive/platforms/twitter/client.py +7 -53
  28. marqetive/platforms/twitter/exceptions.py +1 -1
  29. marqetive/platforms/twitter/factory.py +5 -6
  30. marqetive/platforms/twitter/manager.py +4 -4
  31. marqetive/platforms/twitter/media.py +4 -4
  32. marqetive/registry_init.py +10 -8
  33. marqetive/utils/__init__.py +3 -3
  34. marqetive/utils/file_handlers.py +1 -1
  35. marqetive/utils/oauth.py +2 -2
  36. marqetive/utils/token_validator.py +1 -1
  37. {marqetive_lib-0.1.2.dist-info → marqetive_lib-0.1.3.dist-info}/METADATA +1 -1
  38. marqetive_lib-0.1.3.dist-info/RECORD +47 -0
  39. marqetive/platforms/twitter/threads.py +0 -442
  40. marqetive_lib-0.1.2.dist-info/RECORD +0 -48
  41. {marqetive_lib-0.1.2.dist-info → marqetive_lib-0.1.3.dist-info}/WHEEL +0 -0
@@ -1,7 +1,7 @@
1
1
  """Twitter/X platform integration."""
2
2
 
3
- from src.marqetive.platforms.twitter.client import TwitterClient
4
- from src.marqetive.platforms.twitter.factory import TwitterAccountFactory
5
- from src.marqetive.platforms.twitter.manager import TwitterPostManager
3
+ from marqetive.platforms.twitter.client import TwitterClient
4
+ from marqetive.platforms.twitter.factory import TwitterAccountFactory
5
+ from marqetive.platforms.twitter.manager import TwitterPostManager
6
6
 
7
7
  __all__ = ["TwitterClient", "TwitterAccountFactory", "TwitterPostManager"]
@@ -13,8 +13,8 @@ import httpx
13
13
  import tweepy
14
14
  from pydantic import HttpUrl
15
15
 
16
- from src.marqetive.platforms.base import SocialMediaPlatform
17
- from src.marqetive.platforms.exceptions import (
16
+ from marqetive.platforms.base import SocialMediaPlatform
17
+ from marqetive.platforms.exceptions import (
18
18
  MediaUploadError,
19
19
  PlatformAuthError,
20
20
  PlatformError,
@@ -22,7 +22,7 @@ from src.marqetive.platforms.exceptions import (
22
22
  RateLimitError,
23
23
  ValidationError,
24
24
  )
25
- from src.marqetive.platforms.models import (
25
+ from marqetive.platforms.models import (
26
26
  AuthCredentials,
27
27
  Comment,
28
28
  CommentStatus,
@@ -33,12 +33,7 @@ from src.marqetive.platforms.models import (
33
33
  PostStatus,
34
34
  PostUpdateRequest,
35
35
  )
36
- from src.marqetive.platforms.twitter.media import TwitterMediaManager
37
- from src.marqetive.platforms.twitter.threads import (
38
- ThreadResult,
39
- TweetData,
40
- TwitterThreadManager,
41
- )
36
+ from marqetive.platforms.twitter.media import TwitterMediaManager
42
37
 
43
38
 
44
39
  class TwitterClient(SocialMediaPlatform):
@@ -94,9 +89,8 @@ class TwitterClient(SocialMediaPlatform):
94
89
  self._tweepy_client: tweepy.Client | None = None
95
90
  self._setup_tweepy_client()
96
91
 
97
- # Initialize media and thread managers
92
+ # Initialize media manager
98
93
  self._media_manager: TwitterMediaManager | None = None
99
- self._thread_manager: TwitterThreadManager | None = None
100
94
 
101
95
  def _setup_tweepy_client(self) -> None:
102
96
  """Setup tweepy Client with credentials."""
@@ -107,7 +101,7 @@ class TwitterClient(SocialMediaPlatform):
107
101
  )
108
102
 
109
103
  async def _setup_managers(self) -> None:
110
- """Setup media and thread managers."""
104
+ """Setup media manager."""
111
105
  if not self._tweepy_client:
112
106
  return
113
107
 
@@ -117,15 +111,11 @@ class TwitterClient(SocialMediaPlatform):
117
111
  timeout=self.timeout,
118
112
  )
119
113
 
120
- # Initialize thread manager
121
- self._thread_manager = TwitterThreadManager(self._tweepy_client)
122
-
123
114
  async def _cleanup_managers(self) -> None:
124
- """Cleanup media and thread managers."""
115
+ """Cleanup media manager."""
125
116
  if self._media_manager:
126
117
  await self._media_manager.__aexit__(None, None, None)
127
118
  self._media_manager = None
128
- self._thread_manager = None
129
119
 
130
120
  async def __aenter__(self) -> "TwitterClient":
131
121
  """Async context manager entry."""
@@ -138,42 +128,6 @@ class TwitterClient(SocialMediaPlatform):
138
128
  await self._cleanup_managers()
139
129
  await super().__aexit__(exc_type, exc_val, exc_tb)
140
130
 
141
- # ==================== Thread Methods ====================
142
-
143
- async def create_thread(
144
- self,
145
- tweets: list[TweetData],
146
- *,
147
- auto_number: bool = False,
148
- number_format: str = "{index}/{total}",
149
- ) -> ThreadResult:
150
- """Create a Twitter thread from multiple tweets."""
151
- if not self._thread_manager:
152
- raise RuntimeError("Client must be used as async context manager")
153
-
154
- return await self._thread_manager.create_thread(
155
- tweets,
156
- auto_number=auto_number,
157
- number_format=number_format,
158
- )
159
-
160
- async def delete_thread(
161
- self,
162
- thread_id: str,
163
- tweet_ids: list[str],
164
- *,
165
- continue_on_error: bool = True,
166
- ) -> dict[str, bool]:
167
- """Delete all tweets in a thread."""
168
- if not self._thread_manager:
169
- raise RuntimeError("Client must be used as async context manager")
170
-
171
- return await self._thread_manager.delete_thread(
172
- thread_id,
173
- tweet_ids,
174
- continue_on_error=continue_on_error,
175
- )
176
-
177
131
  # ==================== Authentication Methods ====================
178
132
 
179
133
  async def authenticate(self) -> AuthCredentials:
@@ -9,7 +9,7 @@ This module provides comprehensive error handling for Twitter API errors includi
9
9
 
10
10
  from typing import Any
11
11
 
12
- from src.marqetive.platforms.exceptions import (
12
+ from marqetive.platforms.exceptions import (
13
13
  MediaUploadError,
14
14
  PlatformAuthError,
15
15
  PlatformError,
@@ -4,11 +4,11 @@ import logging
4
4
  import os
5
5
  from collections.abc import Callable
6
6
 
7
- from src.marqetive.core.account_factory import BaseAccountFactory
8
- from src.marqetive.platforms.exceptions import PlatformAuthError
9
- from src.marqetive.platforms.models import AccountStatus, AuthCredentials
10
- from src.marqetive.platforms.twitter.client import TwitterClient
11
- from src.marqetive.utils.oauth import refresh_twitter_token
7
+ from marqetive.core.account_factory import BaseAccountFactory
8
+ from marqetive.platforms.exceptions import PlatformAuthError
9
+ from marqetive.platforms.models import AccountStatus, AuthCredentials
10
+ from marqetive.platforms.twitter.client import TwitterClient
11
+ from marqetive.utils.oauth import refresh_twitter_token
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
@@ -116,7 +116,6 @@ class TwitterAccountFactory(BaseAccountFactory):
116
116
  api_secret = additional_data.get("api_secret") or os.getenv(
117
117
  "TWITTER_API_SECRET"
118
118
  )
119
- additional_data.get("access_secret")
120
119
 
121
120
  # Update additional_data if we have env values
122
121
  if api_key:
@@ -3,10 +3,10 @@
3
3
  import logging
4
4
  from typing import Any
5
5
 
6
- from src.marqetive.core.base_manager import BasePostManager
7
- from src.marqetive.platforms.models import AuthCredentials, Post, PostCreateRequest
8
- from src.marqetive.platforms.twitter.client import TwitterClient
9
- from src.marqetive.platforms.twitter.factory import TwitterAccountFactory
6
+ from marqetive.core.base_manager import BasePostManager
7
+ from marqetive.platforms.models import AuthCredentials, Post, PostCreateRequest
8
+ from marqetive.platforms.twitter.client import TwitterClient
9
+ from marqetive.platforms.twitter.factory import TwitterAccountFactory
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -18,17 +18,17 @@ from typing import Any, Literal
18
18
 
19
19
  import httpx
20
20
 
21
- from src.marqetive.platforms.exceptions import (
21
+ from marqetive.platforms.exceptions import (
22
22
  InvalidFileTypeError,
23
23
  MediaUploadError,
24
24
  )
25
- from src.marqetive.utils.file_handlers import download_file
26
- from src.marqetive.utils.media import (
25
+ from marqetive.utils.file_handlers import download_file
26
+ from marqetive.utils.media import (
27
27
  detect_mime_type,
28
28
  format_file_size,
29
29
  get_chunk_count,
30
30
  )
31
- from src.marqetive.utils.retry import STANDARD_BACKOFF, retry_async
31
+ from marqetive.utils.retry import STANDARD_BACKOFF, retry_async
32
32
 
33
33
  logger = logging.getLogger(__name__)
34
34
 
@@ -6,10 +6,11 @@ platform managers with the global registry.
6
6
 
7
7
  import logging
8
8
 
9
- from src.marqetive.core.registry import register_platform
10
- from src.marqetive.platforms.instagram.manager import InstagramPostManager
11
- from src.marqetive.platforms.linkedin.manager import LinkedInPostManager
12
- from src.marqetive.platforms.twitter.manager import TwitterPostManager
9
+ from marqetive.core.registry import register_platform
10
+ from marqetive.platforms.instagram.manager import InstagramPostManager
11
+ from marqetive.platforms.linkedin.manager import LinkedInPostManager
12
+ from marqetive.platforms.tiktok.manager import TikTokPostManager
13
+ from marqetive.platforms.twitter.manager import TwitterPostManager
13
14
 
14
15
  logger = logging.getLogger(__name__)
15
16
 
@@ -19,16 +20,16 @@ _initialized = False
19
20
  def initialize_platform_registry() -> None:
20
21
  """Initialize the platform registry with all available platforms.
21
22
 
22
- This function registers all platform managers (Twitter, LinkedIn, Instagram)
23
+ This function registers all platform managers (Twitter, LinkedIn, Instagram, TikTok)
23
24
  with the global registry. It should be called once at application startup.
24
25
 
25
26
  This function is idempotent - calling it multiple times is safe.
26
27
 
27
28
  Example:
28
- >>> from marqetive_lib import initialize_platform_registry
29
+ >>> from marqetive import initialize_platform_registry
29
30
  >>> initialize_platform_registry()
30
31
  >>> # Now you can use get_manager_for_platform()
31
- >>> from marqetive_lib import get_manager_for_platform
32
+ >>> from marqetive import get_manager_for_platform
32
33
  >>> manager = get_manager_for_platform("twitter")
33
34
  """
34
35
  global _initialized
@@ -43,9 +44,10 @@ def initialize_platform_registry() -> None:
43
44
  register_platform("twitter", TwitterPostManager)
44
45
  register_platform("linkedin", LinkedInPostManager)
45
46
  register_platform("instagram", InstagramPostManager)
47
+ register_platform("tiktok", TikTokPostManager)
46
48
 
47
49
  _initialized = True
48
- logger.info("Platform registry initialized with 3 platforms")
50
+ logger.info("Platform registry initialized with 4 platforms")
49
51
 
50
52
 
51
53
  def is_registry_initialized() -> bool:
@@ -1,6 +1,6 @@
1
1
  """Utility functions for MarqetiveLib."""
2
2
 
3
- from src.marqetive.utils.file_handlers import (
3
+ from marqetive.utils.file_handlers import (
4
4
  TempFileManager,
5
5
  download_file,
6
6
  download_to_memory,
@@ -9,8 +9,8 @@ from src.marqetive.utils.file_handlers import (
9
9
  stream_file_upload,
10
10
  write_file_bytes,
11
11
  )
12
- from src.marqetive.utils.helpers import format_response, parse_query_params
13
- from src.marqetive.utils.media import (
12
+ from marqetive.utils.helpers import format_response, parse_query_params
13
+ from marqetive.utils.media import (
14
14
  MediaValidator,
15
15
  chunk_file,
16
16
  detect_mime_type,
@@ -17,7 +17,7 @@ from typing import Any
17
17
  import aiofiles
18
18
  import httpx
19
19
 
20
- from src.marqetive.utils.media import detect_mime_type, format_file_size
20
+ from marqetive.utils.media import detect_mime_type, format_file_size
21
21
 
22
22
 
23
23
  class DownloadProgress:
marqetive/utils/oauth.py CHANGED
@@ -10,8 +10,8 @@ from typing import Any
10
10
 
11
11
  import httpx
12
12
 
13
- from src.marqetive.platforms.exceptions import PlatformAuthError
14
- from src.marqetive.platforms.models import AuthCredentials
13
+ from marqetive.platforms.exceptions import PlatformAuthError
14
+ from marqetive.platforms.models import AuthCredentials
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
@@ -8,7 +8,7 @@ import re
8
8
  from datetime import datetime, timedelta
9
9
  from typing import Any
10
10
 
11
- from src.marqetive.platforms.models import AuthCredentials
11
+ from marqetive.platforms.models import AuthCredentials
12
12
 
13
13
 
14
14
  def is_token_expired(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: marqetive-lib
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Modern Python utilities for web APIs
5
5
  Keywords: api,utilities,web,http,marqetive
6
6
  Requires-Python: >=3.12
@@ -0,0 +1,47 @@
1
+ marqetive/__init__.py,sha256=HqOJ0c2W_U31NelSR0-5CfzS8blJofRteSTudgr1Qwg,3090
2
+ marqetive/core/__init__.py,sha256=qOC6JhGjWOpj9_7umtc6VGH16ZJZE6iNDhA6iDZm8kg,113
3
+ marqetive/core/account_factory.py,sha256=3PrkWPdeUS8K8yaMufCsc-mhNN8k_9oDUo_ltnkMSPY,7145
4
+ marqetive/core/base_manager.py,sha256=tbuwO2QQaSup_UXMCtmETcNutzCFV0omvroUM7yHFKA,10031
5
+ marqetive/core/client.py,sha256=2_FoNpqaRglsWg10i5RTbyDg_kRQKhgWjYs6iDdFxLg,3210
6
+ marqetive/core/progress.py,sha256=5Vyksf8YfQUVRudwDEuegcxoc0js5qbHM2SFZ6VLxHM,8593
7
+ marqetive/core/registry.py,sha256=oqf32OJr9FDwmL5d5-UbDSV_-ICTI7vTYSrjagGp2r4,8072
8
+ marqetive/platforms/__init__.py,sha256=jMzSg8fI5nCO20aTNaoF6cQ6RIZoxzVhEDvq3ZpAbXc,1327
9
+ marqetive/platforms/base.py,sha256=y37RkSb3AGHtU-JmjxlUgbwlqG2MmF7w4MI3FATHoG4,11945
10
+ marqetive/platforms/exceptions.py,sha256=Xyj0bzNiZm5VTErmzXgVW8T6IQnOpF92-HJiKPKjIio,7076
11
+ marqetive/platforms/instagram/__init__.py,sha256=dFrDIyKGdw8AsRRYb_AjW1R8PWkxqytM-nrjuAvbw0A,331
12
+ marqetive/platforms/instagram/client.py,sha256=XuvWl0aRHdAFScjOf4x4reQWkfZXdtGKmh1lIWcj4Lc,24939
13
+ marqetive/platforms/instagram/exceptions.py,sha256=zwTc90VbG8uz_6O5bKw68Pp53SoevLQUqPiXj4ZgThU,8983
14
+ marqetive/platforms/instagram/factory.py,sha256=qo7kLk7IoVWGjB0hJbkQqesOveN4gidw0kUh_7SzvaM,3533
15
+ marqetive/platforms/instagram/manager.py,sha256=ZCqdlz5DgOhKUb1n2WOviLsr4NQxfBT4KiycSRv3Q-4,3714
16
+ marqetive/platforms/instagram/media.py,sha256=JDRFB66UlhSjAf0PFR3raGqYxtNTSd5yIZ_2xTGmZRk,21166
17
+ marqetive/platforms/linkedin/__init__.py,sha256=r-1p9yaJO4n8wYWNtN32Quwar6eAWkF5EtFN-v2AdPg,321
18
+ marqetive/platforms/linkedin/client.py,sha256=ddcKmVN2d0ow2abfnaNSeswRsoYREdxj-J9w711zsy0,23558
19
+ marqetive/platforms/linkedin/exceptions.py,sha256=WHjMZ-XJnKgT6uzzi7LXqFt4lD7nSCjzMzaqtOQA3hM,9767
20
+ marqetive/platforms/linkedin/factory.py,sha256=N8POv4vMSg1L8PYnV9-JpHgYlaa33AfeWUhh6UPkViI,4516
21
+ marqetive/platforms/linkedin/manager.py,sha256=K_X74qenJyd5HIL3KtsKpHjQOz48uENFJabZdsXwE-Y,3984
22
+ marqetive/platforms/linkedin/media.py,sha256=360OT1sdBuJRjuL3wJ-T1irAX5gHmcf4AwAU__cvwwA,16901
23
+ marqetive/platforms/models.py,sha256=W_yOuRWItWSn82n8vXRNN_ScdNkzY1De2qqXaVN2RGU,10974
24
+ marqetive/platforms/tiktok/__init__.py,sha256=3S9ItK1Md7Qts21iNJQ5nvvkz7vHeu3ZUR2ZouoWz64,301
25
+ marqetive/platforms/tiktok/client.py,sha256=lLTkUsQ-KEOyrBQXPeA3cK_enNqJVIgffZ99WHz9QJg,16783
26
+ marqetive/platforms/tiktok/exceptions.py,sha256=yOjkZgHyo_t9Chrhws_2n-2sbiDDkCUBv5fdW2nfiHI,10129
27
+ marqetive/platforms/tiktok/factory.py,sha256=U9myKTyPD1HEy3UShDeb1irP0PDZEMamLcbtHxjVtvQ,6744
28
+ marqetive/platforms/tiktok/manager.py,sha256=HMem8to9WsKlQQBm6tiAmcJhoAeM6nwq7YAIvcfKnuY,4113
29
+ marqetive/platforms/tiktok/media.py,sha256=3XjBrHQ7ahB6jVISNmYLgBR3p9N2RKiQRRdqCu_Dh2U,23785
30
+ marqetive/platforms/twitter/__init__.py,sha256=zDEslH3Y6zCnFlYaoW77bkO7j75OmABjqMf1BGh8P5M,313
31
+ marqetive/platforms/twitter/client.py,sha256=1jZz_ft77R0LqJbS6Po0HUErhGF_vRBGsoz7ExOb4L0,19379
32
+ marqetive/platforms/twitter/exceptions.py,sha256=aKrjUZL07KWQ8hatj5-U7UfnSTl-n8DnTgGGigYCrIY,8931
33
+ marqetive/platforms/twitter/factory.py,sha256=EZneqxoGg0TO952C4AHjv_HjyZ1ZQPR_jWPYYtQjF8E,5221
34
+ marqetive/platforms/twitter/manager.py,sha256=QlPrVniPbJdlt39iMi_hmDGpaMkPT7pNjjIYUre2byY,4092
35
+ marqetive/platforms/twitter/media.py,sha256=16atvKwSukvK_YC_gIm2qsl3pmidWEBAwIfJBPG9HQo,24968
36
+ marqetive/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ marqetive/registry_init.py,sha256=TFzkqd7ArW-pqp9GYGDRfNDQkvs3YUbUwakvX95IDKw,2151
38
+ marqetive/utils/__init__.py,sha256=bSrNajbxYBSKQayrPviLz8JeGjplnyK8y_NGDtgb7yQ,977
39
+ marqetive/utils/file_handlers.py,sha256=4TP5kmWofNTSZmlS683CM1UYP83WvRd_NubMbqtXv-g,12568
40
+ marqetive/utils/helpers.py,sha256=8-ljhL47SremKcQO2GF8DIHOPODEv1rSioVNuSPCbec,2634
41
+ marqetive/utils/media.py,sha256=Rvxw9XKU65n-z4G1bEihG3wXZBmjSDZUqClfjGFrg6k,12013
42
+ marqetive/utils/oauth.py,sha256=NjHh3o5iKlXMJmzSFJHq-pn5yn82DvmpB7DMTJT0ht8,12105
43
+ marqetive/utils/retry.py,sha256=lAniJLMNWp9XsHrvU0XBNifpNEjfde4MGfd5hlFTPfA,7636
44
+ marqetive/utils/token_validator.py,sha256=pNimFr_FNJLcYGV5oADhoBjflKfEbLQ3Epwnwg_nTbg,6703
45
+ marqetive_lib-0.1.3.dist-info/METADATA,sha256=9tmxgEtndJ5VUnX0hjAuLAqbAO8Wx0RhdI8joy4pbSY,7798
46
+ marqetive_lib-0.1.3.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
47
+ marqetive_lib-0.1.3.dist-info/RECORD,,