def _serialize_external_object(self, o): yield "System", "Python" if callable(o): yield "Type", "PythonFunction" try: # force tuple to avoid calling this method again on `map`. yield "Arguments", tuple(map(force_text, first(inspect.getfullargspec(o)))) except TypeError: # this function can fail with TypeError unsupported callable pass else: yield "Type", "PythonObject" if hasattr(o, "__name__"): yield "Command", force_text(o.__name__) else: yield "Command", force_text(o.__class__.__name__) is_module = inspect.ismodule(o) yield "IsModule", is_module if not is_module: module = inspect.getmodule(o) if module: yield "Module", force_text(module.__name__) yield "IsClass", inspect.isclass(o), yield "IsFunction", inspect.isfunction(o), yield "IsMethod", inspect.ismethod(o), yield "IsCallable", callable(o),
def test_django_app(self): resp = self.client.get("/") self.assertEqual(resp.status_code, 200) self.assertEqual(resp.content, b"hello from django") resp = self.client.get("/form") self.assertEqual(resp.status_code, 200) self.assertEqual(first(resp["content-type"].split(";")), "text/html") resp = self.client.get("/api") self.assertEqual(resp.status_code, 400) self.assertEqual(resp["content-type"], "application/json") resp = self.client.get("/api?x=2") self.assertEqual(resp.status_code, 200) self.assertEqual(resp["content-type"], "application/json") self.assertEqual(json.loads(resp.content), {"x": "2"}) resp = self.client.post("/api", {"x": SimpleUploadedFile("foo.txt", b"foobar")}) self.assertEqual(resp.status_code, 200) self.assertEqual(resp["content-type"], "application/json") self.assertEqual(json.loads(resp.content), {"x": "foobar"})
def _serialize_external_object(self, o): yield "System", "Python" yield "Type", "PythonFunction" if hasattr(o, '__name__'): yield "Name", force_text(o.__name__) else: yield "Name", force_text(o.__class__.__name__) is_module = inspect.ismodule(o) yield "IsModule", is_module if not is_module: module = inspect.getmodule(o) if module: yield "Module", force_text(module.__name__) yield "IsClass", inspect.isclass(o), yield "IsFunction", inspect.isfunction(o), yield "IsMethod", inspect.ismethod(o), yield "IsCallable", callable(o), if callable(o): try: yield "Arguments", map(force_text, first(inspect.getargspec(o))) except TypeError: #this function can fail with TypeError unsupported callable pass
def formatted_time(self, function, *args, **opts): time = sum( first(timed(function)(*args, **opts)) for i in range(self.repetitions)) return "%.5f" % (time / self.repetitions)
def run_all(args, **opts): done = tuple(iterate(*args)) if done and len(done) > 1: return asyncio.ensure_future(asyncio.wait(done), **opts) elif done: return asyncio.ensure_future(first(done), **opts) return done
def demo_choices(self): yield None, "form.wl" for path in os.listdir(self.demo_path()): if os.path.isdir(path): yield path, path if is_wl_code(path): yield first(os.path.splitext(path)), path
def generate_http_response(session, request, expression): wl_req = django_request_meta(request) response = process_generate_httpresponse_expression( auto_wait( session.evaluate( make_generate_httpresponse_expression(wl_req, expression)))) http = HttpResponse(content=response.get("BodyByteArray", b""), status=response.get("StatusCode", 200)) for rule in response.get("Headers", ()): http[first(rule.args)] = last(rule.args) return http
async def test_aiohttp(self): for method, path, data in ( ("GET", "/request/", []), ("GET", "/request/bar/bar?a=2", []), ("POST", "/request/some/random/path", { "a": "2" }), ): parsed = urlparse(path) resp = await self.client.request(method, path, data=data or None) self.assertEqual(resp.status, 200) self.assertEqual( await resp.json(), [method, "http", "127.0.0.1", parsed.path, parsed.query, data], ) for cached in (True, False): root = cached and "/cached" or "/app" resp1 = await self.client.request("GET", root + "/random.wl") resp2 = await self.client.request("GET", root + "/random.wl") self.assertIsInstance(float(await resp1.text()), float) (cached and self.assertEqual or self.assertNotEqual)(await resp1.text(), await resp2.text()) for loc, content in ( ("", '"Hello from / in a folder!"'), ("/", '"Hello from / in a folder!"'), ("/index.wl", '"Hello from / in a folder!"'), ("/foo", '"Hello from foo"'), ("/foo/", '"Hello from foo"'), ("/foo/index.wl", '"Hello from foo"'), ("/foo/bar", '"Hello from foo/bar"'), ("/foo/bar", '"Hello from foo/bar"'), ("/foo/bar/index.wl", '"Hello from foo/bar"'), ("/foo/bar/something.wl", '"Hello from foo/bar/something"'), ): resp = await self.client.request("GET", root + loc) self.assertEqual(resp.status, 200) self.assertEqual(await resp.text(), content) for loc in ("/some-random-url", "/404", "/some-/nonsense"): resp = await self.client.request("GET", root + loc) self.assertEqual(resp.status, 404) for fmt in ("wxf", "mx", "m", "wl", "json"): resp = await self.client.request("GET", root + "some." + fmt) self.assertEqual(resp.status, 200) self.assertEqual(len(await resp.json()), 4) self.assertEqual((await resp.json())[0:3], ["hello", "from", fmt.upper()]) self.assertIsInstance((await resp.json())[-1], int) self.assertEqual(resp.headers["Content-Type"], "application/json") resp = await self.client.request("GET", "/") self.assertEqual(resp.status, 200) self.assertEqual(await resp.text(), "Hello from aiohttp") for root in ("", "/app"): resp = await self.client.request("GET", root + "/api") self.assertEqual(resp.status, 400) self.assertEqual((await resp.json())["Success"], False) self.assertEqual(resp.headers["Content-Type"], "application/json") resp = await self.client.request("GET", root + "/api?x=a") self.assertEqual(resp.status, 200) self.assertEqual((await resp.json())["x"], "a") self.assertEqual(resp.headers["Content-Type"], "application/json") resp = await self.client.request("GET", root + "/form") self.assertEqual(resp.status, 200) self.assertEqual(first(resp.headers["Content-Type"].split(";")), "text/html") resp = await self.client.request("POST", root + "/form", data={"x": "foobar"}) self.assertEqual(resp.status, 200) self.assertEqual((await resp.json())["x"], "foobar") self.assertEqual(resp.headers["Content-Type"], "application/json") data = FormData() data.add_field("x", b"foobar", filename="somefile.txt") resp = await self.client.request("POST", root + "form", data=data) self.assertEqual(resp.status, 200) self.assertEqual((await resp.json())["x"], "foobar") self.assertEqual(resp.headers["Content-Type"], "application/json")
def formatted_time(self, *args, **opts): time = sum( first(self.export(*args, **opts)) for i in range(self.repetitions)) return "%.5f" % (time / self.repetitions)