def get(self, call, **kwargs): from newauth.models import APIKey, db cache_key = hash((self.base, call, frozenset(kwargs))) cached_data = redis.get(cache_key) if cached_data: cached_data = cPickle.loads(cached_data) if arrow.utcnow() < cached_data[0]: return cached_data[1] try: req = self.session.get(self.base + call + '.xml.aspx', params=kwargs) req.raise_for_status() except requests.exceptions.RequestException as e: raise e if req.status_code != 200: if req.status_code == requests.codes['not_found']: raise Exception( "{} is not available on the API server (404)".format( call.value)) elif req.status_code == requests.codes['forbidden']: if self.api_key and self.api_key.id: self.api_key.disabled = True db.session.add(self.api_key) db.session.commit() raise AuthenticationException(self.key_id) else: raise Exception("Eve API server exception.") request_data = req.text prefix, _, data = req.text.partition('\n') if prefix.strip() != "<?xml version='1.0' encoding='UTF-8'?>": raise Exception("Data returned doesn't seem to be XML!") if isinstance(data, unicode): data = data.encode('UTF-8') data = xml(data)['eveapi'] result = bunchify(data['result'], 'result') data = Bunch(data) if len(result) == 1: result = getattr(result, result.keys())[0] redis.set(cache_key, cPickle.dumps((arrow.get(data.cachedUntil), result), -1)) return result
def get(self, call, **kwargs): from newauth.models import APIKey, db cache_key = hash((self.base, call, frozenset(kwargs))) cached_data = redis.get(cache_key) if cached_data: cached_data = cPickle.loads(cached_data) if arrow.utcnow() < cached_data[0]: return cached_data[1] try: req = self.session.get(self.base + call + '.xml.aspx', params=kwargs) req.raise_for_status() except requests.exceptions.RequestException as e: raise e if req.status_code != 200: if req.status_code == requests.codes['not_found']: raise Exception("{} is not available on the API server (404)".format(call.value)) elif req.status_code == requests.codes['forbidden']: if self.api_key and self.api_key.id: self.api_key.disabled = True db.session.add(self.api_key) db.session.commit() raise AuthenticationException(self.key_id) else: raise Exception("Eve API server exception.") request_data = req.text prefix, _, data = req.text.partition('\n') if prefix.strip() != "<?xml version='1.0' encoding='UTF-8'?>": raise Exception("Data returned doesn't seem to be XML!") if isinstance(data, unicode): data = data.encode('UTF-8') data = xml(data)['eveapi'] result = bunchify(data['result'], 'result') data = Bunch(data) if len(result) == 1: result = getattr(result, result.keys())[0] redis.set(cache_key, cPickle.dumps((arrow.get(data.cachedUntil), result), -1)) return result
def update_groups(self, model): session = db.create_scoped_session() redis.set('newauth_ipb_groups', json.dumps([ group.name for group in session.query(Group).all() ]))
def update_contacts(self, model): session = db.create_scoped_session() redis.set('newauth_ipb_contacts', json.dumps([ contact.name for contact in session.query(AuthContact).all() ]))