diff --git a/cassandraengine/__init__.py b/cassandraengine/__init__.py deleted file mode 100644 index af95d0b0..00000000 --- a/cassandraengine/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from cassandraengine.columns import * -from cassandraengine.models import Model - diff --git a/cassandraengine/tests/columns/test_validation.py b/cassandraengine/tests/columns/test_validation.py deleted file mode 100644 index e42519cc..00000000 --- a/cassandraengine/tests/columns/test_validation.py +++ /dev/null @@ -1,16 +0,0 @@ -#tests the behavior of the column classes - -from cassandraengine.tests.base import BaseCassEngTestCase - -from cassandraengine.columns import BaseColumn -from cassandraengine.columns import Bytes -from cassandraengine.columns import Ascii -from cassandraengine.columns import Text -from cassandraengine.columns import Integer -from cassandraengine.columns import DateTime -from cassandraengine.columns import UUID -from cassandraengine.columns import Boolean -from cassandraengine.columns import Float -from cassandraengine.columns import Decimal - - diff --git a/cqlengine/__init__.py b/cqlengine/__init__.py new file mode 100644 index 00000000..1af8944a --- /dev/null +++ b/cqlengine/__init__.py @@ -0,0 +1,3 @@ +from cqlengine.columns import * +from cqlengine.models import Model + diff --git a/cassandraengine/columns.py b/cqlengine/columns.py similarity index 87% rename from cassandraengine/columns.py rename to cqlengine/columns.py index bcbf39e7..25a6f59b 100644 --- a/cassandraengine/columns.py +++ b/cqlengine/columns.py @@ -2,12 +2,43 @@ import re from uuid import uuid1, uuid4 -from cassandraengine.exceptions import ValidationError +from cqlengine.exceptions import ValidationError + +class BaseValueManager(object): + + def __init__(self, instance, column, value): + self.instance = instance + self.column = column + self.initial_value = value + self.value = value + + def deleted(self): + return self.value is None and self.initial_value is not None + + def getval(self): + return self.value + + def setval(self, val): + self.value = val + + def delval(self): + self.value = None + + def get_property(self): + _get = lambda slf: self.getval() + _set = lambda slf, val: self.setval(val) + _del = lambda slf: self.delval() + + if self.column.can_delete: + return property(_get, _set, _del) + else: + return property(_get, _set) class BaseColumn(object): #the cassandra type this column maps to db_type = None + value_manager = BaseValueManager instance_counter = 0 @@ -64,6 +95,10 @@ class BaseColumn(object): def is_primary_key(self): return self.primary_key + @property + def can_delete(self): + return not self.primary_key + #methods for replacing column definitions with properties that interact #with a column's value member #this will allow putting logic behind value access (lazy loading, etc) diff --git a/cassandraengine/connection.py b/cqlengine/connection.py similarity index 100% rename from cassandraengine/connection.py rename to cqlengine/connection.py diff --git a/cassandraengine/exceptions.py b/cqlengine/exceptions.py similarity index 75% rename from cassandraengine/exceptions.py rename to cqlengine/exceptions.py index 4b20f7a3..3bb026f2 100644 --- a/cassandraengine/exceptions.py +++ b/cqlengine/exceptions.py @@ -1,4 +1,4 @@ -#cassandraengine exceptions +#cqlengine exceptions class ModelException(BaseException): pass class ValidationError(BaseException): pass diff --git a/cassandraengine/manager.py b/cqlengine/manager.py similarity index 98% rename from cassandraengine/manager.py rename to cqlengine/manager.py index de061ce0..4d4cbb73 100644 --- a/cassandraengine/manager.py +++ b/cqlengine/manager.py @@ -1,6 +1,6 @@ #manager class -from cassandraengine.query import QuerySet +from cqlengine.query import QuerySet class Manager(object): diff --git a/cassandraengine/models.py b/cqlengine/models.py similarity index 89% rename from cassandraengine/models.py rename to cqlengine/models.py index 2b425bbc..b44cdebe 100644 --- a/cassandraengine/models.py +++ b/cqlengine/models.py @@ -1,8 +1,8 @@ from collections import OrderedDict -from cassandraengine import columns -from cassandraengine.exceptions import ModelException -from cassandraengine.manager import Manager +from cqlengine import columns +from cqlengine.exceptions import ModelException +from cqlengine.manager import Manager class BaseModel(object): """ @@ -11,18 +11,14 @@ class BaseModel(object): #table names will be generated automatically from it's model name and package #however, you can alse define them manually here - db_name = None + db_name = None def __init__(self, **values): - #set columns from values - for k,v in values.items(): - if k in self._columns: - setattr(self, k, v) - - #set excluded columns to None - for k in self._columns.keys(): - if k not in values: - setattr(self, k, None) + self._values = {} + for name, column in self._columns.items(): + value_mngr = column.value_manager(self, column, values.get(name, None)) + self._values[name] = value_mngr + setattr(self, name, value_mngr.get_property()) @classmethod def find(cls, pk): diff --git a/cassandraengine/query.py b/cqlengine/query.py similarity index 99% rename from cassandraengine/query.py rename to cqlengine/query.py index 8cd73285..70343d6b 100644 --- a/cassandraengine/query.py +++ b/cqlengine/query.py @@ -1,6 +1,6 @@ import copy -from cassandraengine.connection import get_connection +from cqlengine.connection import get_connection #CQL 3 reference: #http://www.datastax.com/docs/1.1/references/cql/index diff --git a/cassandraengine/tests/__init__.py b/cqlengine/tests/__init__.py similarity index 100% rename from cassandraengine/tests/__init__.py rename to cqlengine/tests/__init__.py diff --git a/cassandraengine/tests/base.py b/cqlengine/tests/base.py similarity index 100% rename from cassandraengine/tests/base.py rename to cqlengine/tests/base.py diff --git a/cassandraengine/tests/columns/__init__.py b/cqlengine/tests/columns/__init__.py similarity index 100% rename from cassandraengine/tests/columns/__init__.py rename to cqlengine/tests/columns/__init__.py diff --git a/cqlengine/tests/columns/test_validation.py b/cqlengine/tests/columns/test_validation.py new file mode 100644 index 00000000..f916fb0e --- /dev/null +++ b/cqlengine/tests/columns/test_validation.py @@ -0,0 +1,16 @@ +#tests the behavior of the column classes + +from cqlengine.tests.base import BaseCassEngTestCase + +from cqlengine.columns import BaseColumn +from cqlengine.columns import Bytes +from cqlengine.columns import Ascii +from cqlengine.columns import Text +from cqlengine.columns import Integer +from cqlengine.columns import DateTime +from cqlengine.columns import UUID +from cqlengine.columns import Boolean +from cqlengine.columns import Float +from cqlengine.columns import Decimal + + diff --git a/cassandraengine/tests/model/__init__.py b/cqlengine/tests/model/__init__.py similarity index 100% rename from cassandraengine/tests/model/__init__.py rename to cqlengine/tests/model/__init__.py diff --git a/cassandraengine/tests/model/test_class_construction.py b/cqlengine/tests/model/test_class_construction.py similarity index 93% rename from cassandraengine/tests/model/test_class_construction.py rename to cqlengine/tests/model/test_class_construction.py index b1659fa1..bf6f3522 100644 --- a/cassandraengine/tests/model/test_class_construction.py +++ b/cqlengine/tests/model/test_class_construction.py @@ -1,8 +1,8 @@ -from cassandraengine.tests.base import BaseCassEngTestCase +from cqlengine.tests.base import BaseCassEngTestCase -from cassandraengine.exceptions import ModelException -from cassandraengine.models import Model -from cassandraengine import columns +from cqlengine.exceptions import ModelException +from cqlengine.models import Model +from cqlengine import columns class TestModelClassFunction(BaseCassEngTestCase): """ diff --git a/cassandraengine/tests/model/test_model_io.py b/cqlengine/tests/model/test_model_io.py similarity index 91% rename from cassandraengine/tests/model/test_model_io.py rename to cqlengine/tests/model/test_model_io.py index 788b36bb..a080726b 100644 --- a/cassandraengine/tests/model/test_model_io.py +++ b/cqlengine/tests/model/test_model_io.py @@ -1,8 +1,8 @@ from unittest import skip -from cassandraengine.tests.base import BaseCassEngTestCase +from cqlengine.tests.base import BaseCassEngTestCase -from cassandraengine.models import Model -from cassandraengine import columns +from cqlengine.models import Model +from cqlengine import columns class TestModel(Model): count = columns.Integer() diff --git a/cassandraengine/tests/model/test_validation.py b/cqlengine/tests/model/test_validation.py similarity index 100% rename from cassandraengine/tests/model/test_validation.py rename to cqlengine/tests/model/test_validation.py