Restaurants example

This example takes you through some of the basics of PyOS and introduces you to some of the commands, syntax and concepts. So let’s dive in, and enjoy!

[1]:
from pyos.pyos import *
Welcome to

                  ____  ____
                 / __ \/ __ /
    ____  __  __/ / / / /_
   / __ \/ / / / / / /\__ \
  / /_/ / /_/ / /_/ /___/ /
 / .___/\__, /\____//____/
/_/    /____/                 v0.5.0

[2]:
pwd()
[2]:
Path('/martin/')
[3]:
ls()
[3]:
<empty>

Ok, so we’re in the martin folder but there’s nothing in it. Let’s download some data and store it in dictionaries.

[4]:
import mincepy
import urllib.request
import json

ids = []
with urllib.request.urlopen('https://raw.githubusercontent.com/ozlerhakan/mongodb-json-files/master/datasets/restaurant.json') as url:
    for line, _ in zip(url, range(399)):
        data = json.loads(line.decode())
        data.pop('_id')
        ids.append(mincepy.Dict(data).save())
[5]:
ls()
[5]:
5e8e20ed1dbc98e7a84d9386  5e8e20ed1dbc98e7a84d9490  5e8e20ed1dbc98e7a84d959a
5e8e20ed1dbc98e7a84d9388  5e8e20ed1dbc98e7a84d9492  5e8e20ed1dbc98e7a84d959c
5e8e20ed1dbc98e7a84d938a  5e8e20ed1dbc98e7a84d9494  5e8e20ed1dbc98e7a84d959e
5e8e20ed1dbc98e7a84d938c  5e8e20ed1dbc98e7a84d9496  5e8e20ed1dbc98e7a84d95a0
5e8e20ed1dbc98e7a84d938e  5e8e20ed1dbc98e7a84d9498  5e8e20ed1dbc98e7a84d95a2
5e8e20ed1dbc98e7a84d9390  5e8e20ed1dbc98e7a84d949a  5e8e20ed1dbc98e7a84d95a4
5e8e20ed1dbc98e7a84d9392  5e8e20ed1dbc98e7a84d949c  5e8e20ed1dbc98e7a84d95a6
5e8e20ed1dbc98e7a84d9394  5e8e20ed1dbc98e7a84d949e  5e8e20ed1dbc98e7a84d95a8
5e8e20ed1dbc98e7a84d9396  5e8e20ed1dbc98e7a84d94a0  5e8e20ed1dbc98e7a84d95aa
5e8e20ed1dbc98e7a84d9398  5e8e20ed1dbc98e7a84d94a2  5e8e20ed1dbc98e7a84d95ac
5e8e20ed1dbc98e7a84d939a  5e8e20ed1dbc98e7a84d94a4  5e8e20ed1dbc98e7a84d95ae
5e8e20ed1dbc98e7a84d939c  5e8e20ed1dbc98e7a84d94a6  5e8e20ed1dbc98e7a84d95b0
5e8e20ed1dbc98e7a84d939e  5e8e20ed1dbc98e7a84d94a8  5e8e20ed1dbc98e7a84d95b2
5e8e20ed1dbc98e7a84d93a0  5e8e20ed1dbc98e7a84d94aa  5e8e20ed1dbc98e7a84d95b4
5e8e20ed1dbc98e7a84d93a2  5e8e20ed1dbc98e7a84d94ac  5e8e20ed1dbc98e7a84d95b6
5e8e20ed1dbc98e7a84d93a4  5e8e20ed1dbc98e7a84d94ae  5e8e20ed1dbc98e7a84d95b8
5e8e20ed1dbc98e7a84d93a6  5e8e20ed1dbc98e7a84d94b0  5e8e20ed1dbc98e7a84d95ba
5e8e20ed1dbc98e7a84d93a8  5e8e20ed1dbc98e7a84d94b2  5e8e20ed1dbc98e7a84d95bc
5e8e20ed1dbc98e7a84d93aa  5e8e20ed1dbc98e7a84d94b4  5e8e20ed1dbc98e7a84d95be
5e8e20ed1dbc98e7a84d93ac  5e8e20ed1dbc98e7a84d94b6  5e8e20ed1dbc98e7a84d95c0
5e8e20ed1dbc98e7a84d93ae  5e8e20ed1dbc98e7a84d94b8  5e8e20ed1dbc98e7a84d95c2
5e8e20ed1dbc98e7a84d93b0  5e8e20ed1dbc98e7a84d94ba  5e8e20ed1dbc98e7a84d95c4
5e8e20ed1dbc98e7a84d93b2  5e8e20ed1dbc98e7a84d94bc  5e8e20ed1dbc98e7a84d95c6
5e8e20ed1dbc98e7a84d93b4  5e8e20ed1dbc98e7a84d94be  5e8e20ed1dbc98e7a84d95c8
5e8e20ed1dbc98e7a84d93b6  5e8e20ed1dbc98e7a84d94c0  5e8e20ed1dbc98e7a84d95ca
5e8e20ed1dbc98e7a84d93b8  5e8e20ed1dbc98e7a84d94c2  5e8e20ed1dbc98e7a84d95cc
5e8e20ed1dbc98e7a84d93ba  5e8e20ed1dbc98e7a84d94c4  5e8e20ed1dbc98e7a84d95ce
5e8e20ed1dbc98e7a84d93bc  5e8e20ed1dbc98e7a84d94c6  5e8e20ed1dbc98e7a84d95d0
5e8e20ed1dbc98e7a84d93be  5e8e20ed1dbc98e7a84d94c8  5e8e20ed1dbc98e7a84d95d2
5e8e20ed1dbc98e7a84d93c0  5e8e20ed1dbc98e7a84d94ca  5e8e20ed1dbc98e7a84d95d4
5e8e20ed1dbc98e7a84d93c2  5e8e20ed1dbc98e7a84d94cc  5e8e20ed1dbc98e7a84d95d6
5e8e20ed1dbc98e7a84d93c4  5e8e20ed1dbc98e7a84d94ce  5e8e20ed1dbc98e7a84d95d8
5e8e20ed1dbc98e7a84d93c6  5e8e20ed1dbc98e7a84d94d0  5e8e20ed1dbc98e7a84d95da
5e8e20ed1dbc98e7a84d93c8  5e8e20ed1dbc98e7a84d94d2  5e8e20ed1dbc98e7a84d95dc
5e8e20ed1dbc98e7a84d93ca  5e8e20ed1dbc98e7a84d94d4  5e8e20ed1dbc98e7a84d95de
5e8e20ed1dbc98e7a84d93cc  5e8e20ed1dbc98e7a84d94d6  5e8e20ed1dbc98e7a84d95e0
5e8e20ed1dbc98e7a84d93ce  5e8e20ed1dbc98e7a84d94d8  5e8e20ed1dbc98e7a84d95e2
5e8e20ed1dbc98e7a84d93d0  5e8e20ed1dbc98e7a84d94da  5e8e20ed1dbc98e7a84d95e4
5e8e20ed1dbc98e7a84d93d2  5e8e20ed1dbc98e7a84d94dc  5e8e20ed1dbc98e7a84d95e6
5e8e20ed1dbc98e7a84d93d4  5e8e20ed1dbc98e7a84d94de  5e8e20ed1dbc98e7a84d95e8
5e8e20ed1dbc98e7a84d93d6  5e8e20ed1dbc98e7a84d94e0  5e8e20ed1dbc98e7a84d95ea
5e8e20ed1dbc98e7a84d93d8  5e8e20ed1dbc98e7a84d94e2  5e8e20ed1dbc98e7a84d95ec
5e8e20ed1dbc98e7a84d93da  5e8e20ed1dbc98e7a84d94e4  5e8e20ed1dbc98e7a84d95ee
5e8e20ed1dbc98e7a84d93dc  5e8e20ed1dbc98e7a84d94e6  5e8e20ed1dbc98e7a84d95f0
5e8e20ed1dbc98e7a84d93de  5e8e20ed1dbc98e7a84d94e8  5e8e20ed1dbc98e7a84d95f2
5e8e20ed1dbc98e7a84d93e0  5e8e20ed1dbc98e7a84d94ea  5e8e20ed1dbc98e7a84d95f4
5e8e20ed1dbc98e7a84d93e2  5e8e20ed1dbc98e7a84d94ec  5e8e20ed1dbc98e7a84d95f6
5e8e20ed1dbc98e7a84d93e4  5e8e20ed1dbc98e7a84d94ee  5e8e20ed1dbc98e7a84d95f8
5e8e20ed1dbc98e7a84d93e6  5e8e20ed1dbc98e7a84d94f0  5e8e20ed1dbc98e7a84d95fa
5e8e20ed1dbc98e7a84d93e8  5e8e20ed1dbc98e7a84d94f2  5e8e20ed1dbc98e7a84d95fc
5e8e20ed1dbc98e7a84d93ea  5e8e20ed1dbc98e7a84d94f4  5e8e20ed1dbc98e7a84d95fe
5e8e20ed1dbc98e7a84d93ec  5e8e20ed1dbc98e7a84d94f6  5e8e20ed1dbc98e7a84d9600
5e8e20ed1dbc98e7a84d93ee  5e8e20ed1dbc98e7a84d94f8  5e8e20ed1dbc98e7a84d9602
5e8e20ed1dbc98e7a84d93f0  5e8e20ed1dbc98e7a84d94fa  5e8e20ed1dbc98e7a84d9604
5e8e20ed1dbc98e7a84d93f2  5e8e20ed1dbc98e7a84d94fc  5e8e20ed1dbc98e7a84d9606
5e8e20ed1dbc98e7a84d93f4  5e8e20ed1dbc98e7a84d94fe  5e8e20ed1dbc98e7a84d9608
5e8e20ed1dbc98e7a84d93f6  5e8e20ed1dbc98e7a84d9500  5e8e20ed1dbc98e7a84d960a
5e8e20ed1dbc98e7a84d93f8  5e8e20ed1dbc98e7a84d9502  5e8e20ed1dbc98e7a84d960c
5e8e20ed1dbc98e7a84d93fa  5e8e20ed1dbc98e7a84d9504  5e8e20ed1dbc98e7a84d960e
5e8e20ed1dbc98e7a84d93fc  5e8e20ed1dbc98e7a84d9506  5e8e20ed1dbc98e7a84d9610
5e8e20ed1dbc98e7a84d93fe  5e8e20ed1dbc98e7a84d9508  5e8e20ed1dbc98e7a84d9612
5e8e20ed1dbc98e7a84d9400  5e8e20ed1dbc98e7a84d950a  5e8e20ed1dbc98e7a84d9614
5e8e20ed1dbc98e7a84d9402  5e8e20ed1dbc98e7a84d950c  5e8e20ed1dbc98e7a84d9616
5e8e20ed1dbc98e7a84d9404  5e8e20ed1dbc98e7a84d950e  5e8e20ed1dbc98e7a84d9618
5e8e20ed1dbc98e7a84d9406  5e8e20ed1dbc98e7a84d9510  5e8e20ed1dbc98e7a84d961a
5e8e20ed1dbc98e7a84d9408  5e8e20ed1dbc98e7a84d9512  5e8e20ed1dbc98e7a84d961c
5e8e20ed1dbc98e7a84d940a  5e8e20ed1dbc98e7a84d9514  5e8e20ed1dbc98e7a84d961e
5e8e20ed1dbc98e7a84d940c  5e8e20ed1dbc98e7a84d9516  5e8e20ed1dbc98e7a84d9620
5e8e20ed1dbc98e7a84d940e  5e8e20ed1dbc98e7a84d9518  5e8e20ed1dbc98e7a84d9622
5e8e20ed1dbc98e7a84d9410  5e8e20ed1dbc98e7a84d951a  5e8e20ed1dbc98e7a84d9624
5e8e20ed1dbc98e7a84d9412  5e8e20ed1dbc98e7a84d951c  5e8e20ed1dbc98e7a84d9626
5e8e20ed1dbc98e7a84d9414  5e8e20ed1dbc98e7a84d951e  5e8e20ed1dbc98e7a84d9628
5e8e20ed1dbc98e7a84d9416  5e8e20ed1dbc98e7a84d9520  5e8e20ed1dbc98e7a84d962a
5e8e20ed1dbc98e7a84d9418  5e8e20ed1dbc98e7a84d9522  5e8e20ed1dbc98e7a84d962c
5e8e20ed1dbc98e7a84d941a  5e8e20ed1dbc98e7a84d9524  5e8e20ed1dbc98e7a84d962e
5e8e20ed1dbc98e7a84d941c  5e8e20ed1dbc98e7a84d9526  5e8e20ed1dbc98e7a84d9630
5e8e20ed1dbc98e7a84d941e  5e8e20ed1dbc98e7a84d9528  5e8e20ed1dbc98e7a84d9632
5e8e20ed1dbc98e7a84d9420  5e8e20ed1dbc98e7a84d952a  5e8e20ed1dbc98e7a84d9634
5e8e20ed1dbc98e7a84d9422  5e8e20ed1dbc98e7a84d952c  5e8e20ed1dbc98e7a84d9636
5e8e20ed1dbc98e7a84d9424  5e8e20ed1dbc98e7a84d952e  5e8e20ed1dbc98e7a84d9638
5e8e20ed1dbc98e7a84d9426  5e8e20ed1dbc98e7a84d9530  5e8e20ed1dbc98e7a84d963a
5e8e20ed1dbc98e7a84d9428  5e8e20ed1dbc98e7a84d9532  5e8e20ed1dbc98e7a84d963c
5e8e20ed1dbc98e7a84d942a  5e8e20ed1dbc98e7a84d9534  5e8e20ed1dbc98e7a84d963e
5e8e20ed1dbc98e7a84d942c  5e8e20ed1dbc98e7a84d9536  5e8e20ed1dbc98e7a84d9640
5e8e20ed1dbc98e7a84d942e  5e8e20ed1dbc98e7a84d9538  5e8e20ed1dbc98e7a84d9642
5e8e20ed1dbc98e7a84d9430  5e8e20ed1dbc98e7a84d953a  5e8e20ed1dbc98e7a84d9644
5e8e20ed1dbc98e7a84d9432  5e8e20ed1dbc98e7a84d953c  5e8e20ed1dbc98e7a84d9646
5e8e20ed1dbc98e7a84d9434  5e8e20ed1dbc98e7a84d953e  5e8e20ed1dbc98e7a84d9648
5e8e20ed1dbc98e7a84d9436  5e8e20ed1dbc98e7a84d9540  5e8e20ed1dbc98e7a84d964a
5e8e20ed1dbc98e7a84d9438  5e8e20ed1dbc98e7a84d9542  5e8e20ed1dbc98e7a84d964c
5e8e20ed1dbc98e7a84d943a  5e8e20ed1dbc98e7a84d9544  5e8e20ed1dbc98e7a84d964e
5e8e20ed1dbc98e7a84d943c  5e8e20ed1dbc98e7a84d9546  5e8e20ed1dbc98e7a84d9650
5e8e20ed1dbc98e7a84d943e  5e8e20ed1dbc98e7a84d9548  5e8e20ed1dbc98e7a84d9652
5e8e20ed1dbc98e7a84d9440  5e8e20ed1dbc98e7a84d954a  5e8e20ed1dbc98e7a84d9654
5e8e20ed1dbc98e7a84d9442  5e8e20ed1dbc98e7a84d954c  5e8e20ed1dbc98e7a84d9656
5e8e20ed1dbc98e7a84d9444  5e8e20ed1dbc98e7a84d954e  5e8e20ed1dbc98e7a84d9658
5e8e20ed1dbc98e7a84d9446  5e8e20ed1dbc98e7a84d9550  5e8e20ed1dbc98e7a84d965a
5e8e20ed1dbc98e7a84d9448  5e8e20ed1dbc98e7a84d9552  5e8e20ed1dbc98e7a84d965c
5e8e20ed1dbc98e7a84d944a  5e8e20ed1dbc98e7a84d9554  5e8e20ed1dbc98e7a84d965e
5e8e20ed1dbc98e7a84d944c  5e8e20ed1dbc98e7a84d9556  5e8e20ed1dbc98e7a84d9660
5e8e20ed1dbc98e7a84d944e  5e8e20ed1dbc98e7a84d9558  5e8e20ed1dbc98e7a84d9662
5e8e20ed1dbc98e7a84d9450  5e8e20ed1dbc98e7a84d955a  5e8e20ed1dbc98e7a84d9664
5e8e20ed1dbc98e7a84d9452  5e8e20ed1dbc98e7a84d955c  5e8e20ed1dbc98e7a84d9666
5e8e20ed1dbc98e7a84d9454  5e8e20ed1dbc98e7a84d955e  5e8e20ed1dbc98e7a84d9668
5e8e20ed1dbc98e7a84d9456  5e8e20ed1dbc98e7a84d9560  5e8e20ed1dbc98e7a84d966a
5e8e20ed1dbc98e7a84d9458  5e8e20ed1dbc98e7a84d9562  5e8e20ed1dbc98e7a84d966c
5e8e20ed1dbc98e7a84d945a  5e8e20ed1dbc98e7a84d9564  5e8e20ed1dbc98e7a84d966e
5e8e20ed1dbc98e7a84d945c  5e8e20ed1dbc98e7a84d9566  5e8e20ed1dbc98e7a84d9670
5e8e20ed1dbc98e7a84d945e  5e8e20ed1dbc98e7a84d9568  5e8e20ed1dbc98e7a84d9672
5e8e20ed1dbc98e7a84d9460  5e8e20ed1dbc98e7a84d956a  5e8e20ed1dbc98e7a84d9674
5e8e20ed1dbc98e7a84d9462  5e8e20ed1dbc98e7a84d956c  5e8e20ed1dbc98e7a84d9676
5e8e20ed1dbc98e7a84d9464  5e8e20ed1dbc98e7a84d956e  5e8e20ed1dbc98e7a84d9678
5e8e20ed1dbc98e7a84d9466  5e8e20ed1dbc98e7a84d9570  5e8e20ed1dbc98e7a84d967a
5e8e20ed1dbc98e7a84d9468  5e8e20ed1dbc98e7a84d9572  5e8e20ed1dbc98e7a84d967c
5e8e20ed1dbc98e7a84d946a  5e8e20ed1dbc98e7a84d9574  5e8e20ed1dbc98e7a84d967e
5e8e20ed1dbc98e7a84d946c  5e8e20ed1dbc98e7a84d9576  5e8e20ed1dbc98e7a84d9680
5e8e20ed1dbc98e7a84d946e  5e8e20ed1dbc98e7a84d9578  5e8e20ed1dbc98e7a84d9682
5e8e20ed1dbc98e7a84d9470  5e8e20ed1dbc98e7a84d957a  5e8e20ed1dbc98e7a84d9684
5e8e20ed1dbc98e7a84d9472  5e8e20ed1dbc98e7a84d957c  5e8e20ed1dbc98e7a84d9686
5e8e20ed1dbc98e7a84d9474  5e8e20ed1dbc98e7a84d957e  5e8e20ed1dbc98e7a84d9688
5e8e20ed1dbc98e7a84d9476  5e8e20ed1dbc98e7a84d9580  5e8e20ed1dbc98e7a84d968a
5e8e20ed1dbc98e7a84d9478  5e8e20ed1dbc98e7a84d9582  5e8e20ed1dbc98e7a84d968c
5e8e20ed1dbc98e7a84d947a  5e8e20ed1dbc98e7a84d9584  5e8e20ed1dbc98e7a84d968e
5e8e20ed1dbc98e7a84d947c  5e8e20ed1dbc98e7a84d9586  5e8e20ed1dbc98e7a84d9690
5e8e20ed1dbc98e7a84d947e  5e8e20ed1dbc98e7a84d9588  5e8e20ed1dbc98e7a84d9692
5e8e20ed1dbc98e7a84d9480  5e8e20ed1dbc98e7a84d958a  5e8e20ed1dbc98e7a84d9694
5e8e20ed1dbc98e7a84d9482  5e8e20ed1dbc98e7a84d958c  5e8e20ed1dbc98e7a84d9696
5e8e20ed1dbc98e7a84d9484  5e8e20ed1dbc98e7a84d958e  5e8e20ed1dbc98e7a84d9698
5e8e20ed1dbc98e7a84d9486  5e8e20ed1dbc98e7a84d9590  5e8e20ed1dbc98e7a84d969a
5e8e20ed1dbc98e7a84d9488  5e8e20ed1dbc98e7a84d9592  5e8e20ed1dbc98e7a84d969c
5e8e20ed1dbc98e7a84d948a  5e8e20ed1dbc98e7a84d9594  5e8e20ed1dbc98e7a84d969e
5e8e20ed1dbc98e7a84d948c  5e8e20ed1dbc98e7a84d9596  5e8e20ed1dbc98e7a84d96a0
5e8e20ed1dbc98e7a84d948e  5e8e20ed1dbc98e7a84d9598  5e8e20ed1dbc98e7a84d96a2

So what have we got? Let’s cat a couple of our dictionaries to see:

[6]:
cat(ids[0], ids[1])
[6]:
┌──────────────┬─────────────────────────────────────────────────────────────┐
│URL           │http://www.just-eat.co.uk/restaurants-cn-chinese-cardiff/menu│
│address       │228 City Road                                                │
│address line 2│Cardiff                                                      │
│name          │.CN Chinese                                                  │
│outcode       │CF24                                                         │
│postcode      │3JH                                                          │
│rating        │5                                                            │
│type_of_food  │Chinese                                                      │
└──────────────┴─────────────────────────────────────────────────────────────┘
┌──────────────┬─────────────────────────────────────────────────────┐
│URL           │http://www.just-eat.co.uk/restaurants-atthai-ss9/menu│
│address       │376 Rayleigh Road                                    │
│address line 2│Essex                                                │
│name          │@ Thai                                               │
│outcode       │SS9                                                  │
│postcode      │5PT                                                  │
│rating        │5.5                                                  │
│type_of_food  │Thai                                                 │
└──────────────┴─────────────────────────────────────────────────────┘

Wait a minute. What’s with all the boxes?

Pretty, isn’t it? That’s just the default way PyOS prints your objects, you can see that they’re really just dicts by using:

[7]:
cat(ids[0], ids[1], representer=str)
[7]:
{'URL': 'http://www.just-eat.co.uk/restaurants-cn-chinese-cardiff/menu', 'address': '228 City Road', 'address line 2': 'Cardiff', 'name': '.CN Chinese', 'outcode': 'CF24', 'postcode': '3JH', 'rating': 5, 'type_of_food': 'Chinese'}
{'URL': 'http://www.just-eat.co.uk/restaurants-atthai-ss9/menu', 'address': '376 Rayleigh Road', 'address line 2': 'Essex', 'name': '@ Thai', 'outcode': 'SS9', 'postcode': '5PT', 'rating': 5.5, 'type_of_food': 'Thai'}

Now let’s give them meaningful names, converting spaces and forward slashes

[8]:
for resto in ls | load:
    mv(resto, resto['name'].replace(' ', '_').replace('/', '_'))

ls()
[8]:
.CN_Chinese                                Aberdare_Charcoal_Grill
@_Thai                                     Aberdeen_Shanghai_Takeaway
@_Thai_Restaurant                          Aberkenfig_Kebab_&_Pizza_House
@Indian.com                                Abe's_Pizza
007_Takeaway                               Abi_Restaurant
042_Restaurant_&_Bar                       Abi_Ruchi
1_2_3_Chinese                              Abida
100_Degrees_Chinese_Restaurant             Abidap_Connection
100_Menu                                   Abid's_Tandoori_Takeaway
104_Turkish_BBQ                            Abington_Tandoori
109_Ristorante                             Abi's_Kebab
113_Fish_Bar                               Abo_Ali_-_Lebanese_Cuisine
133_Takeaway                               Abra_Pizzas
1498_The_Spice_Affair                      Abra-Kebab-Ra
168_Chinese_&_Cantonese_Takeaway           ABS_Fast_Food
1A_Wok                                     Abs_Fried_Chicken_&_Pizza
1pizza1                                    Abshar_Indian_Cuisine
1st_Choice_Pizza                           Abshar_Persian_Cuisine
1st_Class_Pizza                            Absolute_Caribbean
1st_Class_Pizza_&_Kebab_House              Aby's_Indian_Experience
2_4_1_Pizza                                Abyssinia_Ethiopian_Restaurant
2_for_1_Pizza_Place                        Abz_BBQ_Kitchen
2_Spice                                    Ace_Of_Spice
2_Treat_U                                  Ace_Peri_Peri
23rd_Street_Pizza                          Ace_Pizza
241_Pizza                                  ACE_Pizza_&_Kebab
2-4-1_Pizza                                Ace_Plaice_Traditional_Fish_&_Chips
280_Degrees_African_&_Nigerian_Restaurant  Acha_Halal_Chinese_Cuisine
3_Chef_Fish_Bar                            Ackee_Tree
3_Chefs                                    Ackie's
3_In_1_Dunoon                              Acomb_Kebab_House
3_in_1_Indian_&_Chipshop_Barrhead          Acropolis
3_In_1_Xtra                                Active_Cafe_Lounge
321_Pizzas,_Kebabs_&_Burgers               Acton_Charcoal_Grill
328_Chinese_Online                         Ada_Restaurant
333_Chinese_Takeaway                       Adaab_Balti
333_Chinese_Takeaway1                      Adams
350_Wok                                    Adams_&_Lily's
4_in_1_Express                             Adams_Alsabti_Pizzeria_&_Grill_House
4_in_Love                                  Adams_Balti
4500_Miles_From_Delhi                      Adam's_Balti_&_Pizza
4_Seasons_Pizza_&_Grill                    Adam's_Cafe_-_Collection_Only
4550_Miles_From_Delhi_-_Collection_Only    Adam's_Grill
5_In_1_Takeaway                            Adams_Chippy_&_Curry_House
5_'N'_1                                    Adams_Diner
5_Star_Chinese                             Adam's_Diner
5_Star_Falafel_@_GH_Butchers               Adam's_Fast_Food
5_Star_Fish_Bar                            Adam's_Fish_&_Chips
5_Star_Pizza                               Adams_Fish_&_Pizza_Bar
555_Hot_Curry                              Adams_Fish_N_Pizza_Bar
555_Pizza                                  Adam's_Hot_&_Spicy
555_Pizza_&_Kebab                          Adams_Ice_Cream_Parlour
57_Orient_Takeaway                         Adams_Pizza
62_Worksop_Fish_Bar                        Adam's_Pizza_&_Kebab
64_Pizzeria                                Adams_Pizza_&_Kebabs
7_&_One                                    Adams_Pizza_Corner
7_Oaks_Grill                               Adam's_Pizzeria
7_Spices                                   Adams_Pizzeria
7_Spices_Takeaway                          Adams_Place
7_STAR_Pizza                               Adam's_Spice
7_Star_Spices                              Adams_Steak_&_Curry_House
700_Degrees                                Adana_Pizza
88_Chinese                                 Adar_Restaurant
88_Noodle_Bar                              Add_Spice
888_Chinese_Takeaway                       Addlestone_Charcoal_Grill
888_Triple_Eight                           Adeel_Tandoori
9_Inch_CFC                                 Adeels_Fast_Food
9th_Avenue_Pizzeria                        Adeel_Balti_&_Pizza_Bar
9th_Kitchen                                Adeels_Spice
A_&_G_Kitchen                              Adelaide_Fish_Bar_-_Collection_Only
A_&_T_Mundi_House                          Adel's_Pizza
A_Cake_A_Shake                             Adil_Takeaway
A_Fish_Called_Rhondda                      Adil's_Takeaway
A_La_Pizza                                 Adiva
A_La_Turka                                 Adlington_Mama_Mia
A_M_Mians                                  Adlington_Spice
A_Matter_Of_Taste                          Admiral_Pizza
A_One_Tandoori                             Admirals_Fish_&_Chips_&_Kebabs
A_Passage_To_India                         Adnan_Southern_Fried_Chicken_Shop
A_Sealand_Fish_Bar_-_Collection_Only       Adnans_Indian_Restaurant_&_Takeaway
A_Star_Chippy                              Adolfo's
A_Taskinha                                 Adonis_Pizza_&_Grill
A_Taste_Of_Persia_-_Collection_Only        Ado's
A_To_Buy_Fish_&_Chips                      Adras_Restaurant
A_Touch_of_Spice                           Adriatic_Italian
A_World_Of_Fl@vours                        AF88
A_Yummy_Pizza                              Afandina_Restaurant
A&A_Peri_Peri                              AFC
A&S_Fast_Food                              AFC_American_Fried_Chicken
A.J's_Pizza                                AFC_Fried_Chicken_&_Pizza
èkó_Food_Market                            AFC_Pizza
£1_Fish_Shop                               AFC-American_Fried_Chicken
A1_Balti_House                             Afendi_Club_&_Restaurant
A1_Pizzas                                  Afendi_Restaurant_&_Cafe
A1_Rice_'N'_Spice                          Afghan_Kebab_Takeaway
A1_Wok                                     Afghan_Pamir
A12_Spice                                  Afghan_Restaurant
A4_Pizza_&_Kebab                           Afghan_Spice
AA_Charcoal_Grill                          Africa_9JA_Restaurant
Aachi_Chettinad                            Africa_Best_Place
Aadams_Authentic_Grill                     African_Flavour
Aakash_Balti                               Afritopia_-_African_Restaurant_with_Style
Aakash_Restaurant                          Afsana
Aamaya                                     After_Taste
Aamino's_Pizza                             Afters_Original
Aanias_Takeaway                            Agoon_Pani_Restaurant_&_Takeaway
AAQA_Fast_Food                             Agra
Aaris_Indian_Restaurant                    Agra_Indian_Restaurant_&_Takeaway
Aarthi                                     Agra_Spice_World
A6_Grill                                   Agra_Tandoori
Aashiana                                   Agra_Tandoori_&_Balti
Aashir's                                   Agra_Tandoori_Express
Aayan's                                    Agrabad
AB_Pizza_and_Grill                         Ahads_Bengal_Balti
Ababil                                     Ahjee_Bhajee
Abaseen                                    Ahmed_Indian_Takeaway
Abbey_Fish_Bar                             Ahmed_Tandoori
Abbey_Fryers_Fish_Bar_&_Balti_House        Ahmed's
Abbey_Meads_Indian_Restaurant_&_Takeaway   Ahmeds_Curry_Cafe
Abbey_Spice                                Ahmeds_Masala_Cafe
Abbey_Tandoori                             Ahmed's_Perfect_Fried_Chicken
Abbeyfry_Fish_and_Chips                    Ahmeds_Tandoori
Abbeyfry_Pizzeria_&_Kebab_House            Ai_Sushi
Abbey's_Balti_Village                      Ai_Wok
Abbey's_Fish_&_Chips_&_Pizza_Place         Aimees
Abbeys_Junction_Pizzeria                   Airlink_Restaurant_-_Collection_Only
Abbey's_Pizza                              Aishah_Tandoori
Abbeywood_Tandoori                         Aisha's
Abbies_Pizza                               AJ_Pizza_Town_Limited
Abby's_Diner                               AJ_Takeaway
Abdul_Hadi                                 Ajanta_Indian_Cuisine
Abdul_Spice                                Ajantha_Takeaway
Abduls                                     Aji_-_Collection_Only
Abdul's                                    AJ's_Chicken
Abdul's_Balti_House                        Aisuru_Sushi
Abdul's_Curry_House                        AJs_Multi_Cuisine
Abdul's_Indian                             AJ's_Pizza
Abdul's_Indian_Cuisine                     AJ's_Traditional_Fish_&_Chips
Abduls_Kebab_House                         Ajuba_Indian_Cuisine
Abduls_Rusholme                            Ajwa_Restaurant
Aberavon_Packed_Meals                      AK_Chicken_Food
Aberbargoed_Indian_Takeaway                AK_Grill

The search functionality

In the mood for curry in Edinburgh?

[9]:
cat(find(state={'type_of_food': 'Curry', 'address line 2': 'Edinburgh'}))
[9]:
┌──────────────┬──────────────────────────────────────────────────────┐
│URL           │http://www.just-eat.co.uk/restaurants-abduls-eh10/menu│
│address       │22 Comiston Road                                      │
│address line 2│Edinburgh                                             │
│name          │Abduls                                                │
│outcode       │EH10                                                  │
│postcode      │5QE                                                   │
│rating        │5                                                     │
│type_of_food  │Curry                                                 │
└──────────────┴──────────────────────────────────────────────────────┘
┌──────────────┬───────────────────────────────────────────────────────────┐
│URL           │http://www.just-eat.co.uk/restaurants-abida-restaurant/menu│
│address       │295A St John's Road                                        │
│address line 2│Edinburgh                                                  │
│name          │Abida                                                      │
│outcode       │EH12                                                       │
│postcode      │7XF                                                        │
│rating        │4.5                                                        │
│type_of_food  │Curry                                                      │
└──────────────┴───────────────────────────────────────────────────────────┘
┌──────────────┬─────────────────────────────────────────────────────────────┐
│URL           │http://www.just-eat.co.uk/restaurants-ahmedstandoori-eh6/menu│
│address       │100 Newhaven Road                                            │
│address line 2│Edinburgh                                                    │
│name          │Ahmeds Tandoori                                              │
│outcode       │EH6                                                          │
│postcode      │4BS                                                          │
│rating        │5                                                            │
│type_of_food  │Curry                                                        │
└──────────────┴─────────────────────────────────────────────────────────────┘
┌──────────────┬────────────────────────────────────────────────────────┐
│URL           │http://www.just-eat.co.uk/restaurants-agoonpani-eh6/menu│
│address       │91 Henderson Street                                     │
│address line 2│Edinburgh                                               │
│name          │Agoon Pani Restaurant & Takeaway                        │
│outcode       │EH6                                                     │
│postcode      │6ED                                                     │
│rating        │5                                                       │
│type_of_food  │Curry                                                   │
└──────────────┴────────────────────────────────────────────────────────┘

Let’s organise our resto’s a little more into folders

[10]:
for resto in ls | load:
    mv(resto, resto['type_of_food'] + '/') # All directories in PyOS end with a '/'

ls()
[10]:
Chinese/  African/    Fish & Chips/  Arabic/      Persian/      Caribbean/  Russian/   Burgers/
Thai/     Turkish/    English/       Desserts/    Peri Peri/    Ethiopian/  Afghan/    Sushi/
Curry/    Breakfast/  Lebanese/      Kebab/       South Curry/  Greek/      Cakes/     Grill/
Pizza/    American/   Chicken/       Portuguese/  Punjabi/      Moroccan/   Japanese/

Beautiful, let’s just check:

[11]:
ls('Pizza/')
[11]:
007_Takeaway                   9th_Avenue_Pizzeria              Adams_Alsabti_Pizzeria_&_Grill_House
109_Ristorante                 A_La_Pizza                       Adam's_Cafe_-_Collection_Only
1pizza1                        A_La_Turka                       Adam's_Diner
1st_Choice_Pizza               A_Matter_Of_Taste                Adam's_Fast_Food
1st_Class_Pizza                A_Yummy_Pizza                    Adam's_Hot_&_Spicy
1st_Class_Pizza_&_Kebab_House  A.J's_Pizza                      Adams_Pizza
2_4_1_Pizza                    A1_Pizzas                        Adam's_Pizza_&_Kebab
2_for_1_Pizza_Place            A4_Pizza_&_Kebab                 Adams_Pizza_&_Kebabs
2_Treat_U                      Aamino's_Pizza                   Adams_Pizza_Corner
241_Pizza                      AAQA_Fast_Food                   Adam's_Pizzeria
2-4-1_Pizza                    Abbeyfry_Pizzeria_&_Kebab_House  Adams_Pizzeria
321_Pizzas,_Kebabs_&_Burgers   Abbeys_Junction_Pizzeria         Adana_Pizza
4_in_1_Express                 Abduls_Kebab_House               Adeels_Spice
4_Seasons_Pizza_&_Grill        Aberdare_Charcoal_Grill          Adel's_Pizza
5_Star_Pizza                   Abe's_Pizza                      Admiral_Pizza
555_Pizza                      Abra_Pizzas                      Adnan_Southern_Fried_Chicken_Shop
555_Pizza_&_Kebab              ABS_Fast_Food                    Adriatic_Italian
64_Pizzeria                    Ace_Pizza                        AFC_Pizza
7_STAR_Pizza                   ACE_Pizza_&_Kebab                Afendi_Club_&_Restaurant
7_Star_Spices                  Adams                            AJ's_Pizza
9_Inch_CFC                     Adams_&_Lily's                   AJ's_Traditional_Fish_&_Chips

You know what, I’m vegetarian anyway - let’s delete the chicken joints

[12]:
rm('Chicken/')
rm: cannot remove 'Chicken/': Is a directory

Whoops, I forgot the -r

[13]:
rm -r ('Chicken/')
ls()
[13]:
Chinese/  African/    Fish & Chips/  Desserts/    Peri Peri/    Ethiopian/  Afghan/    Sushi/
Thai/     Turkish/    English/       Kebab/       South Curry/  Greek/      Cakes/     Grill/
Curry/    Breakfast/  Lebanese/      Portuguese/  Punjabi/      Moroccan/   Japanese/
Pizza/    American/   Arabic/        Persian/     Caribbean/    Russian/    Burgers/

Using metadata

Let’s add my personal ratings as metadata

[14]:
meta -u ('Curry/Ahmeds_Tandoori', martins_rating=5.5) # -u for 'update'
meta -u ('Curry/Abida', martins_rating=6)
meta -u ('Curry/Abduls', martins_rating=4)

# Let's have a look
meta('Curry/Ahmeds_Tandoori')
[14]:
┌──────────────┬────────────────────────┐
│_directory    │/martin/Curry/          │
│obj_id        │5e8e20ed1dbc98e7a84d9660│
│name          │Ahmeds_Tandoori         │
│martins_rating│5.5                     │
└──────────────┴────────────────────────┘

And now let’s find the good ones

[15]:
find(meta=dict(martins_rating=queries.gt(5)))

[15]:
Ahmeds_Tandoori
Abida

You can also ‘pipe’ results to another callable:

[16]:
find(meta=dict(martins_rating=queries.gt(5))) | len

[16]:
2