Skip to main content

JSON Object storage backed by Git & Elastic Search

Project description

Adventures in an declarative object-y thing backed by Git and using Elasticsearch as a query backend.

Continuous Integration Code Coverage Elastic-Git Documentation

Usage

from elasticgit import EG
from elasticgit.models import Model, IntegerField, TextField


workspace = EG.workspace('/Users/sdehaan/Desktop/test-repo/')
workspace.setup('Simon de Haan', 'simon@praekeltfoundation.org')


"""
# The model looks like this

class Person(Model):
    age = IntegerField('The Age')
    name = TextField('The Name')
"""
from elasticgit.tests.base import TestPerson as Person

person1 = Person({'age': 10, 'name': 'Foo'})
workspace.save(person1, 'Saving Person 1')

person2 = Person({'age': 20, 'name': 'Bar'})
workspace.save(person2, 'Saving Person 2')

person3 = Person({'age': 30, 'name': 'Baz'})
workspace.save(person3, 'Saving Person 3')

Data is now persisted in a git repository and is queryable via elasticsearch:

>>> from elasticgit import EG
>>> from elasticgit.tests.base import TestPerson as Person
>>> workspace = EG.workspace('/Users/sdehaan/Desktop/test-repo/')
>>> for person in workspace.S(Person).filter(age__gte=20):
...     print person.name, person.age
...
Bar 20
Baz 30

Check the examples/ directory for some more code samples.

$ python -m examples.basic_usage
e6cb25f00870472fa5223d76dc361667 Baz 30
2bd470372243411c9abd8fdcb969dcf5 Bar 20

Schema Management

We’ve followed the example of Apache Avro when it comes to schema evolution. Avro compatible schemas can be generated from the command line.

Model definitions can be rebuilt from Avro JSON schema files.

A sample model file:

class TestFallbackPerson(Model):
    age = IntegerField('The Age')
    name = TextField('The name', fallbacks=[
        SingleFieldFallback('nick'),
        SingleFieldFallback('obsolete'),
    ])
    nick = TextField('The nickname', required=False)
    obsolete = TextField('Some obsolete field', required=False)

Generating the Avro spec file

$ python -m elasticgit.tools dump-schema \
>   elasticgit.tests.base.TestFallbackPerson > avro.json
$ python -m elasticgit.tools load-schema avro.json > models.py

The generated model file:

# NOTE:
#
#   This is an automatically generated Elasticgit Model definition
#   from an Avro schema. Do not manually edit this file unless you
#   absolutely know what you are doing.
#
# timestamp: 2014-10-14T18:51:23.916194
# namespace: elasticgit.tests.base
# type: record
# name: TestFallbackPerson
#

from elasticgit import models

class TestFallbackPerson(models.Model):

    name = models.TextField(u"""The name""", fallbacks=[models.SingleFieldFallback('nick'),models.SingleFieldFallback('obsolete'),])
    age = models.IntegerField(u"""The Age""")
    obsolete = models.TextField(u"""Some obsolete field""")
    _version = models.ModelVersionField(u"""Model Version Identifier""")
    nick = models.TextField(u"""The nickname""")
    uuid = models.TextField(u"""Unique Identifier""")

We’re using ConfModel’s fallbacks feature and encode this in Avro’s Schema as aliases. This allows you to fall back to older names for fields:

>>> TestFallbackPerson({'obsolete': 'oldest name', 'age': 10}).name
'oldest name'
>>> TestFallbackPerson({'nick': 'older name', 'age': 10}).name
'older name'
>>> TestFallbackPerson({'name': 'current name', 'age': 10}).name
'current name'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elastic-git-1.5.0.tar.gz (39.9 kB view details)

Uploaded Source

File details

Details for the file elastic-git-1.5.0.tar.gz.

File metadata

  • Download URL: elastic-git-1.5.0.tar.gz
  • Upload date:
  • Size: 39.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for elastic-git-1.5.0.tar.gz
Algorithm Hash digest
SHA256 1d2dbf18ac88d5abd3ad0a46a576a9462c1aa7aa9e98caa278b100ced481c9b2
MD5 1fd4cea0ae6b3c51ad211e1b85e2ef97
BLAKE2b-256 2d77c0fbc01fc80f8a3de60c1cfa73fe935b47c3ccc9d9d1c3c3467b3e0ecb9b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page