Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- # Copyright 2010 Timu Eren
- import time
- from cassandra.ttypes import *
- from connections import Connection
- from fields import *
- from sinexceptions import *
- from utils import timestamp
- class ModelType(type):
- def __new__(cls, classname, bases, attrs):
- fields = dict()
- _key_field = None
- instance = type.__new__(cls, classname, bases, attrs)
- for name, value in attrs.iteritems():
- if isinstance(value, Field):
- fields[name] = value
- if isinstance(value, KeyField):
- _key_field = value
- if not _key_field:
- raise ErrorKeyFieldNotFound("")
- instance._key_field = _key_field
- if len(fields):
- instance._fields = fields
- return instance
- class Model(dict):
- __metaclass__ = ModelType
- __changed_columns__ = set()
- def _get_cas(self):
- """Return the cassandra client."""
- if keyspace not in self._clients:
- self._clients[self.__keyspace__] = connection.get_pool(self.__keyspace__)
- return self._clients[self.__keyspace__]
- def __init__(self):
- self._clients = {}
- """put changed rows to cassandra"""
- def save(self, consistency_level=None):
- """put changed rows to cassandra"""
- """
- Parameters:
- - consistency_level
- """
- """has any changed column?"""
- if self.__changed_columns__:
- _key_field = self._key_field.get()
- __column_family__ = self.__column_family__
- mutate_map = {_key_field: {
- __column_family__:list()
- }
- }
- columns = list()
- for c in self.__changed_columns__:
- column = Column(c, self._fields[c].get(), timestamp())
- if not self._key_field.is_super():
- mutate_map[_key_field][self.__column_family__].append(Mutation(ColumnOrSuperColumn(
- column=column
- )
- )
- )
- else:
- columns.append(column)
- if self._key_field.is_super():
- mutate_map[_key_field][self.__column_family__].append(Mutation(ColumnOrSuperColumn(
- super_column=SuperColumn(self._key_field.super_column, columns=columns)
- )
- )
- )
- Connection.instance().batch_mutate(self.__keyspace__, mutate_map, consistency_level)
- def __getitem__(self, k):
- if k not in self._fields:
- raise ErrorFieldNotFound(k)
- return self._fields[k].get()
- def __setitem__(self, k, v):
- if k not in self._fields:
- raise ErrorFieldNotFound(k)
- if self._fields[k].get() != v :
- self.__changed_columns__.add(k)
- self._fields[k].set(v)
- if __name__ == '__main__':
- class UserModel(Model):
- __keyspace__ = 'Test'
- __column_family__ = 'SuperColumnTest'
- username = KeyField(super_column='information')
- password = StringField(default=None)
- u = UserModel()
- u['username'] = 'test'
- u['password'] = 'test'
- u.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement