twitter-openapi-python-generated 0.0.33__py3-none-any.whl → 0.0.35__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. twitter_openapi_python_generated/__init__.py +906 -330
  2. twitter_openapi_python_generated/api/default_api.py +1 -2
  3. twitter_openapi_python_generated/api/other_api.py +1 -2
  4. twitter_openapi_python_generated/api/post_api.py +2081 -206
  5. twitter_openapi_python_generated/api/tweet_api.py +3225 -250
  6. twitter_openapi_python_generated/api/user_api.py +993 -91
  7. twitter_openapi_python_generated/api/user_list_api.py +2291 -68
  8. twitter_openapi_python_generated/api/users_api.py +1 -2
  9. twitter_openapi_python_generated/api/v11_get_api.py +1 -2
  10. twitter_openapi_python_generated/api/v11_post_api.py +1 -2
  11. twitter_openapi_python_generated/api/v20_get_api.py +1 -2
  12. twitter_openapi_python_generated/api_client.py +81 -36
  13. twitter_openapi_python_generated/configuration.py +103 -30
  14. twitter_openapi_python_generated/exceptions.py +7 -5
  15. twitter_openapi_python_generated/models/__init__.py +123 -2
  16. twitter_openapi_python_generated/models/about_community_result.py +4 -3
  17. twitter_openapi_python_generated/models/about_community_results.py +4 -3
  18. twitter_openapi_python_generated/models/about_community_tweet_data.py +4 -3
  19. twitter_openapi_python_generated/models/additional_media_info.py +7 -4
  20. twitter_openapi_python_generated/models/additional_media_info_call_to_actions.py +4 -3
  21. twitter_openapi_python_generated/models/additional_media_info_call_to_actions_url.py +4 -3
  22. twitter_openapi_python_generated/models/allow_download_status.py +4 -3
  23. twitter_openapi_python_generated/models/analysis_results.py +4 -3
  24. twitter_openapi_python_generated/models/article.py +4 -3
  25. twitter_openapi_python_generated/models/article_cover_media.py +6 -5
  26. twitter_openapi_python_generated/models/article_cover_media_color_info.py +5 -5
  27. twitter_openapi_python_generated/models/article_cover_media_color_info_palette.py +4 -3
  28. twitter_openapi_python_generated/models/article_cover_media_color_info_palette_rgb.py +4 -3
  29. twitter_openapi_python_generated/models/article_cover_media_info.py +4 -3
  30. twitter_openapi_python_generated/models/article_lifecycle_state.py +4 -3
  31. twitter_openapi_python_generated/models/article_metadata.py +4 -3
  32. twitter_openapi_python_generated/models/article_preview.py +99 -0
  33. twitter_openapi_python_generated/models/article_result.py +21 -8
  34. twitter_openapi_python_generated/models/article_results.py +4 -3
  35. twitter_openapi_python_generated/models/author_community_relationship.py +9 -8
  36. twitter_openapi_python_generated/models/badge_counts.py +97 -0
  37. twitter_openapi_python_generated/models/birdwatch_entity.py +4 -3
  38. twitter_openapi_python_generated/models/birdwatch_entity_ref.py +7 -4
  39. twitter_openapi_python_generated/models/birdwatch_pivot.py +19 -6
  40. twitter_openapi_python_generated/models/birdwatch_pivot_call_to_action.py +4 -3
  41. twitter_openapi_python_generated/models/birdwatch_pivot_footer.py +5 -5
  42. twitter_openapi_python_generated/models/birdwatch_pivot_note.py +19 -8
  43. twitter_openapi_python_generated/models/birdwatch_pivot_subtitle.py +5 -5
  44. twitter_openapi_python_generated/models/bookmarks_response.py +5 -5
  45. twitter_openapi_python_generated/models/bookmarks_response_data.py +4 -3
  46. twitter_openapi_python_generated/models/bookmarks_timeline.py +4 -3
  47. twitter_openapi_python_generated/models/callback.py +4 -3
  48. twitter_openapi_python_generated/models/cashtag_attachment.py +89 -0
  49. twitter_openapi_python_generated/models/client_event_info.py +4 -3
  50. twitter_openapi_python_generated/models/communities_actions.py +4 -3
  51. twitter_openapi_python_generated/models/community.py +141 -12
  52. twitter_openapi_python_generated/models/community_about_timeline_response.py +5 -5
  53. twitter_openapi_python_generated/models/community_actions.py +4 -3
  54. twitter_openapi_python_generated/models/community_delete_action_result.py +4 -3
  55. twitter_openapi_python_generated/models/community_discovery_timeline_response.py +102 -0
  56. twitter_openapi_python_generated/models/community_discovery_timeline_response_data.py +93 -0
  57. twitter_openapi_python_generated/models/community_discovery_timeline_viewer.py +93 -0
  58. twitter_openapi_python_generated/models/community_invites_result.py +4 -3
  59. twitter_openapi_python_generated/models/community_join_action.py +4 -3
  60. twitter_openapi_python_generated/models/community_join_action_result_union.py +3 -2
  61. twitter_openapi_python_generated/models/community_join_action_unavailable.py +4 -3
  62. twitter_openapi_python_generated/models/community_join_requests_result.py +4 -3
  63. twitter_openapi_python_generated/models/community_leave_action_result.py +4 -3
  64. twitter_openapi_python_generated/models/community_media_timeline_response.py +5 -5
  65. twitter_openapi_python_generated/models/community_pin_action_result.py +4 -3
  66. twitter_openapi_python_generated/models/community_relationship.py +6 -5
  67. twitter_openapi_python_generated/models/community_result.py +93 -0
  68. twitter_openapi_python_generated/models/community_rule.py +6 -5
  69. twitter_openapi_python_generated/models/community_tweets_timeline_response.py +5 -5
  70. twitter_openapi_python_generated/models/community_unavailable.py +90 -0
  71. twitter_openapi_python_generated/models/community_union.py +157 -0
  72. twitter_openapi_python_generated/models/community_unpin_action_result.py +4 -3
  73. twitter_openapi_python_generated/models/community_urls.py +4 -3
  74. twitter_openapi_python_generated/models/community_urls_permalink.py +4 -3
  75. twitter_openapi_python_generated/models/connect_tab_timeline_response.py +102 -0
  76. twitter_openapi_python_generated/models/connect_tab_timeline_response_data.py +93 -0
  77. twitter_openapi_python_generated/models/content_disclosure.py +99 -0
  78. twitter_openapi_python_generated/models/content_disclosure_advertising_disclosure.py +89 -0
  79. twitter_openapi_python_generated/models/content_disclosure_ai_generated_disclosure.py +103 -0
  80. twitter_openapi_python_generated/models/content_item_type.py +3 -0
  81. twitter_openapi_python_generated/models/content_union.py +3 -2
  82. twitter_openapi_python_generated/models/conversation_control.py +4 -3
  83. twitter_openapi_python_generated/models/cover_cta.py +5 -5
  84. twitter_openapi_python_generated/models/create_bookmark_response.py +5 -5
  85. twitter_openapi_python_generated/models/create_bookmark_response_data.py +4 -3
  86. twitter_openapi_python_generated/models/create_draft_tweet_response.py +102 -0
  87. twitter_openapi_python_generated/models/create_draft_tweet_response_data.py +93 -0
  88. twitter_openapi_python_generated/models/create_draft_tweet_response_tweet.py +97 -0
  89. twitter_openapi_python_generated/models/create_retweet.py +4 -3
  90. twitter_openapi_python_generated/models/create_retweet_response.py +5 -5
  91. twitter_openapi_python_generated/models/create_retweet_response_data.py +4 -3
  92. twitter_openapi_python_generated/models/create_retweet_response_result.py +4 -3
  93. twitter_openapi_python_generated/models/create_tweet.py +4 -3
  94. twitter_openapi_python_generated/models/create_tweet_response.py +5 -5
  95. twitter_openapi_python_generated/models/create_tweet_response_data.py +4 -3
  96. twitter_openapi_python_generated/models/create_tweet_response_result.py +4 -3
  97. twitter_openapi_python_generated/models/cta_client_event_info.py +4 -3
  98. twitter_openapi_python_generated/models/delete_bookmark_response.py +5 -5
  99. twitter_openapi_python_generated/models/delete_bookmark_response_data.py +4 -3
  100. twitter_openapi_python_generated/models/delete_draft_tweets_response.py +102 -0
  101. twitter_openapi_python_generated/models/delete_draft_tweets_response_data.py +89 -0
  102. twitter_openapi_python_generated/models/delete_list_response.py +102 -0
  103. twitter_openapi_python_generated/models/delete_list_response_data.py +89 -0
  104. twitter_openapi_python_generated/models/delete_retweet.py +5 -5
  105. twitter_openapi_python_generated/models/delete_retweet_response.py +5 -5
  106. twitter_openapi_python_generated/models/delete_retweet_response_data.py +4 -3
  107. twitter_openapi_python_generated/models/delete_retweet_response_result.py +4 -3
  108. twitter_openapi_python_generated/models/delete_tweet_response.py +5 -5
  109. twitter_openapi_python_generated/models/delete_tweet_response_data.py +4 -3
  110. twitter_openapi_python_generated/models/delete_tweet_response_result.py +4 -3
  111. twitter_openapi_python_generated/models/display_treatment.py +4 -3
  112. twitter_openapi_python_generated/models/draft_list.py +96 -0
  113. twitter_openapi_python_generated/models/draft_tweet.py +109 -0
  114. twitter_openapi_python_generated/models/draft_tweet_create_request.py +99 -0
  115. twitter_openapi_python_generated/models/draft_tweet_user.py +100 -0
  116. twitter_openapi_python_generated/models/draft_tweet_user_results.py +93 -0
  117. twitter_openapi_python_generated/models/draft_tweets_viewer.py +93 -0
  118. twitter_openapi_python_generated/models/entities.py +24 -15
  119. twitter_openapi_python_generated/models/error_extensions.py +5 -4
  120. twitter_openapi_python_generated/models/error_response.py +15 -8
  121. twitter_openapi_python_generated/models/error_response_path_inner.py +144 -0
  122. twitter_openapi_python_generated/models/explore_page.py +95 -0
  123. twitter_openapi_python_generated/models/explore_page_body.py +104 -0
  124. twitter_openapi_python_generated/models/explore_page_response.py +102 -0
  125. twitter_openapi_python_generated/models/explore_page_response_data.py +93 -0
  126. twitter_openapi_python_generated/models/explore_timeline.py +105 -0
  127. twitter_openapi_python_generated/models/explore_timeline_scribe_config.py +91 -0
  128. twitter_openapi_python_generated/models/ext_media_availability.py +4 -3
  129. twitter_openapi_python_generated/models/extended_entities.py +5 -5
  130. twitter_openapi_python_generated/models/favorite_tweet.py +4 -3
  131. twitter_openapi_python_generated/models/favorite_tweet_response.py +5 -5
  132. twitter_openapi_python_generated/models/feedback_info.py +4 -3
  133. twitter_openapi_python_generated/models/fetch_draft_tweets_response.py +102 -0
  134. twitter_openapi_python_generated/models/fetch_draft_tweets_response_data.py +93 -0
  135. twitter_openapi_python_generated/models/fetch_scheduled_tweets_response.py +102 -0
  136. twitter_openapi_python_generated/models/fetch_scheduled_tweets_response_data.py +93 -0
  137. twitter_openapi_python_generated/models/follow_response.py +5 -5
  138. twitter_openapi_python_generated/models/follow_response_data.py +4 -3
  139. twitter_openapi_python_generated/models/follow_response_result.py +4 -3
  140. twitter_openapi_python_generated/models/follow_response_user.py +4 -3
  141. twitter_openapi_python_generated/models/follow_timeline.py +4 -3
  142. twitter_openapi_python_generated/models/generic_timeline_by_id_response.py +102 -0
  143. twitter_openapi_python_generated/models/generic_timeline_by_id_response_data.py +93 -0
  144. twitter_openapi_python_generated/models/grok_annotation.py +89 -0
  145. twitter_openapi_python_generated/models/grok_entity.py +97 -0
  146. twitter_openapi_python_generated/models/grok_entity_ref.py +116 -0
  147. twitter_openapi_python_generated/models/grok_image_annotation.py +4 -3
  148. twitter_openapi_python_generated/models/grok_share_attachment.py +5 -5
  149. twitter_openapi_python_generated/models/grok_share_attachment_item.py +7 -4
  150. twitter_openapi_python_generated/models/grok_translated_bio.py +101 -0
  151. twitter_openapi_python_generated/models/grok_translated_bio_with_availability.py +97 -0
  152. twitter_openapi_python_generated/models/grok_translated_community_note.py +104 -0
  153. twitter_openapi_python_generated/models/grok_translated_community_note_with_availability.py +95 -0
  154. twitter_openapi_python_generated/models/grok_translated_post.py +103 -0
  155. twitter_openapi_python_generated/models/grok_translated_post_with_availability.py +95 -0
  156. twitter_openapi_python_generated/models/highlight.py +5 -5
  157. twitter_openapi_python_generated/models/home_timeline_home.py +4 -3
  158. twitter_openapi_python_generated/models/home_timeline_response_data.py +4 -3
  159. twitter_openapi_python_generated/models/instruction_union.py +3 -2
  160. twitter_openapi_python_generated/models/item_content_union.py +68 -10
  161. twitter_openapi_python_generated/models/item_result.py +4 -3
  162. twitter_openapi_python_generated/models/limited_action_results_data.py +4 -3
  163. twitter_openapi_python_generated/models/list_banner_media.py +93 -0
  164. twitter_openapi_python_generated/models/list_banner_media_info.py +99 -0
  165. twitter_openapi_python_generated/models/list_banner_media_salient_rect.py +95 -0
  166. twitter_openapi_python_generated/models/list_latest_tweets_timeline_response.py +5 -5
  167. twitter_openapi_python_generated/models/list_members_list.py +93 -0
  168. twitter_openapi_python_generated/models/list_members_response.py +102 -0
  169. twitter_openapi_python_generated/models/list_members_response_data.py +93 -0
  170. twitter_openapi_python_generated/models/list_recommended_users_list.py +93 -0
  171. twitter_openapi_python_generated/models/list_recommended_users_response.py +102 -0
  172. twitter_openapi_python_generated/models/list_recommended_users_response_data.py +93 -0
  173. twitter_openapi_python_generated/models/list_response.py +102 -0
  174. twitter_openapi_python_generated/models/list_response_data.py +93 -0
  175. twitter_openapi_python_generated/models/list_subscribers_list.py +93 -0
  176. twitter_openapi_python_generated/models/list_subscribers_response.py +102 -0
  177. twitter_openapi_python_generated/models/list_subscribers_response_data.py +93 -0
  178. twitter_openapi_python_generated/models/list_tweets_timeline_data.py +4 -3
  179. twitter_openapi_python_generated/models/list_tweets_timeline_list.py +4 -3
  180. twitter_openapi_python_generated/models/location.py +4 -3
  181. twitter_openapi_python_generated/models/media.py +23 -11
  182. twitter_openapi_python_generated/models/media_community_result.py +4 -3
  183. twitter_openapi_python_generated/models/media_community_results.py +4 -3
  184. twitter_openapi_python_generated/models/media_community_tweet_data.py +4 -3
  185. twitter_openapi_python_generated/models/media_extended.py +20 -10
  186. twitter_openapi_python_generated/models/media_original_info.py +5 -5
  187. twitter_openapi_python_generated/models/media_original_info_focus_rect.py +4 -3
  188. twitter_openapi_python_generated/models/media_result.py +4 -3
  189. twitter_openapi_python_generated/models/media_results.py +4 -3
  190. twitter_openapi_python_generated/models/media_size.py +4 -3
  191. twitter_openapi_python_generated/models/media_sizes.py +4 -3
  192. twitter_openapi_python_generated/models/media_stats.py +4 -3
  193. twitter_openapi_python_generated/models/media_video_info.py +5 -5
  194. twitter_openapi_python_generated/models/media_video_info_variant.py +4 -3
  195. twitter_openapi_python_generated/models/media_visibility_results.py +4 -3
  196. twitter_openapi_python_generated/models/media_visibility_results_blurred_image_interstitial.py +4 -3
  197. twitter_openapi_python_generated/models/module_entry.py +4 -3
  198. twitter_openapi_python_generated/models/module_item.py +6 -5
  199. twitter_openapi_python_generated/models/note_tweet.py +6 -5
  200. twitter_openapi_python_generated/models/note_tweet_result.py +4 -3
  201. twitter_openapi_python_generated/models/note_tweet_result_data.py +6 -5
  202. twitter_openapi_python_generated/models/note_tweet_result_media.py +5 -5
  203. twitter_openapi_python_generated/models/note_tweet_result_media_inline_media.py +6 -5
  204. twitter_openapi_python_generated/models/note_tweet_result_rich_text.py +5 -5
  205. twitter_openapi_python_generated/models/note_tweet_result_rich_text_tag.py +4 -3
  206. twitter_openapi_python_generated/models/notification_template.py +4 -3
  207. twitter_openapi_python_generated/models/notifications_result.py +6 -5
  208. twitter_openapi_python_generated/models/notifications_timeline_data.py +4 -3
  209. twitter_openapi_python_generated/models/notifications_timeline_response.py +5 -5
  210. twitter_openapi_python_generated/models/notifications_user_results.py +4 -3
  211. twitter_openapi_python_generated/models/notifications_viewer_v2.py +4 -3
  212. twitter_openapi_python_generated/models/one_factor_login_eligibility.py +4 -3
  213. twitter_openapi_python_generated/models/other_object_all.py +4 -3
  214. twitter_openapi_python_generated/models/post_create_bookmark_request.py +5 -4
  215. twitter_openapi_python_generated/models/post_create_bookmark_request_variables.py +6 -5
  216. twitter_openapi_python_generated/models/post_create_draft_tweet_request.py +95 -0
  217. twitter_openapi_python_generated/models/post_create_draft_tweet_request_variables.py +93 -0
  218. twitter_openapi_python_generated/models/post_create_draft_tweet_request_variables_post_tweet_request.py +97 -0
  219. twitter_openapi_python_generated/models/post_create_list_request.py +101 -0
  220. twitter_openapi_python_generated/models/post_create_list_request_features.py +97 -0
  221. twitter_openapi_python_generated/models/post_create_list_request_variables.py +93 -0
  222. twitter_openapi_python_generated/models/post_create_retweet_request.py +6 -5
  223. twitter_openapi_python_generated/models/post_create_retweet_request_variables.py +7 -6
  224. twitter_openapi_python_generated/models/post_create_tweet_request.py +6 -5
  225. twitter_openapi_python_generated/models/post_create_tweet_request_features.py +60 -43
  226. twitter_openapi_python_generated/models/post_create_tweet_request_variables.py +8 -7
  227. twitter_openapi_python_generated/models/post_create_tweet_request_variables_conversation_control.py +6 -5
  228. twitter_openapi_python_generated/models/post_create_tweet_request_variables_media.py +7 -7
  229. twitter_openapi_python_generated/models/post_create_tweet_request_variables_media_media_entities_inner.py +6 -5
  230. twitter_openapi_python_generated/models/post_create_tweet_request_variables_reply.py +6 -5
  231. twitter_openapi_python_generated/models/post_cta.py +101 -0
  232. twitter_openapi_python_generated/models/post_cta_title_text.py +98 -0
  233. twitter_openapi_python_generated/models/post_cta_title_text_entity.py +97 -0
  234. twitter_openapi_python_generated/models/post_cta_title_text_entity_ref.py +96 -0
  235. twitter_openapi_python_generated/models/post_cta_user_results.py +93 -0
  236. twitter_openapi_python_generated/models/post_cta_user_results_avatar.py +89 -0
  237. twitter_openapi_python_generated/models/post_cta_user_results_result.py +96 -0
  238. twitter_openapi_python_generated/models/post_delete_bookmark_request.py +5 -4
  239. twitter_openapi_python_generated/models/post_delete_draft_tweets_request.py +95 -0
  240. twitter_openapi_python_generated/models/post_delete_draft_tweets_request_variables.py +89 -0
  241. twitter_openapi_python_generated/models/post_delete_list_request.py +95 -0
  242. twitter_openapi_python_generated/models/post_delete_list_request_variables.py +89 -0
  243. twitter_openapi_python_generated/models/post_delete_retweet_request.py +6 -5
  244. twitter_openapi_python_generated/models/post_delete_retweet_request_variables.py +7 -6
  245. twitter_openapi_python_generated/models/post_delete_tweet_request.py +6 -5
  246. twitter_openapi_python_generated/models/post_favorite_tweet_request.py +5 -4
  247. twitter_openapi_python_generated/models/post_list_add_member_request.py +101 -0
  248. twitter_openapi_python_generated/models/post_list_add_member_request_variables.py +91 -0
  249. twitter_openapi_python_generated/models/post_list_remove_member_request.py +101 -0
  250. twitter_openapi_python_generated/models/post_unfavorite_tweet_request.py +5 -4
  251. twitter_openapi_python_generated/models/primary_community_topic.py +6 -5
  252. twitter_openapi_python_generated/models/profile_bio.py +97 -0
  253. twitter_openapi_python_generated/models/profile_bio_entities.py +98 -0
  254. twitter_openapi_python_generated/models/profile_bio_entities_urls.py +96 -0
  255. twitter_openapi_python_generated/models/profile_response.py +5 -5
  256. twitter_openapi_python_generated/models/profile_response_data.py +4 -3
  257. twitter_openapi_python_generated/models/quoted_ref_result.py +4 -3
  258. twitter_openapi_python_generated/models/quoted_status_permalink.py +4 -3
  259. twitter_openapi_python_generated/models/ranked_community_result.py +4 -3
  260. twitter_openapi_python_generated/models/ranked_community_results.py +4 -3
  261. twitter_openapi_python_generated/models/ranked_community_tweet_data.py +4 -3
  262. twitter_openapi_python_generated/models/retweet.py +8 -7
  263. twitter_openapi_python_generated/models/retweet_legacy.py +4 -3
  264. twitter_openapi_python_generated/models/rich_message.py +4 -3
  265. twitter_openapi_python_generated/models/scheduled_tweets_viewer.py +89 -0
  266. twitter_openapi_python_generated/models/search_by_raw_query.py +4 -3
  267. twitter_openapi_python_generated/models/search_timeline.py +4 -3
  268. twitter_openapi_python_generated/models/search_timeline_data.py +4 -3
  269. twitter_openapi_python_generated/models/search_timeline_response.py +5 -5
  270. twitter_openapi_python_generated/models/self_thread.py +6 -5
  271. twitter_openapi_python_generated/models/sensitive_media_warning.py +4 -3
  272. twitter_openapi_python_generated/models/session.py +12 -11
  273. twitter_openapi_python_generated/models/smarttag.py +97 -0
  274. twitter_openapi_python_generated/models/smarttag_tag.py +89 -0
  275. twitter_openapi_python_generated/models/social_context_landing_url.py +4 -3
  276. twitter_openapi_python_generated/models/social_context_union.py +3 -2
  277. twitter_openapi_python_generated/models/super_follow_user_profile.py +89 -0
  278. twitter_openapi_python_generated/models/super_follows_reply_user_result.py +4 -3
  279. twitter_openapi_python_generated/models/super_follows_reply_user_result_core.py +89 -0
  280. twitter_openapi_python_generated/models/super_follows_reply_user_result_data.py +12 -11
  281. twitter_openapi_python_generated/models/super_follows_reply_user_result_legacy.py +4 -3
  282. twitter_openapi_python_generated/models/text.py +5 -5
  283. twitter_openapi_python_generated/models/text_entity.py +4 -3
  284. twitter_openapi_python_generated/models/text_entity_ref.py +4 -3
  285. twitter_openapi_python_generated/models/text_highlight.py +4 -3
  286. twitter_openapi_python_generated/models/thumbnail_image.py +4 -3
  287. twitter_openapi_python_generated/models/timeline.py +5 -5
  288. twitter_openapi_python_generated/models/timeline_add_entries.py +5 -5
  289. twitter_openapi_python_generated/models/timeline_add_entry.py +8 -7
  290. twitter_openapi_python_generated/models/timeline_add_to_module.py +5 -5
  291. twitter_openapi_python_generated/models/timeline_clear_cache.py +4 -3
  292. twitter_openapi_python_generated/models/timeline_clear_entries_unread_state.py +4 -3
  293. twitter_openapi_python_generated/models/timeline_community.py +4 -3
  294. twitter_openapi_python_generated/models/timeline_cover_behavior.py +4 -3
  295. twitter_openapi_python_generated/models/timeline_cover_behavior_url.py +4 -3
  296. twitter_openapi_python_generated/models/timeline_frame.py +97 -0
  297. twitter_openapi_python_generated/models/timeline_general_context.py +4 -3
  298. twitter_openapi_python_generated/models/timeline_half_cover.py +5 -5
  299. twitter_openapi_python_generated/models/timeline_label.py +101 -0
  300. twitter_openapi_python_generated/models/timeline_mark_entries_unread_greater_than_sort_index.py +6 -5
  301. twitter_openapi_python_generated/models/timeline_message_prompt.py +4 -3
  302. twitter_openapi_python_generated/models/timeline_notification.py +4 -3
  303. twitter_openapi_python_generated/models/timeline_pin_entry.py +4 -3
  304. twitter_openapi_python_generated/models/timeline_prompt.py +4 -3
  305. twitter_openapi_python_generated/models/timeline_replace_entry.py +4 -3
  306. twitter_openapi_python_generated/models/timeline_response.py +5 -5
  307. twitter_openapi_python_generated/models/timeline_result.py +4 -3
  308. twitter_openapi_python_generated/models/timeline_show_alert.py +18 -7
  309. twitter_openapi_python_generated/models/timeline_show_alert_rich_text.py +4 -3
  310. twitter_openapi_python_generated/models/timeline_show_cover.py +4 -3
  311. twitter_openapi_python_generated/models/timeline_terminate_timeline.py +4 -3
  312. twitter_openapi_python_generated/models/timeline_timeline_cursor.py +4 -3
  313. twitter_openapi_python_generated/models/timeline_timeline_item.py +4 -3
  314. twitter_openapi_python_generated/models/timeline_timeline_module.py +5 -5
  315. twitter_openapi_python_generated/models/timeline_tombstone.py +4 -3
  316. twitter_openapi_python_generated/models/timeline_topic_context.py +4 -3
  317. twitter_openapi_python_generated/models/timeline_trend.py +20 -7
  318. twitter_openapi_python_generated/models/timeline_tweet.py +4 -3
  319. twitter_openapi_python_generated/models/timeline_twitter_list.py +101 -0
  320. twitter_openapi_python_generated/models/timeline_user.py +4 -3
  321. twitter_openapi_python_generated/models/timestamp.py +4 -3
  322. twitter_openapi_python_generated/models/tombstone_entity.py +4 -3
  323. twitter_openapi_python_generated/models/tombstone_info.py +4 -3
  324. twitter_openapi_python_generated/models/tombstone_ref.py +4 -3
  325. twitter_openapi_python_generated/models/tombstone_rich_text.py +5 -5
  326. twitter_openapi_python_generated/models/topic_context.py +4 -3
  327. twitter_openapi_python_generated/models/tracing.py +6 -5
  328. twitter_openapi_python_generated/models/trend_image.py +4 -3
  329. twitter_openapi_python_generated/models/trend_metadata.py +8 -5
  330. twitter_openapi_python_generated/models/trend_results.py +6 -5
  331. twitter_openapi_python_generated/models/tweet.py +52 -9
  332. twitter_openapi_python_generated/models/tweet_card.py +4 -3
  333. twitter_openapi_python_generated/models/tweet_card_legacy.py +6 -7
  334. twitter_openapi_python_generated/models/tweet_card_legacy_binding_value.py +4 -3
  335. twitter_openapi_python_generated/models/tweet_card_legacy_binding_value_data.py +4 -3
  336. twitter_openapi_python_generated/models/tweet_card_legacy_binding_value_data_image.py +4 -3
  337. twitter_openapi_python_generated/models/tweet_card_platform.py +4 -3
  338. twitter_openapi_python_generated/models/tweet_card_platform_audience.py +4 -3
  339. twitter_openapi_python_generated/models/tweet_card_platform_data.py +4 -3
  340. twitter_openapi_python_generated/models/tweet_card_platform_device.py +6 -5
  341. twitter_openapi_python_generated/models/tweet_detail_response.py +5 -5
  342. twitter_openapi_python_generated/models/tweet_detail_response_data.py +4 -3
  343. twitter_openapi_python_generated/models/tweet_edit_control.py +10 -9
  344. twitter_openapi_python_generated/models/tweet_edit_control_initial.py +8 -7
  345. twitter_openapi_python_generated/models/tweet_edit_prespective.py +4 -3
  346. twitter_openapi_python_generated/models/tweet_favoriters_response.py +5 -5
  347. twitter_openapi_python_generated/models/tweet_favoriters_response_data.py +4 -3
  348. twitter_openapi_python_generated/models/tweet_interstitial.py +6 -5
  349. twitter_openapi_python_generated/models/tweet_interstitial_reveal_text.py +5 -5
  350. twitter_openapi_python_generated/models/tweet_interstitial_text.py +5 -5
  351. twitter_openapi_python_generated/models/tweet_interstitial_text_entity.py +4 -3
  352. twitter_openapi_python_generated/models/tweet_interstitial_text_entity_ref.py +4 -3
  353. twitter_openapi_python_generated/models/tweet_legacy.py +20 -19
  354. twitter_openapi_python_generated/models/tweet_legacy_scopes.py +4 -3
  355. twitter_openapi_python_generated/models/tweet_limited_action_results.py +5 -5
  356. twitter_openapi_python_generated/models/tweet_post_cta.py +105 -0
  357. twitter_openapi_python_generated/models/tweet_preview_display.py +4 -3
  358. twitter_openapi_python_generated/models/tweet_preview_display_cta.py +4 -3
  359. twitter_openapi_python_generated/models/tweet_preview_display_cta_url.py +4 -3
  360. twitter_openapi_python_generated/models/tweet_preview_display_tweet.py +17 -10
  361. twitter_openapi_python_generated/models/tweet_preview_display_tweet_view_count.py +6 -5
  362. twitter_openapi_python_generated/models/tweet_previous_counts.py +4 -3
  363. twitter_openapi_python_generated/models/tweet_result_by_rest_id_data.py +4 -3
  364. twitter_openapi_python_generated/models/tweet_result_by_rest_id_response.py +5 -5
  365. twitter_openapi_python_generated/models/tweet_retweeters_response.py +5 -5
  366. twitter_openapi_python_generated/models/tweet_retweeters_response_data.py +4 -3
  367. twitter_openapi_python_generated/models/tweet_tombstone.py +4 -3
  368. twitter_openapi_python_generated/models/tweet_unavailable.py +4 -3
  369. twitter_openapi_python_generated/models/tweet_union.py +3 -2
  370. twitter_openapi_python_generated/models/tweet_view.py +6 -5
  371. twitter_openapi_python_generated/models/tweet_with_visibility_results.py +4 -3
  372. twitter_openapi_python_generated/models/twitter_list.py +146 -0
  373. twitter_openapi_python_generated/models/type_name.py +6 -0
  374. twitter_openapi_python_generated/models/unfavorite_tweet.py +4 -3
  375. twitter_openapi_python_generated/models/unfavorite_tweet_response.py +5 -5
  376. twitter_openapi_python_generated/models/unified_card.py +4 -3
  377. twitter_openapi_python_generated/models/url.py +4 -3
  378. twitter_openapi_python_generated/models/urt_endpoint_options.py +7 -7
  379. twitter_openapi_python_generated/models/urt_endpoint_request_params.py +4 -3
  380. twitter_openapi_python_generated/models/user.py +150 -12
  381. twitter_openapi_python_generated/models/user_action_counts.py +89 -0
  382. twitter_openapi_python_generated/models/user_avatar.py +89 -0
  383. twitter_openapi_python_generated/models/user_banner.py +89 -0
  384. twitter_openapi_python_generated/models/user_core.py +101 -0
  385. twitter_openapi_python_generated/models/user_dm_permissions.py +89 -0
  386. twitter_openapi_python_generated/models/user_features.py +4 -3
  387. twitter_openapi_python_generated/models/user_highlights_info.py +4 -3
  388. twitter_openapi_python_generated/models/user_highlights_tweets_data.py +4 -3
  389. twitter_openapi_python_generated/models/user_highlights_tweets_response.py +5 -5
  390. twitter_openapi_python_generated/models/user_highlights_tweets_result.py +4 -3
  391. twitter_openapi_python_generated/models/user_highlights_tweets_timeline.py +4 -3
  392. twitter_openapi_python_generated/models/user_highlights_tweets_user.py +4 -3
  393. twitter_openapi_python_generated/models/user_legacy.py +26 -14
  394. twitter_openapi_python_generated/models/user_legacy_extended_profile.py +4 -3
  395. twitter_openapi_python_generated/models/user_legacy_extended_profile_birthdate.py +4 -3
  396. twitter_openapi_python_generated/models/user_location.py +89 -0
  397. twitter_openapi_python_generated/models/user_media_permissions.py +89 -0
  398. twitter_openapi_python_generated/models/user_notifications_settings.py +89 -0
  399. twitter_openapi_python_generated/models/user_pinned_items.py +90 -0
  400. twitter_openapi_python_generated/models/user_privacy.py +89 -0
  401. twitter_openapi_python_generated/models/user_professional.py +9 -9
  402. twitter_openapi_python_generated/models/user_professional_category.py +4 -3
  403. twitter_openapi_python_generated/models/user_profile.py +93 -0
  404. twitter_openapi_python_generated/models/user_profile_metadata.py +89 -0
  405. twitter_openapi_python_generated/models/user_profile_translation.py +89 -0
  406. twitter_openapi_python_generated/models/user_relationship_counts.py +91 -0
  407. twitter_openapi_python_generated/models/user_relationship_perspectives.py +99 -0
  408. twitter_openapi_python_generated/models/user_response.py +5 -5
  409. twitter_openapi_python_generated/models/user_response_data.py +4 -3
  410. twitter_openapi_python_generated/models/user_result_by_screen_name.py +6 -5
  411. twitter_openapi_python_generated/models/user_result_by_screen_name_core.py +91 -0
  412. twitter_openapi_python_generated/models/user_result_by_screen_name_legacy.py +4 -3
  413. twitter_openapi_python_generated/models/user_result_by_screen_name_result.py +32 -11
  414. twitter_openapi_python_generated/models/user_result_core.py +7 -4
  415. twitter_openapi_python_generated/models/user_result_privacy.py +89 -0
  416. twitter_openapi_python_generated/models/user_result_relationship_perspectives.py +95 -0
  417. twitter_openapi_python_generated/models/user_results.py +7 -4
  418. twitter_openapi_python_generated/models/user_tip_jar_settings.py +4 -3
  419. twitter_openapi_python_generated/models/user_tweet_counts.py +91 -0
  420. twitter_openapi_python_generated/models/user_tweets_data.py +4 -3
  421. twitter_openapi_python_generated/models/user_tweets_response.py +5 -5
  422. twitter_openapi_python_generated/models/user_tweets_result_v1.py +4 -3
  423. twitter_openapi_python_generated/models/user_tweets_result_v2.py +4 -3
  424. twitter_openapi_python_generated/models/user_tweets_user.py +4 -3
  425. twitter_openapi_python_generated/models/user_unavailable.py +4 -3
  426. twitter_openapi_python_generated/models/user_union.py +6 -3
  427. twitter_openapi_python_generated/models/user_value.py +12 -9
  428. twitter_openapi_python_generated/models/user_verification.py +101 -0
  429. twitter_openapi_python_generated/models/user_verification_info.py +4 -3
  430. twitter_openapi_python_generated/models/user_verification_info_reason.py +6 -5
  431. twitter_openapi_python_generated/models/user_verification_info_reason_description.py +5 -5
  432. twitter_openapi_python_generated/models/user_verification_info_reason_description_entities.py +4 -3
  433. twitter_openapi_python_generated/models/user_verification_info_reason_description_entities_ref.py +4 -3
  434. twitter_openapi_python_generated/models/user_website.py +89 -0
  435. twitter_openapi_python_generated/models/users_response.py +5 -5
  436. twitter_openapi_python_generated/models/users_response_data.py +5 -5
  437. twitter_openapi_python_generated/models/viewer_badge_counts_response.py +102 -0
  438. twitter_openapi_python_generated/models/viewer_badge_counts_response_data.py +93 -0
  439. twitter_openapi_python_generated/models/viewer_badge_counts_result.py +96 -0
  440. twitter_openapi_python_generated/models/viewer_badge_counts_user_results.py +93 -0
  441. twitter_openapi_python_generated/models/viewer_badge_counts_viewer.py +93 -0
  442. twitter_openapi_python_generated/rest.py +86 -10
  443. twitter_openapi_python_generated-0.0.35.dist-info/METADATA +926 -0
  444. twitter_openapi_python_generated-0.0.35.dist-info/RECORD +456 -0
  445. {twitter_openapi_python_generated-0.0.33.dist-info → twitter_openapi_python_generated-0.0.35.dist-info}/WHEEL +1 -1
  446. {twitter_openapi_python_generated-0.0.33.dist-info → twitter_openapi_python_generated-0.0.35.dist-info}/licenses/LICENSE +31 -31
  447. {twitter_openapi_python_generated-0.0.33.dist-info → twitter_openapi_python_generated-0.0.35.dist-info}/licenses/LICENSE.AGPL +660 -660
  448. twitter_openapi_python_generated/models/community_data.py +0 -219
  449. twitter_openapi_python_generated-0.0.33.dist-info/METADATA +0 -29
  450. twitter_openapi_python_generated-0.0.33.dist-info/RECORD +0 -335
  451. {twitter_openapi_python_generated-0.0.33.dist-info → twitter_openapi_python_generated-0.0.35.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  """
4
2
  Twitter OpenAPI
5
3
 
@@ -12,6 +10,7 @@
12
10
  Do not edit the class manually.
13
11
  """ # noqa: E501
14
12
 
13
+
15
14
  import warnings
16
15
  from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
17
16
  from typing import Any, Dict, List, Optional, Tuple, Union
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  """
4
2
  Twitter OpenAPI
5
3
 
@@ -12,6 +10,7 @@
12
10
  Do not edit the class manually.
13
11
  """ # noqa: E501
14
12
 
13
+
15
14
  import warnings
16
15
  from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
17
16
  from typing import Any, Dict, List, Optional, Tuple, Union
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  """
4
2
  Twitter OpenAPI
5
3
 
@@ -12,6 +10,7 @@
12
10
  Do not edit the class manually.
13
11
  """ # noqa: E501
14
12
 
13
+
15
14
  import warnings
16
15
  from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
17
16
  from typing import Any, Dict, List, Optional, Tuple, Union
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  """
4
2
  Twitter OpenAPI
5
3
 
@@ -12,6 +10,7 @@
12
10
  Do not edit the class manually.
13
11
  """ # noqa: E501
14
12
 
13
+
15
14
  import warnings
16
15
  from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
17
16
  from typing import Any, Dict, List, Optional, Tuple, Union
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  """
4
2
  Twitter OpenAPI
5
3
 
@@ -13,6 +11,7 @@
13
11
  """ # noqa: E501
14
12
 
15
13
 
14
+
16
15
  import datetime
17
16
  from dateutil.parser import parse
18
17
  from enum import Enum
@@ -22,6 +21,7 @@ import mimetypes
22
21
  import os
23
22
  import re
24
23
  import tempfile
24
+ import uuid
25
25
 
26
26
  from urllib.parse import quote
27
27
  from typing import Tuple, Optional, List, Dict, Union
@@ -69,6 +69,7 @@ class ApiClient:
69
69
  'date': datetime.date,
70
70
  'datetime': datetime.datetime,
71
71
  'decimal': decimal.Decimal,
72
+ 'UUID': uuid.UUID,
72
73
  'object': object,
73
74
  }
74
75
  _pool = None
@@ -91,7 +92,7 @@ class ApiClient:
91
92
  self.default_headers[header_name] = header_value
92
93
  self.cookie = cookie
93
94
  # Set default User-Agent.
94
- self.user_agent = 'OpenAPI-Generator/0.0.33/python'
95
+ self.user_agent = 'OpenAPI-Generator/0.0.35/python'
95
96
  self.client_side_validation = configuration.client_side_validation
96
97
 
97
98
  def __enter__(self):
@@ -247,7 +248,6 @@ class ApiClient:
247
248
 
248
249
  return method, url, header_params, body, post_params
249
250
 
250
-
251
251
  def call_api(
252
252
  self,
253
253
  method,
@@ -302,17 +302,23 @@ class ApiClient:
302
302
  # if not found, look for '1XX', '2XX', etc.
303
303
  response_type = response_types_map.get(str(response_data.status)[0] + "XX", None)
304
304
 
305
+ # If the response_type has not matched (eg. did not match the previous if statements) and the default response is available, use it.
306
+ if response_type is None and str(response_data.status) not in response_types_map \
307
+ and (not isinstance(response_data.status, int) or not 100 <= response_data.status <= 599 or str(response_data.status)[0] + "XX" not in response_types_map) \
308
+ and 'default' in response_types_map:
309
+ response_type = response_types_map['default']
310
+
305
311
  # deserialize response data
306
312
  response_text = None
307
313
  return_data = None
308
314
  try:
309
- if response_type == "bytearray":
315
+ if response_type in ("bytearray", "bytes"):
310
316
  return_data = response_data.data
311
317
  elif response_type == "file":
312
318
  return_data = self.__deserialize_file(response_data)
313
319
  elif response_type is not None:
314
320
  match = None
315
- content_type = response_data.getheader('content-type')
321
+ content_type = response_data.headers.get('content-type')
316
322
  if content_type is not None:
317
323
  match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", content_type)
318
324
  encoding = match.group(1) if match else "utf-8"
@@ -329,7 +335,7 @@ class ApiClient:
329
335
  return ApiResponse(
330
336
  status_code = response_data.status,
331
337
  data = return_data,
332
- headers = response_data.getheaders(),
338
+ headers = response_data.headers,
333
339
  raw_data = response_data.data
334
340
  )
335
341
 
@@ -357,6 +363,8 @@ class ApiClient:
357
363
  return obj.get_secret_value()
358
364
  elif isinstance(obj, self.PRIMITIVE_TYPES):
359
365
  return obj
366
+ elif isinstance(obj, uuid.UUID):
367
+ return str(obj)
360
368
  elif isinstance(obj, list):
361
369
  return [
362
370
  self.sanitize_for_serialization(sub_obj) for sub_obj in obj
@@ -369,24 +377,24 @@ class ApiClient:
369
377
  return obj.isoformat()
370
378
  elif isinstance(obj, decimal.Decimal):
371
379
  return str(obj)
372
-
373
380
  elif isinstance(obj, dict):
374
- obj_dict = obj
381
+ return {
382
+ key: self.sanitize_for_serialization(val)
383
+ for key, val in obj.items()
384
+ }
385
+
386
+ # Convert model obj to dict except
387
+ # attributes `openapi_types`, `attribute_map`
388
+ # and attributes which value is not None.
389
+ # Convert attribute name to json key in
390
+ # model definition for request.
391
+ if hasattr(obj, 'to_dict') and callable(getattr(obj, 'to_dict')):
392
+ obj_dict = obj.to_dict()
375
393
  else:
376
- # Convert model obj to dict except
377
- # attributes `openapi_types`, `attribute_map`
378
- # and attributes which value is not None.
379
- # Convert attribute name to json key in
380
- # model definition for request.
381
- if hasattr(obj, 'to_dict') and callable(getattr(obj, 'to_dict')):
382
- obj_dict = obj.to_dict()
383
- else:
384
- obj_dict = obj.__dict__
394
+ obj_dict = obj.__dict__
395
+
396
+ return self.sanitize_for_serialization(obj_dict)
385
397
 
386
- return {
387
- key: self.sanitize_for_serialization(val)
388
- for key, val in obj_dict.items()
389
- }
390
398
 
391
399
  def deserialize(self, response_text: str, response_type: str, content_type: Optional[str]):
392
400
  """Deserializes response into an object.
@@ -405,7 +413,7 @@ class ApiClient:
405
413
  data = json.loads(response_text)
406
414
  except ValueError:
407
415
  data = response_text
408
- elif re.match(r'^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE):
416
+ elif re.match(r'^application/(json|[\w!#$&.+\-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE):
409
417
  if response_text == "":
410
418
  data = ""
411
419
  else:
@@ -432,6 +440,12 @@ class ApiClient:
432
440
  return None
433
441
 
434
442
  if isinstance(klass, str):
443
+ if klass.startswith('Optional['):
444
+ m = re.match(r'Optional\[(.*)]', klass)
445
+ assert m is not None, "Malformed Optional type definition"
446
+ # data is not None here, so the optionality is already resolved
447
+ return self.__deserialize(data, m.group(1))
448
+
435
449
  if klass.startswith('List['):
436
450
  m = re.match(r'List\[(.*)]', klass)
437
451
  assert m is not None, "Malformed List type definition"
@@ -454,14 +468,16 @@ class ApiClient:
454
468
 
455
469
  if klass in self.PRIMITIVE_TYPES:
456
470
  return self.__deserialize_primitive(data, klass)
457
- elif klass == object:
471
+ elif klass is object:
458
472
  return self.__deserialize_object(data)
459
- elif klass == datetime.date:
473
+ elif klass is datetime.date:
460
474
  return self.__deserialize_date(data)
461
- elif klass == datetime.datetime:
475
+ elif klass is datetime.datetime:
462
476
  return self.__deserialize_datetime(data)
463
- elif klass == decimal.Decimal:
477
+ elif klass is decimal.Decimal:
464
478
  return decimal.Decimal(data)
479
+ elif klass is uuid.UUID:
480
+ return uuid.UUID(data)
465
481
  elif issubclass(klass, Enum):
466
482
  return self.__deserialize_enum(data, klass)
467
483
  else:
@@ -478,10 +494,15 @@ class ApiClient:
478
494
  if collection_formats is None:
479
495
  collection_formats = {}
480
496
  for k, v in params.items() if isinstance(params, dict) else params:
497
+ if isinstance(v, bool):
498
+ v = str(v).lower()
481
499
  if k in collection_formats:
482
500
  collection_format = collection_formats[k]
483
501
  if collection_format == 'multi':
484
- new_params.extend((k, value) for value in v)
502
+ new_params.extend(
503
+ (k, str(value).lower() if isinstance(value, bool) else value)
504
+ for value in v
505
+ )
485
506
  else:
486
507
  if collection_format == 'ssv':
487
508
  delimiter = ' '
@@ -492,11 +513,20 @@ class ApiClient:
492
513
  else: # csv is the default
493
514
  delimiter = ','
494
515
  new_params.append(
495
- (k, delimiter.join(str(value) for value in v)))
516
+ (k, delimiter.join(
517
+ str(value).lower() if isinstance(value, bool) else str(value)
518
+ for value in v)))
496
519
  else:
497
520
  new_params.append((k, v))
498
521
  return new_params
499
522
 
523
+ def explode_query_object(self, name, obj):
524
+ """form style, explode: one query parameter per entry, keyed by the property name; a list repeats the name, None is left out"""
525
+ obj = self.sanitize_for_serialization(obj)
526
+ if not isinstance(obj, dict):
527
+ obj = {name: obj}
528
+ return [(k, item) for k, v in obj.items() for item in (v if isinstance(v, (list, tuple)) else [v]) if item is not None]
529
+
500
530
  def parameters_to_url_query(self, params, collection_formats):
501
531
  """Get parameters as list of tuples, formatting collections.
502
532
 
@@ -515,10 +545,14 @@ class ApiClient:
515
545
  if isinstance(v, dict):
516
546
  v = json.dumps(v)
517
547
 
518
- if k in collection_formats:
548
+ # a collection format applies only to a list; an exploded entry may share a declared array parameter's name
549
+ if k in collection_formats and isinstance(v, (list, tuple)):
519
550
  collection_format = collection_formats[k]
520
551
  if collection_format == 'multi':
521
- new_params.extend((k, quote(str(value))) for value in v)
552
+ new_params.extend(
553
+ (quote(str(k)), quote(str(value).lower() if isinstance(value, bool) else str(value)))
554
+ for value in v
555
+ )
522
556
  else:
523
557
  if collection_format == 'ssv':
524
558
  delimiter = ' '
@@ -529,10 +563,13 @@ class ApiClient:
529
563
  else: # csv is the default
530
564
  delimiter = ','
531
565
  new_params.append(
532
- (k, delimiter.join(quote(str(value)) for value in v))
566
+ (quote(str(k)), delimiter.join(
567
+ quote(str(value).lower() if isinstance(value, bool) else str(value))
568
+ for value in v))
533
569
  )
534
570
  else:
535
- new_params.append((k, quote(str(v))))
571
+ # names are quoted too: an exploded object's names are runtime data
572
+ new_params.append((quote(str(k)), quote(str(v))))
536
573
 
537
574
  return "&".join(["=".join(map(str, item)) for item in new_params])
538
575
 
@@ -668,7 +705,13 @@ class ApiClient:
668
705
  :param auth_setting: auth settings for the endpoint
669
706
  """
670
707
  if auth_setting['in'] == 'cookie':
671
- headers['Cookie'] = auth_setting['value']
708
+ if not 'Cookie' in headers:
709
+ headers['Cookie'] = ""
710
+ else:
711
+ headers['Cookie'] += "; "
712
+ # Account for cookie value containing spaces and special characters, excluding base64 delimiters
713
+ cookie_value = quote(str(auth_setting['value']), safe="!#$%&'()*+-./:<=>?@[]^_`{|}~%+/=")
714
+ headers['Cookie'] += f"{auth_setting['key']}={cookie_value}"
672
715
  elif auth_setting['in'] == 'header':
673
716
  if auth_setting['type'] != 'http-signature':
674
717
  headers[auth_setting['key']] = auth_setting['value']
@@ -695,14 +738,16 @@ class ApiClient:
695
738
  os.close(fd)
696
739
  os.remove(path)
697
740
 
698
- content_disposition = response.getheader("Content-Disposition")
741
+ content_disposition = response.headers.get("Content-Disposition")
699
742
  if content_disposition:
700
743
  m = re.search(
701
744
  r'filename=[\'"]?([^\'"\s]+)[\'"]?',
702
745
  content_disposition
703
746
  )
704
747
  assert m is not None, "Unexpected 'content-disposition' header value"
705
- filename = m.group(1)
748
+ filename = os.path.basename(m.group(1)) # Strip any directory traversal
749
+ if filename in ("", ".", ".."): # fall back to tmp filename
750
+ filename = os.path.basename(path)
706
751
  path = os.path.join(os.path.dirname(path), filename)
707
752
 
708
753
  with open(path, "wb") as f:
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  """
4
2
  Twitter OpenAPI
5
3
 
@@ -18,8 +16,11 @@ import http.client as httplib
18
16
  import logging
19
17
  from logging import FileHandler
20
18
  import multiprocessing
19
+ import ssl
21
20
  import sys
22
21
  from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict, Union
22
+ from urllib.parse import urlparse
23
+ from urllib.request import getproxies
23
24
  from typing_extensions import NotRequired, Self
24
25
 
25
26
  import urllib3
@@ -181,11 +182,27 @@ class Configuration:
181
182
  string values to replace variables in templated server configuration.
182
183
  The validation of enums is performed for variables with defined enum
183
184
  values before.
185
+ :param verify_ssl: bool - Set this to false to skip verifying SSL certificate
186
+ when calling API from https server.
184
187
  :param ssl_ca_cert: str - the path to a file of concatenated CA certificates
185
188
  in PEM format.
186
- :param retries: Number of retries for API requests.
189
+ :param retries: int | urllib3.util.retry.Retry - Retry configuration.
187
190
  :param ca_cert_data: verify the peer using concatenated CA certificate data
188
191
  in PEM (str) or DER (bytes) format.
192
+ :param cert_file: the path to a client certificate file, for mTLS.
193
+ :param key_file: the path to a client key file, for mTLS.
194
+ :param assert_hostname: Set this to True/False to enable/disable SSL hostname verification.
195
+ :param tls_server_name: SSL/TLS Server Name Indication (SNI). Set this to the SNI value expected by the server.
196
+ :param connection_pool_maxsize: Connection pool max size. None in the constructor is coerced to 100 for async and cpu_count * 5 for sync.
197
+ :param proxy: Proxy URL.
198
+ :param no_proxy: Comma-separated hosts that bypass the proxy.
199
+ :param proxy_headers: Proxy headers.
200
+ :param proxy_ssl_context: SSL context used only for the TLS handshake with the proxy itself, independent of the destination TLS settings.
201
+ :param safe_chars_for_path_param: Safe characters for path parameter encoding.
202
+ :param client_side_validation: Enable client-side validation. Default True.
203
+ :param socket_options: Options to pass down to the underlying urllib3 socket.
204
+ :param datetime_format: Datetime format string for serialization.
205
+ :param date_format: Date format string for serialization.
189
206
 
190
207
  :Example:
191
208
 
@@ -225,8 +242,23 @@ conf = twitter_openapi_python_generated.Configuration(
225
242
  server_operation_variables: Optional[Dict[int, ServerVariablesT]]=None,
226
243
  ignore_operation_servers: bool=False,
227
244
  ssl_ca_cert: Optional[str]=None,
228
- retries: Optional[int] = None,
245
+ retries: Optional[Union[int, urllib3.util.retry.Retry]] = None,
229
246
  ca_cert_data: Optional[Union[str, bytes]] = None,
247
+ cert_file: Optional[str]=None,
248
+ key_file: Optional[str]=None,
249
+ verify_ssl: bool=True,
250
+ assert_hostname: Optional[bool]=None,
251
+ tls_server_name: Optional[str]=None,
252
+ connection_pool_maxsize: Optional[int]=None,
253
+ proxy: Optional[str]=None,
254
+ no_proxy: Optional[str]=None,
255
+ proxy_headers: Optional[Any]=None,
256
+ proxy_ssl_context: Optional[ssl.SSLContext]=None,
257
+ safe_chars_for_path_param: str='',
258
+ client_side_validation: bool=True,
259
+ socket_options: Optional[Any]=None,
260
+ datetime_format: str="%Y-%m-%dT%H:%M:%S.%f%z",
261
+ date_format: str="%Y-%m-%d",
230
262
  *,
231
263
  debug: Optional[bool] = None,
232
264
  ) -> None:
@@ -296,7 +328,7 @@ conf = twitter_openapi_python_generated.Configuration(
296
328
  """Debug switch
297
329
  """
298
330
 
299
- self.verify_ssl = True
331
+ self.verify_ssl = verify_ssl
300
332
  """SSL/TLS verification
301
333
  Set this to false to skip verifying SSL certificate when calling API
302
334
  from https server.
@@ -308,52 +340,66 @@ conf = twitter_openapi_python_generated.Configuration(
308
340
  """Set this to verify the peer using PEM (str) or DER (bytes)
309
341
  certificate data.
310
342
  """
311
- self.cert_file = None
343
+ self.cert_file = cert_file
312
344
  """client certificate file
313
345
  """
314
- self.key_file = None
346
+ self.key_file = key_file
315
347
  """client key file
316
348
  """
317
- self.assert_hostname = None
349
+ self.assert_hostname = assert_hostname
318
350
  """Set this to True/False to enable/disable SSL hostname verification.
319
351
  """
320
- self.tls_server_name = None
352
+ self.tls_server_name = tls_server_name
321
353
  """SSL/TLS Server Name Indication (SNI)
322
354
  Set this to the SNI value expected by the server.
323
355
  """
324
356
 
325
- self.connection_pool_maxsize = multiprocessing.cpu_count() * 5
357
+ self.connection_pool_maxsize = connection_pool_maxsize if connection_pool_maxsize is not None else multiprocessing.cpu_count() * 5
326
358
  """urllib3 connection pool's maximum number of connections saved
327
- per pool. urllib3 uses 1 connection as default value, but this is
328
- not the best value when you are making a lot of possibly parallel
329
- requests to the same host, which is often the case here.
330
- cpu_count * 5 is used as default value to increase performance.
331
- """
332
-
333
- self.proxy: Optional[str] = None
334
- """Proxy URL
335
- """
336
- self.proxy_headers = None
359
+ per pool. None in the constructor is coerced to cpu_count * 5.
360
+ """
361
+
362
+ # urllib3 does not read proxy environment variables itself:
363
+ # https://github.com/urllib3/urllib3/issues/1785
364
+ # A proxy taken from the environment is re-resolved when the host is
365
+ # assigned; see the host setter.
366
+ self._proxy_from_env = proxy is None
367
+ if proxy is None or no_proxy is None:
368
+ proxies = getproxies()
369
+ if proxy is None:
370
+ proxy = self._env_proxy(proxies, self.host)
371
+ if no_proxy is None:
372
+ no_proxy = proxies.get("no")
373
+ self._proxy = proxy
374
+ self.no_proxy = no_proxy
375
+ """Hosts that bypass the proxy
376
+ """
377
+ self.proxy_headers = proxy_headers
337
378
  """Proxy headers
338
379
  """
339
- self.safe_chars_for_path_param = ''
380
+ self.proxy_ssl_context = proxy_ssl_context
381
+ """SSL context used only for the TLS handshake with the proxy itself
382
+ (e.g. an HTTPS CONNECT tunnel), independent of the destination TLS
383
+ settings above.
384
+ """
385
+ self.safe_chars_for_path_param = safe_chars_for_path_param
340
386
  """Safe chars for path_param
341
387
  """
342
388
  self.retries = retries
343
- """Adding retries to override urllib3 default value 3
389
+ """Retry configuration
344
390
  """
345
391
  # Enable client side validation
346
- self.client_side_validation = True
392
+ self.client_side_validation = client_side_validation
347
393
 
348
- self.socket_options = None
394
+ self.socket_options = socket_options
349
395
  """Options to pass down to the underlying urllib3 socket
350
396
  """
351
397
 
352
- self.datetime_format = "%Y-%m-%dT%H:%M:%S.%f%z"
398
+ self.datetime_format = datetime_format
353
399
  """datetime format
354
400
  """
355
401
 
356
- self.date_format = "%Y-%m-%d"
402
+ self.date_format = date_format
357
403
  """date format
358
404
  """
359
405
 
@@ -362,13 +408,17 @@ conf = twitter_openapi_python_generated.Configuration(
362
408
  result = cls.__new__(cls)
363
409
  memo[id(self)] = result
364
410
  for k, v in self.__dict__.items():
411
+ if k == 'proxy_ssl_context':
412
+ # ssl.SSLContext holds unpicklable C state and can't be deepcopied.
413
+ setattr(result, k, v)
414
+ continue
365
415
  if k not in ('logger', 'logger_file_handler'):
366
416
  setattr(result, k, copy.deepcopy(v, memo))
367
417
  # shallow copy of loggers
368
418
  result.logger = copy.copy(self.logger)
369
- # use setters to configure loggers
419
+ # use setter to re-create the file handler (excluded from __dict__ copy)
370
420
  result.logger_file = self.logger_file
371
- result.debug = self.debug
421
+
372
422
  return result
373
423
 
374
424
  def __setattr__(self, name: str, value: Any) -> None:
@@ -505,7 +555,8 @@ conf = twitter_openapi_python_generated.Configuration(
505
555
  self.refresh_api_key_hook(self)
506
556
  key = self.api_key.get(identifier, self.api_key.get(alias) if alias is not None else None)
507
557
  if key:
508
- prefix = self.api_key_prefix.get(identifier)
558
+ prefix = self.api_key_prefix.get(
559
+ identifier, self.api_key_prefix.get(alias) if alias is not None else None)
509
560
  if prefix:
510
561
  return "%s %s" % (prefix, key)
511
562
  else:
@@ -524,6 +575,7 @@ conf = twitter_openapi_python_generated.Configuration(
524
575
  password = ""
525
576
  if self.password is not None:
526
577
  password = self.password
578
+
527
579
  return urllib3.util.make_headers(
528
580
  basic_auth=username + ':' + password
529
581
  ).get('authorization')
@@ -750,7 +802,7 @@ conf = twitter_openapi_python_generated.Configuration(
750
802
  "OS: {env}\n"\
751
803
  "Python Version: {pyversion}\n"\
752
804
  "Version of the API: 0.0.1\n"\
753
- "SDK Package Version: 0.0.33".\
805
+ "SDK Package Version: 0.0.35".\
754
806
  format(env=sys.platform, pyversion=sys.version)
755
807
 
756
808
  def get_host_settings(self) -> List[HostSetting]:
@@ -802,6 +854,7 @@ conf = twitter_openapi_python_generated.Configuration(
802
854
  variable_name, variable['default_value'])
803
855
 
804
856
  if 'enum_values' in variable \
857
+ and variable['enum_values'] \
805
858
  and used_value not in variable['enum_values']:
806
859
  raise ValueError(
807
860
  "The variable `{0}` in the host URL has invalid value "
@@ -823,3 +876,23 @@ conf = twitter_openapi_python_generated.Configuration(
823
876
  """Fix base path."""
824
877
  self._base_path = value
825
878
  self.server_index = None
879
+ if self._proxy_from_env:
880
+ # the scheme-specific proxy depends on the host, which is
881
+ # commonly assigned after construction
882
+ self._proxy = self._env_proxy(getproxies(), value)
883
+
884
+ @staticmethod
885
+ def _env_proxy(proxies: Dict[str, str], host: str) -> Optional[str]:
886
+ """Pick the environment proxy that applies to `host`."""
887
+ return proxies.get(urlparse(host).scheme) or proxies.get("all")
888
+
889
+ @property
890
+ def proxy(self) -> Optional[str]:
891
+ """Proxy URL
892
+ """
893
+ return self._proxy
894
+
895
+ @proxy.setter
896
+ def proxy(self, value: Optional[str]) -> None:
897
+ self._proxy = value
898
+ self._proxy_from_env = False
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  """
4
2
  Twitter OpenAPI
5
3
 
@@ -12,6 +10,7 @@
12
10
  Do not edit the class manually.
13
11
  """ # noqa: E501
14
12
 
13
+
15
14
  from typing import Any, Optional
16
15
  from typing_extensions import Self
17
16
 
@@ -129,7 +128,7 @@ class ApiException(OpenApiException):
129
128
  self.body = http_resp.data.decode('utf-8')
130
129
  except Exception:
131
130
  pass
132
- self.headers = http_resp.getheaders()
131
+ self.headers = http_resp.headers
133
132
 
134
133
  @classmethod
135
134
  def from_response(
@@ -170,8 +169,11 @@ class ApiException(OpenApiException):
170
169
  error_message += "HTTP response headers: {0}\n".format(
171
170
  self.headers)
172
171
 
173
- if self.data or self.body:
174
- error_message += "HTTP response body: {0}\n".format(self.data or self.body)
172
+ if self.body:
173
+ error_message += "HTTP response body: {0}\n".format(self.body)
174
+
175
+ if self.data:
176
+ error_message += "HTTP response data: {0}\n".format(self.data)
175
177
 
176
178
  return error_message
177
179