Chore: isort tests

This commit is contained in:
olliemath 2021-07-27 23:30:59 +01:00
parent 9ccaacc640
commit bec70d15db
46 changed files with 422 additions and 390 deletions

View File

@ -1,12 +1,11 @@
# -*- coding: utf-8 -*-
import logging
import unittest
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
import logging
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
logging.getLogger("requests").setLevel(logging.WARNING)

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.CreateTable(Model1)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.DropTable(Model1)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.CreateTable(Model1)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.AlterTable(Model2)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.AlterTable(Model3)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.CreateTable(EnumModel1)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.AlterTable(EnumModel2)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.CreateTable(MaterializedModel)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.CreateTable(AliasModel)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.CreateTable(Model4Buffer)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.AlterTableWithBuffer(Model4Buffer_changed)]

View File

@ -1,8 +1,9 @@
import datetime
from clickhouse_orm import migrations
from test_migrations import Model3
from clickhouse_orm import migrations
def forward(database):
database.insert([Model3(date=datetime.date(2016, 1, 4), f1=4, f3=1, f4="test4")])

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.AlterTable(MaterializedModel1), migrations.AlterTable(AliasModel1)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.AlterTable(Model4_compressed), migrations.AlterTable(Model2LowCardinality)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.CreateTable(ModelWithConstraints)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.AlterConstraints(ModelWithConstraints2)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.CreateTable(ModelWithIndex)]

View File

@ -1,4 +1,5 @@
from clickhouse_orm import migrations
from ..test_migrations import *
operations = [migrations.AlterIndexes(ModelWithIndex2, reindex=True)]

View File

@ -1,75 +1,75 @@
import unittest
from datetime import date
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model, NO_VALUE
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.funcs import F
class AliasFieldsTest(unittest.TestCase):
def setUp(self):
self.database = Database("test-db", log_statements=True)
self.database.create_table(ModelWithAliasFields)
def tearDown(self):
self.database.drop_database()
def test_insert_and_select(self):
instance = ModelWithAliasFields(date_field="2016-08-30", int_field=-10, str_field="TEST")
self.database.insert([instance])
# We can't select * from table, as it doesn't select materialized and alias fields
query = (
"SELECT date_field, int_field, str_field, alias_int, alias_date, alias_str, alias_func"
" FROM $db.%s ORDER BY alias_date" % ModelWithAliasFields.table_name()
)
for model_cls in (ModelWithAliasFields, None):
results = list(self.database.select(query, model_cls))
self.assertEqual(len(results), 1)
self.assertEqual(results[0].date_field, instance.date_field)
self.assertEqual(results[0].int_field, instance.int_field)
self.assertEqual(results[0].str_field, instance.str_field)
self.assertEqual(results[0].alias_int, instance.int_field)
self.assertEqual(results[0].alias_str, instance.str_field)
self.assertEqual(results[0].alias_date, instance.date_field)
self.assertEqual(results[0].alias_func, 201608)
def test_assignment_error(self):
# I can't prevent assigning at all, in case db.select statements with model provided sets model fields.
instance = ModelWithAliasFields()
for value in ("x", [date.today()], ["aaa"], [None]):
with self.assertRaises(ValueError):
instance.alias_date = value
def test_wrong_field(self):
with self.assertRaises(AssertionError):
StringField(alias=123)
def test_duplicate_default(self):
with self.assertRaises(AssertionError):
StringField(alias="str_field", default="with default")
with self.assertRaises(AssertionError):
StringField(alias="str_field", materialized="str_field")
def test_default_value(self):
instance = ModelWithAliasFields()
self.assertEqual(instance.alias_str, NO_VALUE)
# Check that NO_VALUE can be assigned to a field
instance.str_field = NO_VALUE
# Check that NO_VALUE can be assigned when creating a new instance
instance2 = ModelWithAliasFields(**instance.to_dict())
class ModelWithAliasFields(Model):
int_field = Int32Field()
date_field = DateField()
str_field = StringField()
alias_str = StringField(alias=u"str_field")
alias_int = Int32Field(alias="int_field")
alias_date = DateField(alias="date_field")
alias_func = Int32Field(alias=F.toYYYYMM(date_field))
engine = MergeTree("date_field", ("date_field",))
import unittest
from datetime import date
from clickhouse_orm.database import Database
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.funcs import F
from clickhouse_orm.models import NO_VALUE, Model
class AliasFieldsTest(unittest.TestCase):
def setUp(self):
self.database = Database("test-db", log_statements=True)
self.database.create_table(ModelWithAliasFields)
def tearDown(self):
self.database.drop_database()
def test_insert_and_select(self):
instance = ModelWithAliasFields(date_field="2016-08-30", int_field=-10, str_field="TEST")
self.database.insert([instance])
# We can't select * from table, as it doesn't select materialized and alias fields
query = (
"SELECT date_field, int_field, str_field, alias_int, alias_date, alias_str, alias_func"
" FROM $db.%s ORDER BY alias_date" % ModelWithAliasFields.table_name()
)
for model_cls in (ModelWithAliasFields, None):
results = list(self.database.select(query, model_cls))
self.assertEqual(len(results), 1)
self.assertEqual(results[0].date_field, instance.date_field)
self.assertEqual(results[0].int_field, instance.int_field)
self.assertEqual(results[0].str_field, instance.str_field)
self.assertEqual(results[0].alias_int, instance.int_field)
self.assertEqual(results[0].alias_str, instance.str_field)
self.assertEqual(results[0].alias_date, instance.date_field)
self.assertEqual(results[0].alias_func, 201608)
def test_assignment_error(self):
# I can't prevent assigning at all, in case db.select statements with model provided sets model fields.
instance = ModelWithAliasFields()
for value in ("x", [date.today()], ["aaa"], [None]):
with self.assertRaises(ValueError):
instance.alias_date = value
def test_wrong_field(self):
with self.assertRaises(AssertionError):
StringField(alias=123)
def test_duplicate_default(self):
with self.assertRaises(AssertionError):
StringField(alias="str_field", default="with default")
with self.assertRaises(AssertionError):
StringField(alias="str_field", materialized="str_field")
def test_default_value(self):
instance = ModelWithAliasFields()
self.assertEqual(instance.alias_str, NO_VALUE)
# Check that NO_VALUE can be assigned to a field
instance.str_field = NO_VALUE
# Check that NO_VALUE can be assigned when creating a new instance
instance2 = ModelWithAliasFields(**instance.to_dict())
class ModelWithAliasFields(Model):
int_field = Int32Field()
date_field = DateField()
str_field = StringField()
alias_str = StringField(alias=u"str_field")
alias_int = Int32Field(alias="int_field")
alias_date = DateField(alias="date_field")
alias_func = Int32Field(alias=F.toYYYYMM(date_field))
engine = MergeTree("date_field", ("date_field",))

View File

@ -2,9 +2,9 @@ import unittest
from datetime import date
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
class ArrayFieldsTest(unittest.TestCase):

View File

@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
import unittest
from clickhouse_orm.models import BufferModel
from clickhouse_orm.engines import *
from clickhouse_orm.models import BufferModel
from .base_test_with_data import *

View File

@ -1,11 +1,12 @@
import unittest
import datetime
import unittest
import pytz
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model, NO_VALUE
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.models import NO_VALUE, Model
from clickhouse_orm.utils import parse_tsv

View File

@ -1,6 +1,7 @@
import unittest
from clickhouse_orm import *
from .base_test_with_data import Person

View File

@ -1,8 +1,9 @@
import unittest
from clickhouse_orm.database import Database
from clickhouse_orm.engines import Memory
from clickhouse_orm.fields import Field, Int16Field
from clickhouse_orm.models import Model
from clickhouse_orm.engines import Memory
class CustomFieldsTest(unittest.TestCase):

View File

@ -1,13 +1,14 @@
# -*- coding: utf-8 -*-
import unittest
import datetime
import unittest
from clickhouse_orm.database import ServerError, DatabaseException
from clickhouse_orm.models import Model
from clickhouse_orm.database import DatabaseException, ServerError
from clickhouse_orm.engines import Memory
from clickhouse_orm.fields import *
from clickhouse_orm.funcs import F
from clickhouse_orm.models import Model
from clickhouse_orm.query import Q
from .base_test_with_data import *

View File

@ -1,11 +1,12 @@
import unittest
import datetime
import unittest
import pytz
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
class DateFieldsTest(unittest.TestCase):

View File

@ -3,9 +3,9 @@ import unittest
from decimal import Decimal
from clickhouse_orm.database import Database, ServerError
from clickhouse_orm.models import Model
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
class DecimalFieldsTest(unittest.TestCase):

View File

@ -1,5 +1,5 @@
import unittest
import logging
import unittest
from clickhouse_orm import *

View File

@ -1,10 +1,9 @@
import unittest
import datetime
import logging
import unittest
from clickhouse_orm import *
import logging
logging.getLogger("requests").setLevel(logging.WARNING)

View File

@ -1,11 +1,10 @@
import unittest
from enum import Enum
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from enum import Enum
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
class EnumFieldsTest(unittest.TestCase):

View File

@ -2,9 +2,9 @@
import unittest
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
class FixedStringFieldsTest(unittest.TestCase):

View File

@ -1,15 +1,17 @@
import unittest
from .base_test_with_data import *
from .test_querysets import SampleModel
from datetime import date, datetime, tzinfo, timedelta
import pytz
from ipaddress import IPv4Address, IPv6Address
import logging
import unittest
from datetime import date, datetime, timedelta, tzinfo
from decimal import Decimal
from ipaddress import IPv4Address, IPv6Address
import pytz
from clickhouse_orm.database import ServerError
from clickhouse_orm.utils import NO_VALUE
from clickhouse_orm.funcs import F
from clickhouse_orm.utils import NO_VALUE
from .base_test_with_data import *
from .test_querysets import SampleModel
class FuncsTestCase(TestCaseWithData):

View File

@ -1,11 +1,12 @@
import unittest
import datetime
import unittest
import pytz
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
class InheritanceTestCase(unittest.TestCase):

View File

@ -1,9 +1,10 @@
import unittest
from ipaddress import IPv4Address, IPv6Address
from clickhouse_orm.database import Database
from clickhouse_orm.engines import Memory
from clickhouse_orm.fields import Int16Field, IPv4Field, IPv6Field
from clickhouse_orm.models import Model
from clickhouse_orm.engines import Memory
class IPFieldsTest(unittest.TestCase):

View File

@ -1,48 +1,48 @@
import unittest
import json
from clickhouse_orm import database, engines, fields, models
class JoinTest(unittest.TestCase):
def setUp(self):
self.database = database.Database("test-db", log_statements=True)
self.database.create_table(Foo)
self.database.create_table(Bar)
self.database.insert([Foo(id=i) for i in range(3)])
self.database.insert([Bar(id=i, b=i * i) for i in range(3)])
def print_res(self, query):
print(query)
print(json.dumps([row.to_dict() for row in self.database.select(query)]))
def test_without_db_name(self):
self.print_res("SELECT * FROM {}".format(Foo.table_name()))
self.print_res("SELECT * FROM {}".format(Bar.table_name()))
self.print_res("SELECT b FROM {} ALL LEFT JOIN {} USING id".format(Foo.table_name(), Bar.table_name()))
def test_with_db_name(self):
self.print_res("SELECT * FROM $db.{}".format(Foo.table_name()))
self.print_res("SELECT * FROM $db.{}".format(Bar.table_name()))
self.print_res("SELECT b FROM $db.{} ALL LEFT JOIN $db.{} USING id".format(Foo.table_name(), Bar.table_name()))
def test_with_subquery(self):
self.print_res(
"SELECT b FROM {} ALL LEFT JOIN (SELECT * from {}) subquery USING id".format(
Foo.table_name(), Bar.table_name()
)
)
self.print_res(
"SELECT b FROM $db.{} ALL LEFT JOIN (SELECT * from $db.{}) subquery USING id".format(
Foo.table_name(), Bar.table_name()
)
)
class Foo(models.Model):
id = fields.UInt8Field()
engine = engines.Memory()
class Bar(Foo):
b = fields.UInt8Field()
import json
import unittest
from clickhouse_orm import database, engines, fields, models
class JoinTest(unittest.TestCase):
def setUp(self):
self.database = database.Database("test-db", log_statements=True)
self.database.create_table(Foo)
self.database.create_table(Bar)
self.database.insert([Foo(id=i) for i in range(3)])
self.database.insert([Bar(id=i, b=i * i) for i in range(3)])
def print_res(self, query):
print(query)
print(json.dumps([row.to_dict() for row in self.database.select(query)]))
def test_without_db_name(self):
self.print_res("SELECT * FROM {}".format(Foo.table_name()))
self.print_res("SELECT * FROM {}".format(Bar.table_name()))
self.print_res("SELECT b FROM {} ALL LEFT JOIN {} USING id".format(Foo.table_name(), Bar.table_name()))
def test_with_db_name(self):
self.print_res("SELECT * FROM $db.{}".format(Foo.table_name()))
self.print_res("SELECT * FROM $db.{}".format(Bar.table_name()))
self.print_res("SELECT b FROM $db.{} ALL LEFT JOIN $db.{} USING id".format(Foo.table_name(), Bar.table_name()))
def test_with_subquery(self):
self.print_res(
"SELECT b FROM {} ALL LEFT JOIN (SELECT * from {}) subquery USING id".format(
Foo.table_name(), Bar.table_name()
)
)
self.print_res(
"SELECT b FROM $db.{} ALL LEFT JOIN (SELECT * from $db.{}) subquery USING id".format(
Foo.table_name(), Bar.table_name()
)
)
class Foo(models.Model):
id = fields.UInt8Field()
engine = engines.Memory()
class Bar(Foo):
b = fields.UInt8Field()

View File

@ -1,71 +1,71 @@
import unittest
from datetime import date
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model, NO_VALUE
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.funcs import F
class MaterializedFieldsTest(unittest.TestCase):
def setUp(self):
self.database = Database("test-db", log_statements=True)
self.database.create_table(ModelWithMaterializedFields)
def tearDown(self):
self.database.drop_database()
def test_insert_and_select(self):
instance = ModelWithMaterializedFields(date_time_field="2016-08-30 11:00:00", int_field=-10, str_field="TEST")
self.database.insert([instance])
# We can't select * from table, as it doesn't select materialized and alias fields
query = (
"SELECT date_time_field, int_field, str_field, mat_int, mat_date, mat_str, mat_func"
" FROM $db.%s ORDER BY mat_date" % ModelWithMaterializedFields.table_name()
)
for model_cls in (ModelWithMaterializedFields, None):
results = list(self.database.select(query, model_cls))
self.assertEqual(len(results), 1)
self.assertEqual(results[0].date_time_field, instance.date_time_field)
self.assertEqual(results[0].int_field, instance.int_field)
self.assertEqual(results[0].str_field, instance.str_field)
self.assertEqual(results[0].mat_int, abs(instance.int_field))
self.assertEqual(results[0].mat_str, instance.str_field.lower())
self.assertEqual(results[0].mat_date, instance.date_time_field.date())
self.assertEqual(results[0].mat_func, instance.str_field.lower())
def test_assignment_error(self):
# I can't prevent assigning at all, in case db.select statements with model provided sets model fields.
instance = ModelWithMaterializedFields()
for value in ("x", [date.today()], ["aaa"], [None]):
with self.assertRaises(ValueError):
instance.mat_date = value
def test_wrong_field(self):
with self.assertRaises(AssertionError):
StringField(materialized=123)
def test_duplicate_default(self):
with self.assertRaises(AssertionError):
StringField(materialized="str_field", default="with default")
with self.assertRaises(AssertionError):
StringField(materialized="str_field", alias="str_field")
def test_default_value(self):
instance = ModelWithMaterializedFields()
self.assertEqual(instance.mat_str, NO_VALUE)
class ModelWithMaterializedFields(Model):
int_field = Int32Field()
date_time_field = DateTimeField()
str_field = StringField()
mat_str = StringField(materialized="lower(str_field)")
mat_int = Int32Field(materialized="abs(int_field)")
mat_date = DateField(materialized=u"toDate(date_time_field)")
mat_func = StringField(materialized=F.lower(str_field))
engine = MergeTree("mat_date", ("mat_date",))
import unittest
from datetime import date
from clickhouse_orm.database import Database
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.funcs import F
from clickhouse_orm.models import NO_VALUE, Model
class MaterializedFieldsTest(unittest.TestCase):
def setUp(self):
self.database = Database("test-db", log_statements=True)
self.database.create_table(ModelWithMaterializedFields)
def tearDown(self):
self.database.drop_database()
def test_insert_and_select(self):
instance = ModelWithMaterializedFields(date_time_field="2016-08-30 11:00:00", int_field=-10, str_field="TEST")
self.database.insert([instance])
# We can't select * from table, as it doesn't select materialized and alias fields
query = (
"SELECT date_time_field, int_field, str_field, mat_int, mat_date, mat_str, mat_func"
" FROM $db.%s ORDER BY mat_date" % ModelWithMaterializedFields.table_name()
)
for model_cls in (ModelWithMaterializedFields, None):
results = list(self.database.select(query, model_cls))
self.assertEqual(len(results), 1)
self.assertEqual(results[0].date_time_field, instance.date_time_field)
self.assertEqual(results[0].int_field, instance.int_field)
self.assertEqual(results[0].str_field, instance.str_field)
self.assertEqual(results[0].mat_int, abs(instance.int_field))
self.assertEqual(results[0].mat_str, instance.str_field.lower())
self.assertEqual(results[0].mat_date, instance.date_time_field.date())
self.assertEqual(results[0].mat_func, instance.str_field.lower())
def test_assignment_error(self):
# I can't prevent assigning at all, in case db.select statements with model provided sets model fields.
instance = ModelWithMaterializedFields()
for value in ("x", [date.today()], ["aaa"], [None]):
with self.assertRaises(ValueError):
instance.mat_date = value
def test_wrong_field(self):
with self.assertRaises(AssertionError):
StringField(materialized=123)
def test_duplicate_default(self):
with self.assertRaises(AssertionError):
StringField(materialized="str_field", default="with default")
with self.assertRaises(AssertionError):
StringField(materialized="str_field", alias="str_field")
def test_default_value(self):
instance = ModelWithMaterializedFields()
self.assertEqual(instance.mat_str, NO_VALUE)
class ModelWithMaterializedFields(Model):
int_field = Int32Field()
date_time_field = DateTimeField()
str_field = StringField()
mat_str = StringField(materialized="lower(str_field)")
mat_int = Int32Field(materialized="abs(int_field)")
mat_date = DateField(materialized=u"toDate(date_time_field)")
mat_func = StringField(materialized=F.lower(str_field))
engine = MergeTree("mat_date", ("mat_date",))

