Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
 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()
     ]))
Beispiel #4
0
 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()
     ]))