diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 10f3091..6b7b74c 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.2.0"
+ ".": "0.3.0"
}
\ No newline at end of file
diff --git a/.stats.yml b/.stats.yml
index 58aca93..6527155 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 115
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik%2Fx-twitter-scraper-3b2c6c771ad1da0bbfeb0af115972929ed2c7fcd5e47a79556d66cd21431b224.yml
-openapi_spec_hash: de2890233b68387bf5f9b6d19e7d87dc
+configured_endpoints: 102
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik%2Fx-twitter-scraper-46a9af86900d469595bc007c73410022306d0863a896758d9c3c1250fbe937a3.yml
+openapi_spec_hash: d858851b15eb367466f343da3cb2d556
config_hash: 8894c96caeb6df84c9394518810221bd
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1d41f94..b06e8b8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# Changelog
+## 0.3.0 (2026-04-02)
+
+Full Changelog: [v0.2.0...v0.3.0](https://github.com/Xquik-dev/x-twitter-scraper-python/compare/v0.2.0...v0.3.0)
+
+### Features
+
+* **api:** api update ([9059aff](https://github.com/Xquik-dev/x-twitter-scraper-python/commit/9059aff529800e915fda0f8c3f1c0e19234f3057))
+* **api:** api update ([e52e7fb](https://github.com/Xquik-dev/x-twitter-scraper-python/commit/e52e7fba2cb13cdc2dd75fcfe4d281e7e28d445c))
+
## 0.2.0 (2026-04-01)
Full Changelog: [v0.1.3...v0.2.0](https://github.com/Xquik-dev/x-twitter-scraper-python/compare/v0.1.3...v0.2.0)
diff --git a/api.md b/api.md
index 871189b..d0c18ac 100644
--- a/api.md
+++ b/api.md
@@ -94,24 +94,17 @@ Types:
from x_twitter_scraper.types import (
StyleProfile,
StyleProfileSummary,
- StyleRetrieveResponse,
- StyleUpdateResponse,
StyleListResponse,
StyleAnalyzeResponse,
StyleCompareResponse,
- StyleGetPerformanceResponse,
)
```
Methods:
-- client.styles.retrieve(username) -> StyleRetrieveResponse
-- client.styles.update(username, \*\*params) -> StyleUpdateResponse
- client.styles.list() -> StyleListResponse
-- client.styles.delete(username) -> None
- client.styles.analyze(\*\*params) -> StyleAnalyzeResponse
- client.styles.compare(\*\*params) -> StyleCompareResponse
-- client.styles.get_performance(username) -> StyleGetPerformanceResponse
# Radar
@@ -288,8 +281,6 @@ from x_twitter_scraper.types.x import (
TweetAuthor,
TweetDetail,
TweetCreateResponse,
- TweetRetrieveResponse,
- TweetDeleteResponse,
TweetGetFavoritersResponse,
TweetGetQuotesResponse,
TweetGetRepliesResponse,
@@ -301,42 +292,14 @@ from x_twitter_scraper.types.x import (
Methods:
-- client.x.tweets.create(\*\*params) -> TweetCreateResponse
-- client.x.tweets.retrieve(tweet_id) -> TweetRetrieveResponse
-- client.x.tweets.list(\*\*params) -> None
-- client.x.tweets.delete(tweet_id, \*\*params) -> TweetDeleteResponse
-- client.x.tweets.get_favoriters(id, \*\*params) -> TweetGetFavoritersResponse
-- client.x.tweets.get_quotes(id, \*\*params) -> TweetGetQuotesResponse
-- client.x.tweets.get_replies(id, \*\*params) -> TweetGetRepliesResponse
-- client.x.tweets.get_retweeters(id, \*\*params) -> TweetGetRetweetersResponse
-- client.x.tweets.get_thread(id, \*\*params) -> TweetGetThreadResponse
-- client.x.tweets.search(\*\*params) -> TweetSearchResponse
-
-### Like
-
-Types:
-
-```python
-from x_twitter_scraper.types.x.tweets import LikeCreateResponse, LikeDeleteResponse
-```
-
-Methods:
-
-- client.x.tweets.like.create(tweet_id, \*\*params) -> LikeCreateResponse
-- client.x.tweets.like.delete(tweet_id, \*\*params) -> LikeDeleteResponse
-
-### Retweet
-
-Types:
-
-```python
-from x_twitter_scraper.types.x.tweets import RetweetCreateResponse, RetweetDeleteResponse
-```
-
-Methods:
-
-- client.x.tweets.retweet.create(tweet_id, \*\*params) -> RetweetCreateResponse
-- client.x.tweets.retweet.delete(tweet_id, \*\*params) -> RetweetDeleteResponse
+- client.x.tweets.create(\*\*params) -> TweetCreateResponse
+- client.x.tweets.list(\*\*params) -> None
+- client.x.tweets.get_favoriters(id, \*\*params) -> TweetGetFavoritersResponse
+- client.x.tweets.get_quotes(id, \*\*params) -> TweetGetQuotesResponse
+- client.x.tweets.get_replies(id, \*\*params) -> TweetGetRepliesResponse
+- client.x.tweets.get_retweeters(id, \*\*params) -> TweetGetRetweetersResponse
+- client.x.tweets.get_thread(id, \*\*params) -> TweetGetThreadResponse
+- client.x.tweets.search(\*\*params) -> TweetSearchResponse
## Users
@@ -345,7 +308,6 @@ Types:
```python
from x_twitter_scraper.types.x import (
UserProfile,
- UserRetrieveResponse,
UserRetrieveFollowersYouKnowResponse,
UserRetrieveLikesResponse,
UserRetrieveMediaResponse,
@@ -355,30 +317,16 @@ from x_twitter_scraper.types.x import (
Methods:
-- client.x.users.retrieve(username) -> UserRetrieveResponse
-- client.x.users.retrieve_batch(\*\*params) -> None
-- client.x.users.retrieve_followers(id, \*\*params) -> None
-- client.x.users.retrieve_followers_you_know(id, \*\*params) -> UserRetrieveFollowersYouKnowResponse
-- client.x.users.retrieve_following(id, \*\*params) -> None
-- client.x.users.retrieve_likes(id, \*\*params) -> UserRetrieveLikesResponse
-- client.x.users.retrieve_media(id, \*\*params) -> UserRetrieveMediaResponse
-- client.x.users.retrieve_mentions(id, \*\*params) -> None
-- client.x.users.retrieve_search(\*\*params) -> None
-- client.x.users.retrieve_tweets(id, \*\*params) -> UserRetrieveTweetsResponse
-- client.x.users.retrieve_verified_followers(id, \*\*params) -> None
-
-### Follow
-
-Types:
-
-```python
-from x_twitter_scraper.types.x.users import FollowCreateResponse, FollowDeleteAllResponse
-```
-
-Methods:
-
-- client.x.users.follow.create(user_id, \*\*params) -> FollowCreateResponse
-- client.x.users.follow.delete_all(user_id, \*\*params) -> FollowDeleteAllResponse
+- client.x.users.retrieve_batch(\*\*params) -> None
+- client.x.users.retrieve_followers(id, \*\*params) -> None
+- client.x.users.retrieve_followers_you_know(id, \*\*params) -> UserRetrieveFollowersYouKnowResponse
+- client.x.users.retrieve_following(id, \*\*params) -> None
+- client.x.users.retrieve_likes(id, \*\*params) -> UserRetrieveLikesResponse
+- client.x.users.retrieve_media(id, \*\*params) -> UserRetrieveMediaResponse
+- client.x.users.retrieve_mentions(id, \*\*params) -> None
+- client.x.users.retrieve_search(\*\*params) -> None
+- client.x.users.retrieve_tweets(id, \*\*params) -> UserRetrieveTweetsResponse
+- client.x.users.retrieve_verified_followers(id, \*\*params) -> None
## Followers
diff --git a/pyproject.toml b/pyproject.toml
index 5392fff..6af90c6 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "x_twitter_scraper"
-version = "0.2.0"
+version = "0.3.0"
description = "The official Python library for the x-twitter-scraper API"
dynamic = ["readme"]
license = "Apache-2.0"
diff --git a/src/x_twitter_scraper/_version.py b/src/x_twitter_scraper/_version.py
index ce04647..9514a6b 100644
--- a/src/x_twitter_scraper/_version.py
+++ b/src/x_twitter_scraper/_version.py
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
__title__ = "x_twitter_scraper"
-__version__ = "0.2.0" # x-release-please-version
+__version__ = "0.3.0" # x-release-please-version
diff --git a/src/x_twitter_scraper/resources/account.py b/src/x_twitter_scraper/resources/account.py
index bdaee0e..7afa743 100644
--- a/src/x_twitter_scraper/resources/account.py
+++ b/src/x_twitter_scraper/resources/account.py
@@ -135,7 +135,7 @@ def update_locale(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountUpdateLocaleResponse,
)
@@ -255,7 +255,7 @@ async def update_locale(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountUpdateLocaleResponse,
)
diff --git a/src/x_twitter_scraper/resources/api_keys.py b/src/x_twitter_scraper/resources/api_keys.py
index 73c0560..ff312de 100644
--- a/src/x_twitter_scraper/resources/api_keys.py
+++ b/src/x_twitter_scraper/resources/api_keys.py
@@ -76,7 +76,7 @@ def create(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=APIKeyCreateResponse,
)
@@ -99,7 +99,7 @@ def list(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=APIKeyListResponse,
)
@@ -136,7 +136,7 @@ def revoke(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=APIKeyRevokeResponse,
)
@@ -195,7 +195,7 @@ async def create(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=APIKeyCreateResponse,
)
@@ -218,7 +218,7 @@ async def list(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=APIKeyListResponse,
)
@@ -255,7 +255,7 @@ async def revoke(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=APIKeyRevokeResponse,
)
diff --git a/src/x_twitter_scraper/resources/integrations.py b/src/x_twitter_scraper/resources/integrations.py
index ce48230..7e03c65 100644
--- a/src/x_twitter_scraper/resources/integrations.py
+++ b/src/x_twitter_scraper/resources/integrations.py
@@ -158,6 +158,10 @@ def update(
Update integration
Args:
+ filters: Event filter rules (JSON)
+
+ message_template: Custom message template (JSON)
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -442,6 +446,10 @@ async def update(
Update integration
Args:
+ filters: Event filter rules (JSON)
+
+ message_template: Custom message template (JSON)
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
diff --git a/src/x_twitter_scraper/resources/radar.py b/src/x_twitter_scraper/resources/radar.py
index 91f1c77..d0c03ad 100644
--- a/src/x_twitter_scraper/resources/radar.py
+++ b/src/x_twitter_scraper/resources/radar.py
@@ -2,6 +2,8 @@
from __future__ import annotations
+from typing_extensions import Literal
+
import httpx
from ..types import radar_retrieve_trending_topics_params
@@ -50,7 +52,8 @@ def retrieve_trending_topics(
count: int | Omit = omit,
hours: int | Omit = omit,
region: str | Omit = omit,
- source: str | Omit = omit,
+ source: Literal["github", "google_trends", "hacker_news", "polymarket", "reddit", "trustmrr", "wikipedia"]
+ | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -132,7 +135,8 @@ async def retrieve_trending_topics(
count: int | Omit = omit,
hours: int | Omit = omit,
region: str | Omit = omit,
- source: str | Omit = omit,
+ source: Literal["github", "google_trends", "hacker_news", "polymarket", "reddit", "trustmrr", "wikipedia"]
+ | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
diff --git a/src/x_twitter_scraper/resources/styles.py b/src/x_twitter_scraper/resources/styles.py
index 4f1eee3..6ad1b0f 100644
--- a/src/x_twitter_scraper/resources/styles.py
+++ b/src/x_twitter_scraper/resources/styles.py
@@ -2,13 +2,11 @@
from __future__ import annotations
-from typing import Iterable
-
import httpx
-from ..types import style_update_params, style_analyze_params, style_compare_params
-from .._types import Body, Query, Headers, NoneType, NotGiven, not_given
-from .._utils import path_template, maybe_transform, async_maybe_transform
+from ..types import style_analyze_params, style_compare_params
+from .._types import Body, Query, Headers, NotGiven, not_given
+from .._utils import maybe_transform, async_maybe_transform
from .._compat import cached_property
from .._resource import SyncAPIResource, AsyncAPIResource
from .._response import (
@@ -19,11 +17,8 @@
)
from .._base_client import make_request_options
from ..types.style_list_response import StyleListResponse
-from ..types.style_update_response import StyleUpdateResponse
from ..types.style_analyze_response import StyleAnalyzeResponse
from ..types.style_compare_response import StyleCompareResponse
-from ..types.style_retrieve_response import StyleRetrieveResponse
-from ..types.style_get_performance_response import StyleGetPerformanceResponse
__all__ = ["StylesResource", "AsyncStylesResource"]
@@ -50,85 +45,6 @@ def with_streaming_response(self) -> StylesResourceWithStreamingResponse:
"""
return StylesResourceWithStreamingResponse(self)
- def retrieve(
- self,
- username: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> StyleRetrieveResponse:
- """
- Get cached style profile
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- return self._get(
- path_template("/styles/{username}", username=username),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=StyleRetrieveResponse,
- )
-
- def update(
- self,
- username: str,
- *,
- label: str,
- tweets: Iterable[style_update_params.Tweet],
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> StyleUpdateResponse:
- """
- Save style profile with custom tweets
-
- Args:
- label: Display label for the style
-
- tweets: Array of tweet objects
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- return self._put(
- path_template("/styles/{username}", username=username),
- body=maybe_transform(
- {
- "label": label,
- "tweets": tweets,
- },
- style_update_params.StyleUpdateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=StyleUpdateResponse,
- )
-
def list(
self,
*,
@@ -148,40 +64,6 @@ def list(
cast_to=StyleListResponse,
)
- def delete(
- self,
- username: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
- """
- Delete a style profile
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
- return self._delete(
- path_template("/styles/{username}", username=username),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=NoneType,
- )
-
def analyze(
self,
*,
@@ -262,39 +144,6 @@ def compare(
cast_to=StyleCompareResponse,
)
- def get_performance(
- self,
- username: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> StyleGetPerformanceResponse:
- """
- Get engagement metrics for style tweets
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- return self._get(
- path_template("/styles/{username}/performance", username=username),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=StyleGetPerformanceResponse,
- )
-
class AsyncStylesResource(AsyncAPIResource):
"""Tweet composition, drafts, writing styles & radar"""
@@ -318,85 +167,6 @@ def with_streaming_response(self) -> AsyncStylesResourceWithStreamingResponse:
"""
return AsyncStylesResourceWithStreamingResponse(self)
- async def retrieve(
- self,
- username: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> StyleRetrieveResponse:
- """
- Get cached style profile
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- return await self._get(
- path_template("/styles/{username}", username=username),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=StyleRetrieveResponse,
- )
-
- async def update(
- self,
- username: str,
- *,
- label: str,
- tweets: Iterable[style_update_params.Tweet],
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> StyleUpdateResponse:
- """
- Save style profile with custom tweets
-
- Args:
- label: Display label for the style
-
- tweets: Array of tweet objects
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- return await self._put(
- path_template("/styles/{username}", username=username),
- body=await async_maybe_transform(
- {
- "label": label,
- "tweets": tweets,
- },
- style_update_params.StyleUpdateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=StyleUpdateResponse,
- )
-
async def list(
self,
*,
@@ -416,40 +186,6 @@ async def list(
cast_to=StyleListResponse,
)
- async def delete(
- self,
- username: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> None:
- """
- Delete a style profile
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
- return await self._delete(
- path_template("/styles/{username}", username=username),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=NoneType,
- )
-
async def analyze(
self,
*,
@@ -530,143 +266,62 @@ async def compare(
cast_to=StyleCompareResponse,
)
- async def get_performance(
- self,
- username: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> StyleGetPerformanceResponse:
- """
- Get engagement metrics for style tweets
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- return await self._get(
- path_template("/styles/{username}/performance", username=username),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=StyleGetPerformanceResponse,
- )
-
class StylesResourceWithRawResponse:
def __init__(self, styles: StylesResource) -> None:
self._styles = styles
- self.retrieve = to_raw_response_wrapper(
- styles.retrieve,
- )
- self.update = to_raw_response_wrapper(
- styles.update,
- )
self.list = to_raw_response_wrapper(
styles.list,
)
- self.delete = to_raw_response_wrapper(
- styles.delete,
- )
self.analyze = to_raw_response_wrapper(
styles.analyze,
)
self.compare = to_raw_response_wrapper(
styles.compare,
)
- self.get_performance = to_raw_response_wrapper(
- styles.get_performance,
- )
class AsyncStylesResourceWithRawResponse:
def __init__(self, styles: AsyncStylesResource) -> None:
self._styles = styles
- self.retrieve = async_to_raw_response_wrapper(
- styles.retrieve,
- )
- self.update = async_to_raw_response_wrapper(
- styles.update,
- )
self.list = async_to_raw_response_wrapper(
styles.list,
)
- self.delete = async_to_raw_response_wrapper(
- styles.delete,
- )
self.analyze = async_to_raw_response_wrapper(
styles.analyze,
)
self.compare = async_to_raw_response_wrapper(
styles.compare,
)
- self.get_performance = async_to_raw_response_wrapper(
- styles.get_performance,
- )
class StylesResourceWithStreamingResponse:
def __init__(self, styles: StylesResource) -> None:
self._styles = styles
- self.retrieve = to_streamed_response_wrapper(
- styles.retrieve,
- )
- self.update = to_streamed_response_wrapper(
- styles.update,
- )
self.list = to_streamed_response_wrapper(
styles.list,
)
- self.delete = to_streamed_response_wrapper(
- styles.delete,
- )
self.analyze = to_streamed_response_wrapper(
styles.analyze,
)
self.compare = to_streamed_response_wrapper(
styles.compare,
)
- self.get_performance = to_streamed_response_wrapper(
- styles.get_performance,
- )
class AsyncStylesResourceWithStreamingResponse:
def __init__(self, styles: AsyncStylesResource) -> None:
self._styles = styles
- self.retrieve = async_to_streamed_response_wrapper(
- styles.retrieve,
- )
- self.update = async_to_streamed_response_wrapper(
- styles.update,
- )
self.list = async_to_streamed_response_wrapper(
styles.list,
)
- self.delete = async_to_streamed_response_wrapper(
- styles.delete,
- )
self.analyze = async_to_streamed_response_wrapper(
styles.analyze,
)
self.compare = async_to_streamed_response_wrapper(
styles.compare,
)
- self.get_performance = async_to_streamed_response_wrapper(
- styles.get_performance,
- )
diff --git a/src/x_twitter_scraper/resources/x/accounts.py b/src/x_twitter_scraper/resources/x/accounts.py
index 6ebfb38..41c71a7 100644
--- a/src/x_twitter_scraper/resources/x/accounts.py
+++ b/src/x_twitter_scraper/resources/x/accounts.py
@@ -101,7 +101,7 @@ def create(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountCreateResponse,
)
@@ -138,7 +138,7 @@ def retrieve(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountRetrieveResponse,
)
@@ -161,7 +161,7 @@ def list(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountListResponse,
)
@@ -198,7 +198,7 @@ def delete(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountDeleteResponse,
)
@@ -248,7 +248,7 @@ def reauth(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountReauthResponse,
)
@@ -330,7 +330,7 @@ async def create(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountCreateResponse,
)
@@ -367,7 +367,7 @@ async def retrieve(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountRetrieveResponse,
)
@@ -390,7 +390,7 @@ async def list(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountListResponse,
)
@@ -427,7 +427,7 @@ async def delete(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountDeleteResponse,
)
@@ -477,7 +477,7 @@ async def reauth(
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- security={},
+ security={"api_key": True},
),
cast_to=AccountReauthResponse,
)
diff --git a/src/x_twitter_scraper/resources/x/tweets/tweets.py b/src/x_twitter_scraper/resources/x/tweets.py
similarity index 77%
rename from src/x_twitter_scraper/resources/x/tweets/tweets.py
rename to src/x_twitter_scraper/resources/x/tweets.py
index 173d77f..7a7a26d 100644
--- a/src/x_twitter_scraper/resources/x/tweets/tweets.py
+++ b/src/x_twitter_scraper/resources/x/tweets.py
@@ -6,29 +6,12 @@
import httpx
-from .like import (
- LikeResource,
- AsyncLikeResource,
- LikeResourceWithRawResponse,
- AsyncLikeResourceWithRawResponse,
- LikeResourceWithStreamingResponse,
- AsyncLikeResourceWithStreamingResponse,
-)
-from .retweet import (
- RetweetResource,
- AsyncRetweetResource,
- RetweetResourceWithRawResponse,
- AsyncRetweetResourceWithRawResponse,
- RetweetResourceWithStreamingResponse,
- AsyncRetweetResourceWithStreamingResponse,
-)
-from ...._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given
-from ...._utils import path_template, maybe_transform, async_maybe_transform
-from ...._compat import cached_property
-from ....types.x import (
+from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given
+from ..._utils import path_template, maybe_transform, async_maybe_transform
+from ..._compat import cached_property
+from ...types.x import (
tweet_list_params,
tweet_create_params,
- tweet_delete_params,
tweet_search_params,
tweet_get_quotes_params,
tweet_get_thread_params,
@@ -36,38 +19,26 @@
tweet_get_favoriters_params,
tweet_get_retweeters_params,
)
-from ...._resource import SyncAPIResource, AsyncAPIResource
-from ...._response import (
+from ..._resource import SyncAPIResource, AsyncAPIResource
+from ..._response import (
to_raw_response_wrapper,
to_streamed_response_wrapper,
async_to_raw_response_wrapper,
async_to_streamed_response_wrapper,
)
-from ...._base_client import make_request_options
-from ....types.x.tweet_create_response import TweetCreateResponse
-from ....types.x.tweet_delete_response import TweetDeleteResponse
-from ....types.x.tweet_search_response import TweetSearchResponse
-from ....types.x.tweet_retrieve_response import TweetRetrieveResponse
-from ....types.x.tweet_get_quotes_response import TweetGetQuotesResponse
-from ....types.x.tweet_get_thread_response import TweetGetThreadResponse
-from ....types.x.tweet_get_replies_response import TweetGetRepliesResponse
-from ....types.x.tweet_get_favoriters_response import TweetGetFavoritersResponse
-from ....types.x.tweet_get_retweeters_response import TweetGetRetweetersResponse
+from ..._base_client import make_request_options
+from ...types.x.tweet_create_response import TweetCreateResponse
+from ...types.x.tweet_search_response import TweetSearchResponse
+from ...types.x.tweet_get_quotes_response import TweetGetQuotesResponse
+from ...types.x.tweet_get_thread_response import TweetGetThreadResponse
+from ...types.x.tweet_get_replies_response import TweetGetRepliesResponse
+from ...types.x.tweet_get_favoriters_response import TweetGetFavoritersResponse
+from ...types.x.tweet_get_retweeters_response import TweetGetRetweetersResponse
__all__ = ["TweetsResource", "AsyncTweetsResource"]
class TweetsResource(SyncAPIResource):
- @cached_property
- def like(self) -> LikeResource:
- """X write actions (tweets, likes, follows, DMs)"""
- return LikeResource(self._client)
-
- @cached_property
- def retweet(self) -> RetweetResource:
- """X write actions (tweets, likes, follows, DMs)"""
- return RetweetResource(self._client)
-
@cached_property
def with_raw_response(self) -> TweetsResourceWithRawResponse:
"""
@@ -138,39 +109,6 @@ def create(
cast_to=TweetCreateResponse,
)
- def retrieve(
- self,
- tweet_id: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> TweetRetrieveResponse:
- """
- Look up tweet
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return self._get(
- path_template("/x/tweets/{tweet_id}", tweet_id=tweet_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TweetRetrieveResponse,
- )
-
def list(
self,
*,
@@ -209,43 +147,6 @@ def list(
cast_to=NoneType,
)
- def delete(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> TweetDeleteResponse:
- """
- Delete tweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return self._delete(
- path_template("/x/tweets/{tweet_id}", tweet_id=tweet_id),
- body=maybe_transform({"account": account}, tweet_delete_params.TweetDeleteParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TweetDeleteResponse,
- )
-
def get_favoriters(
self,
id: str,
@@ -540,16 +441,6 @@ def search(
class AsyncTweetsResource(AsyncAPIResource):
- @cached_property
- def like(self) -> AsyncLikeResource:
- """X write actions (tweets, likes, follows, DMs)"""
- return AsyncLikeResource(self._client)
-
- @cached_property
- def retweet(self) -> AsyncRetweetResource:
- """X write actions (tweets, likes, follows, DMs)"""
- return AsyncRetweetResource(self._client)
-
@cached_property
def with_raw_response(self) -> AsyncTweetsResourceWithRawResponse:
"""
@@ -620,39 +511,6 @@ async def create(
cast_to=TweetCreateResponse,
)
- async def retrieve(
- self,
- tweet_id: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> TweetRetrieveResponse:
- """
- Look up tweet
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return await self._get(
- path_template("/x/tweets/{tweet_id}", tweet_id=tweet_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TweetRetrieveResponse,
- )
-
async def list(
self,
*,
@@ -691,43 +549,6 @@ async def list(
cast_to=NoneType,
)
- async def delete(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> TweetDeleteResponse:
- """
- Delete tweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return await self._delete(
- path_template("/x/tweets/{tweet_id}", tweet_id=tweet_id),
- body=await async_maybe_transform({"account": account}, tweet_delete_params.TweetDeleteParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TweetDeleteResponse,
- )
-
async def get_favoriters(
self,
id: str,
@@ -1032,15 +853,9 @@ def __init__(self, tweets: TweetsResource) -> None:
self.create = to_raw_response_wrapper(
tweets.create,
)
- self.retrieve = to_raw_response_wrapper(
- tweets.retrieve,
- )
self.list = to_raw_response_wrapper(
tweets.list,
)
- self.delete = to_raw_response_wrapper(
- tweets.delete,
- )
self.get_favoriters = to_raw_response_wrapper(
tweets.get_favoriters,
)
@@ -1060,16 +875,6 @@ def __init__(self, tweets: TweetsResource) -> None:
tweets.search,
)
- @cached_property
- def like(self) -> LikeResourceWithRawResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return LikeResourceWithRawResponse(self._tweets.like)
-
- @cached_property
- def retweet(self) -> RetweetResourceWithRawResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return RetweetResourceWithRawResponse(self._tweets.retweet)
-
class AsyncTweetsResourceWithRawResponse:
def __init__(self, tweets: AsyncTweetsResource) -> None:
@@ -1078,15 +883,9 @@ def __init__(self, tweets: AsyncTweetsResource) -> None:
self.create = async_to_raw_response_wrapper(
tweets.create,
)
- self.retrieve = async_to_raw_response_wrapper(
- tweets.retrieve,
- )
self.list = async_to_raw_response_wrapper(
tweets.list,
)
- self.delete = async_to_raw_response_wrapper(
- tweets.delete,
- )
self.get_favoriters = async_to_raw_response_wrapper(
tweets.get_favoriters,
)
@@ -1106,16 +905,6 @@ def __init__(self, tweets: AsyncTweetsResource) -> None:
tweets.search,
)
- @cached_property
- def like(self) -> AsyncLikeResourceWithRawResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return AsyncLikeResourceWithRawResponse(self._tweets.like)
-
- @cached_property
- def retweet(self) -> AsyncRetweetResourceWithRawResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return AsyncRetweetResourceWithRawResponse(self._tweets.retweet)
-
class TweetsResourceWithStreamingResponse:
def __init__(self, tweets: TweetsResource) -> None:
@@ -1124,15 +913,9 @@ def __init__(self, tweets: TweetsResource) -> None:
self.create = to_streamed_response_wrapper(
tweets.create,
)
- self.retrieve = to_streamed_response_wrapper(
- tweets.retrieve,
- )
self.list = to_streamed_response_wrapper(
tweets.list,
)
- self.delete = to_streamed_response_wrapper(
- tweets.delete,
- )
self.get_favoriters = to_streamed_response_wrapper(
tweets.get_favoriters,
)
@@ -1152,16 +935,6 @@ def __init__(self, tweets: TweetsResource) -> None:
tweets.search,
)
- @cached_property
- def like(self) -> LikeResourceWithStreamingResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return LikeResourceWithStreamingResponse(self._tweets.like)
-
- @cached_property
- def retweet(self) -> RetweetResourceWithStreamingResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return RetweetResourceWithStreamingResponse(self._tweets.retweet)
-
class AsyncTweetsResourceWithStreamingResponse:
def __init__(self, tweets: AsyncTweetsResource) -> None:
@@ -1170,15 +943,9 @@ def __init__(self, tweets: AsyncTweetsResource) -> None:
self.create = async_to_streamed_response_wrapper(
tweets.create,
)
- self.retrieve = async_to_streamed_response_wrapper(
- tweets.retrieve,
- )
self.list = async_to_streamed_response_wrapper(
tweets.list,
)
- self.delete = async_to_streamed_response_wrapper(
- tweets.delete,
- )
self.get_favoriters = async_to_streamed_response_wrapper(
tweets.get_favoriters,
)
@@ -1197,13 +964,3 @@ def __init__(self, tweets: AsyncTweetsResource) -> None:
self.search = async_to_streamed_response_wrapper(
tweets.search,
)
-
- @cached_property
- def like(self) -> AsyncLikeResourceWithStreamingResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return AsyncLikeResourceWithStreamingResponse(self._tweets.like)
-
- @cached_property
- def retweet(self) -> AsyncRetweetResourceWithStreamingResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return AsyncRetweetResourceWithStreamingResponse(self._tweets.retweet)
diff --git a/src/x_twitter_scraper/resources/x/tweets/__init__.py b/src/x_twitter_scraper/resources/x/tweets/__init__.py
deleted file mode 100644
index e4e246b..0000000
--- a/src/x_twitter_scraper/resources/x/tweets/__init__.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from .like import (
- LikeResource,
- AsyncLikeResource,
- LikeResourceWithRawResponse,
- AsyncLikeResourceWithRawResponse,
- LikeResourceWithStreamingResponse,
- AsyncLikeResourceWithStreamingResponse,
-)
-from .tweets import (
- TweetsResource,
- AsyncTweetsResource,
- TweetsResourceWithRawResponse,
- AsyncTweetsResourceWithRawResponse,
- TweetsResourceWithStreamingResponse,
- AsyncTweetsResourceWithStreamingResponse,
-)
-from .retweet import (
- RetweetResource,
- AsyncRetweetResource,
- RetweetResourceWithRawResponse,
- AsyncRetweetResourceWithRawResponse,
- RetweetResourceWithStreamingResponse,
- AsyncRetweetResourceWithStreamingResponse,
-)
-
-__all__ = [
- "LikeResource",
- "AsyncLikeResource",
- "LikeResourceWithRawResponse",
- "AsyncLikeResourceWithRawResponse",
- "LikeResourceWithStreamingResponse",
- "AsyncLikeResourceWithStreamingResponse",
- "RetweetResource",
- "AsyncRetweetResource",
- "RetweetResourceWithRawResponse",
- "AsyncRetweetResourceWithRawResponse",
- "RetweetResourceWithStreamingResponse",
- "AsyncRetweetResourceWithStreamingResponse",
- "TweetsResource",
- "AsyncTweetsResource",
- "TweetsResourceWithRawResponse",
- "AsyncTweetsResourceWithRawResponse",
- "TweetsResourceWithStreamingResponse",
- "AsyncTweetsResourceWithStreamingResponse",
-]
diff --git a/src/x_twitter_scraper/resources/x/tweets/like.py b/src/x_twitter_scraper/resources/x/tweets/like.py
deleted file mode 100644
index 5481adc..0000000
--- a/src/x_twitter_scraper/resources/x/tweets/like.py
+++ /dev/null
@@ -1,264 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import httpx
-
-from ...._types import Body, Query, Headers, NotGiven, not_given
-from ...._utils import path_template, maybe_transform, async_maybe_transform
-from ...._compat import cached_property
-from ...._resource import SyncAPIResource, AsyncAPIResource
-from ...._response import (
- to_raw_response_wrapper,
- to_streamed_response_wrapper,
- async_to_raw_response_wrapper,
- async_to_streamed_response_wrapper,
-)
-from ...._base_client import make_request_options
-from ....types.x.tweets import like_create_params, like_delete_params
-from ....types.x.tweets.like_create_response import LikeCreateResponse
-from ....types.x.tweets.like_delete_response import LikeDeleteResponse
-
-__all__ = ["LikeResource", "AsyncLikeResource"]
-
-
-class LikeResource(SyncAPIResource):
- """X write actions (tweets, likes, follows, DMs)"""
-
- @cached_property
- def with_raw_response(self) -> LikeResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#accessing-raw-response-data-eg-headers
- """
- return LikeResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> LikeResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#with_streaming_response
- """
- return LikeResourceWithStreamingResponse(self)
-
- def create(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> LikeCreateResponse:
- """
- Like tweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return self._post(
- path_template("/x/tweets/{tweet_id}/like", tweet_id=tweet_id),
- body=maybe_transform({"account": account}, like_create_params.LikeCreateParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=LikeCreateResponse,
- )
-
- def delete(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> LikeDeleteResponse:
- """
- Unlike tweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return self._delete(
- path_template("/x/tweets/{tweet_id}/like", tweet_id=tweet_id),
- body=maybe_transform({"account": account}, like_delete_params.LikeDeleteParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=LikeDeleteResponse,
- )
-
-
-class AsyncLikeResource(AsyncAPIResource):
- """X write actions (tweets, likes, follows, DMs)"""
-
- @cached_property
- def with_raw_response(self) -> AsyncLikeResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#accessing-raw-response-data-eg-headers
- """
- return AsyncLikeResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncLikeResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#with_streaming_response
- """
- return AsyncLikeResourceWithStreamingResponse(self)
-
- async def create(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> LikeCreateResponse:
- """
- Like tweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return await self._post(
- path_template("/x/tweets/{tweet_id}/like", tweet_id=tweet_id),
- body=await async_maybe_transform({"account": account}, like_create_params.LikeCreateParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=LikeCreateResponse,
- )
-
- async def delete(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> LikeDeleteResponse:
- """
- Unlike tweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return await self._delete(
- path_template("/x/tweets/{tweet_id}/like", tweet_id=tweet_id),
- body=await async_maybe_transform({"account": account}, like_delete_params.LikeDeleteParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=LikeDeleteResponse,
- )
-
-
-class LikeResourceWithRawResponse:
- def __init__(self, like: LikeResource) -> None:
- self._like = like
-
- self.create = to_raw_response_wrapper(
- like.create,
- )
- self.delete = to_raw_response_wrapper(
- like.delete,
- )
-
-
-class AsyncLikeResourceWithRawResponse:
- def __init__(self, like: AsyncLikeResource) -> None:
- self._like = like
-
- self.create = async_to_raw_response_wrapper(
- like.create,
- )
- self.delete = async_to_raw_response_wrapper(
- like.delete,
- )
-
-
-class LikeResourceWithStreamingResponse:
- def __init__(self, like: LikeResource) -> None:
- self._like = like
-
- self.create = to_streamed_response_wrapper(
- like.create,
- )
- self.delete = to_streamed_response_wrapper(
- like.delete,
- )
-
-
-class AsyncLikeResourceWithStreamingResponse:
- def __init__(self, like: AsyncLikeResource) -> None:
- self._like = like
-
- self.create = async_to_streamed_response_wrapper(
- like.create,
- )
- self.delete = async_to_streamed_response_wrapper(
- like.delete,
- )
diff --git a/src/x_twitter_scraper/resources/x/tweets/retweet.py b/src/x_twitter_scraper/resources/x/tweets/retweet.py
deleted file mode 100644
index 2641f0b..0000000
--- a/src/x_twitter_scraper/resources/x/tweets/retweet.py
+++ /dev/null
@@ -1,264 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import httpx
-
-from ...._types import Body, Query, Headers, NotGiven, not_given
-from ...._utils import path_template, maybe_transform, async_maybe_transform
-from ...._compat import cached_property
-from ...._resource import SyncAPIResource, AsyncAPIResource
-from ...._response import (
- to_raw_response_wrapper,
- to_streamed_response_wrapper,
- async_to_raw_response_wrapper,
- async_to_streamed_response_wrapper,
-)
-from ...._base_client import make_request_options
-from ....types.x.tweets import retweet_create_params, retweet_delete_params
-from ....types.x.tweets.retweet_create_response import RetweetCreateResponse
-from ....types.x.tweets.retweet_delete_response import RetweetDeleteResponse
-
-__all__ = ["RetweetResource", "AsyncRetweetResource"]
-
-
-class RetweetResource(SyncAPIResource):
- """X write actions (tweets, likes, follows, DMs)"""
-
- @cached_property
- def with_raw_response(self) -> RetweetResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#accessing-raw-response-data-eg-headers
- """
- return RetweetResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> RetweetResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#with_streaming_response
- """
- return RetweetResourceWithStreamingResponse(self)
-
- def create(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> RetweetCreateResponse:
- """
- Retweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return self._post(
- path_template("/x/tweets/{tweet_id}/retweet", tweet_id=tweet_id),
- body=maybe_transform({"account": account}, retweet_create_params.RetweetCreateParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=RetweetCreateResponse,
- )
-
- def delete(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> RetweetDeleteResponse:
- """
- Unretweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return self._delete(
- path_template("/x/tweets/{tweet_id}/retweet", tweet_id=tweet_id),
- body=maybe_transform({"account": account}, retweet_delete_params.RetweetDeleteParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=RetweetDeleteResponse,
- )
-
-
-class AsyncRetweetResource(AsyncAPIResource):
- """X write actions (tweets, likes, follows, DMs)"""
-
- @cached_property
- def with_raw_response(self) -> AsyncRetweetResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#accessing-raw-response-data-eg-headers
- """
- return AsyncRetweetResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncRetweetResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#with_streaming_response
- """
- return AsyncRetweetResourceWithStreamingResponse(self)
-
- async def create(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> RetweetCreateResponse:
- """
- Retweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return await self._post(
- path_template("/x/tweets/{tweet_id}/retweet", tweet_id=tweet_id),
- body=await async_maybe_transform({"account": account}, retweet_create_params.RetweetCreateParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=RetweetCreateResponse,
- )
-
- async def delete(
- self,
- tweet_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> RetweetDeleteResponse:
- """
- Unretweet
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not tweet_id:
- raise ValueError(f"Expected a non-empty value for `tweet_id` but received {tweet_id!r}")
- return await self._delete(
- path_template("/x/tweets/{tweet_id}/retweet", tweet_id=tweet_id),
- body=await async_maybe_transform({"account": account}, retweet_delete_params.RetweetDeleteParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=RetweetDeleteResponse,
- )
-
-
-class RetweetResourceWithRawResponse:
- def __init__(self, retweet: RetweetResource) -> None:
- self._retweet = retweet
-
- self.create = to_raw_response_wrapper(
- retweet.create,
- )
- self.delete = to_raw_response_wrapper(
- retweet.delete,
- )
-
-
-class AsyncRetweetResourceWithRawResponse:
- def __init__(self, retweet: AsyncRetweetResource) -> None:
- self._retweet = retweet
-
- self.create = async_to_raw_response_wrapper(
- retweet.create,
- )
- self.delete = async_to_raw_response_wrapper(
- retweet.delete,
- )
-
-
-class RetweetResourceWithStreamingResponse:
- def __init__(self, retweet: RetweetResource) -> None:
- self._retweet = retweet
-
- self.create = to_streamed_response_wrapper(
- retweet.create,
- )
- self.delete = to_streamed_response_wrapper(
- retweet.delete,
- )
-
-
-class AsyncRetweetResourceWithStreamingResponse:
- def __init__(self, retweet: AsyncRetweetResource) -> None:
- self._retweet = retweet
-
- self.create = async_to_streamed_response_wrapper(
- retweet.create,
- )
- self.delete = async_to_streamed_response_wrapper(
- retweet.delete,
- )
diff --git a/src/x_twitter_scraper/resources/x/users/users.py b/src/x_twitter_scraper/resources/x/users.py
similarity index 88%
rename from src/x_twitter_scraper/resources/x/users/users.py
rename to src/x_twitter_scraper/resources/x/users.py
index 3c8cfa2..1898fac 100644
--- a/src/x_twitter_scraper/resources/x/users/users.py
+++ b/src/x_twitter_scraper/resources/x/users.py
@@ -4,18 +4,10 @@
import httpx
-from .follow import (
- FollowResource,
- AsyncFollowResource,
- FollowResourceWithRawResponse,
- AsyncFollowResourceWithRawResponse,
- FollowResourceWithStreamingResponse,
- AsyncFollowResourceWithStreamingResponse,
-)
-from ...._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
-from ...._utils import path_template, maybe_transform, async_maybe_transform
-from ...._compat import cached_property
-from ....types.x import (
+from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
+from ..._utils import path_template, maybe_transform, async_maybe_transform
+from ..._compat import cached_property
+from ...types.x import (
user_retrieve_batch_params,
user_retrieve_likes_params,
user_retrieve_media_params,
@@ -27,19 +19,18 @@
user_retrieve_followers_you_know_params,
user_retrieve_verified_followers_params,
)
-from ...._resource import SyncAPIResource, AsyncAPIResource
-from ...._response import (
+from ..._resource import SyncAPIResource, AsyncAPIResource
+from ..._response import (
to_raw_response_wrapper,
to_streamed_response_wrapper,
async_to_raw_response_wrapper,
async_to_streamed_response_wrapper,
)
-from ...._base_client import make_request_options
-from ....types.x.user_retrieve_response import UserRetrieveResponse
-from ....types.x.user_retrieve_likes_response import UserRetrieveLikesResponse
-from ....types.x.user_retrieve_media_response import UserRetrieveMediaResponse
-from ....types.x.user_retrieve_tweets_response import UserRetrieveTweetsResponse
-from ....types.x.user_retrieve_followers_you_know_response import UserRetrieveFollowersYouKnowResponse
+from ..._base_client import make_request_options
+from ...types.x.user_retrieve_likes_response import UserRetrieveLikesResponse
+from ...types.x.user_retrieve_media_response import UserRetrieveMediaResponse
+from ...types.x.user_retrieve_tweets_response import UserRetrieveTweetsResponse
+from ...types.x.user_retrieve_followers_you_know_response import UserRetrieveFollowersYouKnowResponse
__all__ = ["UsersResource", "AsyncUsersResource"]
@@ -47,11 +38,6 @@
class UsersResource(SyncAPIResource):
"""X data lookups (subscription required)"""
- @cached_property
- def follow(self) -> FollowResource:
- """X write actions (tweets, likes, follows, DMs)"""
- return FollowResource(self._client)
-
@cached_property
def with_raw_response(self) -> UsersResourceWithRawResponse:
"""
@@ -71,39 +57,6 @@ def with_streaming_response(self) -> UsersResourceWithStreamingResponse:
"""
return UsersResourceWithStreamingResponse(self)
- def retrieve(
- self,
- username: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> UserRetrieveResponse:
- """
- Look up X user
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- return self._get(
- path_template("/x/users/{username}", username=username),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=UserRetrieveResponse,
- )
-
def retrieve_batch(
self,
*,
@@ -565,11 +518,6 @@ def retrieve_verified_followers(
class AsyncUsersResource(AsyncAPIResource):
"""X data lookups (subscription required)"""
- @cached_property
- def follow(self) -> AsyncFollowResource:
- """X write actions (tweets, likes, follows, DMs)"""
- return AsyncFollowResource(self._client)
-
@cached_property
def with_raw_response(self) -> AsyncUsersResourceWithRawResponse:
"""
@@ -589,39 +537,6 @@ def with_streaming_response(self) -> AsyncUsersResourceWithStreamingResponse:
"""
return AsyncUsersResourceWithStreamingResponse(self)
- async def retrieve(
- self,
- username: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> UserRetrieveResponse:
- """
- Look up X user
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not username:
- raise ValueError(f"Expected a non-empty value for `username` but received {username!r}")
- return await self._get(
- path_template("/x/users/{username}", username=username),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=UserRetrieveResponse,
- )
-
async def retrieve_batch(
self,
*,
@@ -1088,9 +1003,6 @@ class UsersResourceWithRawResponse:
def __init__(self, users: UsersResource) -> None:
self._users = users
- self.retrieve = to_raw_response_wrapper(
- users.retrieve,
- )
self.retrieve_batch = to_raw_response_wrapper(
users.retrieve_batch,
)
@@ -1122,19 +1034,11 @@ def __init__(self, users: UsersResource) -> None:
users.retrieve_verified_followers,
)
- @cached_property
- def follow(self) -> FollowResourceWithRawResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return FollowResourceWithRawResponse(self._users.follow)
-
class AsyncUsersResourceWithRawResponse:
def __init__(self, users: AsyncUsersResource) -> None:
self._users = users
- self.retrieve = async_to_raw_response_wrapper(
- users.retrieve,
- )
self.retrieve_batch = async_to_raw_response_wrapper(
users.retrieve_batch,
)
@@ -1166,19 +1070,11 @@ def __init__(self, users: AsyncUsersResource) -> None:
users.retrieve_verified_followers,
)
- @cached_property
- def follow(self) -> AsyncFollowResourceWithRawResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return AsyncFollowResourceWithRawResponse(self._users.follow)
-
class UsersResourceWithStreamingResponse:
def __init__(self, users: UsersResource) -> None:
self._users = users
- self.retrieve = to_streamed_response_wrapper(
- users.retrieve,
- )
self.retrieve_batch = to_streamed_response_wrapper(
users.retrieve_batch,
)
@@ -1210,19 +1106,11 @@ def __init__(self, users: UsersResource) -> None:
users.retrieve_verified_followers,
)
- @cached_property
- def follow(self) -> FollowResourceWithStreamingResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return FollowResourceWithStreamingResponse(self._users.follow)
-
class AsyncUsersResourceWithStreamingResponse:
def __init__(self, users: AsyncUsersResource) -> None:
self._users = users
- self.retrieve = async_to_streamed_response_wrapper(
- users.retrieve,
- )
self.retrieve_batch = async_to_streamed_response_wrapper(
users.retrieve_batch,
)
@@ -1253,8 +1141,3 @@ def __init__(self, users: AsyncUsersResource) -> None:
self.retrieve_verified_followers = async_to_streamed_response_wrapper(
users.retrieve_verified_followers,
)
-
- @cached_property
- def follow(self) -> AsyncFollowResourceWithStreamingResponse:
- """X write actions (tweets, likes, follows, DMs)"""
- return AsyncFollowResourceWithStreamingResponse(self._users.follow)
diff --git a/src/x_twitter_scraper/resources/x/users/__init__.py b/src/x_twitter_scraper/resources/x/users/__init__.py
deleted file mode 100644
index 83b7c84..0000000
--- a/src/x_twitter_scraper/resources/x/users/__init__.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from .users import (
- UsersResource,
- AsyncUsersResource,
- UsersResourceWithRawResponse,
- AsyncUsersResourceWithRawResponse,
- UsersResourceWithStreamingResponse,
- AsyncUsersResourceWithStreamingResponse,
-)
-from .follow import (
- FollowResource,
- AsyncFollowResource,
- FollowResourceWithRawResponse,
- AsyncFollowResourceWithRawResponse,
- FollowResourceWithStreamingResponse,
- AsyncFollowResourceWithStreamingResponse,
-)
-
-__all__ = [
- "FollowResource",
- "AsyncFollowResource",
- "FollowResourceWithRawResponse",
- "AsyncFollowResourceWithRawResponse",
- "FollowResourceWithStreamingResponse",
- "AsyncFollowResourceWithStreamingResponse",
- "UsersResource",
- "AsyncUsersResource",
- "UsersResourceWithRawResponse",
- "AsyncUsersResourceWithRawResponse",
- "UsersResourceWithStreamingResponse",
- "AsyncUsersResourceWithStreamingResponse",
-]
diff --git a/src/x_twitter_scraper/resources/x/users/follow.py b/src/x_twitter_scraper/resources/x/users/follow.py
deleted file mode 100644
index 0071228..0000000
--- a/src/x_twitter_scraper/resources/x/users/follow.py
+++ /dev/null
@@ -1,264 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import httpx
-
-from ...._types import Body, Query, Headers, NotGiven, not_given
-from ...._utils import path_template, maybe_transform, async_maybe_transform
-from ...._compat import cached_property
-from ...._resource import SyncAPIResource, AsyncAPIResource
-from ...._response import (
- to_raw_response_wrapper,
- to_streamed_response_wrapper,
- async_to_raw_response_wrapper,
- async_to_streamed_response_wrapper,
-)
-from ...._base_client import make_request_options
-from ....types.x.users import follow_create_params, follow_delete_all_params
-from ....types.x.users.follow_create_response import FollowCreateResponse
-from ....types.x.users.follow_delete_all_response import FollowDeleteAllResponse
-
-__all__ = ["FollowResource", "AsyncFollowResource"]
-
-
-class FollowResource(SyncAPIResource):
- """X write actions (tweets, likes, follows, DMs)"""
-
- @cached_property
- def with_raw_response(self) -> FollowResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#accessing-raw-response-data-eg-headers
- """
- return FollowResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> FollowResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#with_streaming_response
- """
- return FollowResourceWithStreamingResponse(self)
-
- def create(
- self,
- user_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FollowCreateResponse:
- """
- Follow user
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not user_id:
- raise ValueError(f"Expected a non-empty value for `user_id` but received {user_id!r}")
- return self._post(
- path_template("/x/users/{user_id}/follow", user_id=user_id),
- body=maybe_transform({"account": account}, follow_create_params.FollowCreateParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FollowCreateResponse,
- )
-
- def delete_all(
- self,
- user_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FollowDeleteAllResponse:
- """
- Unfollow user
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not user_id:
- raise ValueError(f"Expected a non-empty value for `user_id` but received {user_id!r}")
- return self._delete(
- path_template("/x/users/{user_id}/follow", user_id=user_id),
- body=maybe_transform({"account": account}, follow_delete_all_params.FollowDeleteAllParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FollowDeleteAllResponse,
- )
-
-
-class AsyncFollowResource(AsyncAPIResource):
- """X write actions (tweets, likes, follows, DMs)"""
-
- @cached_property
- def with_raw_response(self) -> AsyncFollowResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#accessing-raw-response-data-eg-headers
- """
- return AsyncFollowResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncFollowResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/Xquik-dev/x-twitter-scraper-python#with_streaming_response
- """
- return AsyncFollowResourceWithStreamingResponse(self)
-
- async def create(
- self,
- user_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FollowCreateResponse:
- """
- Follow user
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not user_id:
- raise ValueError(f"Expected a non-empty value for `user_id` but received {user_id!r}")
- return await self._post(
- path_template("/x/users/{user_id}/follow", user_id=user_id),
- body=await async_maybe_transform({"account": account}, follow_create_params.FollowCreateParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FollowCreateResponse,
- )
-
- async def delete_all(
- self,
- user_id: str,
- *,
- account: str,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FollowDeleteAllResponse:
- """
- Unfollow user
-
- Args:
- account: X account (@username or account ID)
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not user_id:
- raise ValueError(f"Expected a non-empty value for `user_id` but received {user_id!r}")
- return await self._delete(
- path_template("/x/users/{user_id}/follow", user_id=user_id),
- body=await async_maybe_transform({"account": account}, follow_delete_all_params.FollowDeleteAllParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FollowDeleteAllResponse,
- )
-
-
-class FollowResourceWithRawResponse:
- def __init__(self, follow: FollowResource) -> None:
- self._follow = follow
-
- self.create = to_raw_response_wrapper(
- follow.create,
- )
- self.delete_all = to_raw_response_wrapper(
- follow.delete_all,
- )
-
-
-class AsyncFollowResourceWithRawResponse:
- def __init__(self, follow: AsyncFollowResource) -> None:
- self._follow = follow
-
- self.create = async_to_raw_response_wrapper(
- follow.create,
- )
- self.delete_all = async_to_raw_response_wrapper(
- follow.delete_all,
- )
-
-
-class FollowResourceWithStreamingResponse:
- def __init__(self, follow: FollowResource) -> None:
- self._follow = follow
-
- self.create = to_streamed_response_wrapper(
- follow.create,
- )
- self.delete_all = to_streamed_response_wrapper(
- follow.delete_all,
- )
-
-
-class AsyncFollowResourceWithStreamingResponse:
- def __init__(self, follow: AsyncFollowResource) -> None:
- self._follow = follow
-
- self.create = async_to_streamed_response_wrapper(
- follow.create,
- )
- self.delete_all = async_to_streamed_response_wrapper(
- follow.delete_all,
- )
diff --git a/src/x_twitter_scraper/resources/x/x.py b/src/x_twitter_scraper/resources/x/x.py
index 4169ca6..a11deb5 100644
--- a/src/x_twitter_scraper/resources/x/x.py
+++ b/src/x_twitter_scraper/resources/x/x.py
@@ -30,6 +30,22 @@
MediaResourceWithStreamingResponse,
AsyncMediaResourceWithStreamingResponse,
)
+from .users import (
+ UsersResource,
+ AsyncUsersResource,
+ UsersResourceWithRawResponse,
+ AsyncUsersResourceWithRawResponse,
+ UsersResourceWithStreamingResponse,
+ AsyncUsersResourceWithStreamingResponse,
+)
+from .tweets import (
+ TweetsResource,
+ AsyncTweetsResource,
+ TweetsResourceWithRawResponse,
+ AsyncTweetsResourceWithRawResponse,
+ TweetsResourceWithStreamingResponse,
+ AsyncTweetsResourceWithStreamingResponse,
+)
from ...types import x_get_home_timeline_params, x_get_notifications_params
from .profile import (
ProfileResource,
@@ -73,22 +89,6 @@
async_to_raw_response_wrapper,
async_to_streamed_response_wrapper,
)
-from .users.users import (
- UsersResource,
- AsyncUsersResource,
- UsersResourceWithRawResponse,
- AsyncUsersResourceWithRawResponse,
- UsersResourceWithStreamingResponse,
- AsyncUsersResourceWithStreamingResponse,
-)
-from .tweets.tweets import (
- TweetsResource,
- AsyncTweetsResource,
- TweetsResourceWithRawResponse,
- AsyncTweetsResourceWithRawResponse,
- TweetsResourceWithStreamingResponse,
- AsyncTweetsResourceWithStreamingResponse,
-)
from ..._base_client import make_request_options
from .communities.communities import (
CommunitiesResource,
diff --git a/src/x_twitter_scraper/types/__init__.py b/src/x_twitter_scraper/types/__init__.py
index 692f59f..5ee7814 100644
--- a/src/x_twitter_scraper/types/__init__.py
+++ b/src/x_twitter_scraper/types/__init__.py
@@ -20,7 +20,6 @@
from .draft_list_response import DraftListResponse as DraftListResponse
from .event_list_response import EventListResponse as EventListResponse
from .style_list_response import StyleListResponse as StyleListResponse
-from .style_update_params import StyleUpdateParams as StyleUpdateParams
from .trend_list_response import TrendListResponse as TrendListResponse
from .style_analyze_params import StyleAnalyzeParams as StyleAnalyzeParams
from .style_compare_params import StyleCompareParams as StyleCompareParams
@@ -32,7 +31,6 @@
from .monitor_create_params import MonitorCreateParams as MonitorCreateParams
from .monitor_list_response import MonitorListResponse as MonitorListResponse
from .monitor_update_params import MonitorUpdateParams as MonitorUpdateParams
-from .style_update_response import StyleUpdateResponse as StyleUpdateResponse
from .webhook_create_params import WebhookCreateParams as WebhookCreateParams
from .webhook_list_response import WebhookListResponse as WebhookListResponse
from .webhook_test_response import WebhookTestResponse as WebhookTestResponse
@@ -50,7 +48,6 @@
from .extraction_run_response import ExtractionRunResponse as ExtractionRunResponse
from .monitor_create_response import MonitorCreateResponse as MonitorCreateResponse
from .monitor_update_response import MonitorUpdateResponse as MonitorUpdateResponse
-from .style_retrieve_response import StyleRetrieveResponse as StyleRetrieveResponse
from .webhook_create_response import WebhookCreateResponse as WebhookCreateResponse
from .webhook_update_response import WebhookUpdateResponse as WebhookUpdateResponse
from .extraction_list_response import ExtractionListResponse as ExtractionListResponse
@@ -78,7 +75,6 @@
from .integration_retrieve_response import IntegrationRetrieveResponse as IntegrationRetrieveResponse
from .account_update_locale_response import AccountUpdateLocaleResponse as AccountUpdateLocaleResponse
from .integration_send_test_response import IntegrationSendTestResponse as IntegrationSendTestResponse
-from .style_get_performance_response import StyleGetPerformanceResponse as StyleGetPerformanceResponse
from .account_set_x_username_response import AccountSetXUsernameResponse as AccountSetXUsernameResponse
from .extraction_estimate_cost_params import ExtractionEstimateCostParams as ExtractionEstimateCostParams
from .credit_retrieve_balance_response import CreditRetrieveBalanceResponse as CreditRetrieveBalanceResponse
diff --git a/src/x_twitter_scraper/types/compose_create_response.py b/src/x_twitter_scraper/types/compose_create_response.py
index 306ed61..cde7b30 100644
--- a/src/x_twitter_scraper/types/compose_create_response.py
+++ b/src/x_twitter_scraper/types/compose_create_response.py
@@ -1,8 +1,35 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Dict
-from typing_extensions import TypeAlias
+from typing import TYPE_CHECKING, Dict, List, Optional
+
+from pydantic import Field as FieldInfo
+
+from .._models import BaseModel
__all__ = ["ComposeCreateResponse"]
-ComposeCreateResponse: TypeAlias = Dict[str, object]
+
+class ComposeCreateResponse(BaseModel):
+ feedback: Optional[str] = None
+ """AI feedback on the draft"""
+
+ score: Optional[float] = None
+ """Engagement score (0-100)"""
+
+ suggestions: Optional[List[str]] = None
+ """Improvement suggestions"""
+
+ text: Optional[str] = None
+ """Generated or refined tweet text"""
+
+ if TYPE_CHECKING:
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
+ # value to this field, so for compatibility we avoid doing it at runtime.
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
+
+ # Stub to indicate that arbitrary properties are accepted.
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
+ # `getattr(obj, '$type')`
+ def __getattr__(self, attr: str) -> object: ...
+ else:
+ __pydantic_extra__: Dict[str, object]
diff --git a/src/x_twitter_scraper/types/event_retrieve_response.py b/src/x_twitter_scraper/types/event_retrieve_response.py
index e986a96..f738681 100644
--- a/src/x_twitter_scraper/types/event_retrieve_response.py
+++ b/src/x_twitter_scraper/types/event_retrieve_response.py
@@ -15,6 +15,7 @@ class EventRetrieveResponse(BaseModel):
id: str
data: Dict[str, object]
+ """Event payload — shape varies by event type (JSON)"""
monitor_id: str = FieldInfo(alias="monitorId")
diff --git a/src/x_twitter_scraper/types/extraction_retrieve_response.py b/src/x_twitter_scraper/types/extraction_retrieve_response.py
index 762b0ae..b656b25 100644
--- a/src/x_twitter_scraper/types/extraction_retrieve_response.py
+++ b/src/x_twitter_scraper/types/extraction_retrieve_response.py
@@ -13,6 +13,7 @@ class ExtractionRetrieveResponse(BaseModel):
has_more: bool = FieldInfo(alias="hasMore")
job: Dict[str, object]
+ """Extraction job metadata — shape varies by tool type (JSON)"""
results: List[Dict[str, object]]
diff --git a/src/x_twitter_scraper/types/integration_create_response.py b/src/x_twitter_scraper/types/integration_create_response.py
index 8b78408..525889d 100644
--- a/src/x_twitter_scraper/types/integration_create_response.py
+++ b/src/x_twitter_scraper/types/integration_create_response.py
@@ -15,6 +15,7 @@ class IntegrationCreateResponse(BaseModel):
id: str
config: Dict[str, object]
+ """Integration config — shape varies by type (JSON)"""
created_at: datetime = FieldInfo(alias="createdAt")
@@ -29,6 +30,7 @@ class IntegrationCreateResponse(BaseModel):
type: Literal["telegram"]
filters: Optional[Dict[str, object]] = None
+ """Event filter rules (JSON)"""
message_template: Optional[str] = FieldInfo(alias="messageTemplate", default=None)
diff --git a/src/x_twitter_scraper/types/integration_list_response.py b/src/x_twitter_scraper/types/integration_list_response.py
index d8abdb4..55d8914 100644
--- a/src/x_twitter_scraper/types/integration_list_response.py
+++ b/src/x_twitter_scraper/types/integration_list_response.py
@@ -15,6 +15,7 @@ class Integration(BaseModel):
id: str
config: Dict[str, object]
+ """Integration config — shape varies by type (JSON)"""
created_at: datetime = FieldInfo(alias="createdAt")
@@ -29,6 +30,7 @@ class Integration(BaseModel):
type: Literal["telegram"]
filters: Optional[Dict[str, object]] = None
+ """Event filter rules (JSON)"""
message_template: Optional[str] = FieldInfo(alias="messageTemplate", default=None)
diff --git a/src/x_twitter_scraper/types/integration_retrieve_response.py b/src/x_twitter_scraper/types/integration_retrieve_response.py
index 84ee679..fe59291 100644
--- a/src/x_twitter_scraper/types/integration_retrieve_response.py
+++ b/src/x_twitter_scraper/types/integration_retrieve_response.py
@@ -15,6 +15,7 @@ class IntegrationRetrieveResponse(BaseModel):
id: str
config: Dict[str, object]
+ """Integration config — shape varies by type (JSON)"""
created_at: datetime = FieldInfo(alias="createdAt")
@@ -29,6 +30,7 @@ class IntegrationRetrieveResponse(BaseModel):
type: Literal["telegram"]
filters: Optional[Dict[str, object]] = None
+ """Event filter rules (JSON)"""
message_template: Optional[str] = FieldInfo(alias="messageTemplate", default=None)
diff --git a/src/x_twitter_scraper/types/integration_update_params.py b/src/x_twitter_scraper/types/integration_update_params.py
index 32634b2..1f5f23f 100644
--- a/src/x_twitter_scraper/types/integration_update_params.py
+++ b/src/x_twitter_scraper/types/integration_update_params.py
@@ -17,10 +17,12 @@ class IntegrationUpdateParams(TypedDict, total=False):
]
filters: Dict[str, object]
+ """Event filter rules (JSON)"""
is_active: Annotated[bool, PropertyInfo(alias="isActive")]
message_template: Annotated[Dict[str, object], PropertyInfo(alias="messageTemplate")]
+ """Custom message template (JSON)"""
name: str
diff --git a/src/x_twitter_scraper/types/integration_update_response.py b/src/x_twitter_scraper/types/integration_update_response.py
index c8a6ff8..8ecea37 100644
--- a/src/x_twitter_scraper/types/integration_update_response.py
+++ b/src/x_twitter_scraper/types/integration_update_response.py
@@ -15,6 +15,7 @@ class IntegrationUpdateResponse(BaseModel):
id: str
config: Dict[str, object]
+ """Integration config — shape varies by type (JSON)"""
created_at: datetime = FieldInfo(alias="createdAt")
@@ -29,6 +30,7 @@ class IntegrationUpdateResponse(BaseModel):
type: Literal["telegram"]
filters: Optional[Dict[str, object]] = None
+ """Event filter rules (JSON)"""
message_template: Optional[str] = FieldInfo(alias="messageTemplate", default=None)
diff --git a/src/x_twitter_scraper/types/radar_retrieve_trending_topics_params.py b/src/x_twitter_scraper/types/radar_retrieve_trending_topics_params.py
index 24dec8e..3dd5d4c 100644
--- a/src/x_twitter_scraper/types/radar_retrieve_trending_topics_params.py
+++ b/src/x_twitter_scraper/types/radar_retrieve_trending_topics_params.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from typing_extensions import TypedDict
+from typing_extensions import Literal, TypedDict
__all__ = ["RadarRetrieveTrendingTopicsParams"]
@@ -20,7 +20,7 @@ class RadarRetrieveTrendingTopicsParams(TypedDict, total=False):
region: str
"""Region filter (us, global, etc.)"""
- source: str
+ source: Literal["github", "google_trends", "hacker_news", "polymarket", "reddit", "trustmrr", "wikipedia"]
"""Source filter.
One of: github, google_trends, hacker_news, polymarket, reddit, trustmrr,
diff --git a/src/x_twitter_scraper/types/style_get_performance_response.py b/src/x_twitter_scraper/types/style_get_performance_response.py
deleted file mode 100644
index 8b5f413..0000000
--- a/src/x_twitter_scraper/types/style_get_performance_response.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List, Optional
-
-from pydantic import Field as FieldInfo
-
-from .._models import BaseModel
-
-__all__ = ["StyleGetPerformanceResponse", "Tweet"]
-
-
-class Tweet(BaseModel):
- id: str
-
- text: str
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- like_count: Optional[int] = FieldInfo(alias="likeCount", default=None)
-
- reply_count: Optional[int] = FieldInfo(alias="replyCount", default=None)
-
- retweet_count: Optional[int] = FieldInfo(alias="retweetCount", default=None)
-
- view_count: Optional[int] = FieldInfo(alias="viewCount", default=None)
-
-
-class StyleGetPerformanceResponse(BaseModel):
- tweet_count: int = FieldInfo(alias="tweetCount")
-
- tweets: List[Tweet]
-
- x_username: str = FieldInfo(alias="xUsername")
diff --git a/src/x_twitter_scraper/types/style_retrieve_response.py b/src/x_twitter_scraper/types/style_retrieve_response.py
deleted file mode 100644
index 7f2ee7b..0000000
--- a/src/x_twitter_scraper/types/style_retrieve_response.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List, Optional
-from datetime import datetime
-
-from pydantic import Field as FieldInfo
-
-from .._models import BaseModel
-
-__all__ = ["StyleRetrieveResponse", "Tweet"]
-
-
-class Tweet(BaseModel):
- id: str
-
- text: str
-
- author_username: Optional[str] = FieldInfo(alias="authorUsername", default=None)
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
-
-class StyleRetrieveResponse(BaseModel):
- fetched_at: datetime = FieldInfo(alias="fetchedAt")
-
- is_own_account: bool = FieldInfo(alias="isOwnAccount")
-
- tweet_count: int = FieldInfo(alias="tweetCount")
-
- tweets: List[Tweet]
-
- x_username: str = FieldInfo(alias="xUsername")
diff --git a/src/x_twitter_scraper/types/style_update_params.py b/src/x_twitter_scraper/types/style_update_params.py
deleted file mode 100644
index d16a1f0..0000000
--- a/src/x_twitter_scraper/types/style_update_params.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Iterable
-from typing_extensions import Required, TypedDict
-
-__all__ = ["StyleUpdateParams", "Tweet"]
-
-
-class StyleUpdateParams(TypedDict, total=False):
- label: Required[str]
- """Display label for the style"""
-
- tweets: Required[Iterable[Tweet]]
- """Array of tweet objects"""
-
-
-class Tweet(TypedDict, total=False):
- text: Required[str]
diff --git a/src/x_twitter_scraper/types/style_update_response.py b/src/x_twitter_scraper/types/style_update_response.py
deleted file mode 100644
index 977ef52..0000000
--- a/src/x_twitter_scraper/types/style_update_response.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List, Optional
-from datetime import datetime
-
-from pydantic import Field as FieldInfo
-
-from .._models import BaseModel
-
-__all__ = ["StyleUpdateResponse", "Tweet"]
-
-
-class Tweet(BaseModel):
- id: str
-
- text: str
-
- author_username: Optional[str] = FieldInfo(alias="authorUsername", default=None)
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
-
-class StyleUpdateResponse(BaseModel):
- fetched_at: datetime = FieldInfo(alias="fetchedAt")
-
- is_own_account: bool = FieldInfo(alias="isOwnAccount")
-
- tweet_count: int = FieldInfo(alias="tweetCount")
-
- tweets: List[Tweet]
-
- x_username: str = FieldInfo(alias="xUsername")
diff --git a/src/x_twitter_scraper/types/x/__init__.py b/src/x_twitter_scraper/types/x/__init__.py
index 85c7b30..6b75585 100644
--- a/src/x_twitter_scraper/types/x/__init__.py
+++ b/src/x_twitter_scraper/types/x/__init__.py
@@ -7,7 +7,6 @@
from .tweet_list_params import TweetListParams as TweetListParams
from .media_upload_params import MediaUploadParams as MediaUploadParams
from .tweet_create_params import TweetCreateParams as TweetCreateParams
-from .tweet_delete_params import TweetDeleteParams as TweetDeleteParams
from .tweet_search_params import TweetSearchParams as TweetSearchParams
from .bookmark_list_params import BookmarkListParams as BookmarkListParams
from .account_create_params import AccountCreateParams as AccountCreateParams
@@ -18,10 +17,8 @@
from .media_upload_response import MediaUploadResponse as MediaUploadResponse
from .profile_update_params import ProfileUpdateParams as ProfileUpdateParams
from .tweet_create_response import TweetCreateResponse as TweetCreateResponse
-from .tweet_delete_response import TweetDeleteResponse as TweetDeleteResponse
from .tweet_search_response import TweetSearchResponse as TweetSearchResponse
from .bookmark_list_response import BookmarkListResponse as BookmarkListResponse
-from .user_retrieve_response import UserRetrieveResponse as UserRetrieveResponse
from .account_create_response import AccountCreateResponse as AccountCreateResponse
from .account_delete_response import AccountDeleteResponse as AccountDeleteResponse
from .account_reauth_response import AccountReauthResponse as AccountReauthResponse
@@ -32,7 +29,6 @@
from .profile_update_response import ProfileUpdateResponse as ProfileUpdateResponse
from .tweet_get_quotes_params import TweetGetQuotesParams as TweetGetQuotesParams
from .tweet_get_thread_params import TweetGetThreadParams as TweetGetThreadParams
-from .tweet_retrieve_response import TweetRetrieveResponse as TweetRetrieveResponse
from .tweet_get_replies_params import TweetGetRepliesParams as TweetGetRepliesParams
from .account_retrieve_response import AccountRetrieveResponse as AccountRetrieveResponse
from .community_create_response import CommunityCreateResponse as CommunityCreateResponse
diff --git a/src/x_twitter_scraper/types/x/community_retrieve_info_response.py b/src/x_twitter_scraper/types/x/community_retrieve_info_response.py
index 468cb95..5e8c87d 100644
--- a/src/x_twitter_scraper/types/x/community_retrieve_info_response.py
+++ b/src/x_twitter_scraper/types/x/community_retrieve_info_response.py
@@ -1,10 +1,62 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+from typing import List, Optional
+
from ..._models import BaseModel
-__all__ = ["CommunityRetrieveInfoResponse"]
+__all__ = ["CommunityRetrieveInfoResponse", "Community", "CommunityPrimaryTopic", "CommunityRule"]
+
+
+class CommunityPrimaryTopic(BaseModel):
+ """Primary topic"""
+
+ id: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class CommunityRule(BaseModel):
+ id: Optional[str] = None
+
+ description: Optional[str] = None
+
+ name: Optional[str] = None
+
+
+class Community(BaseModel):
+ """Community info object"""
+
+ id: str
+ """Community ID"""
+
+ banner_url: Optional[str] = None
+ """Community banner image URL"""
+
+ created_at: Optional[str] = None
+ """Community creation timestamp"""
+
+ description: Optional[str] = None
+ """Community description"""
+
+ join_policy: Optional[str] = None
+ """Join policy (open or restricted)"""
+
+ member_count: Optional[int] = None
+ """Total member count"""
+
+ moderator_count: Optional[int] = None
+ """Total moderator count"""
+
+ name: Optional[str] = None
+ """Community name"""
+
+ primary_topic: Optional[CommunityPrimaryTopic] = None
+ """Primary topic"""
+
+ rules: Optional[List[CommunityRule]] = None
+ """Community rules"""
class CommunityRetrieveInfoResponse(BaseModel):
- community: object
+ community: Community
"""Community info object"""
diff --git a/src/x_twitter_scraper/types/x/tweet_delete_params.py b/src/x_twitter_scraper/types/x/tweet_delete_params.py
deleted file mode 100644
index 3e7e4af..0000000
--- a/src/x_twitter_scraper/types/x/tweet_delete_params.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Required, TypedDict
-
-__all__ = ["TweetDeleteParams"]
-
-
-class TweetDeleteParams(TypedDict, total=False):
- account: Required[str]
- """X account (@username or account ID)"""
diff --git a/src/x_twitter_scraper/types/x/tweet_delete_response.py b/src/x_twitter_scraper/types/x/tweet_delete_response.py
deleted file mode 100644
index a2c2d71..0000000
--- a/src/x_twitter_scraper/types/x/tweet_delete_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing_extensions import Literal
-
-from ..._models import BaseModel
-
-__all__ = ["TweetDeleteResponse"]
-
-
-class TweetDeleteResponse(BaseModel):
- success: Literal[True]
diff --git a/src/x_twitter_scraper/types/x/tweet_retrieve_response.py b/src/x_twitter_scraper/types/x/tweet_retrieve_response.py
deleted file mode 100644
index c5215f3..0000000
--- a/src/x_twitter_scraper/types/x/tweet_retrieve_response.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Optional
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["TweetRetrieveResponse", "Tweet", "Author"]
-
-
-class Tweet(BaseModel):
- id: str
-
- bookmark_count: int = FieldInfo(alias="bookmarkCount")
-
- like_count: int = FieldInfo(alias="likeCount")
-
- quote_count: int = FieldInfo(alias="quoteCount")
-
- reply_count: int = FieldInfo(alias="replyCount")
-
- retweet_count: int = FieldInfo(alias="retweetCount")
-
- text: str
-
- view_count: int = FieldInfo(alias="viewCount")
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
-
-class Author(BaseModel):
- id: str
-
- followers: int
-
- username: str
-
- verified: bool
-
- profile_picture: Optional[str] = FieldInfo(alias="profilePicture", default=None)
-
-
-class TweetRetrieveResponse(BaseModel):
- tweet: Tweet
-
- author: Optional[Author] = None
diff --git a/src/x_twitter_scraper/types/x/tweets/__init__.py b/src/x_twitter_scraper/types/x/tweets/__init__.py
index 0f77d66..f8ee8b1 100644
--- a/src/x_twitter_scraper/types/x/tweets/__init__.py
+++ b/src/x_twitter_scraper/types/x/tweets/__init__.py
@@ -1,12 +1,3 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
-
-from .like_create_params import LikeCreateParams as LikeCreateParams
-from .like_delete_params import LikeDeleteParams as LikeDeleteParams
-from .like_create_response import LikeCreateResponse as LikeCreateResponse
-from .like_delete_response import LikeDeleteResponse as LikeDeleteResponse
-from .retweet_create_params import RetweetCreateParams as RetweetCreateParams
-from .retweet_delete_params import RetweetDeleteParams as RetweetDeleteParams
-from .retweet_create_response import RetweetCreateResponse as RetweetCreateResponse
-from .retweet_delete_response import RetweetDeleteResponse as RetweetDeleteResponse
diff --git a/src/x_twitter_scraper/types/x/tweets/like_create_params.py b/src/x_twitter_scraper/types/x/tweets/like_create_params.py
deleted file mode 100644
index 84aafcf..0000000
--- a/src/x_twitter_scraper/types/x/tweets/like_create_params.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Required, TypedDict
-
-__all__ = ["LikeCreateParams"]
-
-
-class LikeCreateParams(TypedDict, total=False):
- account: Required[str]
- """X account (@username or account ID)"""
diff --git a/src/x_twitter_scraper/types/x/tweets/like_create_response.py b/src/x_twitter_scraper/types/x/tweets/like_create_response.py
deleted file mode 100644
index 6d9dd54..0000000
--- a/src/x_twitter_scraper/types/x/tweets/like_create_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing_extensions import Literal
-
-from ...._models import BaseModel
-
-__all__ = ["LikeCreateResponse"]
-
-
-class LikeCreateResponse(BaseModel):
- success: Literal[True]
diff --git a/src/x_twitter_scraper/types/x/tweets/like_delete_params.py b/src/x_twitter_scraper/types/x/tweets/like_delete_params.py
deleted file mode 100644
index ac046e1..0000000
--- a/src/x_twitter_scraper/types/x/tweets/like_delete_params.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Required, TypedDict
-
-__all__ = ["LikeDeleteParams"]
-
-
-class LikeDeleteParams(TypedDict, total=False):
- account: Required[str]
- """X account (@username or account ID)"""
diff --git a/src/x_twitter_scraper/types/x/tweets/like_delete_response.py b/src/x_twitter_scraper/types/x/tweets/like_delete_response.py
deleted file mode 100644
index f163e41..0000000
--- a/src/x_twitter_scraper/types/x/tweets/like_delete_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing_extensions import Literal
-
-from ...._models import BaseModel
-
-__all__ = ["LikeDeleteResponse"]
-
-
-class LikeDeleteResponse(BaseModel):
- success: Literal[True]
diff --git a/src/x_twitter_scraper/types/x/tweets/retweet_create_params.py b/src/x_twitter_scraper/types/x/tweets/retweet_create_params.py
deleted file mode 100644
index 0bed29c..0000000
--- a/src/x_twitter_scraper/types/x/tweets/retweet_create_params.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Required, TypedDict
-
-__all__ = ["RetweetCreateParams"]
-
-
-class RetweetCreateParams(TypedDict, total=False):
- account: Required[str]
- """X account (@username or account ID)"""
diff --git a/src/x_twitter_scraper/types/x/tweets/retweet_create_response.py b/src/x_twitter_scraper/types/x/tweets/retweet_create_response.py
deleted file mode 100644
index e23b531..0000000
--- a/src/x_twitter_scraper/types/x/tweets/retweet_create_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing_extensions import Literal
-
-from ...._models import BaseModel
-
-__all__ = ["RetweetCreateResponse"]
-
-
-class RetweetCreateResponse(BaseModel):
- success: Literal[True]
diff --git a/src/x_twitter_scraper/types/x/tweets/retweet_delete_params.py b/src/x_twitter_scraper/types/x/tweets/retweet_delete_params.py
deleted file mode 100644
index f29c390..0000000
--- a/src/x_twitter_scraper/types/x/tweets/retweet_delete_params.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Required, TypedDict
-
-__all__ = ["RetweetDeleteParams"]
-
-
-class RetweetDeleteParams(TypedDict, total=False):
- account: Required[str]
- """X account (@username or account ID)"""
diff --git a/src/x_twitter_scraper/types/x/tweets/retweet_delete_response.py b/src/x_twitter_scraper/types/x/tweets/retweet_delete_response.py
deleted file mode 100644
index 89d8e42..0000000
--- a/src/x_twitter_scraper/types/x/tweets/retweet_delete_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing_extensions import Literal
-
-from ...._models import BaseModel
-
-__all__ = ["RetweetDeleteResponse"]
-
-
-class RetweetDeleteResponse(BaseModel):
- success: Literal[True]
diff --git a/src/x_twitter_scraper/types/x/user_retrieve_response.py b/src/x_twitter_scraper/types/x/user_retrieve_response.py
deleted file mode 100644
index 04cb475..0000000
--- a/src/x_twitter_scraper/types/x/user_retrieve_response.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Optional
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["UserRetrieveResponse"]
-
-
-class UserRetrieveResponse(BaseModel):
- id: str
-
- name: str
-
- username: str
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- description: Optional[str] = None
-
- followers: Optional[int] = None
-
- following: Optional[int] = None
-
- location: Optional[str] = None
-
- profile_picture: Optional[str] = FieldInfo(alias="profilePicture", default=None)
-
- statuses_count: Optional[int] = FieldInfo(alias="statusesCount", default=None)
-
- verified: Optional[bool] = None
diff --git a/src/x_twitter_scraper/types/x/users/__init__.py b/src/x_twitter_scraper/types/x/users/__init__.py
index 5b5b20e..f8ee8b1 100644
--- a/src/x_twitter_scraper/types/x/users/__init__.py
+++ b/src/x_twitter_scraper/types/x/users/__init__.py
@@ -1,8 +1,3 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
-
-from .follow_create_params import FollowCreateParams as FollowCreateParams
-from .follow_create_response import FollowCreateResponse as FollowCreateResponse
-from .follow_delete_all_params import FollowDeleteAllParams as FollowDeleteAllParams
-from .follow_delete_all_response import FollowDeleteAllResponse as FollowDeleteAllResponse
diff --git a/src/x_twitter_scraper/types/x/users/follow_create_params.py b/src/x_twitter_scraper/types/x/users/follow_create_params.py
deleted file mode 100644
index 6a30082..0000000
--- a/src/x_twitter_scraper/types/x/users/follow_create_params.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Required, TypedDict
-
-__all__ = ["FollowCreateParams"]
-
-
-class FollowCreateParams(TypedDict, total=False):
- account: Required[str]
- """X account (@username or account ID)"""
diff --git a/src/x_twitter_scraper/types/x/users/follow_create_response.py b/src/x_twitter_scraper/types/x/users/follow_create_response.py
deleted file mode 100644
index 80f1510..0000000
--- a/src/x_twitter_scraper/types/x/users/follow_create_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing_extensions import Literal
-
-from ...._models import BaseModel
-
-__all__ = ["FollowCreateResponse"]
-
-
-class FollowCreateResponse(BaseModel):
- success: Literal[True]
diff --git a/src/x_twitter_scraper/types/x/users/follow_delete_all_params.py b/src/x_twitter_scraper/types/x/users/follow_delete_all_params.py
deleted file mode 100644
index ae35912..0000000
--- a/src/x_twitter_scraper/types/x/users/follow_delete_all_params.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Required, TypedDict
-
-__all__ = ["FollowDeleteAllParams"]
-
-
-class FollowDeleteAllParams(TypedDict, total=False):
- account: Required[str]
- """X account (@username or account ID)"""
diff --git a/src/x_twitter_scraper/types/x/users/follow_delete_all_response.py b/src/x_twitter_scraper/types/x/users/follow_delete_all_response.py
deleted file mode 100644
index c988c59..0000000
--- a/src/x_twitter_scraper/types/x/users/follow_delete_all_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing_extensions import Literal
-
-from ...._models import BaseModel
-
-__all__ = ["FollowDeleteAllResponse"]
-
-
-class FollowDeleteAllResponse(BaseModel):
- success: Literal[True]
diff --git a/tests/api_resources/test_radar.py b/tests/api_resources/test_radar.py
index 37db69b..341a210 100644
--- a/tests/api_resources/test_radar.py
+++ b/tests/api_resources/test_radar.py
@@ -31,7 +31,7 @@ def test_method_retrieve_trending_topics_with_all_params(self, client: XTwitterS
count=0,
hours=0,
region="region",
- source="source",
+ source="github",
)
assert_matches_type(RadarRetrieveTrendingTopicsResponse, radar, path=["response"])
@@ -77,7 +77,7 @@ async def test_method_retrieve_trending_topics_with_all_params(self, async_clien
count=0,
hours=0,
region="region",
- source="source",
+ source="github",
)
assert_matches_type(RadarRetrieveTrendingTopicsResponse, radar, path=["response"])
diff --git a/tests/api_resources/test_styles.py b/tests/api_resources/test_styles.py
index c6a142e..0b642f5 100644
--- a/tests/api_resources/test_styles.py
+++ b/tests/api_resources/test_styles.py
@@ -11,11 +11,8 @@
from x_twitter_scraper import XTwitterScraper, AsyncXTwitterScraper
from x_twitter_scraper.types import (
StyleListResponse,
- StyleUpdateResponse,
StyleAnalyzeResponse,
StyleCompareResponse,
- StyleRetrieveResponse,
- StyleGetPerformanceResponse,
)
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
@@ -24,98 +21,6 @@
class TestStyles:
parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_retrieve(self, client: XTwitterScraper) -> None:
- style = client.styles.retrieve(
- "username",
- )
- assert_matches_type(StyleRetrieveResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_retrieve(self, client: XTwitterScraper) -> None:
- response = client.styles.with_raw_response.retrieve(
- "username",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- style = response.parse()
- assert_matches_type(StyleRetrieveResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_retrieve(self, client: XTwitterScraper) -> None:
- with client.styles.with_streaming_response.retrieve(
- "username",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- style = response.parse()
- assert_matches_type(StyleRetrieveResponse, style, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_retrieve(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- client.styles.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_update(self, client: XTwitterScraper) -> None:
- style = client.styles.update(
- username="username",
- label="label",
- tweets=[{"text": "text"}],
- )
- assert_matches_type(StyleUpdateResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_update(self, client: XTwitterScraper) -> None:
- response = client.styles.with_raw_response.update(
- username="username",
- label="label",
- tweets=[{"text": "text"}],
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- style = response.parse()
- assert_matches_type(StyleUpdateResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_update(self, client: XTwitterScraper) -> None:
- with client.styles.with_streaming_response.update(
- username="username",
- label="label",
- tweets=[{"text": "text"}],
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- style = response.parse()
- assert_matches_type(StyleUpdateResponse, style, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_update(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- client.styles.with_raw_response.update(
- username="",
- label="label",
- tweets=[{"text": "text"}],
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_list(self, client: XTwitterScraper) -> None:
@@ -144,48 +49,6 @@ def test_streaming_response_list(self, client: XTwitterScraper) -> None:
assert cast(Any, response.is_closed) is True
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_delete(self, client: XTwitterScraper) -> None:
- style = client.styles.delete(
- "username",
- )
- assert style is None
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_delete(self, client: XTwitterScraper) -> None:
- response = client.styles.with_raw_response.delete(
- "username",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- style = response.parse()
- assert style is None
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_delete(self, client: XTwitterScraper) -> None:
- with client.styles.with_streaming_response.delete(
- "username",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- style = response.parse()
- assert style is None
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_delete(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- client.styles.with_raw_response.delete(
- "",
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_analyze(self, client: XTwitterScraper) -> None:
@@ -257,146 +120,12 @@ def test_streaming_response_compare(self, client: XTwitterScraper) -> None:
assert cast(Any, response.is_closed) is True
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_get_performance(self, client: XTwitterScraper) -> None:
- style = client.styles.get_performance(
- "username",
- )
- assert_matches_type(StyleGetPerformanceResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_get_performance(self, client: XTwitterScraper) -> None:
- response = client.styles.with_raw_response.get_performance(
- "username",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- style = response.parse()
- assert_matches_type(StyleGetPerformanceResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_get_performance(self, client: XTwitterScraper) -> None:
- with client.styles.with_streaming_response.get_performance(
- "username",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- style = response.parse()
- assert_matches_type(StyleGetPerformanceResponse, style, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_get_performance(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- client.styles.with_raw_response.get_performance(
- "",
- )
-
class TestAsyncStyles:
parametrize = pytest.mark.parametrize(
"async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
)
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- style = await async_client.styles.retrieve(
- "username",
- )
- assert_matches_type(StyleRetrieveResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.styles.with_raw_response.retrieve(
- "username",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- style = await response.parse()
- assert_matches_type(StyleRetrieveResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.styles.with_streaming_response.retrieve(
- "username",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- style = await response.parse()
- assert_matches_type(StyleRetrieveResponse, style, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- await async_client.styles.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_update(self, async_client: AsyncXTwitterScraper) -> None:
- style = await async_client.styles.update(
- username="username",
- label="label",
- tweets=[{"text": "text"}],
- )
- assert_matches_type(StyleUpdateResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_update(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.styles.with_raw_response.update(
- username="username",
- label="label",
- tweets=[{"text": "text"}],
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- style = await response.parse()
- assert_matches_type(StyleUpdateResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_update(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.styles.with_streaming_response.update(
- username="username",
- label="label",
- tweets=[{"text": "text"}],
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- style = await response.parse()
- assert_matches_type(StyleUpdateResponse, style, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_update(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- await async_client.styles.with_raw_response.update(
- username="",
- label="label",
- tweets=[{"text": "text"}],
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_list(self, async_client: AsyncXTwitterScraper) -> None:
@@ -425,48 +154,6 @@ async def test_streaming_response_list(self, async_client: AsyncXTwitterScraper)
assert cast(Any, response.is_closed) is True
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_delete(self, async_client: AsyncXTwitterScraper) -> None:
- style = await async_client.styles.delete(
- "username",
- )
- assert style is None
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_delete(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.styles.with_raw_response.delete(
- "username",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- style = await response.parse()
- assert style is None
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_delete(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.styles.with_streaming_response.delete(
- "username",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- style = await response.parse()
- assert style is None
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_delete(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- await async_client.styles.with_raw_response.delete(
- "",
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_analyze(self, async_client: AsyncXTwitterScraper) -> None:
@@ -537,45 +224,3 @@ async def test_streaming_response_compare(self, async_client: AsyncXTwitterScrap
assert_matches_type(StyleCompareResponse, style, path=["response"])
assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_get_performance(self, async_client: AsyncXTwitterScraper) -> None:
- style = await async_client.styles.get_performance(
- "username",
- )
- assert_matches_type(StyleGetPerformanceResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_get_performance(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.styles.with_raw_response.get_performance(
- "username",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- style = await response.parse()
- assert_matches_type(StyleGetPerformanceResponse, style, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_get_performance(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.styles.with_streaming_response.get_performance(
- "username",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- style = await response.parse()
- assert_matches_type(StyleGetPerformanceResponse, style, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_get_performance(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- await async_client.styles.with_raw_response.get_performance(
- "",
- )
diff --git a/tests/api_resources/x/test_tweets.py b/tests/api_resources/x/test_tweets.py
index 27249ed..f31fe4d 100644
--- a/tests/api_resources/x/test_tweets.py
+++ b/tests/api_resources/x/test_tweets.py
@@ -11,9 +11,7 @@
from x_twitter_scraper import XTwitterScraper, AsyncXTwitterScraper
from x_twitter_scraper.types.x import (
TweetCreateResponse,
- TweetDeleteResponse,
TweetSearchResponse,
- TweetRetrieveResponse,
TweetGetQuotesResponse,
TweetGetThreadResponse,
TweetGetRepliesResponse,
@@ -78,48 +76,6 @@ def test_streaming_response_create(self, client: XTwitterScraper) -> None:
assert cast(Any, response.is_closed) is True
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_retrieve(self, client: XTwitterScraper) -> None:
- tweet = client.x.tweets.retrieve(
- "tweetId",
- )
- assert_matches_type(TweetRetrieveResponse, tweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_retrieve(self, client: XTwitterScraper) -> None:
- response = client.x.tweets.with_raw_response.retrieve(
- "tweetId",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- tweet = response.parse()
- assert_matches_type(TweetRetrieveResponse, tweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_retrieve(self, client: XTwitterScraper) -> None:
- with client.x.tweets.with_streaming_response.retrieve(
- "tweetId",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- tweet = response.parse()
- assert_matches_type(TweetRetrieveResponse, tweet, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_retrieve(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- client.x.tweets.with_raw_response.retrieve(
- "",
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_list(self, client: XTwitterScraper) -> None:
@@ -154,52 +110,6 @@ def test_streaming_response_list(self, client: XTwitterScraper) -> None:
assert cast(Any, response.is_closed) is True
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_delete(self, client: XTwitterScraper) -> None:
- tweet = client.x.tweets.delete(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(TweetDeleteResponse, tweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_delete(self, client: XTwitterScraper) -> None:
- response = client.x.tweets.with_raw_response.delete(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- tweet = response.parse()
- assert_matches_type(TweetDeleteResponse, tweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_delete(self, client: XTwitterScraper) -> None:
- with client.x.tweets.with_streaming_response.delete(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- tweet = response.parse()
- assert_matches_type(TweetDeleteResponse, tweet, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_delete(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- client.x.tweets.with_raw_response.delete(
- tweet_id="",
- account="account",
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_get_favoriters(self, client: XTwitterScraper) -> None:
@@ -564,48 +474,6 @@ async def test_streaming_response_create(self, async_client: AsyncXTwitterScrape
assert cast(Any, response.is_closed) is True
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- tweet = await async_client.x.tweets.retrieve(
- "tweetId",
- )
- assert_matches_type(TweetRetrieveResponse, tweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.x.tweets.with_raw_response.retrieve(
- "tweetId",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- tweet = await response.parse()
- assert_matches_type(TweetRetrieveResponse, tweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.x.tweets.with_streaming_response.retrieve(
- "tweetId",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- tweet = await response.parse()
- assert_matches_type(TweetRetrieveResponse, tweet, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- await async_client.x.tweets.with_raw_response.retrieve(
- "",
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_list(self, async_client: AsyncXTwitterScraper) -> None:
@@ -640,52 +508,6 @@ async def test_streaming_response_list(self, async_client: AsyncXTwitterScraper)
assert cast(Any, response.is_closed) is True
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_delete(self, async_client: AsyncXTwitterScraper) -> None:
- tweet = await async_client.x.tweets.delete(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(TweetDeleteResponse, tweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_delete(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.x.tweets.with_raw_response.delete(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- tweet = await response.parse()
- assert_matches_type(TweetDeleteResponse, tweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_delete(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.x.tweets.with_streaming_response.delete(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- tweet = await response.parse()
- assert_matches_type(TweetDeleteResponse, tweet, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_delete(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- await async_client.x.tweets.with_raw_response.delete(
- tweet_id="",
- account="account",
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_get_favoriters(self, async_client: AsyncXTwitterScraper) -> None:
diff --git a/tests/api_resources/x/test_users.py b/tests/api_resources/x/test_users.py
index 3d63e3a..922bda8 100644
--- a/tests/api_resources/x/test_users.py
+++ b/tests/api_resources/x/test_users.py
@@ -10,7 +10,6 @@
from tests.utils import assert_matches_type
from x_twitter_scraper import XTwitterScraper, AsyncXTwitterScraper
from x_twitter_scraper.types.x import (
- UserRetrieveResponse,
UserRetrieveLikesResponse,
UserRetrieveMediaResponse,
UserRetrieveTweetsResponse,
@@ -23,48 +22,6 @@
class TestUsers:
parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_retrieve(self, client: XTwitterScraper) -> None:
- user = client.x.users.retrieve(
- "username",
- )
- assert_matches_type(UserRetrieveResponse, user, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_retrieve(self, client: XTwitterScraper) -> None:
- response = client.x.users.with_raw_response.retrieve(
- "username",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- user = response.parse()
- assert_matches_type(UserRetrieveResponse, user, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_retrieve(self, client: XTwitterScraper) -> None:
- with client.x.users.with_streaming_response.retrieve(
- "username",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- user = response.parse()
- assert_matches_type(UserRetrieveResponse, user, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_retrieve(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- client.x.users.with_raw_response.retrieve(
- "",
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_retrieve_batch(self, client: XTwitterScraper) -> None:
@@ -562,48 +519,6 @@ class TestAsyncUsers:
"async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
)
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- user = await async_client.x.users.retrieve(
- "username",
- )
- assert_matches_type(UserRetrieveResponse, user, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.x.users.with_raw_response.retrieve(
- "username",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- user = await response.parse()
- assert_matches_type(UserRetrieveResponse, user, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.x.users.with_streaming_response.retrieve(
- "username",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- user = await response.parse()
- assert_matches_type(UserRetrieveResponse, user, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_retrieve(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `username` but received ''"):
- await async_client.x.users.with_raw_response.retrieve(
- "",
- )
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_retrieve_batch(self, async_client: AsyncXTwitterScraper) -> None:
diff --git a/tests/api_resources/x/tweets/__init__.py b/tests/api_resources/x/tweets/__init__.py
deleted file mode 100644
index fd8019a..0000000
--- a/tests/api_resources/x/tweets/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/x/tweets/test_like.py b/tests/api_resources/x/tweets/test_like.py
deleted file mode 100644
index 35bd4fc..0000000
--- a/tests/api_resources/x/tweets/test_like.py
+++ /dev/null
@@ -1,211 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import os
-from typing import Any, cast
-
-import pytest
-
-from tests.utils import assert_matches_type
-from x_twitter_scraper import XTwitterScraper, AsyncXTwitterScraper
-from x_twitter_scraper.types.x.tweets import (
- LikeCreateResponse,
- LikeDeleteResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestLike:
- parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create(self, client: XTwitterScraper) -> None:
- like = client.x.tweets.like.create(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(LikeCreateResponse, like, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_create(self, client: XTwitterScraper) -> None:
- response = client.x.tweets.like.with_raw_response.create(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- like = response.parse()
- assert_matches_type(LikeCreateResponse, like, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_create(self, client: XTwitterScraper) -> None:
- with client.x.tweets.like.with_streaming_response.create(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- like = response.parse()
- assert_matches_type(LikeCreateResponse, like, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_create(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- client.x.tweets.like.with_raw_response.create(
- tweet_id="",
- account="account",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_delete(self, client: XTwitterScraper) -> None:
- like = client.x.tweets.like.delete(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(LikeDeleteResponse, like, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_delete(self, client: XTwitterScraper) -> None:
- response = client.x.tweets.like.with_raw_response.delete(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- like = response.parse()
- assert_matches_type(LikeDeleteResponse, like, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_delete(self, client: XTwitterScraper) -> None:
- with client.x.tweets.like.with_streaming_response.delete(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- like = response.parse()
- assert_matches_type(LikeDeleteResponse, like, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_delete(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- client.x.tweets.like.with_raw_response.delete(
- tweet_id="",
- account="account",
- )
-
-
-class TestAsyncLike:
- parametrize = pytest.mark.parametrize(
- "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_create(self, async_client: AsyncXTwitterScraper) -> None:
- like = await async_client.x.tweets.like.create(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(LikeCreateResponse, like, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_create(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.x.tweets.like.with_raw_response.create(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- like = await response.parse()
- assert_matches_type(LikeCreateResponse, like, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_create(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.x.tweets.like.with_streaming_response.create(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- like = await response.parse()
- assert_matches_type(LikeCreateResponse, like, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_create(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- await async_client.x.tweets.like.with_raw_response.create(
- tweet_id="",
- account="account",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_delete(self, async_client: AsyncXTwitterScraper) -> None:
- like = await async_client.x.tweets.like.delete(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(LikeDeleteResponse, like, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_delete(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.x.tweets.like.with_raw_response.delete(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- like = await response.parse()
- assert_matches_type(LikeDeleteResponse, like, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_delete(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.x.tweets.like.with_streaming_response.delete(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- like = await response.parse()
- assert_matches_type(LikeDeleteResponse, like, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_delete(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- await async_client.x.tweets.like.with_raw_response.delete(
- tweet_id="",
- account="account",
- )
diff --git a/tests/api_resources/x/tweets/test_retweet.py b/tests/api_resources/x/tweets/test_retweet.py
deleted file mode 100644
index cc1a501..0000000
--- a/tests/api_resources/x/tweets/test_retweet.py
+++ /dev/null
@@ -1,211 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import os
-from typing import Any, cast
-
-import pytest
-
-from tests.utils import assert_matches_type
-from x_twitter_scraper import XTwitterScraper, AsyncXTwitterScraper
-from x_twitter_scraper.types.x.tweets import (
- RetweetCreateResponse,
- RetweetDeleteResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestRetweet:
- parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create(self, client: XTwitterScraper) -> None:
- retweet = client.x.tweets.retweet.create(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(RetweetCreateResponse, retweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_create(self, client: XTwitterScraper) -> None:
- response = client.x.tweets.retweet.with_raw_response.create(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- retweet = response.parse()
- assert_matches_type(RetweetCreateResponse, retweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_create(self, client: XTwitterScraper) -> None:
- with client.x.tweets.retweet.with_streaming_response.create(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- retweet = response.parse()
- assert_matches_type(RetweetCreateResponse, retweet, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_create(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- client.x.tweets.retweet.with_raw_response.create(
- tweet_id="",
- account="account",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_delete(self, client: XTwitterScraper) -> None:
- retweet = client.x.tweets.retweet.delete(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(RetweetDeleteResponse, retweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_delete(self, client: XTwitterScraper) -> None:
- response = client.x.tweets.retweet.with_raw_response.delete(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- retweet = response.parse()
- assert_matches_type(RetweetDeleteResponse, retweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_delete(self, client: XTwitterScraper) -> None:
- with client.x.tweets.retweet.with_streaming_response.delete(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- retweet = response.parse()
- assert_matches_type(RetweetDeleteResponse, retweet, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_delete(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- client.x.tweets.retweet.with_raw_response.delete(
- tweet_id="",
- account="account",
- )
-
-
-class TestAsyncRetweet:
- parametrize = pytest.mark.parametrize(
- "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_create(self, async_client: AsyncXTwitterScraper) -> None:
- retweet = await async_client.x.tweets.retweet.create(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(RetweetCreateResponse, retweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_create(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.x.tweets.retweet.with_raw_response.create(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- retweet = await response.parse()
- assert_matches_type(RetweetCreateResponse, retweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_create(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.x.tweets.retweet.with_streaming_response.create(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- retweet = await response.parse()
- assert_matches_type(RetweetCreateResponse, retweet, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_create(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- await async_client.x.tweets.retweet.with_raw_response.create(
- tweet_id="",
- account="account",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_delete(self, async_client: AsyncXTwitterScraper) -> None:
- retweet = await async_client.x.tweets.retweet.delete(
- tweet_id="tweetId",
- account="account",
- )
- assert_matches_type(RetweetDeleteResponse, retweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_delete(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.x.tweets.retweet.with_raw_response.delete(
- tweet_id="tweetId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- retweet = await response.parse()
- assert_matches_type(RetweetDeleteResponse, retweet, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_delete(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.x.tweets.retweet.with_streaming_response.delete(
- tweet_id="tweetId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- retweet = await response.parse()
- assert_matches_type(RetweetDeleteResponse, retweet, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_delete(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `tweet_id` but received ''"):
- await async_client.x.tweets.retweet.with_raw_response.delete(
- tweet_id="",
- account="account",
- )
diff --git a/tests/api_resources/x/users/__init__.py b/tests/api_resources/x/users/__init__.py
deleted file mode 100644
index fd8019a..0000000
--- a/tests/api_resources/x/users/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/x/users/test_follow.py b/tests/api_resources/x/users/test_follow.py
deleted file mode 100644
index 36832c1..0000000
--- a/tests/api_resources/x/users/test_follow.py
+++ /dev/null
@@ -1,211 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import os
-from typing import Any, cast
-
-import pytest
-
-from tests.utils import assert_matches_type
-from x_twitter_scraper import XTwitterScraper, AsyncXTwitterScraper
-from x_twitter_scraper.types.x.users import (
- FollowCreateResponse,
- FollowDeleteAllResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestFollow:
- parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create(self, client: XTwitterScraper) -> None:
- follow = client.x.users.follow.create(
- user_id="userId",
- account="account",
- )
- assert_matches_type(FollowCreateResponse, follow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_create(self, client: XTwitterScraper) -> None:
- response = client.x.users.follow.with_raw_response.create(
- user_id="userId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- follow = response.parse()
- assert_matches_type(FollowCreateResponse, follow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_create(self, client: XTwitterScraper) -> None:
- with client.x.users.follow.with_streaming_response.create(
- user_id="userId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- follow = response.parse()
- assert_matches_type(FollowCreateResponse, follow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_create(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `user_id` but received ''"):
- client.x.users.follow.with_raw_response.create(
- user_id="",
- account="account",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_delete_all(self, client: XTwitterScraper) -> None:
- follow = client.x.users.follow.delete_all(
- user_id="userId",
- account="account",
- )
- assert_matches_type(FollowDeleteAllResponse, follow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_delete_all(self, client: XTwitterScraper) -> None:
- response = client.x.users.follow.with_raw_response.delete_all(
- user_id="userId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- follow = response.parse()
- assert_matches_type(FollowDeleteAllResponse, follow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_delete_all(self, client: XTwitterScraper) -> None:
- with client.x.users.follow.with_streaming_response.delete_all(
- user_id="userId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- follow = response.parse()
- assert_matches_type(FollowDeleteAllResponse, follow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_delete_all(self, client: XTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `user_id` but received ''"):
- client.x.users.follow.with_raw_response.delete_all(
- user_id="",
- account="account",
- )
-
-
-class TestAsyncFollow:
- parametrize = pytest.mark.parametrize(
- "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_create(self, async_client: AsyncXTwitterScraper) -> None:
- follow = await async_client.x.users.follow.create(
- user_id="userId",
- account="account",
- )
- assert_matches_type(FollowCreateResponse, follow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_create(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.x.users.follow.with_raw_response.create(
- user_id="userId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- follow = await response.parse()
- assert_matches_type(FollowCreateResponse, follow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_create(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.x.users.follow.with_streaming_response.create(
- user_id="userId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- follow = await response.parse()
- assert_matches_type(FollowCreateResponse, follow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_create(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `user_id` but received ''"):
- await async_client.x.users.follow.with_raw_response.create(
- user_id="",
- account="account",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_delete_all(self, async_client: AsyncXTwitterScraper) -> None:
- follow = await async_client.x.users.follow.delete_all(
- user_id="userId",
- account="account",
- )
- assert_matches_type(FollowDeleteAllResponse, follow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_delete_all(self, async_client: AsyncXTwitterScraper) -> None:
- response = await async_client.x.users.follow.with_raw_response.delete_all(
- user_id="userId",
- account="account",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- follow = await response.parse()
- assert_matches_type(FollowDeleteAllResponse, follow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_delete_all(self, async_client: AsyncXTwitterScraper) -> None:
- async with async_client.x.users.follow.with_streaming_response.delete_all(
- user_id="userId",
- account="account",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- follow = await response.parse()
- assert_matches_type(FollowDeleteAllResponse, follow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_delete_all(self, async_client: AsyncXTwitterScraper) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `user_id` but received ''"):
- await async_client.x.users.follow.with_raw_response.delete_all(
- user_id="",
- account="account",
- )