Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PyQt5.QtNetwork import QNetworkCookie, QNetworkCookieJar
- import os
- import tempfile
- import logging
- class PersistentCookieJar(QNetworkCookieJar):
- def __init__(self, filename, parent=None):
- super().__init__(parent)
- self.filename = filename
- self.logger = logging.getLogger(self.__class__.__name__)
- self.load()
- def load(self):
- try:
- data = open(self.filename, 'rb').read()
- # вернет пустой список в случае ошибки парсинга
- cookies = QNetworkCookie.parseCookies(data)
- self.setAllCookies(cookies)
- self.logger.debug("cookies loaded %s",
- os.path.abspath(self.filename))
- except os.error as e:
- self.logger.exception(e)
- def save(self):
- # В Python вообщe есть штатные средства для блокировки файла?
- temp = tempfile.NamedTemporaryFile(
- dir=os.path.dirname(self.filename), delete=False)
- for cookie in self.allCookies():
- if not cookie.isSessionCookie():
- temp.write(cookie.toRawForm())
- temp.write(b'\n')
- self.logger.debug("cookies saved %s", temp.name)
- try:
- os.unlink(self.filename)
- self.logger.debug("deleted %s",
- os.path.abspath(self.filename))
- # возможно, файла не существует
- except os.error as e:
- self.logger.exception(e)
- try:
- temp.close()
- os.rename(temp.name, self.filename)
- self.logger.debug("%s renamed as %s", temp.name,
- os.path.abspath(self.filename))
- except os.error as e:
- self.logger.exception(e)
- def __del__(self):
- self.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement