📄 properties.py
字号:
## Copyright (c) 2006, 2007 Canonical## Written by Gustavo Niemeyer <gustavo@niemeyer.net>## This file is part of Storm Object Relational Mapper.## Storm is free software; you can redistribute it and/or modify# it under the terms of the GNU Lesser General Public License as# published by the Free Software Foundation; either version 2.1 of# the License, or (at your option) any later version.## Storm is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU Lesser General Public License for more details.## You should have received a copy of the GNU Lesser General Public License# along with this program. If not, see <http://www.gnu.org/licenses/>.#from datetime import datetime, date, time, timedeltaimport gcfrom storm.exceptions import NoneError, PropertyPathErrorfrom storm.properties import PropertyPublisherMetafrom storm.properties import *from storm.variables import *from storm.info import get_obj_infofrom storm.expr import Undef, Column, Select, compile, SQLRawfrom tests.helper import TestHelperclass CustomVariable(Variable): passclass Custom(SimpleProperty): variable_class = CustomVariableclass PropertyTest(TestHelper): def setUp(self): TestHelper.setUp(self) class Class(object): __storm_table__ = "table" prop1 = Custom("column1", primary=True) prop2 = Custom() prop3 = Custom("column3", default=50, allow_none=False) class SubClass(Class): __storm_table__ = "subtable" self.Class = Class self.SubClass = SubClass def test_column(self): self.assertTrue(isinstance(self.Class.prop1, Column)) def test_cls(self): self.assertEquals(self.Class.prop1.cls, self.Class) self.assertEquals(self.Class.prop2.cls, self.Class) self.assertEquals(self.SubClass.prop1.cls, self.SubClass) self.assertEquals(self.SubClass.prop2.cls, self.SubClass) self.assertEquals(self.Class.prop1.cls, self.Class) self.assertEquals(self.Class.prop2.cls, self.Class) def test_cls_reverse(self): self.assertEquals(self.SubClass.prop1.cls, self.SubClass) self.assertEquals(self.SubClass.prop2.cls, self.SubClass) self.assertEquals(self.Class.prop1.cls, self.Class) self.assertEquals(self.Class.prop2.cls, self.Class) self.assertEquals(self.SubClass.prop1.cls, self.SubClass) self.assertEquals(self.SubClass.prop2.cls, self.SubClass) def test_name(self): self.assertEquals(self.Class.prop1.name, "column1") def test_auto_name(self): self.assertEquals(self.Class.prop2.name, "prop2") def test_auto_table(self): self.assertEquals(self.Class.prop1.table, self.Class) self.assertEquals(self.Class.prop2.table, self.Class) def test_auto_table_subclass(self): self.assertEquals(self.Class.prop1.table, self.Class) self.assertEquals(self.Class.prop2.table, self.Class) self.assertEquals(self.SubClass.prop1.table, self.SubClass) self.assertEquals(self.SubClass.prop2.table, self.SubClass) def test_auto_table_subclass_reverse_initialization(self): self.assertEquals(self.SubClass.prop1.table, self.SubClass) self.assertEquals(self.SubClass.prop2.table, self.SubClass) self.assertEquals(self.Class.prop1.table, self.Class) self.assertEquals(self.Class.prop2.table, self.Class) def test_variable_factory(self): variable = self.Class.prop1.variable_factory() self.assertTrue(isinstance(variable, CustomVariable)) self.assertFalse(variable.is_defined()) variable = self.Class.prop3.variable_factory() self.assertTrue(isinstance(variable, CustomVariable)) self.assertTrue(variable.is_defined()) def test_default(self): obj = self.SubClass() self.assertEquals(obj.prop1, None) self.assertEquals(obj.prop2, None) self.assertEquals(obj.prop3, 50) def test_set_get(self): obj = self.Class() obj.prop1 = 10 obj.prop2 = 20 obj.prop3 = 30 self.assertEquals(obj.prop1, 10) self.assertEquals(obj.prop2, 20) self.assertEquals(obj.prop3, 30) def test_set_get_none(self): obj = self.Class() obj.prop1 = None obj.prop2 = None self.assertEquals(obj.prop1, None) self.assertEquals(obj.prop2, None) self.assertRaises(NoneError, setattr, obj, "prop3", None) def test_set_get_subclass(self): obj = self.SubClass() obj.prop1 = 10 obj.prop2 = 20 obj.prop3 = 30 self.assertEquals(obj.prop1, 10) self.assertEquals(obj.prop2, 20) self.assertEquals(obj.prop3, 30) def test_set_get_explicitly(self): obj = self.Class() prop1 = self.Class.prop1 prop2 = self.Class.prop2 prop3 = self.Class.prop3 prop1.__set__(obj, 10) prop2.__set__(obj, 20) prop3.__set__(obj, 30) self.assertEquals(prop1.__get__(obj), 10) self.assertEquals(prop2.__get__(obj), 20) self.assertEquals(prop3.__get__(obj), 30) def test_set_get_subclass_explicitly(self): obj = self.SubClass() prop1 = self.Class.prop1 prop2 = self.Class.prop2 prop3 = self.Class.prop3 prop1.__set__(obj, 10) prop2.__set__(obj, 20) prop3.__set__(obj, 30) self.assertEquals(prop1.__get__(obj), 10) self.assertEquals(prop2.__get__(obj), 20) self.assertEquals(prop3.__get__(obj), 30) def test_delete(self): obj = self.Class() obj.prop1 = 10 obj.prop2 = 20 obj.prop3 = 30 del obj.prop1 del obj.prop2 del obj.prop3 self.assertEquals(obj.prop1, None) self.assertEquals(obj.prop2, None) self.assertEquals(obj.prop3, None) def test_delete_subclass(self): obj = self.SubClass() obj.prop1 = 10 obj.prop2 = 20 obj.prop3 = 30 del obj.prop1 del obj.prop2 del obj.prop3 self.assertEquals(obj.prop1, None) self.assertEquals(obj.prop2, None) self.assertEquals(obj.prop3, None) def test_delete_explicitly(self): obj = self.Class() obj.prop1 = 10 obj.prop2 = 20 obj.prop3 = 30 self.Class.prop1.__delete__(obj) self.Class.prop2.__delete__(obj) self.Class.prop3.__delete__(obj) self.assertEquals(obj.prop1, None) self.assertEquals(obj.prop2, None) self.assertEquals(obj.prop3, None) def test_delete_subclass_explicitly(self): obj = self.SubClass() obj.prop1 = 10 obj.prop2 = 20 obj.prop3 = 30 self.Class.prop1.__delete__(obj) self.Class.prop2.__delete__(obj) self.Class.prop3.__delete__(obj) self.assertEquals(obj.prop1, None) self.assertEquals(obj.prop2, None) self.assertEquals(obj.prop3, None) def test_comparable_expr(self): prop1 = self.Class.prop1 prop2 = self.Class.prop2 prop3 = self.Class.prop3 expr = Select(SQLRaw("*"), (prop1 == "value1") & (prop2 == "value2") & (prop3 == "value3")) statement, parameters = compile(expr) self.assertEquals(statement, "SELECT * FROM table WHERE " "table.column1 = ? AND " "table.prop2 = ? AND " "table.column3 = ?") self.assertEquals(parameters, [CustomVariable("value1"), CustomVariable("value2"), CustomVariable("value3")]) def test_comparable_expr_subclass(self): prop1 = self.SubClass.prop1 prop2 = self.SubClass.prop2 prop3 = self.SubClass.prop3 expr = Select(SQLRaw("*"), (prop1 == "value1") & (prop2 == "value2") & (prop3 == "value3")) statement, parameters = compile(expr) self.assertEquals(statement, "SELECT * FROM subtable WHERE " "subtable.column1 = ? AND " "subtable.prop2 = ? AND " "subtable.column3 = ?") self.assertEquals(parameters, [CustomVariable("value1"), CustomVariable("value2"), CustomVariable("value3")])class PropertyKindsTest(TestHelper): def setup(self, property, *args, **kwargs): prop2_kwargs = kwargs.pop("prop2_kwargs", {}) kwargs["primary"] = True class Class(object): __storm_table__ = "table" prop1 = property("column1", *args, **kwargs) prop2 = property(**prop2_kwargs) class SubClass(Class): pass self.Class = Class self.SubClass = SubClass self.obj = SubClass() self.obj_info = get_obj_info(self.obj) self.column1 = self.SubClass.prop1 self.column2 = self.SubClass.prop2 self.variable1 = self.obj_info.variables[self.column1] self.variable2 = self.obj_info.variables[self.column2] def test_bool(self): self.setup(Bool, default=True, allow_none=False) self.assertTrue(isinstance(self.column1, Column)) self.assertTrue(isinstance(self.column2, Column)) self.assertEquals(self.column1.name, "column1") self.assertEquals(self.column1.table, self.SubClass) self.assertEquals(self.column2.name, "prop2") self.assertEquals(self.column2.table, self.SubClass) self.assertTrue(isinstance(self.variable1, BoolVariable)) self.assertTrue(isinstance(self.variable2, BoolVariable))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -