{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Web Applications with Flask\n",
    "\n",
    "In networking *clients* are computers or programs that send requests; *servers* are computers or programs that respond to those requests.\n",
    "\n",
    "Any web browser is an example of a client.  You have also written Python programs with `requests` and/or `selenium` that make requests, and thus are clients.\n",
    "\n",
    "In this reading, we'll focus on the other side: servers.  As a data scientist, working with data dashboards (with live stats, plots, etc) is one scenario where you may find yourself writing server code.\n",
    "\n",
    "There are many Python packages to help write web servers.  Django is the most popular.  We'll use the second most popular, Flask, as it is much easier to learn.\n",
    "\n",
    "## Preliminary Setup\n",
    "\n",
    "Before we make a web server, we'll create a selenium browser because we'll need a client to test our server's ability to respond to requests.  We'll also create a simple `visit` function that shows us what is available at a given URL."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "import requests\n",
    "from IPython.core.display import Image\n",
    "from multiprocessing import Process\n",
    "\n",
    "from selenium.webdriver.chrome.options import Options\n",
    "from selenium.webdriver.chrome.service import Service\n",
    "from selenium.webdriver.common.by import By\n",
    "from selenium.common.exceptions import NoSuchElementException\n",
    "from selenium import webdriver\n",
    "from IPython.core.display import Image, display\n",
    "import pandas as pd\n",
    "\n",
    "options = Options()\n",
    "options.headless = True # headless means \"no graphical interface\"\n",
    "service = Service(executable_path=\"chromium.chromedriver\")\n",
    "b = webdriver.Chrome(options=options, service=service)\n",
    "\n",
    "def visit(url, source=False):\n",
    "    if source:\n",
    "        r = requests.get(url)\n",
    "        return r.text\n",
    "    else:\n",
    "        b.get(url)\n",
    "        b.save_screenshot(\"tmp.png\")\n",
    "        return Image(\"tmp.png\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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IiIishgGIEREREREZDEMQIiIiIiIyGIYgBARERERkcUwACEiIiIiIothAEJERERERBbDAISIiIiIiCyGAQgREREREVkMAxAiIiIiIrIYBiBERERERGQxDECIiIiIiMhiGIAQEREREZHFMAAhIiIiIiKLYQBCREREREQWwwCEiIiIiIgsxqq6Xl/ceSAiIiIiotdIQkJCgd/LFhAiIiIiIrIYBiBERERERGQxDECIiIiIiMhiGIAQEREREZHFMAAhIiIiIiKLYQBCREREREQWwwCEiIiIiIgshgEIERERERFZDAMQIiIiIiKyGAYgRERERERkMQxAiIiIiIjIYhiAEBERERGRxTAAISIiIiIii2EAQkREREREFsMAhIiIiIiILIYBCBERERERWQwDECIiIiIishgGIEREREREZDESvV6vL+5MEBERERHR6yMhIaHA72ULCBERERERWQwDECIiIiIishgGIEREREREZDEMQIiIiIiIyGIYgBARERERkcUwACEiIiIiIothAEJERERERBbDAISIiIiIiCyGAQgREREREVkMAxAiIiIiIrIYBiBErxmft31RsWp1VKxaHfMXLCzu7LwU167fEK6xYtXqOH7ylMXOnZycIjr36l9+tdi5iYiI/gsYgBARERERkcVYFXcGLCEqKgqnz5zD6TNnERAYiJiYWETHxECv08He3h7updxRtXJl1KtXF61btoS7e8nizjIVg/v3H+DEqb9x89ZtPHoUhMioKKSkpECv18PW1haODg4oX74c3qpaBc2aNkGD+vUgl8uLO9tEREREr5U3OgAJevwEK1b+hH1/7oder8/xmJjYWMTExuL+/Qfw238As2bPQ+eOHTB+3GeoUL6chXNMxeHK1Wv4ftGPuHzlaq7HJCYmIjExEc9DQnD23Hn8b/1GeHl5YvLEz/FBl84WzC0RERHR6+2N7YK18qef0aZ9J+z1+zPX4CMnOp0OfvsPoGOXD/H7tu0vMYf0KtiydRt69xuYY/BhZ2cHNzc3uLuXhJ2dncnrz5+HYMKkLzHnm/mWyCoRERHRG+GNawFRq9WYPGUa/tx/ULRfoVCgebMmaN6sKcqXK4eSbm6ARIK4uDjcvXcPp/4+jb//OQ2NRgMASE9Px1ez5iA2Ng5jPh1ZHJdCL9npM2cxa/Y8UYDapnUr9OzRDbVr+8LN1VV0fFRU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sgBcUVAoFPhs9CiM+GQozp2/gDNnz+Ghvz+CHj9BQkIiUlNTIZFIoFTawdHBERUqlEf1aj5o9H5DNKhf74VWsW/VsgXq16+HQ38dxpEjx+AfEIio6GhotVqUcHFBzZo10LZ1K3Tt0umFn8Gi5Obqip9WLMPtO3dx8NBfOP/vRYSEhCAuLh5SqRROTo6oUrky6r1XF90+6GoSLORm0oTx6NShPbbt3IWz584jIjwC6SoVSpZ0Q8UKFdC1cyd06tgeCoUCOp0OUqlU6CKVlp77OjujR41A82ZNsHHT77h05QoiIiKQmpoGR0cH+Lz1Fnp+1B1dOnUU7qmd0exZRfE96fZBV7Rv2wZ/HjiIf/45gzt37yEmJgYpqalQKpUo5e6OmjXfRtvWrdCyRfNi/WyJiIheBW9sFywiIiIiIno52AWLiIiIiIheCwxAiIiIiIjIYhiAEBERERGRxTAAISIiIiIii2EAQkREREREFsMAhIiIiIiILIYBCBERERERWQwDECIiIiIishgGIEREREREZDEMQIiIiIiIyGIYgBARERERkcUwACEiIiIiIothAEJERERERBbDAISIiIiIiCyGAQgREREREVkMAxAiIiIiIrIYBiBERERERGQxDECIiIiIiMhiGIAQEREREZHFMAAhIiIiIiKLYQBCREREREQWwwCEiIiIiIgshgEIERERERFZDAMQIiIiIiKyGAYgRERERERkMQxAiIiIiIjIYhiAEBERERGRxTAAISIiIiIii2EAQkREREREFsMAhIiIiIiILIYBCBERERERWQwDECIiIiIishgGIEREREREZDEMQIiIiIiIyGIYgBARERERkcUwACEiIiIiIothAEJERERERBbDAISIiIiIiCyGAQgREREREVkMAxAiIiIiov+zd9dhUWwNGMBfSkpFFMXCAEUBFUUkRCy4dmBf7O7uuNj9Xbu7FRO7FWwFRMEWCRsVRUqa+f5YdmDdRUFhuer7e559ZGfOzJxdd3bnnTnnDCkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkNAwgRERERESkN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urqycdNmQleuonatmlSuVJHgMqVp/mQzHq9Rm+PHT9zFbyBt8VZ4bQFcjYY3qjv01CIiIv8JBSAikmneeasP7Tt2ZsPGTTxevRa+hX2Ji43jyNGjWK1W/PyK0PzJpuk6Vp7cuXmiQT2WLF3Gux98REjoSraHhZM9e3YiIi5ivTEdb/16dShRojh79vxFi+dbUaFcOUJXreKff47xatfOVK9WlatXrzFm3ARm/DSL5k89SVa3rGzYaBLkmzRqaDvnwMHDcHNz5c1eqfekZNTqw+ZFhPFWOBQBEzfDxmMw9un0J6yLiIjcyxSAiEimqVihPHNmz2Ti5Cls3ryVY8eOAyZBvF7dOnTr2sU2lCo9+vf7mOjoaFavWcfKlatp1fJ53N3dGTz0K6KjzXRRLi4uTJsykYGDhxISEsqMn2ZRsKA3773zFp1f7gBA3Tq1GDl8GBMnT+GXOXOJiYmloLc33V7pQs/u3Wzn27Bpk937S+6Gp743v50wuRw1HoPVXexfQCgiInI/c7JaU3hLl4iIiIiISCouX7582/vqRYQiIiIiIuIwCkBERERERMRhFICIiIiIiIjDKAARERERERGHUQAiIiIiIiIOowBEREREREQcRgGIiIiIiIg4jAIQERERERFxGAUgIiIiIiLiMApARERERETEYRSAiIiIiIiIwygAERERERERh1EAIiIiIiIiDqMAREREREREHEYBiIiIiIiIOIwCEBERERERcRgFICIiIiIi4jAKQERERERExGEUgIiIiIiIiMMoABEREREREYdRACIiIiIiIg6jAERERERERBxGAYiIiIiIiDiMAhAREREREXEYBSAiIiIiIuIwCkBERERERMRhFICIiIiIiIjDKAARERERERGHUQAiIiIiIiIOowBEREREREQcRgGIiIiIiIg4jAIQERERERFxGAUgIiIiIiLiMApARERERETEYRSAiIiIiIiIwygAERERERERh1EAIiIiIiIiDqMAREREREREHCZLZlfgTh3652RmV0FEREREJMOK+BbM7CpkCier1WrN7EqIiIiIiMj94/Lly7e9r4ZgiYiIiIiIwygAERERERERh1EAIiIiIiIiDqMAREREREREHEYBiIiIiIiIOIwCkPvEu+9/hF9gEPUbNc3sqoiIiIiI3Lb7OgDZsnUbfoFB+AUG8e3osWmW79Grt638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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# test it on the course website\n",
    "visit(\"https://tyler.caraza-harter.com/cs320/s22/schedule.html\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<!doctype html>\n",
      "<html lang=\"en\">\n",
      "  <head>\n",
      "    <meta charset=\"utf-8\">\n",
      "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n",
      "    <meta name=\"description\" content=\"\">\n",
      "    <meta name=\"author\" content=\"\">\n",
      "\n",
      "    <!-- Google Auth stuff -->\n",
      "    <meta name=\"google-signin-scope\" content=\"profile email\">\n",
      "    <meta name=\"google-signin-client_id\" content=\"531980636037-3a6miiekf2ao8d0n7qv1fkrev8cbvvdt.apps.googleusercontent.com\">\n",
      "\n",
      "    <title>Tyler R. Caraza-Harter</title>\n",
      "\n",
      "\n",
      "...\n"
     ]
    }
   ],
   "source": [
    "print(visit(\"https://tyler.caraza-harter.com/cs320/s22/schedule.html\", source=True)[:500] + \"\\n...\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Flask Basics\n",
    "\n",
    "We be using Flask application objects (which we can name as we please) to create web servers:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "flask.app.Flask"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from flask import Flask, request\n",
    "\n",
    "my320app = Flask(\"example-server\")\n",
    "type(my320app)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To add pages to a Flask application, you write a function (called a *handler*) for each page; the function returns a string containing HTML corresponding to the page.\n",
    "\n",
    "Flask uses *routes* to map URLs to handler functions.  Putting `@APPLICATION_VARIABLE.route(\"/SOME_PATH_HERE\")` before a function to make it a handler for the given URL."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "@my320app.route(\"/\")\n",
    "def home():\n",
    "    return \"Home\"\n",
    "\n",
    "@my320app.route(\"/hello.html\")\n",
    "def handler1():\n",
    "    return '<html><body style=\"background-color:lightblue\"><i>hello</i><body></html>'\n",
    "\n",
    "@my320app.route(\"/world.html\")\n",
    "def handler2():\n",
    "    return '<html><body style=\"background-color:lightgreen\"><h1>world</h1><body></html>'\n",
    "\n",
    "#if __name__ == '__main__':\n",
    "#    app.run(\"0.0.0.0\", \"5000\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Generally, Flask applications are written as .py files.  You could paste the above two cells into a .py file, uncomment those last two lines, then run the .py file to start a server running your application.  Requests may keep coming in indefinitely, so the `app.run` function would essentially run forever, dealing with requests as they come in (well, at least until you manually killed it with `CONTROL`-`C`, `pkill`, or some other method).\n",
    "\n",
    "For the purposes of having our Flask server and selenium client in the same notebook, we'll do something a bit weird: run the server in the background from a cell, then send requests from the following code.  The following code starts the flask application in the background (don't worry about understanding it, as you'll probably use .py files for your own Flask applications, unless you yourself are writing a document like this to document Flask)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " * Serving Flask app 'example-server' (lazy loading)\n",
      " * Environment: production\n",
      "\u001b[31m   WARNING: This is a development server. Do not use it in a production deployment.\u001b[0m\n",
      "\u001b[2m   Use a production WSGI server instead.\u001b[0m\n",
      " * Debug mode: off\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)\n",
      "127.0.0.1 - - [09/Mar/2022 00:46:03] \"GET / HTTP/1.1\" 200 -\n",
      "127.0.0.1 - - [09/Mar/2022 00:46:04] \"GET /hello.html HTTP/1.1\" 200 -\n",
      "127.0.0.1 - - [09/Mar/2022 00:46:05] \"GET /world.html HTTP/1.1\" 200 -\n",
      "127.0.0.1 - - [09/Mar/2022 00:46:07] \"GET /missing.html HTTP/1.1\" 404 -\n",
      "127.0.0.1 - - [09/Mar/2022 00:46:11] \"GET /hello.html HTTP/1.1\" 200 -\n",
      "127.0.0.1 - - [09/Mar/2022 00:46:13] \"GET /world.html HTTP/1.1\" 200 -\n"
     ]
    }
   ],
   "source": [
    "p = Process(target=my320app.run)\n",
    "p.start()\n",
    "time.sleep(1) # give it time to get going"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The \"Running ...\" line above shows that we can visit the page at http://127.0.0.1:5000/.  Note that 127.0.0.1 is a special \"local\" IP address, referring to the computer where the code is running.  Let's send requests to see the strings returned by those three pages.  You can see \"GET ...\" messages above corresponding to page visits.  As this notebook was executed, those messages were added above as code below executed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Home'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/\", source=True) # calls \"home\" function after @my320app.route(\"/\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'<html><body style=\"background-color:lightblue\"><i>hello</i><body></html>'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/hello.html\", source=True) # calls handler1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'<html><body style=\"background-color:lightgreen\"><h1>world</h1><body></html>'"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/world.html\", source=True) # calls handler2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we try a page that doesn't exist (that is, no route maps it to a handler), Flask will automatically return HTML (as a string) containing an error message."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\\n<title>404 Not Found</title>\\n<h1>Not Found</h1>\\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\\n'"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/missing.html\", source=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When a web browser receives one of the above strings containing HTML, it uses it to show a formatted page:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMgIEAAAICNAAACAjAABAAAyAgQAAMj8N6aNWj3lg5zeAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/hello.html\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADH/B3AzfeaXb+ApAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/world.html\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The \":5000\" part of the above URLs means Flask is *listening* on port 5000.  Only one process can listen on each port at a time.  We could start other Flask servers on other ports, but we will get an \"Address already in use\" error if we try again on the same port:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " * Serving Flask app 'example-server' (lazy loading)\n",
      " * Environment: production\n",
      "\u001b[31m   WARNING: This is a development server. Do not use it in a production deployment.\u001b[0m\n",
      "\u001b[2m   Use a production WSGI server instead.\u001b[0m\n",
      " * Debug mode: off\n",
      "[Errno 98] Address already in use\n"
     ]
    }
   ],
   "source": [
    "try:\n",
    "    my320app.run(\"127.0.0.1\", \"5000\")\n",
    "except OSError as e:\n",
    "    print(e)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will need to terminate the previous background Flask instance before starting anything else on port 5000."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "p.terminate()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Query Strings\n",
    "\n",
    "Sometimes, we'll want to send input to a Flask handler that it can use when constructing the output.  One way is with a query string.\n",
    "\n",
    "Consider this URL: `http://127.0.0.1:5000/hello.html?name=tyler`.  There are a few parts to this:\n",
    "* **protocol** is \"HTTP\"\n",
    "* **IP address** of machine is \"127.0.0.1\"\n",
    "* **port number** of process on machine is \"5000\"\n",
    "* **resource** is \"/hello.html\"\n",
    "* **query string** is \"name=tyler\"\n",
    "\n",
    "The resource is what we'll use with the Flask route.  The query string gets loaded to a kind of dictionary called `request.args`, where \"name\" is a key and \"tyler\" is a value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " * Serving Flask app 'example-server' (lazy loading)\n",
      " * Environment: production\n",
      "\u001b[31m   WARNING: This is a development server. Do not use it in a production deployment.\u001b[0m\n",
      "\u001b[2m   Use a production WSGI server instead.\u001b[0m\n",
      " * Debug mode: off\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ImmutableMultiDict([('name', 'tyler')])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "127.0.0.1 - - [09/Mar/2022 00:46:20] \"GET /hello.html?name=tyler HTTP/1.1\" 200 -\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ImmutableMultiDict([('name', 'tyler')])\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "127.0.0.1 - - [09/Mar/2022 00:46:20] \"GET /hello.html?name=tyler HTTP/1.1\" 200 -\n"
     ]
    }
   ],
   "source": [
    "app2 = Flask(\"example-server\")\n",
    "\n",
    "@app2.route(\"/hello.html\")\n",
    "def welcome():\n",
    "    print(request.args)\n",
    "    username = request.args[\"name\"]\n",
    "    return f'<h1>Welcome {username}!</h1>'\n",
    "\n",
    "p = Process(target=app2.run)\n",
    "p.start()\n",
    "time.sleep(1) # give it time to get going"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'<h1>Welcome tyler!</h1>'"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/hello.html?name=tyler\", source=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAAXNSR0IArs4c6QAAHaFJREFUeJzt3XuwXeP9+PHPyeVEInIRt4g0rklFy6BEpIQSStziUiKSjoYQWtPOuLSjVcN3BqWDKqXTUq2ZZiJFQymqopEEQQwy1XGNW4igjQhB8vz+MGf/rLPPkXMO+ZxeXq+ZM5O11rPWfvbK+WO/z95r7YZSSgkAAIAEXTp7AgAAwP8OAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKQRIAAAQBoBAgAApBEgAABAGgECAACkESAAAEAaAQIAAKT5rwyQ3XbbLRoaGup+7r///s6eGu3w5z//ucX/x3333bezpwYAQAetMUBOP/30Fl8EfvJn66237vAEWnuR2dDQEOeee26HjvnHP/6xw/vy72PMmDHxwAMPxFZbbdXZU2nRvvvuW/l9HT58eGdPCQDg394aA+SMM86I6dOnx4477li3bf/9948bb7wx/vSnP7W6/1tvvRV/+ctfYv78+S1uHz16dMyZMyeuu+66GDp0aEREjBgxImbMmBGnnnpqW59HxcYbbxwjRozo0L78++jatWuMGDEiNthgg86eSos23XTTyvLAgQM7aSYAAP851hggG2+8cRx11FHxve99r27bO++8E0ceeWQMGzas1f1/8pOfxJgxY2KPPfaIpUuX1m3v2bNn7L777jFx4sTa9tNOOy2OOOKI2HDDDdvzXCBV8wBpvgwAQL02XwMybty46NWrV2Xd3Llz49lnn211nw8++CCuvfbaiIhYuXJlXHfdda2OnT17drz11lvR2NgYBx10UFunRSd75JFHomvXrtHQ0BCXXHJJZ08nlQABAGi/NgdI796945BDDqlb/7vf/a7VfWbMmBFvvPFGbfnqq6+OUkqLY2+99daIiNhnn32iT58+bZ0WnaiUEqeeemqsXr26s6fSKZp/5MpHsAAA1qxdd8GaMGFC3bobbrih1fFXX311Zfm5556LO++8s8WxTQEybty49kyJTvTrX/86Hnzwwc6eRqfxDggAQPu1K0D233//uguCn3322ZgzZ07d2IULF8bs2bPr1v/iF7+oW/f3v/89nn766ejSpUsceuihLT72rFmzYsKECbHFFltEr169omfPnjF06NA46aST4umnn27P06jz7rvvxs9//vMYM2ZMbLTRRtHY2Bj9+/ePLbfcMvbcc8+YOnVqPPXUU3X7vfnmm3H++efH7rvvHhtuuGE0NjbGgAEDYsSIEXHOOee0eM3Lcccd1+Idv/7xj3/EH/7wh9hvv/2if//+0dDQEI2NjbH11lvHWWedFcuXL4+IiCeeeCLOOeec2H333WPAgAHRp0+f2HnnneOaa6751Of4eZ6/c889N/bcc8+6mwScccYZtedz+umnx2GHHdbqHc6+9KUv1fZ7+eWX67Yfdthh7ZpTRMSqVavi+uuvjwMPPDAGDhwYjY2Nsd5668VOO+0U5557bvzrX/+qjN9ss81anNvMmTNrYx599NE4+OCDY7311ouvfvWrlf0FCABAB5R2mjp1aomIys9JJ51UN+7UU0+tGxcRpWvXruXFF1+sjL3oootKRJQ999yz7jirVq2qPGb37t3LxIkTy0477VRb17t37zJ37tzKfnfccUfdY8+ePbvu+PPmzSuDBw+ujWloaChjxowpxx9/fBkxYkRt/Y033ljZ79577y39+/evbR8+fHiZMmVK2WKLLWrr+vXrV+67777Kfq+//nq58MIL6+Y2YMCA0qNHjzJs2LDSq1evuu177LFHGTFiROnVq1f54he/WHr06FE35oorrvjczt+nmTJlSpk4cWLd4++6665l8uTJZfLkyWX69Oll0aJF5YADDqgbd+GFF5YXXnihdrzVq1eXBQsWlCOOOKJERBk/fnx59dVXa9s/+f8QEWWfffapm9PSpUvLyJEja2M22mijcuKJJ5ZNN920tm6bbbYpS5cure3zyCOPlCuuuKI0NDRUjn/DDTeUVatWlTPPPLN06dKltn7UqFGVx3zvvfcq+z3zzDNtPocAAP+r2h0g999/f90Lyv79+5f333+/Nmb58uWlb9++JSLKDjvsUDf+hz/8YeWYo0aNKhFRLr300rrHu/jiiyv7XnzxxaWUUpYtW1bWXXfdyovLVatW1fZrS4AsXLiw9OnTpxIf06ZNq4y55JJL6gLkhRdeqOw3aNCgsnz58lJKKW+88Ubp169fJUJefvnlyjHnz5/f4jlZsWJF7RhDhw6tG3P99deXDz/8sJRSyqJFi8omm2xS2T548ODP7fytydtvv103v6Zjf9JDDz1UN+6cc85p8Zi77rpriYiycOHCyvq2BMjYsWMrY+bPn19KKeWee+6prJ88eXLdvl27dq2Mueyyy8ohhxxSN+/mAVJKqURo0/8fAACta3eAlFIqf+Vv+pkxY0Zt+y9/+cvauwItvQDdZJNNygcffFBK+fjFdtNfmT/5V/FSSlmxYkXlxXzzMU3h0vQza9as2ra2BMjo0aMr24855pi65/rss8/WBciUKVMq+33nO9+p7HP88cd/6vaWAuTmm2+ujLn00kvrxjz88MOVMWeddVbdmCVLlnwu529N2hogpZSyyy67VMYNHDiw9v/f5Kmnnmr1Rf6aAmTOnDmV7Ztvvnlt28qVKyvvcKyzzjrlvffeq+zfPECa4nLkyJHl0ksvLbNmzSqDBw9ucW7bbbddLTQBAFizdl0D0uTYY4+tW/fb3/629u+mi8+nTp0au+yyS3zlK1+pjH3ttdfi5ptvjoiI2267LVavXh077bRTDBkypDLurrvuin/+85+15YaGhvjCF75QW15//fUr4+fNm9fm5/D444/HfffdV1n3rW99q27clltuGQcddFAMGDCgtu7GG2+sjGn+PShf/vKXK8vTpk1r87yatPTt3++///4axyxbtqz277V5/trj29/+dmV58eLFtf//Jtdff31EREyZMqXdx2/+//HJ36PGxsbo3bt3bfn999+Pxx577FOPN2TIkJg7d27MnTs3vvvd78bo0aPjlFNOaXFs03Ufrv8AAGibDgVIS3fDuuOOO2Lp0qXx0EMPxaOPPhq9evWKiRMnRsTHIdJc08XoTXe/Ovzww+vGPPLII5Xlnj17RkNDQ225R48ele2vvvpqm5/D3XffXVluaGiI3XbbrcWxt956a+y9994REfH888/H22+/Xdn+yTiJiNhoo40qy2+88UYsWrSozXOLiOjevXvdutLsFsZrGrM2z197HH300XU3L7jyyitr/169enXccMMN0a9fvzjqqKPaffzmz3PdddetLLf3eR544IExcuTIyrqpU6fG//3f/9WNbbr1rlvwAgC0TYcCZNttt40dd9yxsu7DDz+MadOm1cLi2GOPjb59+0ZExPjx46N///6V8bNmzYrHHnss7rrrrohoOUBee+21yvKKFSsqdyuaMWNGZXvTnaLa4vnnn68s9+3bN9Zbb7017rd48eK6dT179qwsN38B3Np+a9vaPH/t0aNHj5g8eXJl3d/+9rd48sknIyLi3nvvjZdeeikmTpxYdy7bovnzvP322yvPs/ndyDryPPv27Rt77bVX3XrvgAAAtE+3ju44YcKEWLBgQWXd1VdfHc8991xERJx88sm19T179oxvfvObcdlll1XGT5o0KZYvXx7Dhg2Lbbfdtu4xVqxYUVnu0aNHHHPMMa3Oaffdd2/z/JvfkrX5X8lb03xOERFdu3b91OWItffi/tOszfPXXieffHJcfPHFlS8tvOqqq+Kqq676TB+/iqh/nkOGDGkxFppsueWWHXqclggQAID26XCAjB8/Ps4888zKC8qFCxdGRMQuu+wSO++8c2X81KlT4/LLL698ROiJJ56IiJbf/YiofyehsbExfvOb33R0yp967E9eK9Ge/SI+/v6JT1uOiMp1CFnW5vlrr8033zzGjh1b+8hdxMdfYvmjH/0obrrpphg5cmTlu0Hao/nz3H777dOe57hx42Lw4MGx3XbbpTweAMB/ug59BCvi47/4tvZX5k+++9Fk6NCh8bWvfa3F8a0FyKBBgyrLLb370FHNL3hfuXJlvPPOO2vcr6W/dL/33nuV5Zbe7eiMv5CvzfPXEc2/uPCdd96JI488Mt59990Ov/sR0bnPc9CgQbHrrru2eEMAAADqdThAIlq+GL1fv36tfsynpYvRBw8eXHeXrCbN30VZtWpV3bUbHTVq1Ki6dQ888MAa9xsyZEjdBdXNrzF4/fXXK8sbbLBB5e5TWdbm+euI/fbbL7bZZpvKurlz50bfvn3jG9/4RoeP2/x5tveb3TtqwYIFsdVWW8WgQYNi4MCBcc8996Q8LgDAf7LPFCBHHHFErLPOOpV1kyZNil69erU4/tBDD617J2DcuHGtHn/MmDF1d5i69tprOzjbqj322COGDh1aWffTn/607k5TLWn+Yvmpp56qLDd9tKxJR+7s9HlYm+evZ8+e0aVL9dfnk7cAbklDQ0OLEXrccce1+jvTFs2D98UXX0yJgRNOOKEWdEuWLIljjz22xY/fAQDw/32mAOnbt2+MHTu2sq6lj1816datW5x44omVda19/Cri42sWzjvvvMq6Cy64IC644IJ48803a+vefffdmD9/frvuNNXQ0BDXXHNN5YLxO++8MyZMmBDPPPNMbd3q1avjpZdeiscff7y27vvf/3706dOntnzLLbfUPnb1xhtvxC233FLb1qdPn/jBD37Q5nl9ntbm+evRo0dsvfXWlXXTpk2LJUuWRET9namaHH/88XWx0fx3or123nnnuigcP358TJ8+vfLdKW+++Wbce++98dFHH32mx4v4+HbHTXfxarJkyZK6d78AAGjms36T4U033VT7BunRo0evcfwrr7xSunXrViKibLDBBuWjjz5a4z5nn3125dusm3569+5d1llnndry3XffXXuMH//4x3XjL7roorJ48eLKsW+77bYyYMCAurE9e/YsvXv3rj3upEmTKvv99a9/LX379q2NHz58eJkyZUrlW+LXX3/9ct9991X2W7JkSbnooovqHu/0008vr732Winl42+HP/vss+vGnHfeebX5v/LKK+Xkk0+uG3PllVeWpUuXfqbz11bXXXdd3TG7dOlSGhsbS0SUDz/8sMX9TjjhhNr4XXfdtdXjf/DBB2XevHllq622qjzGdtttVx588MHK8ZctW1YOOOCAuvk0NDSUvn371n7nunfvXt59991SSimvvfZauf3220uXLl0q+xx88MFl9uzZdeexub333ruy39Zbb11Wr17drnMIAPC/5jMHyMqVK0v//v1LRJTf//73bdrn8MMPLxFRJk+e3ObHeeyxx8pJJ51Uhg8fXntBuf7665fddtutnHHGGeXhhx+ujR0yZEjdC9Gmn2HDhtUde9myZeVnP/tZGTt2bNlss81Kr169Svfu3cumm25a9ttvv3LFFVeUFStW1O23ZMmScvbZZ5edd9659OvXr3Tr1q0MGDCgjBw5spx//vnlrbfeqttnwoQJrc7t6KOPLqWUctJJJ7U6ZuzYsaWUUg499NBWx7R0Xttz/tpj5syZZa+99ip9+vQp3bp1K4MGDSpjx44t1157bav7LFiwoDbXX/3qV62OaylwPvnT0u/bzJkzy9FHH10233zz0qtXr9LY2FgGDhxY9ttvv3LBBReUF198sTZ20KBBn3r8QYMGfepzX7RoUdl///1L7969y6hRo8qTTz7ZhjMGAPC/raGUNlz0AJ+zwYMHx7Jly+LVV19t8dbGAAD8d/pM14BAR8yePTtefvnlmDRpkvgAAPgfI0BYa1auXFm52L3JJZdcEhERp5xySvaUAADoZAKEtWbevHmx4447Vm5t/NBDD8XMmTPj61//emy77badODsAADqDAGGteumll2LOnDkREbF48eKYOHFidO/ePS688MJOnhkAAJ2hW2dPgP9+Bx54YGy//fbxxBNPxLJly+Lyyy+PHXbYobOnBQBAJ/AOCGtN//794wtf+EIsX7485s+fH1tuuWVMnz49TjvttM6eGgAAncRteAEAgDTeAQEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0ggQAAAgjQABAADSCBAAACCNAAEAANIIEAAAII0AAQAA0vw/A6G+yW1soXsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/hello.html?name=tyler\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "p.terminate()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If there are multiple arguments in the query string, you can just use the `&` symbol to separate the key/value pairs: `?key1=val1&key2=val2`.  Below is an example of pages that do arithmatic.  They also use multi-line strings via the triple quotes.  The `.format` method replaces the `{}` slots in the string template."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " * Serving Flask app 'example-server' (lazy loading)\n",
      " * Environment: production\n",
      "\u001b[31m   WARNING: This is a development server. Do not use it in a production deployment.\u001b[0m\n",
      "\u001b[2m   Use a production WSGI server instead.\u001b[0m\n",
      " * Debug mode: off\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)\n",
      "127.0.0.1 - - [09/Mar/2022 00:46:27] \"GET /add.html?x=300&y=20 HTTP/1.1\" 200 -\n",
      "127.0.0.1 - - [09/Mar/2022 00:46:28] \"GET /subtract.html?x=1000&y=1 HTTP/1.1\" 200 -\n"
     ]
    }
   ],
   "source": [
    "app2 = Flask(\"example-server\")\n",
    "\n",
    "@app2.route(\"/add.html\")\n",
    "def add():\n",
    "    x = float(request.args[\"x\"])\n",
    "    y = float(request.args[\"y\"])\n",
    "    total = x + y\n",
    "    html = \"\"\"\n",
    "    <html>\n",
    "      <body style=\"background-color:lightblue\">\n",
    "        <h1>ADD</h1>\n",
    "        {} + {} = {}\n",
    "      <body>\n",
    "    </html>\n",
    "    \"\"\"\n",
    "    return html.format(x, y, total)\n",
    "\n",
    "@app2.route(\"/subtract.html\")\n",
    "def sub():\n",
    "    x = float(request.args[\"x\"])\n",
    "    y = float(request.args[\"y\"])\n",
    "    total = x - y\n",
    "    html = \"\"\"\n",
    "    <html>\n",
    "      <body style=\"background-color:lightblue\">\n",
    "        <h1>SUB</h1>\n",
    "        {} - {} = {}\n",
    "      <body>\n",
    "    </html>\n",
    "    \"\"\"\n",
    "    return html.format(x, y, total)\n",
    "\n",
    "p = Process(target=app2.run)\n",
    "p.start()\n",
    "time.sleep(1) # give it time to get going"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxPw/vxFZawSCFqoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/add.html?x=300&y=20\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIOb/AXGZFxcmeoEkAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "visit(\"http://127.0.0.1:5000/subtract.html?x=1000&y=1\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "p.terminate()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# cleanup Selenium\n",
    "b.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
