Advertisement
stuppid_bot

Untitled

Jun 8th, 2015
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.89 KB | None | 0 0
  1. from PyQt5.QtNetwork import QNetworkCookie, QNetworkCookieJar
  2. import os
  3. import tempfile
  4. import logging
  5.  
  6.  
  7. class PersistentCookieJar(QNetworkCookieJar):
  8.     def __init__(self, filename, parent=None):
  9.         super().__init__(parent)
  10.         self.filename = filename
  11.         self.logger = logging.getLogger(self.__class__.__name__)
  12.         self.load()
  13.  
  14.     def load(self):
  15.         try:
  16.             data = open(self.filename, 'rb').read()
  17.             # вернет пустой список в случае ошибки парсинга
  18.             cookies = QNetworkCookie.parseCookies(data)
  19.             self.setAllCookies(cookies)
  20.             self.logger.debug("cookies loaded %s",
  21.                               os.path.abspath(self.filename))
  22.         except os.error as e:
  23.             self.logger.exception(e)
  24.  
  25.     def save(self):
  26.         # В Python вообщe есть штатные средства для блокировки файла?
  27.         temp = tempfile.NamedTemporaryFile(
  28.             dir=os.path.dirname(self.filename), delete=False)
  29.         for cookie in self.allCookies():
  30.             if not cookie.isSessionCookie():
  31.                 temp.write(cookie.toRawForm())
  32.                 temp.write(b'\n')
  33.         self.logger.debug("cookies saved %s", temp.name)
  34.         try:
  35.             os.unlink(self.filename)
  36.             self.logger.debug("deleted %s",
  37.                               os.path.abspath(self.filename))
  38.         # возможно, файла не существует
  39.         except os.error as e:
  40.             self.logger.exception(e)
  41.         try:
  42.             temp.close()
  43.             os.rename(temp.name, self.filename)
  44.             self.logger.debug("%s renamed as %s", temp.name,
  45.                               os.path.abspath(self.filename))
  46.         except os.error as e:
  47.             self.logger.exception(e)
  48.  
  49.     def __del__(self):
  50.         self.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement