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", - )