gitextract_o3azcgt3/ ├── .bumpversion.cfg ├── .coveragerc ├── .github/ │ ├── hack/ │ │ ├── changelog.sh │ │ └── version.sh │ └── workflows/ │ ├── docs.yaml │ ├── release.yaml │ └── test.yaml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── Makefile ├── README.rst ├── docs/ │ ├── docs/ │ │ ├── authorization.md │ │ ├── getting_started.md │ │ ├── index.md │ │ ├── installation.md │ │ ├── introduce-new-structure.md │ │ └── usage/ │ │ ├── work-with-api.md │ │ └── work-with-client.md │ └── mkdocs.yml ├── examples/ │ ├── README.md │ ├── __init__.py │ ├── apis/ │ │ ├── __init__.py │ │ ├── channel_videos.py │ │ ├── get_all_videos_id_with_channel_by_search.py │ │ ├── get_subscription_with_oauth.py │ │ └── oauth_flow.py │ └── clients/ │ ├── __init__.py │ ├── channel_info.py │ ├── oauth_flow.py │ ├── oauth_refreshing.py │ └── upload_video.py ├── pyproject.toml ├── pytest.ini ├── pyyoutube/ │ ├── __init__.py │ ├── __version__.py │ ├── api.py │ ├── client.py │ ├── error.py │ ├── media.py │ ├── models/ │ │ ├── __init__.py │ │ ├── activity.py │ │ ├── auth.py │ │ ├── base.py │ │ ├── caption.py │ │ ├── category.py │ │ ├── channel.py │ │ ├── channel_banner.py │ │ ├── channel_section.py │ │ ├── comment.py │ │ ├── comment_thread.py │ │ ├── common.py │ │ ├── i18n.py │ │ ├── member.py │ │ ├── memberships_level.py │ │ ├── mixins.py │ │ ├── playlist.py │ │ ├── playlist_item.py │ │ ├── search_result.py │ │ ├── subscription.py │ │ ├── video.py │ │ ├── video_abuse_report_reason.py │ │ └── watermark.py │ ├── resources/ │ │ ├── __init__.py │ │ ├── activities.py │ │ ├── base_resource.py │ │ ├── captions.py │ │ ├── channel_banners.py │ │ ├── channel_sections.py │ │ ├── channels.py │ │ ├── comment_threads.py │ │ ├── comments.py │ │ ├── i18n_languages.py │ │ ├── i18n_regions.py │ │ ├── members.py │ │ ├── membership_levels.py │ │ ├── playlist_items.py │ │ ├── playlists.py │ │ ├── search.py │ │ ├── subscriptions.py │ │ ├── thumbnails.py │ │ ├── video_abuse_report_reasons.py │ │ ├── video_categories.py │ │ ├── videos.py │ │ └── watermarks.py │ ├── utils/ │ │ ├── __init__.py │ │ ├── constants.py │ │ └── params_checker.py │ └── youtube_utils.py ├── testdata/ │ ├── apidata/ │ │ ├── abuse_reasons/ │ │ │ └── abuse_reason.json │ │ ├── access_token.json │ │ ├── activities/ │ │ │ ├── activities_by_channel_p1.json │ │ │ ├── activities_by_channel_p2.json │ │ │ ├── activities_by_mine_p1.json │ │ │ └── activities_by_mine_p2.json │ │ ├── captions/ │ │ │ ├── captions_by_video.json │ │ │ ├── captions_filter_by_id.json │ │ │ ├── insert_response.json │ │ │ └── update_response.json │ │ ├── categories/ │ │ │ ├── guide_categories_by_region.json │ │ │ ├── guide_category_multi.json │ │ │ ├── guide_category_single.json │ │ │ ├── video_category_by_region.json │ │ │ ├── video_category_multi.json │ │ │ └── video_category_single.json │ │ ├── channel_banners/ │ │ │ └── insert_response.json │ │ ├── channel_info_multi.json │ │ ├── channel_info_single.json │ │ ├── channel_sections/ │ │ │ ├── channel_sections_by_channel.json │ │ │ ├── channel_sections_by_id.json │ │ │ ├── channel_sections_by_ids.json │ │ │ └── insert_resp.json │ │ ├── channels/ │ │ │ ├── info.json │ │ │ ├── info_multiple.json │ │ │ └── update_resp.json │ │ ├── client_secrets/ │ │ │ ├── client_secret_installed_bad.json │ │ │ ├── client_secret_installed_good.json │ │ │ ├── client_secret_unsupported.json │ │ │ └── client_secret_web.json │ │ ├── comment_threads/ │ │ │ ├── comment_thread_single.json │ │ │ ├── comment_threads_all_to_me.json │ │ │ ├── comment_threads_by_channel.json │ │ │ ├── comment_threads_by_video_paged_1.json │ │ │ ├── comment_threads_by_video_paged_2.json │ │ │ ├── comment_threads_multi.json │ │ │ ├── comment_threads_with_search.json │ │ │ └── insert_response.json │ │ ├── comments/ │ │ │ ├── comments_by_parent_paged_1.json │ │ │ ├── comments_by_parent_paged_2.json │ │ │ ├── comments_multi.json │ │ │ ├── comments_single.json │ │ │ └── insert_response.json │ │ ├── error_permission_resp.json │ │ ├── i18ns/ │ │ │ ├── language_res.json │ │ │ └── regions_res.json │ │ ├── members/ │ │ │ ├── members_data.json │ │ │ └── membership_levels.json │ │ ├── playlist_items/ │ │ │ ├── insert_response.json │ │ │ ├── playlist_items_filter_video.json │ │ │ ├── playlist_items_multi.json │ │ │ ├── playlist_items_paged_1.json │ │ │ ├── playlist_items_paged_2.json │ │ │ └── playlist_items_single.json │ │ ├── playlists/ │ │ │ ├── insert_response.json │ │ │ ├── playlists_mine.json │ │ │ ├── playlists_multi.json │ │ │ ├── playlists_paged_1.json │ │ │ ├── playlists_paged_2.json │ │ │ └── playlists_single.json │ │ ├── search/ │ │ │ ├── search_by_developer.json │ │ │ ├── search_by_event.json │ │ │ ├── search_by_keywords_p1.json │ │ │ ├── search_by_keywords_p2.json │ │ │ ├── search_by_location.json │ │ │ ├── search_by_mine.json │ │ │ ├── search_by_related_video.json │ │ │ ├── search_channels.json │ │ │ └── search_videos_by_channel.json │ │ ├── subscriptions/ │ │ │ ├── insert_response.json │ │ │ ├── subscription_zero.json │ │ │ ├── subscriptions_by_channel_p1.json │ │ │ ├── subscriptions_by_channel_p2.json │ │ │ ├── subscriptions_by_channel_with_filter.json │ │ │ ├── subscriptions_by_id.json │ │ │ ├── subscriptions_by_mine_filter.json │ │ │ ├── subscriptions_by_mine_p1.json │ │ │ └── subscriptions_by_mine_p2.json │ │ ├── user_profile.json │ │ └── videos/ │ │ ├── get_rating_response.json │ │ ├── insert_response.json │ │ ├── videos_chart_paged_1.json │ │ ├── videos_chart_paged_2.json │ │ ├── videos_info_multi.json │ │ ├── videos_info_single.json │ │ ├── videos_myrating_paged_1.json │ │ └── videos_myrating_paged_2.json │ ├── error_response.json │ ├── error_response_simple.json │ └── modeldata/ │ ├── abuse_report_reason/ │ │ ├── abuse_reason.json │ │ └── abuse_reason_res.json │ ├── activities/ │ │ ├── activity.json │ │ ├── activity_contentDetails.json │ │ ├── activity_response.json │ │ └── activity_snippet.json │ ├── captions/ │ │ ├── caption.json │ │ ├── caption_response.json │ │ └── caption_snippet.json │ ├── categories/ │ │ ├── guide_category_info.json │ │ ├── guide_category_response.json │ │ ├── video_category_info.json │ │ └── video_category_response.json │ ├── channel_sections/ │ │ ├── channel_section_info.json │ │ └── channel_section_response.json │ ├── channels/ │ │ ├── channel_api_response.json │ │ ├── channel_branding_settings.json │ │ ├── channel_content_details.json │ │ ├── channel_info.json │ │ ├── channel_snippet.json │ │ ├── channel_statistics.json │ │ ├── channel_status.json │ │ └── channel_topic_details.json │ ├── comments/ │ │ ├── comment_api_response.json │ │ ├── comment_info.json │ │ ├── comment_snippet.json │ │ ├── comment_thread_api_response.json │ │ ├── comment_thread_info.json │ │ ├── comment_thread_replies.json │ │ └── comment_thread_snippet.json │ ├── common/ │ │ ├── thumbnail_info.json │ │ └── thumbnails_info.json │ ├── i18ns/ │ │ ├── language_info.json │ │ ├── language_res.json │ │ ├── region_info.json │ │ └── region_res.json │ ├── members/ │ │ ├── member_info.json │ │ └── membership_level.json │ ├── playlist_items/ │ │ ├── playlist_item_api_response.json │ │ ├── playlist_item_content_details.json │ │ ├── playlist_item_info.json │ │ ├── playlist_item_snippet.json │ │ └── playlist_item_status.json │ ├── playlists/ │ │ ├── playlist_api_response.json │ │ ├── playlist_content_details.json │ │ ├── playlist_info.json │ │ ├── playlist_snippet.json │ │ └── playlist_status.json │ ├── search_result/ │ │ ├── search_result.json │ │ ├── search_result_api_response.json │ │ ├── search_result_id.json │ │ └── search_result_snippet.json │ ├── subscriptions/ │ │ ├── contentDetails.json │ │ ├── resp.json │ │ ├── snippet.json │ │ ├── subscriberSnippet.json │ │ └── subscription.json │ ├── users/ │ │ ├── access_token.json │ │ └── user_profile.json │ └── videos/ │ ├── video_api_response.json │ ├── video_category_info.json │ ├── video_content_details.json │ ├── video_info.json │ ├── video_paid_product_placement_details.json │ ├── video_recording_details.json │ ├── video_snippet.json │ ├── video_statistics.json │ ├── video_status.json │ └── video_topic_details.json └── tests/ ├── __init__.py ├── apis/ │ ├── __init__.py │ ├── test_activities.py │ ├── test_auth.py │ ├── test_captions.py │ ├── test_categories.py │ ├── test_channel_sections.py │ ├── test_channels.py │ ├── test_comment_threads.py │ ├── test_comments.py │ ├── test_i18ns.py │ ├── test_members.py │ ├── test_playlist_items.py │ ├── test_playlists.py │ ├── test_search.py │ ├── test_subscriptions.py │ ├── test_video_abuse_reason.py │ └── test_videos.py ├── clients/ │ ├── __init__.py │ ├── base.py │ ├── test_activities.py │ ├── test_captions.py │ ├── test_channel_banners.py │ ├── test_channel_sections.py │ ├── test_channels.py │ ├── test_client.py │ ├── test_comment_threads.py │ ├── test_comments.py │ ├── test_i18n.py │ ├── test_media.py │ ├── test_members.py │ ├── test_membership_levels.py │ ├── test_playlist_items.py │ ├── test_playlists.py │ ├── test_search.py │ ├── test_subscriptions.py │ ├── test_thumbnails.py │ ├── test_video_abuse_report_reasons.py │ ├── test_video_categories.py │ ├── test_videos.py │ └── test_watermarks.py ├── conftest.py ├── models/ │ ├── __init__.py │ ├── test_abuse_reason.py │ ├── test_activities.py │ ├── test_auth_models.py │ ├── test_captions.py │ ├── test_category.py │ ├── test_channel.py │ ├── test_channel_sections.py │ ├── test_comments.py │ ├── test_i18n_models.py │ ├── test_members.py │ ├── test_playlist.py │ ├── test_playlist_item.py │ ├── test_search_result.py │ ├── test_subscriptions.py │ └── test_videos.py ├── test_error_handling.py ├── test_youtube_utils.py └── utils/ ├── __init__.py └── test_params_checker.py