def find_data(self, entity_name, version, data): """ Find data according to data query Args: entity_name (str): entity name version (str/None): entity version data (dict): data contains query and projection field Returns: - dict - result of search and projection query """ try: if version is not None: LOGGER.debug("%s - %s -%s", 'POST', self.data_api.find[entity_name][version], data['query']) response = POST(self.data_api.find[entity_name][version], data) else: LOGGER.debug("%s - %s -%s", 'POST', self.data_api.find[entity_name], data['query']) response = POST(self.data_api.find[entity_name], data) self.log_response(response) return response except BeanBagException: LOGGER.exception("Find data failed") LOGGER.debug(json.dumps(data))
def update_data(self, entity_name, version, data): """ Update data according to data query and update field Args: entity_name (str): entity_name version (str/None): entity version data (dict): data contains query and update field Returns: - dict - lightblue response """ try: if version is not None: LOGGER.debug("%s - %s -%s", 'POST', self.data_api.update[entity_name][version], data['query']) response = POST(self.data_api.update[entity_name][version], data) else: LOGGER.debug("%s - %s -%s", 'POST', self.data_api.update[entity_name], data['query']) response = POST(self.data_api.update[entity_name], data) self.log_response(response) return response except BeanBagException: LOGGER.exception("Update data failed") LOGGER.debug(json.dumps(data))
def test_bb(): s = FakeSession() b = BeanBag("http://www.example.org/path/", session=s) assert str(b) == "http://www.example.org/path/" s.expect("GET", "http://www.example.org/path/") GET(b) s.expect("GET", "http://www.example.org/path/", params=dict(a=1, b=2)) GET(b(a=1, b=2)) s.expect("PUT", "http://www.example.org/path/") PUT(b._, None) s.expect("PATCH", "http://www.example.org/path/") PATCH(b._, None) s.expect("DELETE", "http://www.example.org/path/") DELETE(b._) s.expect("POST", "http://www.example.org/path/foo", data={"a": 1}) POST(b.foo, dict(a=1)) s.expect("GET", "http://www.example.org/path/", params=dict(status=300)) with pytest.raises(BeanBagException) as e: GET(b(status=300)) assert "Bad response code: 300" == e.value.msg s.expect("GET", "http://www.example.org/path/", params=dict(result="BAD")) with pytest.raises(BeanBagException) as e: GET(b(result="BAD")) assert "Could not decode response" == e.value.msg
def test_sane_inheritance(): class MyBeanBag(BeanBag): def helper(self, param): pass def encode(self, body): return super(~MyBeanBag, self).encode(body) def decode(self, response): return super(~MyBeanBag, self).decode(response) s = FakeSession() bb = MyBeanBag("http://www.example.org/path", session=s) assert type(bb) is MyBeanBag assert type(bb.subpath) is MyBeanBag assert type(bb[1]) is MyBeanBag assert hasattr(~MyBeanBag, "helper") s.expect("GET", "http://www.example.org/path/") GET(bb) s.expect("POST", "http://www.example.org/path/foo", data={"a": 1}) r = POST(bb.foo, dict(a=1)) assert type(r) is AttrDict assert r.data == '{"a": 1}' and r.method == 'POST'
def listRRs(self, name=None, type=None, data=None): payload = {} if name is not None: payload['name'] = name if type is not None: payload['type'] = type if data is not None: payload['data'] = data return POST(self.beanbag.listRRs, payload)
def test_parse_with_nfsnbeanbag(self): """ The NfsnBeanBag class can handle the 'application/x-nfsn-api' content-type in the server's HTTP response. """ nfsn = NfsnBeanBag(self.endpoint_url) httpretty.register_uri(httpretty.POST, self.api_url, body=self.request_callback) assert POST(nfsn.dns['example.com'].listRRs)
def test_parse_fail_with_beanbag(self): """ An ordinary BeanBag object will fail because of the 'application/x-nfsn-api' content-type header in the server's HTTP response. """ nfsn = BeanBag(self.endpoint_url) httpretty.register_uri(httpretty.POST, self.api_url, body=self.request_callback) # When this test no longer raises a BeanBagException, it's possible # that the BeanBag authors might have updated their decoding function # to be more lax about handling non-application/json content-types. If # that's the case, this NfsnBeanBag wrapper class might become # unnecessary. with pytest.raises(BeanBagException): POST(nfsn.dns['example.com'].listRRs)
def removeRR(self, name, type, data): payload = {'name': name, 'type': type, 'data': data} return POST(self.beanbag.removeRR, payload)
def listForwards(self): return POST(self.beanbag.listForwards)
def removeWarning(self, balance): return POST(self.beanbag.removeWarning, {'balance': balance})
def addWarning(self, balance): return POST(self.beanbag.addWarning, {'balance': balance})
def addSite(self, site): return POST(self.beanbag.addSite, {'site': site})
def removeAlias(self, alias): return POST(self.beanbag.removeAlias, {'alias': alias})
def addAlias(self, alias): return POST(self.beanbag.addAlias, {'alias': alias})
def setForward(self, forward, dest_email): payload = {'forward': forward, 'dest_email': dest_email} return POST(self.beanbag.setForward, payload)
def removeForward(self, forward): return POST(self.beanbag.removeForward, {'forward': forward})
def addRR(self, name, type, data, ttl=None): payload = {'name': name, 'type': type, 'data': data} if ttl is not None: payload['ttl'] = ttl return POST(self.beanbag.addRR, payload)
def updateSerial(self): return POST(self.beanbag.updateSerial)