egradman / Pincaster

Python binding for Pincaster (http://github.com/jedisct1/Pincaster)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Pincaster

This is the Python interface to the Pincaster server store.

Installation

  1. Download the package in your computer.
  2. Run python setup.py install and you're done.

Usage

Atomic updates

>>> from pincaster import *
>>> pincaster = Pincaster('127.0.0.1', 4269)
>>> france = Layer('france', pincaster)
>>> france.save()
True

Create Paris

>>> paris = Record('paris', france)
>>> paris.update({
...   'what': 'city',
...   'population': 2193031
... })
>>> paris
{'what': 'city', 'population': 2193031}
>>> paris.coords = 48.856667, 2.350833
>>> paris.save()
True

Time passes, a new birth in Paris, atomicaly increment population

>>> pincaster = Pincaster('127.0.0.1', 4269)
>>> france =  pincaster['france']
>>> paris = france['paris']
>>> paris['population'] += 1
>>> paris
{'what': 'city', 'population': 2193032}
>>> paris.save()
True
>>> paris['population']
2193032

Linked records

>>> diznyland = pincaster['diznyland']
>>> diznyland.save()
True
>>> donald = diznyland['donald']
>>> donald.update({
... 'first_name': 'Donald',
...     'last_name': 'Duck',
... })
>>> donald.save()
True

>>> abcd = diznyland['abcd']
>>> abcd.coords = 48.512, 2.243
>>> abcd.update({
...     'name': 'MacDonalds',
...     'closed': 1,
...     'address': 'blabla',
...     'visits': 100000
... })
>>> abcd.save()
True
>>> donald.links['favorite_restaurant'] = abcd
>>> donald.save()
True
>>> donald
{'first_name': 'Donald', 'last_name': 'Duck', '$link:favorite_restaurant': 'abcd'}
>>> donald['$link:favorite_restaurant']
abcd
>>> donald.links['favorite_restaurant']
{'visits': 100000, 'name': u'MacDonalds', 'closed': 1, 'address': u'blabla'}

>>> # Downloads again donald
>>> d1 = self.layer['donald']
>>> a1 = d1.links['favorite_restaurant']
>>> d1
{'first_name': u'Donald', 'last_name': u'Duck', '$link:favorite_restaurant': u'abcd'}
>>> d1['$link:favorite_restaurant']
abcd
>>> d1.links['favorite_restaurant']
{'visits': 100000, 'name': u'MacDonalds', 'closed': 1, 'address': u'blabla'}
>>> del d1

>>> # Downloads again donald, with linked records
>>> d2 = self.layer.get_record('donald', download_links=True)
>>> a2 = d2.links['favorite_restaurant']
>>> d2['$link:favorite_restaurant']
abcd
>>> del d2

Geographic search

Rock around a record

>>> numbers = pincaster['numbers']
>>> numbers.save()
True

>>> first = numbers['first']
>>> first['name'] = 'Foo'
>>> first.coords = 48.054, 12.001
>>> first.save()
True
>>> first
{'name': 'Foo'}
>>> first.coords
(48.054000000000002, 12.000999999999999)

>>> second = numbers['second']
>>> second['name'] = 'Bar'
>>> second.coords = 48.024, 12.100
>>> second.save()
True
>>> second
{'name': 'Bar'}
>>> second.coords
(48.024000000000001, 12.1)

>>> third = numbers['third']
>>> third['name'] = 'Baz'
>>> third.coords = 48.07, 12.0501
>>> third.save()
True
>>> third
{'name': 'Baz'}
>>> third.coords
(48.07, 12.0501)

>>> records = third.around(limit=200, radius=7000)
>>> records
({'name': u'Foo'}, {'name': u'Bar'}, {'name': u'Baz'})

About

Python binding for Pincaster (http://github.com/jedisct1/Pincaster)