⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 properties.py

📁 Python的一个ORM,现在很火
💻 PY
📖 第 1 页 / 共 3 页
字号:
## 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 + -