diff --git a/docs/cli-options.rst b/docs/cli-options.rst index c656142..00eaba8 100644 --- a/docs/cli-options.rst +++ b/docs/cli-options.rst @@ -238,10 +238,13 @@ How to Download .. option:: --request-timeout N - Seconds to wait before timing out a connection request. + Seconds to wait before timing out a connection request. Defaults to 300. .. versionadded:: 4.3 + .. versionchanged:: 4.6 + Enabled this option by default with a timeout of 300 seconds. + Miscellaneous Options ^^^^^^^^^^^^^^^^^^^^^ diff --git a/instaloader/__main__.py b/instaloader/__main__.py index 1d5e984..31d6058 100644 --- a/instaloader/__main__.py +++ b/instaloader/__main__.py @@ -366,8 +366,8 @@ def main(): 'connection fails, it can be manually skipped by hitting CTRL+C. Set this to 0 to retry ' 'infinitely.') g_how.add_argument('--commit-mode', action='store_true', help=SUPPRESS) - g_how.add_argument('--request-timeout', metavar='N', type=float, - help='seconds to wait before timing out a connection request') + g_how.add_argument('--request-timeout', metavar='N', type=float, default=300.0, + help='Seconds to wait before timing out a connection request. Defaults to 300.') g_misc = parser.add_argument_group('Miscellaneous Options') g_misc.add_argument('-q', '--quiet', action='store_true', diff --git a/instaloader/instaloader.py b/instaloader/instaloader.py index 6d08c8b..47f4e4a 100644 --- a/instaloader/instaloader.py +++ b/instaloader/instaloader.py @@ -179,7 +179,7 @@ class Instaloader: post_metadata_txt_pattern: str = None, storyitem_metadata_txt_pattern: str = None, max_connection_attempts: int = 3, - request_timeout: Optional[float] = None, + request_timeout: float = 300.0, rate_controller: Optional[Callable[[InstaloaderContext], RateController]] = None, resume_prefix: Optional[str] = "iterator", check_resume_bbd: bool = True): diff --git a/instaloader/instaloadercontext.py b/instaloader/instaloadercontext.py index 8c37e1a..92bffee 100644 --- a/instaloader/instaloadercontext.py +++ b/instaloader/instaloadercontext.py @@ -25,10 +25,9 @@ def copy_session(session: requests.Session, request_timeout: Optional[float] = N new = requests.Session() new.cookies = requests.utils.cookiejar_from_dict(requests.utils.dict_from_cookiejar(session.cookies)) new.headers = session.headers.copy() - if request_timeout is not None: - # Override default timeout behavior. - # Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427 - new.request = partial(new.request, timeout=request_timeout) # type: ignore + # Override default timeout behavior. + # Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427 + new.request = partial(new.request, timeout=request_timeout) # type: ignore return new @@ -53,7 +52,7 @@ class InstaloaderContext: """ def __init__(self, sleep: bool = True, quiet: bool = False, user_agent: Optional[str] = None, - max_connection_attempts: int = 3, request_timeout: Optional[float] = None, + max_connection_attempts: int = 3, request_timeout: float = 300.0, rate_controller: Optional[Callable[["InstaloaderContext"], "RateController"]] = None): self.user_agent = user_agent if user_agent is not None else default_user_agent() @@ -161,10 +160,9 @@ class InstaloaderContext: 'ig_vw': '1920', 'csrftoken': '', 's_network': '', 'ds_user_id': ''}) session.headers.update(self._default_http_header(empty_session_only=True)) - if self.request_timeout is not None: - # Override default timeout behavior. - # Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427 - session.request = partial(session.request, timeout=self.request_timeout) # type: ignore + # Override default timeout behavior. + # Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427 + session.request = partial(session.request, timeout=self.request_timeout) # type: ignore return session def save_session_to_file(self, sessionfile): @@ -177,10 +175,9 @@ class InstaloaderContext: session.cookies = requests.utils.cookiejar_from_dict(pickle.load(sessionfile)) session.headers.update(self._default_http_header()) session.headers.update({'X-CSRFToken': session.cookies.get_dict()['csrftoken']}) - if self.request_timeout is not None: - # Override default timeout behavior. - # Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427 - session.request = partial(session.request, timeout=self.request_timeout) # type: ignore + # Override default timeout behavior. + # Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427 + session.request = partial(session.request, timeout=self.request_timeout) # type: ignore self._session = session self.username = username @@ -206,10 +203,9 @@ class InstaloaderContext: 'ig_vw': '1920', 'ig_cb': '1', 'csrftoken': '', 's_network': '', 'ds_user_id': ''}) session.headers.update(self._default_http_header()) - if self.request_timeout is not None: - # Override default timeout behavior. - # Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427 - session.request = partial(session.request, timeout=self.request_timeout) # type: ignore + # Override default timeout behavior. + # Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427 + session.request = partial(session.request, timeout=self.request_timeout) # type: ignore session.get('https://www.instagram.com/web/__mid/') csrf_token = session.cookies.get_dict()['csrftoken'] session.headers.update({'X-CSRFToken': csrf_token})