Advertisement
Guest User

Untitled

a guest
May 21st, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.97 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Copyright 2010 Timu Eren
  5.  
  6. import time
  7. from cassandra.ttypes import *
  8.  
  9. from connections import Connection
  10. from fields import *
  11. from sinexceptions import *
  12. from utils import timestamp
  13.  
  14. class ModelType(type):
  15.   def __new__(cls, classname, bases, attrs):
  16.  
  17.       fields = dict()
  18.       _key_field = None
  19.       instance = type.__new__(cls, classname, bases, attrs)
  20.  
  21.       for name, value in attrs.iteritems():
  22.         if isinstance(value, Field):
  23.           fields[name] = value
  24.          
  25.         if isinstance(value, KeyField):
  26.           _key_field = value
  27.  
  28.       if not _key_field:
  29.         raise ErrorKeyFieldNotFound("")
  30.  
  31.  
  32.  
  33.       instance._key_field = _key_field
  34.       if len(fields):
  35.         instance._fields = fields
  36.       return instance
  37.  
  38. class Model(dict):
  39.   __metaclass__ = ModelType
  40.  
  41.   __changed_columns__ = set()
  42.  
  43.   def _get_cas(self):
  44.       """Return the cassandra client."""
  45.       if keyspace not in self._clients:
  46.           self._clients[self.__keyspace__] = connection.get_pool(self.__keyspace__)
  47.  
  48.       return self._clients[self.__keyspace__]
  49.  
  50.   def __init__(self):
  51.       self._clients = {}
  52.  
  53.   """put changed rows to cassandra"""
  54.   def save(self, consistency_level=None):
  55.     """put changed rows to cassandra"""
  56.     """
  57.      Parameters:
  58.      - consistency_level
  59.    """
  60.  
  61.     """has any changed column?"""
  62.     if self.__changed_columns__:
  63.       _key_field = self._key_field.get()
  64.       __column_family__ = self.__column_family__
  65.  
  66.       mutate_map = {_key_field: {
  67.           __column_family__:list()
  68.         }
  69.       }
  70.       columns = list()
  71.       for c in self.__changed_columns__:
  72.         column = Column(c, self._fields[c].get(), timestamp())
  73.         if not self._key_field.is_super():
  74.           mutate_map[_key_field][self.__column_family__].append(Mutation(ColumnOrSuperColumn(
  75.                 column=column
  76.               )
  77.             )
  78.           )
  79.         else:
  80.           columns.append(column)
  81.  
  82.       if self._key_field.is_super():
  83.         mutate_map[_key_field][self.__column_family__].append(Mutation(ColumnOrSuperColumn(
  84.               super_column=SuperColumn(self._key_field.super_column, columns=columns)
  85.             )
  86.           )
  87.         )
  88.       Connection.instance().batch_mutate(self.__keyspace__, mutate_map, consistency_level)
  89.  
  90.   def __getitem__(self, k):
  91.     if k not in self._fields:
  92.       raise ErrorFieldNotFound(k)
  93.     return self._fields[k].get()
  94.  
  95.   def __setitem__(self, k, v):
  96.     if k not in self._fields:
  97.       raise ErrorFieldNotFound(k)
  98.  
  99.     if self._fields[k].get() != v :
  100.       self.__changed_columns__.add(k)
  101.     self._fields[k].set(v)
  102.  
  103. if __name__ == '__main__':
  104.  
  105.   class UserModel(Model):
  106.     __keyspace__ = 'Test'
  107.     __column_family__ = 'SuperColumnTest'
  108.    
  109.     username = KeyField(super_column='information')
  110.     password = StringField(default=None)
  111.  
  112.  
  113.   u = UserModel()
  114.   u['username'] = 'test'
  115.   u['password'] = 'test'
  116.   u.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement