예제 #1
0
    def sync_db(self, *model_modules):
        """同步数据库
        eg: sync_db(model_1, model_2)
        """
        self.create_keyspace_if_not_exist()

        if not self._is_connected:
            self.connect()

        # 同步所有 table model 和 usertype model
        table_models, user_type_models = [], []
        for model_module in model_modules:
            _table_models, _user_type_models = get_models(
                model_module, self.keyspace)
            table_models.extend(_table_models)
            user_type_models.extend(_user_type_models)

        for model in user_type_models:
            management.sync_type(ks_name=self.keyspace, type_model=model)
        for model in table_models:
            management.sync_table(model)

        management.execute("""
            CREATE CUSTOM INDEX idx_nickname ON profile(nickname)
            USING 'org.apache.cassandra.index.sasi.SASIIndex'
            WITH OPTIONS = { 'mode': 'CONTAINS' }
        """)

        management.execute("""
            CREATE CUSTOM INDEX idx_role_id ON profile(role_id)
            USING 'org.apache.cassandra.index.sasi.SASIIndex'
            WITH OPTIONS = { 'mode': 'CONTAINS' }
        """)
예제 #2
0
    def test_can_create_same_udt_different_keyspaces(self):
        class User(UserType):
            age = columns.Integer()
            name = columns.Text()

        sync_type("cqlengine_test", User)

        create_keyspace_simple("simplex", 1)
        sync_type("simplex", User)
        drop_keyspace("simplex")
예제 #3
0
    def test_can_create_same_udt_different_keyspaces(self):
        class User(UserType):
            age = columns.Integer()
            name = columns.Text()

        sync_type("cqlengine_test", User)

        create_keyspace_simple("simplex", 1)
        sync_type("simplex", User)
        drop_keyspace("simplex")
예제 #4
0
def sync_tables():
    """Sync all models to tables.
    """
    sync_table(ShoppingList)
    sync_table(User)
    sync_table(Category)
    sync_table(Feed)
    sync_table(News)
    sync_table(Photo)
    sync_table(Profile)
    sync_table(Video)
    sync_type(FeedPhoto)
    sync_type(NewsPhoto)
예제 #5
0
def main():
    # create a keyspace "test"
    connection.setup(['140.121.101.164'], "weather1")
    management.create_keyspace_simple('weather1', 3)

    # connect to test keyspace
    connection.setup(['140.121.101.164'], "weather1", protocol_version=3)

    management.sync_type('test', Air)
    management.sync_type('test', Sun)
    management.sync_type('test', Rain)
    management.sync_type('test', Basic)
    management.sync_type('test', Value)
    management.sync_table(Weather)
예제 #6
0
def init_db(models=None, types=None):
    """
    To sync the models to the database.
    *Note: synchronizing models causes schema changes, and should be done with caution.
    Please see the discussion in cassandra.cqlengine.management - Schema management for cqlengine for considerations.
    """
    get_db()
    if models:
        for model in models:
            sync_table(model)
    if types:
        ks = current_app.config.get('DATABASE_KEYSPACE', 'dev')
        for t in types:
            sync_type(ks, t)
예제 #7
0
    def sync_db(self, *model_modules):
        """同步数据库
        eg: sync_db(model_1, model_2)
        """
        self.create_keyspace_if_not_exist()

        if not self._is_connected:
            self.connect()

        # 同步所有 table model 和 usertype model
        table_models, user_type_models = [], []
        for model_module in model_modules:
            _table_models, _user_type_models = get_models(
                model_module, self.keyspace)
            table_models.extend(_table_models)
            user_type_models.extend(_user_type_models)

        for model in user_type_models:
            management.sync_type(ks_name=self.keyspace, type_model=model)
        for model in table_models:
            management.sync_table(model)
예제 #8
0
    def test_can_create_udts(self):
        class User(UserType):
            age = columns.Integer()
            name = columns.Text()

        sync_type("cqlengine_test", User)
        user = User(age=42, name="John")
        self.assertEqual(42, user.age)
        self.assertEqual("John", user.name)

        # Add a field
        class User(UserType):
            age = columns.Integer()
            name = columns.Text()
            gender = columns.Text()

        sync_type("cqlengine_test", User)
        user = User(age=42, name="John", gender="male")
        self.assertEqual(42, user.age)
        self.assertEqual("John", user.name)
        self.assertEqual("male", user.gender)

        # Remove a field
        class User(UserType):
            age = columns.Integer()
            name = columns.Text()

        sync_type("cqlengine_test", User)
        user = User(age=42, name="John", gender="male")
        with self.assertRaises(AttributeError):
            user.gender
예제 #9
0
    def test_can_create_udts(self):
        class User(UserType):
            age = columns.Integer()
            name = columns.Text()

        sync_type("cqlengine_test", User)
        user = User(age=42, name="John")
        self.assertEqual(42, user.age)
        self.assertEqual("John", user.name)

        # Add a field
        class User(UserType):
            age = columns.Integer()
            name = columns.Text()
            gender = columns.Text()

        sync_type("cqlengine_test", User)
        user = User(age=42, name="John", gender="male")
        self.assertEqual(42, user.age)
        self.assertEqual("John", user.name)
        self.assertEqual("male", user.gender)

        # Remove a field
        class User(UserType):
            age = columns.Integer()
            name = columns.Text()

        sync_type("cqlengine_test", User)
        user = User(age=42, name="John", gender="male")
        with self.assertRaises(AttributeError):
            user.gender
예제 #10
0
    def test_sync_warnings(self):
        """
        Test to insure when inconsistent changes are made to a table, or type as part of a sync call that the proper logging messages are surfaced

        @since 3.2
        @jira_ticket PYTHON-260
        @expected_result warnings are logged

        @test_category object_mapper
        """
        mock_handler = MockLoggingHandler()
        logger = logging.getLogger(management.__name__)
        logger.addHandler(mock_handler)
        sync_table(BaseInconsistent)
        sync_table(ChangedInconsistent)
        self.assertTrue('differing from the model type' in mock_handler.messages.get('warning')[0])
        if CASSANDRA_VERSION >= '2.1':
            sync_type(DEFAULT_KEYSPACE, BaseInconsistentType)
            mock_handler.reset()
            sync_type(DEFAULT_KEYSPACE, ChangedInconsistentType)
            self.assertTrue('differing from the model user type' in mock_handler.messages.get('warning')[0])
        logger.removeHandler(mock_handler)
예제 #11
0
    def test_sync_warnings(self):
        """
        Test to insure when inconsistent changes are made to a table, or type as part of a sync call that the proper logging messages are surfaced

        @since 3.2
        @jira_ticket PYTHON-260
        @expected_result warnings are logged

        @test_category object_mapper
        """
        mock_handler = MockLoggingHandler()
        logger = logging.getLogger(management.__name__)
        logger.addHandler(mock_handler)
        sync_table(BaseInconsistent)
        sync_table(ChangedInconsistent)
        self.assertTrue('differing from the model type' in mock_handler.messages.get('warning')[0])
        if CASSANDRA_VERSION >= Version('2.1'):
            sync_type(DEFAULT_KEYSPACE, BaseInconsistentType)
            mock_handler.reset()
            sync_type(DEFAULT_KEYSPACE, ChangedInconsistentType)
            self.assertTrue('differing from the model user type' in mock_handler.messages.get('warning')[0])
        logger.removeHandler(mock_handler)
예제 #12
0
    def test_can_create_same_udt_different_keyspaces(self):
        sync_type(DEFAULT_KEYSPACE, User)

        create_keyspace_simple("simplex", 1)
        sync_type("simplex", User)
        drop_keyspace("simplex")
예제 #13
0
from cassandra.cqlengine.management import sync_table, sync_type

from se2 import config
from se2.infras.models import *

ks_name = config.get("cassandra", "session_keyspace")

sync_type(ks_name, UserOrderExecutionModel)
sync_type(ks_name, CurrentPriceModel)
sync_type(ks_name, PriceChangeModel)
sync_type(ks_name, DataRecordModel)
sync_table(AccountModel)
sync_table(TimeSeriesModel)
sync_table(TimeSeriesDataModel)
sync_table(UserOrderModel)
예제 #14
0
import os
os.environ[
    'config.dir'] = "/Users/zhangzheng/Quantitative/stratege_engine/interface3"

from se.infras.models import *
from cassandra.cqlengine.management import sync_table, sync_type
from se import config

ks_name = config.get("cassandra", "session_keyspace")

sync_type(ks_name, UserOrderExecutionModel)
sync_type(ks_name, UserOrderModel)
sync_type(ks_name, DataRecordModel)
sync_table(AccountModel)
sync_table(TimeSeriesModel)
sync_table(TimeSeriesDataModel)