Skip to main content

PyCouchbase

Project description

Why add another layer to the SDK?

  • Inconsistent data types in Couchbase documents can be a real pain.
  • Better management of multiple Couchbase connections.
  • Readability of Couchbase documents in the Python source code while still being able to use Couchbase SDK’s operations.

Features

  • This was originally forked from and inspired by couchbasekit.
  • Validate Couchbase documents.
  • Represent Couchbase documents as Python objects.
  • Easily manage multiple Couchbase connections.
  • Supports Couchbase Python SDK 2.0 operations.
  • There are data retrieval operations that are already included in couchbasekit but I haven’t thoroughly tested it with PyCouchbase.

Installation

At the command line:

$ easy_install pycouchbase

Or, if you have virtualenvwrapper installed:

$ mkvirtualenv pycouchbase
$ pip install pycouchbase

Getting Started

Let us go through a simple example.

Import everything we need:

import datetime

from pycouchbase import Connection
from pycouchbase import Document, register_view
from pycouchbase.fields import EmailField, ChoiceField

Declare the Document class:

# You can define your own field/data type

class Gender(ChoiceField):
    CHOICES = {
        'M': 'Male',
        'F': 'Female',
    }

@register_view('dev_authors')
class Author(Document):
    __bucket_name__ = 'couchbasekit_samples'
    __key_field__ = 'slug'  # optional
    doc_type = 'author'
    structure = {
        'slug': unicode,
        'first_name': unicode,
        'last_name': unicode,
        'gender': Gender,
        'email': EmailField,
        'has_book': bool,
        'age': int,
        'birthday': datetime.date,
        'created_at': datetime.datetime,
    }
    default_values = {  # optional
        'has_book': False,
        # don't worry about the timezone info!
        # it's auto assigned as to UTC, so all you have to do is:
        'created_at': datetime.datetime.utcnow,
    }
    required_fields = (  # optional
        'slug',
        'first_name',
        'last_name',
        'email',
    )

Validate and save your document:

local_connection = Connection.auth(server='localhost')
author = Author()
bucket = author.get_bucket(local_connection)

author.update({
    'slug': u'douglas_adams',
    'first_name': u'Douglas',
    'last_name': u'Adams',
    'gender': Gender('M'),
    'email': EmailField('dna@example.com'),
})

# Try to validate before saving
try:
    author.validate()
    try:
        rvs = bucket.insert(author.slug, author.encode())
    except KeyExistsError as why:
        print(why)
except Author.StructureError as why:
    # when the data structure is invalid
    print(why)

Save multiple documents:

local_connection = Connection.auth(server='localhost')
author = Author()

list_data = [{
    'slug': u'douglas_adams',
    'first_name': u'Douglas',
    'last_name': u'Adams',
    'gender': Gender('M'),
    'email': EmailField('dna@example.com'),
}, {
    'slug': u'isaac_asimov',
    'first_name': u'Isaac',
    'last_name': u'Asimov',
    'gender': Gender('M'),
    'email': EmailField('dna@example.com'),
}]

try:
    bucket = author.get_bucket(local_connection)
    updated_authors = {}

    for d in list_data:
        author.update(d)
        try:
            # validate!
            author.validate()
            updated_authors.update({
                d['slug']: author.encode()
            })
        except author.StructureError as why:
            print(why)

    # save multiple data
    rvs = bucket.upsert_multi(updated_authors)
except CouchbaseNetworkError as why:
    print(why)

Manage multiple connections:

connection_1 = Connection.auth(server='server_1')
connection_2 = Connection.auth(server='server_2')

# where doc_1 and doc_2 are document objects
bucket_1 = doc_1.get_bucket(connection_1)
bucket_2 = doc_2.get_bucket(connection_2)

Bucket objects can support any Couchbase Python SDK 2.0 operations:

bucket_1.get('key_or_id')
bucket_1.insert('key_or_id', value)

More about Couchbase SDK’s supported operations here: http://docs.couchbase.com/developer/python-2.0/introduction.html

History

0.1.0 (2015-01-11)

  • First release on PyPI.

Project details


Release history Release notifications

This version
History Node

0.1.0b1

History Node

0.1.0.dev1

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
pycouchbase-0.1.0b1-py2.py3-none-any.whl (20.1 kB) Copy SHA256 hash SHA256 Wheel py2.py3 Aug 19, 2015
pycouchbase-0.1.0b1.tar.gz (26.2 kB) Copy SHA256 hash SHA256 Source None Aug 19, 2015

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page