def test_good_json(self): expected = {"title": "test"} body = json.dumps(expected) request = Request.blank("/", method="PUT", content_type="application/json", body=body) result = nanoweb.decode_body(request) self.assertEqual(result, expected)
def show(request): nanoweb.allowed(request, ["GET", "PUT", "DELETE"]) content_type = nanoweb.agent_accepts(request, ["text/plain", "application/json"]) # Set up the encoders encoders = {"text/plain": lambda d: d['title']} encoders.update(nanoweb.encoders) # Set up the decoders decoders = {"text/plain": lambda s: {"title": s}} decoders.update(nanoweb.decoders) url = request.environ['routes.url'] slug = request.urlvars['slug'] if request.method == "PUT": data = nanoweb.decode_body(request, decoders=decoders) with shows_db() as shows: shows[slug] = data['title'] body = nanoweb.encode_body(content_type, data, encoders=encoders) return Response(body, content_type=content_type) elif request.method == "DELETE": try: with shows_db() as shows: del shows[slug] return HTTPNoContent() except KeyError: return HTTPNotFound() elif request.method == "GET": try: with shows_db() as shows: name = shows[slug] except KeyError: return HTTPNotFound() data = {"title": name, "slug": slug} body = nanoweb.encode_body(content_type, data, encoders=encoders) return Response(name, content_type="text/plain")
def test_valid_schema(self): json_schema = {"type": "object", "properties": { "title": {"type": "string"}, "pub_date": {"type": "string", "format": "date-time"} }} expected = {"title": "Test", "pub_date": "2011-07-13T00:00:00Z"} body = json.dumps(expected) request = Request.blank("/", method="PUT", content_type="application/json", body=body) result = nanoweb.decode_body(request, json_schema=json_schema) self.assertEqual(result, expected)