Как сохранить состояние переменных класса для отслеживания изменений в HTTP-запросах? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь создать HTTP-монитор, чтобы проверить, изменилось ли содержимое на странице с момента последнего посещения пользователем, используя etags, полученное из заголовков ответов. Чтобы попытаться решить эту проблему, я создал следующий класс:

import json
import requests

class ValidateEtag():
    E_TAG = {}
    UPDATED_E_TAGS = {}

    def __init__(self, url):
        self.url = url
        self.response = self.load_match_data(self.url)
        if not self.url in ValidateEtag.E_TAG:
            ValidateEtag.E_TAG[self.url] = self.response['etag']
        elif self.url in ValidateEtag.E_TAG:
            if not self.assert_etag(ValidateEtag.E_TAG[self.url], self.response['etag']):
                ValidateEtag.E_TAG[self.url] = self.response['etag']
                UPDATED_E_TAGS[self.url] = self.response['etag']
                print('FOUND DIFF')
        else:
            raise(KeyError, 'etag not found')


    def load_match_data(self, url):
        """Retreives Ids for different pages on the API"""
        headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                            'Origin': 'https://www.premierleague.com',
                            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
                  }
        params = (('pageSize', '100'),)
        # request to obtain the team info
        try:
            with requests.Session() as s:
                response = s.get(url, headers=headers, params=params)
            return response.headers
        except Exception as e:
            print(e, 'Something went wrong with the request')
            return {}

    def assert_etag(self, old_etag, new_etag):
        if old_etag == new_etag:
            print('Same as old etag')
            return True
        else:
            print('New etag!')
            return False

if __name__ == '__main__':

    ids = [46895, 46875, 46896, 46897, 46905, 46906, 46898, 46907, 46908, 46941]

    for i in ids:
        url = fixture_info_singel(i)
        ValidateEtag(url)

Проблема в том, что, поскольку состояние переменной класса E_TAG не сохраняется между запусками, решение бесполезно. Есть ли способ кэшировать значения переменных класса между запусками? Если нет, то как можно решить указанную выше проблему?

...