{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Ingredient: Using anonymizers\n",
    "\n",
    "This example shows a shelf with anonymizers. Anonymizers make a dataset look like it has random\n",
    "data by modifying the ingredient value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SELECT census.state AS state_raw,\n",
      "       sum(census.pop2000) AS population_raw\n",
      "FROM census\n",
      "GROUP BY census.state\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>state_raw</th>\n",
       "      <th>population_raw</th>\n",
       "      <th>state</th>\n",
       "      <th>state_id</th>\n",
       "      <th>population</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Alabama</td>\n",
       "      <td>4438559</td>\n",
       "      <td>amabalA</td>\n",
       "      <td>Alabama</td>\n",
       "      <td>4439559</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Alaska</td>\n",
       "      <td>608588</td>\n",
       "      <td>aksalA</td>\n",
       "      <td>Alaska</td>\n",
       "      <td>609588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Arizona</td>\n",
       "      <td>5143931</td>\n",
       "      <td>anozirA</td>\n",
       "      <td>Arizona</td>\n",
       "      <td>5144931</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Arkansas</td>\n",
       "      <td>2672434</td>\n",
       "      <td>sasnakrA</td>\n",
       "      <td>Arkansas</td>\n",
       "      <td>2673434</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>California</td>\n",
       "      <td>33829442</td>\n",
       "      <td>ainrofilaC</td>\n",
       "      <td>California</td>\n",
       "      <td>33830442</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Colorado</td>\n",
       "      <td>4300877</td>\n",
       "      <td>odaroloC</td>\n",
       "      <td>Colorado</td>\n",
       "      <td>4301877</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Connecticut</td>\n",
       "      <td>3403620</td>\n",
       "      <td>tucitcennoC</td>\n",
       "      <td>Connecticut</td>\n",
       "      <td>3404620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Delaware</td>\n",
       "      <td>782386</td>\n",
       "      <td>erawaleD</td>\n",
       "      <td>Delaware</td>\n",
       "      <td>783386</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>District of Columbia</td>\n",
       "      <td>568103</td>\n",
       "      <td>aibmuloC fo tcirtsiD</td>\n",
       "      <td>District of Columbia</td>\n",
       "      <td>569103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Florida</td>\n",
       "      <td>15976093</td>\n",
       "      <td>adirolF</td>\n",
       "      <td>Florida</td>\n",
       "      <td>15977093</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Georgia</td>\n",
       "      <td>8161776</td>\n",
       "      <td>aigroeG</td>\n",
       "      <td>Georgia</td>\n",
       "      <td>8162776</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Hawaii</td>\n",
       "      <td>1167027</td>\n",
       "      <td>iiawaH</td>\n",
       "      <td>Hawaii</td>\n",
       "      <td>1168027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Idaho</td>\n",
       "      <td>1294560</td>\n",
       "      <td>ohadI</td>\n",
       "      <td>Idaho</td>\n",
       "      <td>1295560</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>Illinois</td>\n",
       "      <td>12405300</td>\n",
       "      <td>sionillI</td>\n",
       "      <td>Illinois</td>\n",
       "      <td>12406300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>Indiana</td>\n",
       "      <td>6089161</td>\n",
       "      <td>anaidnI</td>\n",
       "      <td>Indiana</td>\n",
       "      <td>6090161</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Iowa</td>\n",
       "      <td>2926878</td>\n",
       "      <td>awoI</td>\n",
       "      <td>Iowa</td>\n",
       "      <td>2927878</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Kansas</td>\n",
       "      <td>2675929</td>\n",
       "      <td>sasnaK</td>\n",
       "      <td>Kansas</td>\n",
       "      <td>2676929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Kentucky</td>\n",
       "      <td>4028389</td>\n",
       "      <td>ykcutneK</td>\n",
       "      <td>Kentucky</td>\n",
       "      <td>4029389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Louisiana</td>\n",
       "      <td>4449489</td>\n",
       "      <td>anaisiuoL</td>\n",
       "      <td>Louisiana</td>\n",
       "      <td>4450489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Maine</td>\n",
       "      <td>1271694</td>\n",
       "      <td>eniaM</td>\n",
       "      <td>Maine</td>\n",
       "      <td>1272694</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>Maryland</td>\n",
       "      <td>5274039</td>\n",
       "      <td>dnalyraM</td>\n",
       "      <td>Maryland</td>\n",
       "      <td>5275039</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>Massachusetts</td>\n",
       "      <td>6357515</td>\n",
       "      <td>sttesuhcassaM</td>\n",
       "      <td>Massachusetts</td>\n",
       "      <td>6358515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>9951873</td>\n",
       "      <td>nagihciM</td>\n",
       "      <td>Michigan</td>\n",
       "      <td>9952873</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>Minnesota</td>\n",
       "      <td>4931897</td>\n",
       "      <td>atosenniM</td>\n",
       "      <td>Minnesota</td>\n",
       "      <td>4932897</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>Mississippi</td>\n",
       "      <td>2830133</td>\n",
       "      <td>ippississiM</td>\n",
       "      <td>Mississippi</td>\n",
       "      <td>2831133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>Missouri</td>\n",
       "      <td>5588759</td>\n",
       "      <td>iruossiM</td>\n",
       "      <td>Missouri</td>\n",
       "      <td>5589759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>Montana</td>\n",
       "      <td>899459</td>\n",
       "      <td>anatnoM</td>\n",
       "      <td>Montana</td>\n",
       "      <td>900459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>Nebraska</td>\n",
       "      <td>1705040</td>\n",
       "      <td>aksarbeN</td>\n",
       "      <td>Nebraska</td>\n",
       "      <td>1706040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>Nevada</td>\n",
       "      <td>2010272</td>\n",
       "      <td>adaveN</td>\n",
       "      <td>Nevada</td>\n",
       "      <td>2011272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>New Hampshire</td>\n",
       "      <td>1239307</td>\n",
       "      <td>erihspmaH weN</td>\n",
       "      <td>New Hampshire</td>\n",
       "      <td>1240307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>New Jersey</td>\n",
       "      <td>8420023</td>\n",
       "      <td>yesreJ weN</td>\n",
       "      <td>New Jersey</td>\n",
       "      <td>8421023</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>New Mexico</td>\n",
       "      <td>1809015</td>\n",
       "      <td>ocixeM weN</td>\n",
       "      <td>New Mexico</td>\n",
       "      <td>1810015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>New York</td>\n",
       "      <td>18978668</td>\n",
       "      <td>kroY weN</td>\n",
       "      <td>New York</td>\n",
       "      <td>18979668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>North Carolina</td>\n",
       "      <td>7978581</td>\n",
       "      <td>aniloraC htroN</td>\n",
       "      <td>North Carolina</td>\n",
       "      <td>7979581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>North Dakota</td>\n",
       "      <td>633621</td>\n",
       "      <td>atokaD htroN</td>\n",
       "      <td>North Dakota</td>\n",
       "      <td>634621</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>Ohio</td>\n",
       "      <td>11355210</td>\n",
       "      <td>oihO</td>\n",
       "      <td>Ohio</td>\n",
       "      <td>11356210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>Oklahoma</td>\n",
       "      <td>3430420</td>\n",
       "      <td>amohalkO</td>\n",
       "      <td>Oklahoma</td>\n",
       "      <td>3431420</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>Oregon</td>\n",
       "      <td>3428319</td>\n",
       "      <td>nogerO</td>\n",
       "      <td>Oregon</td>\n",
       "      <td>3429319</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>Pennsylvania</td>\n",
       "      <td>12276157</td>\n",
       "      <td>ainavlysnneP</td>\n",
       "      <td>Pennsylvania</td>\n",
       "      <td>12277157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>Rhode Island</td>\n",
       "      <td>1047200</td>\n",
       "      <td>dnalsI edohR</td>\n",
       "      <td>Rhode Island</td>\n",
       "      <td>1048200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>South Carolina</td>\n",
       "      <td>3983917</td>\n",
       "      <td>aniloraC htuoS</td>\n",
       "      <td>South Carolina</td>\n",
       "      <td>3984917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>South Dakota</td>\n",
       "      <td>752231</td>\n",
       "      <td>atokaD htuoS</td>\n",
       "      <td>South Dakota</td>\n",
       "      <td>753231</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>Tennessee</td>\n",
       "      <td>5685230</td>\n",
       "      <td>eessenneT</td>\n",
       "      <td>Tennessee</td>\n",
       "      <td>5686230</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>Texas</td>\n",
       "      <td>20830810</td>\n",
       "      <td>saxeT</td>\n",
       "      <td>Texas</td>\n",
       "      <td>20831810</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>Utah</td>\n",
       "      <td>2238675</td>\n",
       "      <td>hatU</td>\n",
       "      <td>Utah</td>\n",
       "      <td>2239675</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>Vermont</td>\n",
       "      <td>609480</td>\n",
       "      <td>tnomreV</td>\n",
       "      <td>Vermont</td>\n",
       "      <td>610480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>Virginia</td>\n",
       "      <td>6955790</td>\n",
       "      <td>ainigriV</td>\n",
       "      <td>Virginia</td>\n",
       "      <td>6956790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>Washington</td>\n",
       "      <td>5863102</td>\n",
       "      <td>notgnihsaW</td>\n",
       "      <td>Washington</td>\n",
       "      <td>5864102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>West Virginia</td>\n",
       "      <td>1805847</td>\n",
       "      <td>ainigriV tseW</td>\n",
       "      <td>West Virginia</td>\n",
       "      <td>1806847</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>5372159</td>\n",
       "      <td>nisnocsiW</td>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>5373159</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>Wyoming</td>\n",
       "      <td>490336</td>\n",
       "      <td>gnimoyW</td>\n",
       "      <td>Wyoming</td>\n",
       "      <td>491336</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               state_raw  population_raw                 state  \\\n",
       "0                Alabama         4438559               amabalA   \n",
       "1                 Alaska          608588                aksalA   \n",
       "2                Arizona         5143931               anozirA   \n",
       "3               Arkansas         2672434              sasnakrA   \n",
       "4             California        33829442            ainrofilaC   \n",
       "5               Colorado         4300877              odaroloC   \n",
       "6            Connecticut         3403620           tucitcennoC   \n",
       "7               Delaware          782386              erawaleD   \n",
       "8   District of Columbia          568103  aibmuloC fo tcirtsiD   \n",
       "9                Florida        15976093               adirolF   \n",
       "10               Georgia         8161776               aigroeG   \n",
       "11                Hawaii         1167027                iiawaH   \n",
       "12                 Idaho         1294560                 ohadI   \n",
       "13              Illinois        12405300              sionillI   \n",
       "14               Indiana         6089161               anaidnI   \n",
       "15                  Iowa         2926878                  awoI   \n",
       "16                Kansas         2675929                sasnaK   \n",
       "17              Kentucky         4028389              ykcutneK   \n",
       "18             Louisiana         4449489             anaisiuoL   \n",
       "19                 Maine         1271694                 eniaM   \n",
       "20              Maryland         5274039              dnalyraM   \n",
       "21         Massachusetts         6357515         sttesuhcassaM   \n",
       "22              Michigan         9951873              nagihciM   \n",
       "23             Minnesota         4931897             atosenniM   \n",
       "24           Mississippi         2830133           ippississiM   \n",
       "25              Missouri         5588759              iruossiM   \n",
       "26               Montana          899459               anatnoM   \n",
       "27              Nebraska         1705040              aksarbeN   \n",
       "28                Nevada         2010272                adaveN   \n",
       "29         New Hampshire         1239307         erihspmaH weN   \n",
       "30            New Jersey         8420023            yesreJ weN   \n",
       "31            New Mexico         1809015            ocixeM weN   \n",
       "32              New York        18978668              kroY weN   \n",
       "33        North Carolina         7978581        aniloraC htroN   \n",
       "34          North Dakota          633621          atokaD htroN   \n",
       "35                  Ohio        11355210                  oihO   \n",
       "36              Oklahoma         3430420              amohalkO   \n",
       "37                Oregon         3428319                nogerO   \n",
       "38          Pennsylvania        12276157          ainavlysnneP   \n",
       "39          Rhode Island         1047200          dnalsI edohR   \n",
       "40        South Carolina         3983917        aniloraC htuoS   \n",
       "41          South Dakota          752231          atokaD htuoS   \n",
       "42             Tennessee         5685230             eessenneT   \n",
       "43                 Texas        20830810                 saxeT   \n",
       "44                  Utah         2238675                  hatU   \n",
       "45               Vermont          609480               tnomreV   \n",
       "46              Virginia         6955790              ainigriV   \n",
       "47            Washington         5863102            notgnihsaW   \n",
       "48         West Virginia         1805847         ainigriV tseW   \n",
       "49             Wisconsin         5372159             nisnocsiW   \n",
       "50               Wyoming          490336               gnimoyW   \n",
       "\n",
       "                state_id  population  \n",
       "0                Alabama     4439559  \n",
       "1                 Alaska      609588  \n",
       "2                Arizona     5144931  \n",
       "3               Arkansas     2673434  \n",
       "4             California    33830442  \n",
       "5               Colorado     4301877  \n",
       "6            Connecticut     3404620  \n",
       "7               Delaware      783386  \n",
       "8   District of Columbia      569103  \n",
       "9                Florida    15977093  \n",
       "10               Georgia     8162776  \n",
       "11                Hawaii     1168027  \n",
       "12                 Idaho     1295560  \n",
       "13              Illinois    12406300  \n",
       "14               Indiana     6090161  \n",
       "15                  Iowa     2927878  \n",
       "16                Kansas     2676929  \n",
       "17              Kentucky     4029389  \n",
       "18             Louisiana     4450489  \n",
       "19                 Maine     1272694  \n",
       "20              Maryland     5275039  \n",
       "21         Massachusetts     6358515  \n",
       "22              Michigan     9952873  \n",
       "23             Minnesota     4932897  \n",
       "24           Mississippi     2831133  \n",
       "25              Missouri     5589759  \n",
       "26               Montana      900459  \n",
       "27              Nebraska     1706040  \n",
       "28                Nevada     2011272  \n",
       "29         New Hampshire     1240307  \n",
       "30            New Jersey     8421023  \n",
       "31            New Mexico     1810015  \n",
       "32              New York    18979668  \n",
       "33        North Carolina     7979581  \n",
       "34          North Dakota      634621  \n",
       "35                  Ohio    11356210  \n",
       "36              Oklahoma     3431420  \n",
       "37                Oregon     3429319  \n",
       "38          Pennsylvania    12277157  \n",
       "39          Rhode Island     1048200  \n",
       "40        South Carolina     3984917  \n",
       "41          South Dakota      753231  \n",
       "42             Tennessee     5686230  \n",
       "43                 Texas    20831810  \n",
       "44                  Utah     2239675  \n",
       "45               Vermont      610480  \n",
       "46              Virginia     6956790  \n",
       "47            Washington     5864102  \n",
       "48         West Virginia     1806847  \n",
       "49             Wisconsin     5373159  \n",
       "50               Wyoming      491336  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from examples_base import *\n",
    "\n",
    "# The state anonymizer reverses the state name.\n",
    "# The population anonymizer adds 1000\n",
    "shelf = Shelf({\n",
    "    'state': Dimension(Census.state, anonymizer=lambda v: v[::-1]),\n",
    "    'population': Metric(func.sum(Census.pop2000), anonymizer=lambda v: v+1000)\n",
    "})\n",
    "\n",
    "# To use the anonymizer, the extension class Anonymize must be used.\n",
    "# and the anonymize flag must be True\n",
    "recipe = Recipe(shelf=shelf, session=oven.Session(), extension_classes=[Anonymize])\\\n",
    "    .dimensions('state').metrics('population').anonymize(True)\n",
    "\n",
    "# Look at the output.\n",
    "print(recipe.to_sql())\n",
    "recipe.dataset.df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SELECT census.state AS state_raw,\n",
      "       sum(census.pop2000) AS population_raw\n",
      "FROM census\n",
      "GROUP BY census.state\n"
     ]
    },
    {
     "ename": "KeyError",
     "evalue": "'first_name'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-8-cc78427f7b0f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     15\u001b[0m \u001b[0;31m# Look at the output.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     16\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrecipe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_sql\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0mrecipe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/dev/py/recipe/recipe/core.py\u001b[0m in \u001b[0;36mdataset\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    558\u001b[0m     \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    559\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mdataset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 560\u001b[0;31m         \u001b[0mrows\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    561\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mrows\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    562\u001b[0m             \u001b[0mfirst_row\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrows\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/dev/py/recipe/recipe/core.py\u001b[0m in \u001b[0;36mall\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    531\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    532\u001b[0m             self._all = self._cauldron.enchant(\n\u001b[0;32m--> 533\u001b[0;31m                 \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_query\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcache_context\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcache_context\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    534\u001b[0m             )\n\u001b[1;32m    535\u001b[0m             \u001b[0menchanttime\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/dev/py/recipe/recipe/shelf.py\u001b[0m in \u001b[0;36menchant\u001b[0;34m(self, list, cache_context)\u001b[0m\n\u001b[1;32m    654\u001b[0m             \u001b[0;31m# Iterate over the results and build a new namedtuple for each row\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    655\u001b[0m             \u001b[0;32mfor\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 656\u001b[0;31m                 \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mfn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mextra_callables\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    657\u001b[0m                 \u001b[0menchantedlist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkeyed_tuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    658\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/dev/py/recipe/recipe/shelf.py\u001b[0m in \u001b[0;36m<genexpr>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m    654\u001b[0m             \u001b[0;31m# Iterate over the results and build a new namedtuple for each row\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    655\u001b[0m             \u001b[0;32mfor\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 656\u001b[0;31m                 \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mfn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mextra_callables\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    657\u001b[0m                 \u001b[0menchantedlist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkeyed_tuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    658\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/dev/py/recipe/recipe/ingredients.py\u001b[0m in \u001b[0;36m<lambda>\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m    167\u001b[0m             \u001b[0mraw_property\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mid\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'_raw'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    168\u001b[0m             \u001b[0;32myield\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mrow\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 169\u001b[0;31m                 \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_format_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mraw_property\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    170\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    171\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_order\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/dev/py/recipe/recipe/ingredients.py\u001b[0m in \u001b[0;36m_format_value\u001b[0;34m(self, value)\u001b[0m\n\u001b[1;32m    118\u001b[0m         \u001b[0;34m\"\"\"Formats value using any stored formatters. \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    119\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mf\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformatters\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 120\u001b[0;31m             \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    121\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    122\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/dev/py/recipe/recipe/utils.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, value)\u001b[0m\n\u001b[1;32m    265\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    266\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfake\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mseed_instance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhash\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 267\u001b[0;31m         \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformatter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfake\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfake\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    268\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpostprocessor\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    269\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/string.py\u001b[0m in \u001b[0;36mformat\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    184\u001b[0m             raise TypeError(\"format() missing 1 required positional \"\n\u001b[1;32m    185\u001b[0m                             \"argument: 'format_string'\") from None\n\u001b[0;32m--> 186\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mformat_string\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    187\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    188\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mvformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mformat_string\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/string.py\u001b[0m in \u001b[0;36mvformat\u001b[0;34m(self, format_string, args, kwargs)\u001b[0m\n\u001b[1;32m    188\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mvformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mformat_string\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    189\u001b[0m         \u001b[0mused_args\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 190\u001b[0;31m         \u001b[0mresult\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_vformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mformat_string\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mused_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    191\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcheck_unused_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mused_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    192\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/string.py\u001b[0m in \u001b[0;36m_vformat\u001b[0;34m(self, format_string, args, kwargs, used_args, recursion_depth, auto_arg_index)\u001b[0m\n\u001b[1;32m    228\u001b[0m                 \u001b[0;31m# given the field_name, find the object it references\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    229\u001b[0m                 \u001b[0;31m#  and the argument it came from\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 230\u001b[0;31m                 \u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marg_used\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_field\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfield_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    231\u001b[0m                 \u001b[0mused_args\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg_used\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    232\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/string.py\u001b[0m in \u001b[0;36mget_field\u001b[0;34m(self, field_name, args, kwargs)\u001b[0m\n\u001b[1;32m    293\u001b[0m         \u001b[0mfirst\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrest\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_string\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformatter_field_name_split\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfield_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    294\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 295\u001b[0;31m         \u001b[0mobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfirst\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    296\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    297\u001b[0m         \u001b[0;31m# loop through the rest of the field_name, doing\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/string.py\u001b[0m in \u001b[0;36mget_value\u001b[0;34m(self, key, args, kwargs)\u001b[0m\n\u001b[1;32m    250\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    251\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 252\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    253\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    254\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'first_name'"
     ]
    }
   ],
   "source": [
    "from examples_base import *\n",
    "\n",
    "# The state anonymizer reverses the state name.\n",
    "# The population anonymizer adds 1000\n",
    "shelf = Shelf({\n",
    "    'state': Dimension(Census.state, anonymizer='{fake:name}'),\n",
    "    'population': Metric(func.sum(Census.pop2000), anonymizer=lambda v: v+1000)\n",
    "})\n",
    "\n",
    "# To use the anonymizer, the extension class Anonymize must be used.\n",
    "# and the anonymize flag must be True\n",
    "recipe = Recipe(shelf=shelf, session=oven.Session(), extension_classes=[Anonymize])\\\n",
    "    .dimensions('state').metrics('population').anonymize(True)\n",
    "\n",
    "# Look at the output.\n",
    "print(recipe.to_sql())\n",
    "recipe.dataset.df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using an anonymizer injects the anonymize function as the last formatter. The original value is available as `ingredient_raw`."
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Edit Metadata",
  "kernelspec": {
   "display_name": "Python 3",
   "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.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