View File

@ -1,15 +1,15 @@
import unittest
from clickhouse_orm.database import Database, ServerError
from clickhouse_orm.models import Model, BufferModel, Constraint, Index
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.migrations import MigrationHistory
from enum import Enum
import os
# Add tests to path so that migrations will be importable
import sys, os
import sys
import unittest
from enum import Enum
from clickhouse_orm.database import Database, ServerError
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.migrations import MigrationHistory
from clickhouse_orm.models import BufferModel, Constraint, Index, Model
sys.path.append(os.path.dirname(__file__))

View File

@ -1,11 +1,12 @@
import unittest
import datetime
import unittest
import pytz
from clickhouse_orm.models import Model, NO_VALUE
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.funcs import F
from clickhouse_orm.models import NO_VALUE, Model
class ModelTestCase(unittest.TestCase):

View File

@ -1,8 +1,10 @@
import unittest
from clickhouse_orm import F
from .base_test_with_data import *
from time import sleep
from clickhouse_orm import F
from .base_test_with_data import *
class MutationsTestCase(TestCaseWithData):
def setUp(self):

View File

@ -1,14 +1,14 @@
import unittest
from datetime import date, datetime
import pytz
from clickhouse_orm.database import Database
from clickhouse_orm.models import Model
from clickhouse_orm.fields import *
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
from clickhouse_orm.utils import comma_join
from datetime import date, datetime
class NullableFieldsTest(unittest.TestCase):
def setUp(self):

View File

@ -1,15 +1,16 @@
# -*- coding: utf-8 -*-
import unittest
from clickhouse_orm.database import Database
from clickhouse_orm.query import Q
from clickhouse_orm.funcs import F
from .base_test_with_data import *
from datetime import date, datetime
from enum import Enum
from decimal import Decimal
from enum import Enum
from logging import getLogger
from clickhouse_orm.database import Database
from clickhouse_orm.funcs import F
from clickhouse_orm.query import Q
from .base_test_with_data import *
logger = getLogger("tests")

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from clickhouse_orm.database import DatabaseException, ServerError
from .base_test_with_data import *

View File

@ -1,8 +1,10 @@
import unittest
from clickhouse_orm.fields import *
from datetime import date, datetime
import pytz
from clickhouse_orm.fields import *
class SimpleFieldsTest(unittest.TestCase):

View File

@ -1,128 +1,127 @@
import unittest
from datetime import date
import os
from clickhouse_orm.database import Database, DatabaseException
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
from clickhouse_orm.system_models import SystemPart
class SystemTest(unittest.TestCase):
def setUp(self):
self.database = Database("test-db", log_statements=True)
def tearDown(self):
self.database.drop_database()
def test_insert_system(self):
m = SystemPart()
with self.assertRaises(DatabaseException):
self.database.insert([m])
def test_create_readonly_table(self):
with self.assertRaises(DatabaseException):
self.database.create_table(SystemTestModel)
def test_drop_readonly_table(self):
with self.assertRaises(DatabaseException):
self.database.drop_table(SystemTestModel)
class SystemPartTest(unittest.TestCase):
BACKUP_DIRS = ["/var/lib/clickhouse/shadow", "/opt/clickhouse/shadow/"]
def setUp(self):
self.database = Database("test-db", log_statements=True)
self.database.create_table(TestTable)
self.database.create_table(CustomPartitionedTable)
self.database.insert([TestTable(date_field=date.today())])
self.database.insert([CustomPartitionedTable(date_field=date.today(), group_field=13)])
def tearDown(self):
self.database.drop_database()
def _get_backups(self):
for dir in self.BACKUP_DIRS:
if os.path.exists(dir):
_, dirnames, _ = next(os.walk(dir))
return dirnames
raise unittest.SkipTest("Cannot find backups dir")
def test_is_read_only(self):
self.assertTrue(SystemPart.is_read_only())
def test_is_system_model(self):
self.assertTrue(SystemPart.is_system_model())
def test_get_all(self):
parts = SystemPart.get(self.database)
self.assertEqual(len(list(parts)), 2)
def test_get_active(self):
parts = list(SystemPart.get_active(self.database))
self.assertEqual(len(parts), 2)
parts[0].detach()
parts = list(SystemPart.get_active(self.database))
self.assertEqual(len(parts), 1)
def test_get_conditions(self):
parts = list(SystemPart.get(self.database, conditions="table='testtable'"))
self.assertEqual(len(parts), 1)
parts = list(SystemPart.get(self.database, conditions=u"table='custompartitionedtable'"))
self.assertEqual(len(parts), 1)
parts = list(SystemPart.get(self.database, conditions=u"table='invalidtable'"))
self.assertEqual(len(parts), 0)
def test_attach_detach(self):
parts = list(SystemPart.get_active(self.database))
self.assertEqual(len(parts), 2)
for p in parts:
p.detach()
self.assertEqual(len(list(SystemPart.get_active(self.database))), 0)
for p in parts:
p.attach()
self.assertEqual(len(list(SystemPart.get_active(self.database))), 2)
def test_drop(self):
parts = list(SystemPart.get_active(self.database))
for p in parts:
p.drop()
self.assertEqual(len(list(SystemPart.get_active(self.database))), 0)
def test_freeze(self):
parts = list(SystemPart.get(self.database))
# There can be other backups in the folder
prev_backups = set(self._get_backups())
for p in parts:
p.freeze()
backups = set(self._get_backups())
self.assertEqual(len(backups), len(prev_backups) + 2)
def test_fetch(self):
# TODO Not tested, as I have no replication set
pass
def test_query(self):
SystemPart.objects_in(self.database).count()
list(SystemPart.objects_in(self.database).filter(table="testtable"))
class TestTable(Model):
date_field = DateField()
engine = MergeTree("date_field", ("date_field",))
class CustomPartitionedTable(Model):
date_field = DateField()
group_field = UInt32Field()
engine = MergeTree(order_by=("date_field", "group_field"), partition_key=("toYYYYMM(date_field)", "group_field"))
class SystemTestModel(Model):
_system = True
import os
import unittest
from datetime import date
from clickhouse_orm.database import Database, DatabaseException
from clickhouse_orm.engines import *
from clickhouse_orm.fields import *
from clickhouse_orm.models import Model
from clickhouse_orm.system_models import SystemPart
class SystemTest(unittest.TestCase):
def setUp(self):
self.database = Database("test-db", log_statements=True)
def tearDown(self):
self.database.drop_database()
def test_insert_system(self):
m = SystemPart()
with self.assertRaises(DatabaseException):
self.database.insert([m])
def test_create_readonly_table(self):
with self.assertRaises(DatabaseException):
self.database.create_table(SystemTestModel)
def test_drop_readonly_table(self):
with self.assertRaises(DatabaseException):
self.database.drop_table(SystemTestModel)
class SystemPartTest(unittest.TestCase):
BACKUP_DIRS = ["/var/lib/clickhouse/shadow", "/opt/clickhouse/shadow/"]
def setUp(self):
self.database = Database("test-db", log_statements=True)
self.database.create_table(TestTable)
self.database.create_table(CustomPartitionedTable)
self.database.insert([TestTable(date_field=date.today())])
self.database.insert([CustomPartitionedTable(date_field=date.today(), group_field=13)])
def tearDown(self):
self.database.drop_database()
def _get_backups(self):
for dir in self.BACKUP_DIRS:
if os.path.exists(dir):
_, dirnames, _ = next(os.walk(dir))
return dirnames
raise unittest.SkipTest("Cannot find backups dir")
def test_is_read_only(self):
self.assertTrue(SystemPart.is_read_only())
def test_is_system_model(self):
self.assertTrue(SystemPart.is_system_model())
def test_get_all(self):
parts = SystemPart.get(self.database)
self.assertEqual(len(list(parts)), 2)
def test_get_active(self):
parts = list(SystemPart.get_active(self.database))
self.assertEqual(len(parts), 2)
parts[0].detach()
parts = list(SystemPart.get_active(self.database))
self.assertEqual(len(parts), 1)
def test_get_conditions(self):
parts = list(SystemPart.get(self.database, conditions="table='testtable'"))
self.assertEqual(len(parts), 1)
parts = list(SystemPart.get(self.database, conditions=u"table='custompartitionedtable'"))
self.assertEqual(len(parts), 1)
parts = list(SystemPart.get(self.database, conditions=u"table='invalidtable'"))
self.assertEqual(len(parts), 0)
def test_attach_detach(self):
parts = list(SystemPart.get_active(self.database))
self.assertEqual(len(parts), 2)
for p in parts:
p.detach()
self.assertEqual(len(list(SystemPart.get_active(self.database))), 0)
for p in parts:
p.attach()
self.assertEqual(len(list(SystemPart.get_active(self.database))), 2)
def test_drop(self):
parts = list(SystemPart.get_active(self.database))
for p in parts:
p.drop()
self.assertEqual(len(list(SystemPart.get_active(self.database))), 0)
def test_freeze(self):
parts = list(SystemPart.get(self.database))
# There can be other backups in the folder
prev_backups = set(self._get_backups())
for p in parts:
p.freeze()
backups = set(self._get_backups())
self.assertEqual(len(backups), len(prev_backups) + 2)
def test_fetch(self):
# TODO Not tested, as I have no replication set
pass
def test_query(self):
SystemPart.objects_in(self.database).count()
list(SystemPart.objects_in(self.database).filter(table="testtable"))
class TestTable(Model):
date_field = DateField()
engine = MergeTree("date_field", ("date_field",))
class CustomPartitionedTable(Model):
date_field = DateField()
group_field = UInt32Field()
engine = MergeTree(order_by=("date_field", "group_field"), partition_key=("toYYYYMM(date_field)", "group_field"))
class SystemTestModel(Model):
_system = True

View File

@ -1,9 +1,10 @@
import unittest
from uuid import UUID
from clickhouse_orm.database import Database
from clickhouse_orm.engines import Memory
from clickhouse_orm.fields import Int16Field, UUIDField
from clickhouse_orm.models import Model
from clickhouse_orm.engines import Memory
class UUIDFieldsTest(unittest.TestCase):