2014-09-11 29 views
0

我刚刚启动了一个Python包,用于直接从经济分析局(BEA)数据API访问数据。我有两个高级抽象:RequestResultsRequest对象继承自dict并使用请求库来访问数据。如何在字典更改时刷新缓存的值?

import requests 


class Request(dict): 

    _response = None 

    base_url = 'http://www.bea.gov/api/data' 

    def __init__(self, UserID, Method, ResultFormat='JSON', **params): 
     required_params = {'UserID': UserID, 
          'Method': Method, 
          'ResultFormat': ResultFormat} 
     required_params.update(params) 
     super(Request, self).__init__(**required_params) 

    @property 
    def response(self): 
     if self._response is None: 
      self._response = requests.get(url=self.base_url, params=self) 
     return self._response 

因为下载数据可能很耗时我正在缓存响应属性。我目前的实现永远不会刷新缓存。如果字典的任何值发生更改或添加/删除,我想刷新缓存。思考?

回答

2

只需重写相关的映射方法。

class Request(dict): 
    ... 
    def __setitem__(self, item, value): 
    self._response = None 
    return super(Request, self).__setitem__(item, value) 

    def __delitem__(self, item): 
    self._response = None 
    return super(Request, self).__delitem__(item)