From 83cf23da7c9f0dfc3bc36884c69ab9e334ea8d12 Mon Sep 17 00:00:00 2001 From: Blake Eggleston Date: Sun, 11 Nov 2012 22:14:40 -0800 Subject: [PATCH] cleaning things up a bit --- README.md | 9 ++++----- cassandraengine/columns.py | 5 +++++ cassandraengine/manager.py | 8 ++------ cassandraengine/models.py | 2 ++ cassandraengine/query.py | 11 +++++++++++ 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 13652341..b3349e0d 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,21 @@ cassandraengine =============== -Python Cassandra ORM in the style of django / mongoengine +Cassandra ORM for Python in the style of the Django orm and mongoengine In it's current state you can define column families, create and delete column families based on your model definiteions, save models and retrieve models by their primary keys. -That's about it. Also, the CQL stuff is pretty simple at this point. +That's about it. Also, the CQL stuff is very basic at this point. ##TODO -* Complex queries (class Q(object)) -* Match column names to mongoengine field names? +* Real querying * mongoengine fields? URLField, EmbeddedDocument, ListField, DictField * column ttl? * ForeignKey/DBRef fields? * dynamic column support -* tests * query functionality +* Match column names to mongoengine field names? * nice column and model class __repr__ diff --git a/cassandraengine/columns.py b/cassandraengine/columns.py index 20f54ba8..22a533c6 100644 --- a/cassandraengine/columns.py +++ b/cassandraengine/columns.py @@ -197,11 +197,16 @@ class Counter(BaseColumn): #TODO: research supercolumns #http://wiki.apache.org/cassandra/DataModel class List(BaseColumn): + #checkout cql.cqltypes.ListType def __init__(self, **kwargs): super(DateTime, self).__init__(**kwargs) raise NotImplementedError class Dict(BaseColumn): + #checkout cql.cqltypes.MapType def __init__(self, **kwargs): super(DateTime, self).__init__(**kwargs) raise NotImplementedError + +#checkout cql.cqltypes.SetType +#checkout cql.cqltypes.CompositeType diff --git a/cassandraengine/manager.py b/cassandraengine/manager.py index 3f7ec7f6..de061ce0 100644 --- a/cassandraengine/manager.py +++ b/cassandraengine/manager.py @@ -23,9 +23,7 @@ class Manager(object): return cf_name def __call__(self, **kwargs): - """ - filter shortcut - """ + """ filter shortcut """ return self.filter(**kwargs) def find(self, pk): @@ -71,9 +69,7 @@ class Manager(object): QuerySet(self.model).save(instance) def _delete_instance(self, instance): - """ - Deletes a single instance - """ + """ Deletes a single instance """ QuerySet(self.model).delete_instance(instance) #----column family create/delete---- diff --git a/cassandraengine/models.py b/cassandraengine/models.py index 3d1388f9..fdc96558 100644 --- a/cassandraengine/models.py +++ b/cassandraengine/models.py @@ -119,11 +119,13 @@ class ModelMetaClass(type): for name, col in _columns.items(): db_map[col.db_field] = name + #add management members to the class attrs['_columns'] = _columns attrs['_db_map'] = db_map attrs['_pk_name'] = pk_name attrs['_dynamic_columns'] = {} + #create the class and add a manager to it klass = super(ModelMetaClass, cls).__new__(cls, name, bases, attrs) klass.objects = Manager(klass) return klass diff --git a/cassandraengine/query.py b/cassandraengine/query.py index 025d135a..817b0396 100644 --- a/cassandraengine/query.py +++ b/cassandraengine/query.py @@ -2,11 +2,22 @@ import copy from cassandraengine.connection import get_connection +#CQL 3 reference: +#http://www.datastax.com/docs/1.1/references/cql/index + +class Query(object): + + pass + class QuerySet(object): #TODO: querysets should be immutable #TODO: querysets should be executed lazily #TODO: conflicting filter args should raise exception unless a force kwarg is supplied + #CQL supports ==, >, >=, <, <=, IN (a,b,c,..n) + #REVERSE, LIMIT + #ORDER BY + def __init__(self, model, query_args={}): super(QuerySet, self).__init__() self.model = model