old_contents: import unittest
  
  from infi.clickhouse_orm import *
  from .base_test_with_data import Person
  
  
  class ArrayFieldsTest(unittest.TestCase):
  
      def setUp(self):
          self.database = Database('test-db', log_statements=True)
          self.database.create_table(PersonWithConstraints)
  
      def tearDown(self):
          self.database.drop_database()
  
      def test_insert_valid_values(self):
          self.database.insert([
              PersonWithConstraints(first_name="Mike", last_name="Caruzo", birthday="2000-01-01", height=1.66)
          ])
  
      def test_insert_invalid_values(self):
          if self.database.server_version < (19, 14, 3, 3):
              raise unittest.SkipTest('ClickHouse version too old')
  
          with self.assertRaises(ServerError) as e:
              self.database.insert([
                  PersonWithConstraints(first_name="Mike", last_name="Caruzo", birthday="2100-01-01", height=1.66)
              ])
              self.assertEqual(e.code, 469)
              self.assertTrue('Constraint `birthday_in_the_past`' in e.message)
  
          with self.assertRaises(ServerError) as e:
              self.database.insert([
                  PersonWithConstraints(first_name="Mike", last_name="Caruzo", birthday="1970-01-01", height=3)
              ])
              self.assertEqual(e.code, 469)
              self.assertTrue('Constraint `max_height`' in e.message)
  
  
  class PersonWithConstraints(Person):
  
      birthday_in_the_past = Constraint(Person.birthday <= F.today())
      max_height = Constraint(Person.height <= 2.75)
  
  
  
new_contents: import unittest
  
  from infi.clickhouse_orm import *
  from .base_test_with_data import Person
  
  
  class ConstraintsTest(unittest.TestCase):
  
      def setUp(self):
          self.database = Database('test-db', log_statements=True)
          if self.database.server_version < (19, 14, 3, 3):
              raise unittest.SkipTest('ClickHouse version too old')
          self.database.create_table(PersonWithConstraints)
  
      def tearDown(self):
          self.database.drop_database()
  
      def test_insert_valid_values(self):
          self.database.insert([
              PersonWithConstraints(first_name="Mike", last_name="Caruzo", birthday="2000-01-01", height=1.66)
          ])
  
      def test_insert_invalid_values(self):
          with self.assertRaises(ServerError) as e:
              self.database.insert([
                  PersonWithConstraints(first_name="Mike", last_name="Caruzo", birthday="2100-01-01", height=1.66)
              ])
              self.assertEqual(e.code, 469)
              self.assertTrue('Constraint `birthday_in_the_past`' in e.message)
  
          with self.assertRaises(ServerError) as e:
              self.database.insert([
                  PersonWithConstraints(first_name="Mike", last_name="Caruzo", birthday="1970-01-01", height=3)
              ])
              self.assertEqual(e.code, 469)
              self.assertTrue('Constraint `max_height`' in e.message)
  
  
  class PersonWithConstraints(Person):
  
      birthday_in_the_past = Constraint(Person.birthday <= F.today())
      max_height = Constraint(Person.height <= 2.75)
  
  
  
subject: Support for model constraints