Add save and load session from dict (#1591)
This commit is contained in:
parent
d406de4f35
commit
9b928b4679
@ -586,6 +586,23 @@ class Instaloader:
|
|||||||
.. versionadded:: 4.4"""
|
.. versionadded:: 4.4"""
|
||||||
self.download_title_pic(hashtag.profile_pic_url, '#' + hashtag.name, 'profile_pic', None)
|
self.download_title_pic(hashtag.profile_pic_url, '#' + hashtag.name, 'profile_pic', None)
|
||||||
|
|
||||||
|
@_requires_login
|
||||||
|
def save_session(self) -> dict:
|
||||||
|
"""Saves internally stored :class:`requests.Session` object to :class:`dict`.
|
||||||
|
|
||||||
|
:raises LoginRequiredException: If called without being logged in.
|
||||||
|
|
||||||
|
.. versionadded:: 4.10
|
||||||
|
"""
|
||||||
|
return self.context.save_session()
|
||||||
|
|
||||||
|
def load_session(self, username: str, session_data: dict) -> None:
|
||||||
|
"""Internally stores :class:`requests.Session` object from :class:`dict`.
|
||||||
|
|
||||||
|
.. versionadded:: 4.10
|
||||||
|
"""
|
||||||
|
self.context.load_session(username, session_data)
|
||||||
|
|
||||||
@_requires_login
|
@_requires_login
|
||||||
def save_session_to_file(self, filename: Optional[str] = None) -> None:
|
def save_session_to_file(self, filename: Optional[str] = None) -> None:
|
||||||
"""Saves internally stored :class:`requests.Session` object.
|
"""Saves internally stored :class:`requests.Session` object.
|
||||||
|
@ -170,22 +170,30 @@ class InstaloaderContext:
|
|||||||
session.request = partial(session.request, timeout=self.request_timeout) # type: ignore
|
session.request = partial(session.request, timeout=self.request_timeout) # type: ignore
|
||||||
return session
|
return session
|
||||||
|
|
||||||
def save_session_to_file(self, sessionfile):
|
def save_session(self):
|
||||||
"""Not meant to be used directly, use :meth:`Instaloader.save_session_to_file`."""
|
"""Not meant to be used directly, use :meth:`Instaloader.save_session`."""
|
||||||
pickle.dump(requests.utils.dict_from_cookiejar(self._session.cookies), sessionfile)
|
return requests.utils.dict_from_cookiejar(self._session.cookies)
|
||||||
|
|
||||||
def load_session_from_file(self, username, sessionfile):
|
def load_session(self, username, sessiondata):
|
||||||
"""Not meant to be used directly, use :meth:`Instaloader.load_session_from_file`."""
|
"""Not meant to be used directly, use :meth:`Instaloader.load_session`."""
|
||||||
session = requests.Session()
|
session = requests.Session()
|
||||||
session.cookies = requests.utils.cookiejar_from_dict(pickle.load(sessionfile))
|
session.cookies = requests.utils.cookiejar_from_dict(sessiondata)
|
||||||
session.headers.update(self._default_http_header())
|
session.headers.update(self._default_http_header())
|
||||||
session.headers.update({'X-CSRFToken': session.cookies.get_dict()['csrftoken']})
|
session.headers.update({'X-CSRFToken': session.cookies.get_dict()['csrftoken']})
|
||||||
# Override default timeout behavior.
|
# Override default timeout behavior.
|
||||||
# Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427
|
# 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.request = partial(session.request, timeout=self.request_timeout) # type: ignore
|
||||||
self._session = session
|
self._session = session
|
||||||
self.username = username
|
self.username = username
|
||||||
|
|
||||||
|
def save_session_to_file(self, sessionfile):
|
||||||
|
"""Not meant to be used directly, use :meth:`Instaloader.save_session_to_file`."""
|
||||||
|
pickle.dump(self.save_session(), sessionfile)
|
||||||
|
|
||||||
|
def load_session_from_file(self, username, sessionfile):
|
||||||
|
"""Not meant to be used directly, use :meth:`Instaloader.load_session_from_file`."""
|
||||||
|
self.load_session(username, pickle.load(sessionfile))
|
||||||
|
|
||||||
def test_login(self) -> Optional[str]:
|
def test_login(self) -> Optional[str]:
|
||||||
"""Not meant to be used directly, use :meth:`Instaloader.test_login`."""
|
"""Not meant to be used directly, use :meth:`Instaloader.test_login`."""
|
||||||
data = self.graphql_query("d6f4427fbe92d846298cf93df0b937d3", {})
|
data = self.graphql_query("d6f4427fbe92d846298cf93df0b937d3", {})
|
||||||
|
Loading…
Reference in New Issue
Block a user