[Sqlalchemy-commits] [1401] sqlalchemy/branches/schema/test: cleanup of imports, added default timeo
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-05-05 16:15:26
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[1401] sqlalchemy/branches/schema/test: cleanup of imports, added default timeout to pool, cleaned up pool arguments</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1401</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-05-05 11:15:08 -0500 (Fri, 05 May 2006)</dd> </dl> <h3>Log Message</h3> <pre>cleanup of imports, added default timeout to pool, cleaned up pool arguments</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemybranchesschemadocbuildcontentdbenginetxt">sqlalchemy/branches/schema/doc/build/content/dbengine.txt</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemy__init__py">sqlalchemy/branches/schema/lib/sqlalchemy/__init__.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemydatabasespostgrespy">sqlalchemy/branches/schema/lib/sqlalchemy/databases/postgres.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyenginestrategiespy">sqlalchemy/branches/schema/lib/sqlalchemy/engine/strategies.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyorm__init__py">sqlalchemy/branches/schema/lib/sqlalchemy/orm/__init__.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyormmapperpy">sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyormpropertiespy">sqlalchemy/branches/schema/lib/sqlalchemy/orm/properties.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyormquerypy">sqlalchemy/branches/schema/lib/sqlalchemy/orm/query.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemyormsessionpy">sqlalchemy/branches/schema/lib/sqlalchemy/orm/session.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemypoolpy">sqlalchemy/branches/schema/lib/sqlalchemy/pool.py</a></li> <li><a href="#sqlalchemybranchesschematestmapperpy">sqlalchemy/branches/schema/test/mapper.py</a></li> <li><a href="#sqlalchemybranchesschematestpoolpy">sqlalchemy/branches/schema/test/pool.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemybranchesschemadocbuildcontentdbenginetxt"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/doc/build/content/dbengine.txt (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/doc/build/content/dbengine.txt 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/doc/build/content/dbengine.txt 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -65,6 +65,7 @@ </span><span class="cx"> </span><span class="cx"> * pool_size=5 : the number of connections to keep open inside the connection pool. This is only used with `QueuePool`. </span><span class="cx"> * max_overflow=10 : the number of connections to allow in "overflow", that is connections that can be opened above and beyond the initial five. this is only used with `QueuePool`. </span><ins>+* pool_timeout=30 : number of seconds to wait before giving up on getting a connection from the pool. This is only used with `QueuePool`. </ins><span class="cx"> * echo=False : if True, the Engine will log all statements as well as a repr() of their parameter lists to the engines logger, which defaults to sys.stdout. A SQLEngine instances' "echo" data member can be modified at any time to turn logging on and off. If set to the string 'debug', result rows will be printed to the standard output as well. </span><span class="cx"> * logger=None : a file-like object where logging output can be sent, if echo is set to True. This defaults to sys.stdout. </span><span class="cx"> * module=None : used by Oracle and Postgres, this is a reference to a DBAPI2 module to be used instead of the engine's default module. For Postgres, the default is psycopg2, or psycopg1 if 2 cannot be found. For Oracle, its cx_Oracle. </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemy__init__py"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/__init__.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/__init__.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/lib/sqlalchemy/__init__.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -7,18 +7,11 @@ </span><span class="cx"> from types import * </span><span class="cx"> from sql import * </span><span class="cx"> from schema import * </span><del>-from exceptions import * -from engine import * -import sqlalchemy.sql -import sqlalchemy.orm as orm </del><span class="cx"> from sqlalchemy.orm import * </span><del>-import sqlalchemy.ext.proxy </del><span class="cx"> </span><del>-from sqlalchemy.orm.session import Session, current_session </del><ins>+from sqlalchemy.engine import create_engine +from sqlalchemy.schema import default_metadata </ins><span class="cx"> </span><del>-create_engine = sqlalchemy.engine.create_engine -create_session = sqlalchemy.orm.session.Session - </del><span class="cx"> def global_connect(*args, **kwargs): </span><del>- sqlalchemy.schema.default_metadata.connect(*args, **kwargs) </del><ins>+ default_metadata.connect(*args, **kwargs) </ins><span class="cx"> </span><span class="cx">\ No newline at end of file </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemydatabasespostgrespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/databases/postgres.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/databases/postgres.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/lib/sqlalchemy/databases/postgres.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -9,11 +9,11 @@ </span><span class="cx"> import sqlalchemy.util as util </span><span class="cx"> import sqlalchemy.sql as sql </span><span class="cx"> import sqlalchemy.engine as engine </span><ins>+import sqlalchemy.engine.default as default </ins><span class="cx"> import sqlalchemy.schema as schema </span><span class="cx"> import sqlalchemy.ansisql as ansisql </span><span class="cx"> import sqlalchemy.types as sqltypes </span><del>-from sqlalchemy.exceptions import * -from sqlalchemy import * </del><ins>+import sqlalchemy.exceptions as exceptions </ins><span class="cx"> import information_schema as ischema </span><span class="cx"> </span><span class="cx"> try: </span><span class="lines">@@ -202,7 +202,7 @@ </span><span class="cx"> self.use_oids = use_oids </span><span class="cx"> if module is None: </span><span class="cx"> if psycopg is None: </span><del>- raise ArgumentError("Couldnt locate psycopg1 or psycopg2: specify postgres module argument") </del><ins>+ raise exceptions.ArgumentError("Couldnt locate psycopg1 or psycopg2: specify postgres module argument") </ins><span class="cx"> self.module = psycopg </span><span class="cx"> else: </span><span class="cx"> self.module = module </span><span class="lines">@@ -250,7 +250,7 @@ </span><span class="cx"> </span><span class="cx"> def last_inserted_ids(self): </span><span class="cx"> if self.context.last_inserted_ids is None: </span><del>- raise InvalidRequestError("no INSERT executed, or cant use cursor.lastrowid without Postgres OIDs enabled") </del><ins>+ raise exceptions.InvalidRequestError("no INSERT executed, or cant use cursor.lastrowid without Postgres OIDs enabled") </ins><span class="cx"> else: </span><span class="cx"> return self.context.last_inserted_ids </span><span class="cx"> </span><span class="lines">@@ -330,7 +330,7 @@ </span><span class="cx"> </span><span class="cx"> def get_column_specification(self, column, override_pk=False, **kwargs): </span><span class="cx"> colspec = column.name </span><del>- if column.primary_key and isinstance(column.type, types.Integer) and (column.default is None or (isinstance(column.default, schema.Sequence) and column.default.optional)): </del><ins>+ if column.primary_key and isinstance(column.type, sqltypes.Integer) and (column.default is None or (isinstance(column.default, schema.Sequence) and column.default.optional)): </ins><span class="cx"> colspec += " SERIAL" </span><span class="cx"> else: </span><span class="cx"> colspec += " " + column.type.engine_impl(self.engine).get_col_spec() </span><span class="lines">@@ -364,7 +364,7 @@ </span><span class="cx"> if isinstance(column.default, schema.PassiveDefault): </span><span class="cx"> c = self.proxy("select %s" % column.default.arg) </span><span class="cx"> return c.fetchone()[0] </span><del>- elif isinstance(column.type, types.Integer) and (column.default is None or (isinstance(column.default, schema.Sequence) and column.default.optional)): </del><ins>+ elif isinstance(column.type, sqltypes.Integer) and (column.default is None or (isinstance(column.default, schema.Sequence) and column.default.optional)): </ins><span class="cx"> sch = column.table.schema </span><span class="cx"> if sch is not None: </span><span class="cx"> exc = "select nextval('%s.%s_%s_seq')" % (sch, column.table.name, column.name) </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyenginestrategiespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/engine/strategies.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/engine/strategies.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/lib/sqlalchemy/engine/strategies.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -31,10 +31,10 @@ </span><span class="cx"> </span><span class="cx"> dialect = module.dialect(**kwargs) </span><span class="cx"> </span><del>- poolargs = kwargs.copy() - poolargs['echo'] = poolargs.get('echo_pool', False) - poolargs['pool_size'] = poolargs.get('pool_size', False) - poolargs['max_overflow'] = poolargs.get('max_overflow', False) </del><ins>+ poolargs = {} + for key in (('echo', 'echo_pool'), ('pool_size', 'pool_size'), ('max_overflow', 'max_overflow'), ('poolclass', 'poolclass'), ('pool_timeout','timeout')): + if kwargs.has_key(key[0]): + poolargs[key[1]] = kwargs[key[0]] </ins><span class="cx"> poolclass = getattr(module, 'poolclass', None) </span><span class="cx"> if poolclass is not None: </span><span class="cx"> poolargs.setdefault('poolclass', poolclass) </span><span class="lines">@@ -53,10 +53,10 @@ </span><span class="cx"> </span><span class="cx"> dialect = module.dialect(**kwargs) </span><span class="cx"> </span><del>- poolargs = kwargs.copy() - poolargs['echo'] = poolargs.get('echo_pool', False) - poolargs['pool_size'] = poolargs.get('pool_size', False) - poolargs['max_overflow'] = poolargs.get('max_overflow', False) </del><ins>+ poolargs = {} + for key in (('echo', 'echo_pool'), ('pool_size', 'pool_size'), ('max_overflow', 'max_overflow'), ('poolclass', 'poolclass'), ('pool_timeout','timeout')): + if kwargs.has_key(key[0]): + poolargs[key[1]] = kwargs[key[0]] </ins><span class="cx"> poolclass = getattr(module, 'poolclass', None) </span><span class="cx"> if poolclass is not None: </span><span class="cx"> poolargs.setdefault('poolclass', poolclass) </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyorm__init__py"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/__init__.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/__init__.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/__init__.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -12,38 +12,41 @@ </span><span class="cx"> import sqlalchemy.schema as schema </span><span class="cx"> import sqlalchemy.engine as engine </span><span class="cx"> import sqlalchemy.util as util </span><del>-from exceptions import * </del><ins>+import sqlalchemy.exceptions as exceptions </ins><span class="cx"> from mapper import * </span><ins>+from mapper import mapper_registry </ins><span class="cx"> from util import polymorphic_union </span><del>-from properties import * </del><ins>+import properties +from sqlalchemy.orm.session import current_session +from sqlalchemy.orm.session import Session as create_session </ins><span class="cx"> </span><span class="cx"> __all__ = ['relation', 'backref', 'eagerload', 'lazyload', 'noload', 'deferred', 'defer', 'undefer', </span><span class="cx"> 'mapper', 'clear_mappers', 'sql', 'extension', 'class_mapper', 'object_mapper', 'MapperExtension', </span><del>- 'cascade_mappers', 'polymorphic_union' </del><ins>+ 'cascade_mappers', 'polymorphic_union', 'current_session', 'create_session' </ins><span class="cx"> ] </span><span class="cx"> </span><span class="cx"> def relation(*args, **kwargs): </span><span class="cx"> """provides a relationship of a primary Mapper to a secondary Mapper, which corresponds </span><span class="cx"> to a parent-child or associative table relationship.""" </span><span class="cx"> if len(args) > 1 and isinstance(args[0], type): </span><del>- raise ArgumentError("relation(class, table, **kwargs) is deprecated. Please use relation(class, **kwargs) or relation(mapper, **kwargs).") </del><ins>+ raise exceptions.ArgumentError("relation(class, table, **kwargs) is deprecated. Please use relation(class, **kwargs) or relation(mapper, **kwargs).") </ins><span class="cx"> return _relation_loader(*args, **kwargs) </span><span class="cx"> </span><span class="cx"> def _relation_loader(mapper, secondary=None, primaryjoin=None, secondaryjoin=None, lazy=True, **kwargs): </span><span class="cx"> if lazy: </span><del>- return LazyLoader(mapper, secondary, primaryjoin, secondaryjoin, **kwargs) </del><ins>+ return properties.LazyLoader(mapper, secondary, primaryjoin, secondaryjoin, **kwargs) </ins><span class="cx"> elif lazy is None: </span><del>- return PropertyLoader(mapper, secondary, primaryjoin, secondaryjoin, **kwargs) </del><ins>+ return properties.PropertyLoader(mapper, secondary, primaryjoin, secondaryjoin, **kwargs) </ins><span class="cx"> else: </span><del>- return EagerLoader(mapper, secondary, primaryjoin, secondaryjoin, **kwargs) </del><ins>+ return properties.EagerLoader(mapper, secondary, primaryjoin, secondaryjoin, **kwargs) </ins><span class="cx"> </span><span class="cx"> def backref(name, **kwargs): </span><del>- return BackRef(name, **kwargs) </del><ins>+ return properties.BackRef(name, **kwargs) </ins><span class="cx"> </span><span class="cx"> def deferred(*columns, **kwargs): </span><span class="cx"> """returns a DeferredColumnProperty, which indicates this object attributes should only be loaded </span><span class="cx"> from its corresponding table column when first accessed.""" </span><del>- return DeferredColumnProperty(*columns, **kwargs) </del><ins>+ return properties.DeferredColumnProperty(*columns, **kwargs) </ins><span class="cx"> </span><span class="cx"> def mapper(class_, table=None, *args, **params): </span><span class="cx"> """returns a new or already cached Mapper object.""" </span><span class="lines">@@ -70,26 +73,26 @@ </span><span class="cx"> def eagerload(name, **kwargs): </span><span class="cx"> """returns a MapperOption that will convert the property of the given name </span><span class="cx"> into an eager load. Used with mapper.options()""" </span><del>- return EagerLazyOption(name, toeager=True, **kwargs) </del><ins>+ return properties.EagerLazyOption(name, toeager=True, **kwargs) </ins><span class="cx"> </span><span class="cx"> def lazyload(name, **kwargs): </span><span class="cx"> """returns a MapperOption that will convert the property of the given name </span><span class="cx"> into a lazy load. Used with mapper.options()""" </span><del>- return EagerLazyOption(name, toeager=False, **kwargs) </del><ins>+ return properties.EagerLazyOption(name, toeager=False, **kwargs) </ins><span class="cx"> </span><span class="cx"> def noload(name, **kwargs): </span><span class="cx"> """returns a MapperOption that will convert the property of the given name </span><span class="cx"> into a non-load. Used with mapper.options()""" </span><del>- return EagerLazyOption(name, toeager=None, **kwargs) </del><ins>+ return properties.EagerLazyOption(name, toeager=None, **kwargs) </ins><span class="cx"> </span><span class="cx"> def defer(name, **kwargs): </span><span class="cx"> """returns a MapperOption that will convert the column property of the given </span><span class="cx"> name into a deferred load. Used with mapper.options()""" </span><del>- return DeferredOption(name, defer=True) </del><ins>+ return properties.DeferredOption(name, defer=True) </ins><span class="cx"> def undefer(name, **kwargs): </span><span class="cx"> """returns a MapperOption that will convert the column property of the given </span><span class="cx"> name into a non-deferred (regular column) load. Used with mapper.options.""" </span><del>- return DeferredOption(name, defer=False) </del><ins>+ return properties.DeferredOption(name, defer=False) </ins><span class="cx"> </span><span class="cx"> </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyormmapperpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/mapper.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -4,20 +4,16 @@ </span><span class="cx"> # This module is part of SQLAlchemy and is released under </span><span class="cx"> # the MIT License: http://www.opensource.org/licenses/mit-license.php </span><span class="cx"> </span><del>- -import sqlalchemy.sql as sql -import sqlalchemy.schema as schema -import sqlalchemy.util as util </del><ins>+from sqlalchemy import sql, schema, util, exceptions +from sqlalchemy import sql_util as sqlutil </ins><span class="cx"> import util as mapperutil </span><del>-import sqlalchemy.sql_util as sqlutil </del><span class="cx"> import sync </span><del>-from sqlalchemy.exceptions import * </del><span class="cx"> import query as querylib </span><span class="cx"> import session as sessionlib </span><del>-import sys -import weakref -import sets </del><ins>+import sys, weakref, sets </ins><span class="cx"> </span><ins>+__all__ = ['Mapper', 'MapperExtension', 'class_mapper', 'object_mapper'] + </ins><span class="cx"> # a dictionary mapping classes to their primary mappers </span><span class="cx"> mapper_registry = weakref.WeakKeyDictionary() </span><span class="cx"> </span><span class="lines">@@ -85,7 +81,7 @@ </span><span class="cx"> self.polymorphic_map = polymorphic_map </span><span class="cx"> </span><span class="cx"> if not issubclass(class_, object): </span><del>- raise ArgumentError("Class '%s' is not a new-style class" % class_.__name__) </del><ins>+ raise exceptions.ArgumentError("Class '%s' is not a new-style class" % class_.__name__) </ins><span class="cx"> </span><span class="cx"> # set up various Selectable units: </span><span class="cx"> </span><span class="lines">@@ -105,7 +101,7 @@ </span><span class="cx"> # the configured properties on the mapper are not matched against the alias </span><span class="cx"> # we make, theres workarounds but it starts to get really crazy (its crazy enough </span><span class="cx"> # the SQL that gets generated) so just require an alias </span><del>- raise ArgumentError("Mapping against a Select object requires that it has a name. Use an alias to give it a name, i.e. s = select(...).alias('myselect')") </del><ins>+ raise exceptions.ArgumentError("Mapping against a Select object requires that it has a name. Use an alias to give it a name, i.e. s = select(...).alias('myselect')") </ins><span class="cx"> </span><span class="cx"> self.local_table = local_table </span><span class="cx"> </span><span class="lines">@@ -113,7 +109,7 @@ </span><span class="cx"> if isinstance(inherits, type): </span><span class="cx"> inherits = class_mapper(inherits) </span><span class="cx"> if self.class_.__mro__[1] != inherits.class_: </span><del>- raise ArgumentError("Class '%s' does not inherit from '%s'" % (self.class_.__name__, inherits.class_.__name__)) </del><ins>+ raise exceptions.ArgumentError("Class '%s' does not inherit from '%s'" % (self.class_.__name__, inherits.class_.__name__)) </ins><span class="cx"> # inherit_condition is optional. </span><span class="cx"> if not local_table is inherits.local_table: </span><span class="cx"> if concrete: </span><span class="lines">@@ -180,7 +176,7 @@ </span><span class="cx"> except KeyError: </span><span class="cx"> l = self.pks_by_table.setdefault(t, util.HashSet(ordered=True)) </span><span class="cx"> if not len(t.primary_key): </span><del>- raise ArgumentError("Table " + t.name + " has no primary key columns. Specify primary_key argument to mapper.") </del><ins>+ raise exceptions.ArgumentError("Table " + t.name + " has no primary key columns. Specify primary_key argument to mapper.") </ins><span class="cx"> for k in t.primary_key: </span><span class="cx"> l.append(k) </span><span class="cx"> </span><span class="lines">@@ -223,7 +219,7 @@ </span><span class="cx"> #prop.columns.append(column) </span><span class="cx"> else: </span><span class="cx"> if not allow_column_override: </span><del>- raise ArgumentError("WARNING: column '%s' not being added due to property '%s'. Specify 'allow_column_override=True' to mapper() to ignore this condition." % (column.key, repr(prop))) </del><ins>+ raise exceptions.ArgumentError("WARNING: column '%s' not being added due to property '%s'. Specify 'allow_column_override=True' to mapper() to ignore this condition." % (column.key, repr(prop))) </ins><span class="cx"> else: </span><span class="cx"> continue </span><span class="cx"> </span><span class="lines">@@ -236,7 +232,7 @@ </span><span class="cx"> sessionlib.global_attributes.reset_class_managed(self.class_) </span><span class="cx"> self._init_class() </span><span class="cx"> elif not non_primary: </span><del>- raise ArgumentError("Class '%s' already has a primary mapper defined. Use is_primary=True to assign a new primary mapper to the class, or use non_primary=True to create a non primary Mapper" % self.class_) </del><ins>+ raise exceptions.ArgumentError("Class '%s' already has a primary mapper defined. Use is_primary=True to assign a new primary mapper to the class, or use non_primary=True to create a non primary Mapper" % self.class_) </ins><span class="cx"> </span><span class="cx"> for key in self.polymorphic_map.keys(): </span><span class="cx"> if isinstance(self.polymorphic_map[key], type): </span><span class="lines">@@ -351,14 +347,14 @@ </span><span class="cx"> try: </span><span class="cx"> prop = self.select_table._get_col_by_original(prop) </span><span class="cx"> except KeyError: </span><del>- raise ArgumentError("Column '%s' is not represented in mapper's table" % prop._label) </del><ins>+ raise exceptions.ArgumentError("Column '%s' is not represented in mapper's table" % prop._label) </ins><span class="cx"> self.columns[key] = prop </span><span class="cx"> prop = ColumnProperty(prop) </span><span class="cx"> elif isinstance(prop, list) and sql.is_column(prop[0]): </span><span class="cx"> try: </span><span class="cx"> prop = [self.select_table._get_col_by_original(p) for p in prop] </span><span class="cx"> except KeyError, e: </span><del>- raise ArgumentError("Column '%s' is not represented in mapper's table" % e.args[0]) </del><ins>+ raise exceptions.ArgumentError("Column '%s' is not represented in mapper's table" % e.args[0]) </ins><span class="cx"> self.columns[key] = prop[0] </span><span class="cx"> prop = ColumnProperty(*prop) </span><span class="cx"> self.props[key] = prop </span><span class="lines">@@ -526,11 +522,11 @@ </span><span class="cx"> prop = self.props[column.key] </span><span class="cx"> if not raiseerror: </span><span class="cx"> return None </span><del>- raise InvalidRequestError("Column '%s.%s' is not available, due to conflicting property '%s':%s" % (column.table.name, column.name, column.key, repr(prop))) </del><ins>+ raise exceptions.InvalidRequestError("Column '%s.%s' is not available, due to conflicting property '%s':%s" % (column.table.name, column.name, column.key, repr(prop))) </ins><span class="cx"> except KeyError: </span><span class="cx"> if not raiseerror: </span><span class="cx"> return None </span><del>- raise InvalidRequestError("No column %s.%s is configured on mapper %s..." % (column.table.name, column.name, str(self))) </del><ins>+ raise exceptions.InvalidRequestError("No column %s.%s is configured on mapper %s..." % (column.table.name, column.name, str(self))) </ins><span class="cx"> return prop[0] </span><span class="cx"> </span><span class="cx"> def _getattrbycolumn(self, obj, column, raiseerror=True): </span><span class="lines">@@ -1060,7 +1056,7 @@ </span><span class="cx"> return mapper_registry[ClassKey(object.__class__, getattr(object, '_entity_name', entity_name))] </span><span class="cx"> except KeyError: </span><span class="cx"> if raiseerror: </span><del>- raise InvalidRequestError("Class '%s' entity name '%s' has no mapper associated with it" % (object.__class__.__name__, getattr(object, '_entity_name', None))) </del><ins>+ raise exceptions.InvalidRequestError("Class '%s' entity name '%s' has no mapper associated with it" % (object.__class__.__name__, getattr(object, '_entity_name', None))) </ins><span class="cx"> else: </span><span class="cx"> return None </span><span class="cx"> </span><span class="lines">@@ -1069,4 +1065,4 @@ </span><span class="cx"> try: </span><span class="cx"> return mapper_registry[ClassKey(class_, entity_name)] </span><span class="cx"> except (KeyError, AttributeError): </span><del>- raise InvalidRequestError("Class '%s' entity name '%s' has no mapper associated with it" % (class_.__name__, entity_name)) </del><ins>+ raise exceptions.InvalidRequestError("Class '%s' entity name '%s' has no mapper associated with it" % (class_.__name__, entity_name)) </ins></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyormpropertiespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/properties.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/properties.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/properties.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -4,25 +4,19 @@ </span><span class="cx"> # This module is part of SQLAlchemy and is released under </span><span class="cx"> # the MIT License: http://www.opensource.org/licenses/mit-license.php </span><span class="cx"> </span><del>-"""defines a set of MapperProperty objects, including basic column properties as </del><ins>+"""defines a set of mapper.MapperProperty objects, including basic column properties as </ins><span class="cx"> well as relationships. also defines some MapperOptions that can be used with the </span><span class="cx"> properties.""" </span><span class="cx"> </span><del>-from mapper import * -import sqlalchemy.sql as sql -import sqlalchemy.schema as schema -import sqlalchemy.engine as engine -import sqlalchemy.util as util -import sqlalchemy.attributes as attributes </del><ins>+from sqlalchemy import sql, schema, util, attributes, exceptions </ins><span class="cx"> import sync </span><span class="cx"> import mapper </span><span class="cx"> import session as sessionlib </span><span class="cx"> import dependency </span><span class="cx"> import util as mapperutil </span><del>-from sqlalchemy.exceptions import * </del><span class="cx"> import sets, random </span><span class="cx"> </span><del>-class ColumnProperty(MapperProperty): </del><ins>+class ColumnProperty(mapper.MapperProperty): </ins><span class="cx"> """describes an object attribute that corresponds to a table column.""" </span><span class="cx"> def __init__(self, *columns): </span><span class="cx"> """the list of columns describes a single object property. if there </span><span class="lines">@@ -114,7 +108,7 @@ </span><span class="cx"> </span><span class="cx"> mapper.ColumnProperty = ColumnProperty </span><span class="cx"> </span><del>-class PropertyLoader(MapperProperty): </del><ins>+class PropertyLoader(mapper.MapperProperty): </ins><span class="cx"> ONETOMANY = 0 </span><span class="cx"> MANYTOONE = 1 </span><span class="cx"> MANYTOMANY = 2 </span><span class="lines">@@ -200,7 +194,7 @@ </span><span class="cx"> self.parent = parent </span><span class="cx"> </span><span class="cx"> if self.secondaryjoin is not None and self.secondary is None: </span><del>- raise ArgumentError("Property '" + self.key + "' specified with secondary join condition but no secondary argument") </del><ins>+ raise exceptions.ArgumentError("Property '" + self.key + "' specified with secondary join condition but no secondary argument") </ins><span class="cx"> # if join conditions were not specified, figure them out based on foreign keys </span><span class="cx"> if self.secondary is not None: </span><span class="cx"> if self.secondaryjoin is None: </span><span class="lines">@@ -246,7 +240,7 @@ </span><span class="cx"> if self.backref is not None: </span><span class="cx"> self.backref.compile(self) </span><span class="cx"> elif not sessionlib.global_attributes.is_class_managed(parent.class_, key): </span><del>- raise ArgumentError("Attempting to assign a new relation '%s' to a non-primary mapper on class '%s'. New relations can only be added to the primary mapper, i.e. the very first mapper created for class '%s' " % (key, parent.class_.__name__, parent.class_.__name__)) </del><ins>+ raise exceptions.ArgumentError("Attempting to assign a new relation '%s' to a non-primary mapper on class '%s'. New relations can only be added to the primary mapper, i.e. the very first mapper created for class '%s' " % (key, parent.class_.__name__, parent.class_.__name__)) </ins><span class="cx"> </span><span class="cx"> self.do_init_subclass(key, parent) </span><span class="cx"> </span><span class="lines">@@ -270,7 +264,7 @@ </span><span class="cx"> elif self.foreigntable == self.parent.unjoined_table: </span><span class="cx"> return sync.MANYTOONE </span><span class="cx"> else: </span><del>- raise ArgumentError("Cant determine relation direction") </del><ins>+ raise exceptions.ArgumentError("Cant determine relation direction") </ins><span class="cx"> </span><span class="cx"> def _find_dependent(self): </span><span class="cx"> """searches through the primary join condition to determine which side </span><span class="lines">@@ -284,18 +278,18 @@ </span><span class="cx"> return </span><span class="cx"> if isinstance(binary.left, schema.Column) and binary.left.primary_key: </span><span class="cx"> if dependent[0] is binary.left.table: </span><del>- raise ArgumentError("bidirectional dependency not supported...specify foreignkey") </del><ins>+ raise exceptions.ArgumentError("bidirectional dependency not supported...specify foreignkey") </ins><span class="cx"> dependent[0] = binary.right.table </span><span class="cx"> self.foreignkey= binary.right </span><span class="cx"> elif isinstance(binary.right, schema.Column) and binary.right.primary_key: </span><span class="cx"> if dependent[0] is binary.right.table: </span><del>- raise ArgumentError("bidirectional dependency not supported...specify foreignkey") </del><ins>+ raise exceptions.ArgumentError("bidirectional dependency not supported...specify foreignkey") </ins><span class="cx"> dependent[0] = binary.left.table </span><span class="cx"> self.foreignkey = binary.left </span><span class="cx"> visitor = BinaryVisitor(foo) </span><span class="cx"> self.primaryjoin.accept_visitor(visitor) </span><span class="cx"> if dependent[0] is None: </span><del>- raise ArgumentError("cant determine primary foreign key in the join relationship....specify foreignkey=<column> or foreignkey=[<columns>]") </del><ins>+ raise exceptions.ArgumentError("cant determine primary foreign key in the join relationship....specify foreignkey=<column> or foreignkey=[<columns>]") </ins><span class="cx"> else: </span><span class="cx"> self.foreigntable = dependent[0] </span><span class="cx"> </span><span class="lines">@@ -622,7 +616,7 @@ </span><span class="cx"> row = self._row_decorator(row) </span><span class="cx"> return self.mapper._instance(session, row, imap, result_list) </span><span class="cx"> </span><del>-class GenericOption(MapperOption): </del><ins>+class GenericOption(mapper.MapperOption): </ins><span class="cx"> """a mapper option that can handle dotted property names, </span><span class="cx"> descending down through the relations of a mapper until it </span><span class="cx"> reaches the target.""" </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyormquerypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/query.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/query.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/query.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -6,11 +6,8 @@ </span><span class="cx"> </span><span class="cx"> </span><span class="cx"> import session as sessionlib </span><del>-import sqlalchemy.sql as sql -import sqlalchemy.util as util -from sqlalchemy.exceptions import * </del><ins>+from sqlalchemy import sql, util, exceptions </ins><span class="cx"> import mapper </span><del>-from sqlalchemy.exceptions import * </del><span class="cx"> </span><span class="cx"> class Query(object): </span><span class="cx"> """encapsulates the object-fetching operations provided by Mappers.""" </span><span class="lines">@@ -100,7 +97,7 @@ </span><span class="cx"> ret = self.select_whereclause(self._by_clause(*args, **params), limit=2) </span><span class="cx"> if len(ret) == 1: </span><span class="cx"> return ret[0] </span><del>- raise InvalidRequestError('Multiple rows returned for selectone_by') </del><ins>+ raise exceptions.InvalidRequestError('Multiple rows returned for selectone_by') </ins><span class="cx"> </span><span class="cx"> def count_by(self, *args, **params): </span><span class="cx"> """returns the count of instances based on the given clauses and key/value criterion. </span><span class="lines">@@ -122,7 +119,7 @@ </span><span class="cx"> ret = list(self.select(*args, **params)[0:2]) </span><span class="cx"> if len(ret) == 1: </span><span class="cx"> return ret[0] </span><del>- raise InvalidRequestError('Multiple rows returned for selectone') </del><ins>+ raise exceptions.InvalidRequestError('Multiple rows returned for selectone') </ins><span class="cx"> </span><span class="cx"> def select(self, arg=None, **kwargs): </span><span class="cx"> """selects instances of the object from the database. </span><span class="lines">@@ -199,7 +196,7 @@ </span><span class="cx"> continue </span><span class="cx"> c = self._get_criterion(self.mapper, key, value) </span><span class="cx"> if c is None: </span><del>- raise InvalidRequestError("Cant find criterion for property '"+ key + "'") </del><ins>+ raise exceptions.InvalidRequestError("Cant find criterion for property '"+ key + "'") </ins><span class="cx"> if clause is None: </span><span class="cx"> clause = c </span><span class="cx"> else: </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemyormsessionpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/orm/session.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/orm/session.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/lib/sqlalchemy/orm/session.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -4,12 +4,10 @@ </span><span class="cx"> # This module is part of SQLAlchemy and is released under </span><span class="cx"> # the MIT License: http://www.opensource.org/licenses/mit-license.php </span><span class="cx"> </span><del>-from sqlalchemy import util -from sqlalchemy.exceptions import * </del><ins>+from sqlalchemy import util, exceptions, sql </ins><span class="cx"> import unitofwork, query </span><span class="cx"> import weakref </span><span class="cx"> import sqlalchemy </span><del>-import sqlalchemy.sql as sql </del><span class="cx"> </span><span class="cx"> class SessionTransaction(object): </span><span class="cx"> def __init__(self, session, parent=None, autoflush=True): </span><span class="lines">@@ -26,7 +24,7 @@ </span><span class="cx"> return SessionTransaction(self.session, self) </span><span class="cx"> def add(self, connection_or_engine): </span><span class="cx"> if self.connections.has_key(connection_or_engine.engine): </span><del>- raise InvalidRequestError("Session already has a Connection associated for the given Connection's Engine") </del><ins>+ raise exceptions.InvalidRequestError("Session already has a Connection associated for the given Connection's Engine") </ins><span class="cx"> return self.get_or_add(connection_or_engine) </span><span class="cx"> def get_or_add(self, connection_or_engine): </span><span class="cx"> # we reference the 'engine' attribute on the given object, which in the case of </span><span class="lines">@@ -222,10 +220,10 @@ </span><span class="cx"> </span><span class="cx"> def begin(self, *obj): </span><span class="cx"> """deprecated""" </span><del>- raise InvalidRequestError("Session.begin() is deprecated. use install_mod('legacy_session') to enable the old behavior") </del><ins>+ raise exceptions.InvalidRequestError("Session.begin() is deprecated. use install_mod('legacy_session') to enable the old behavior") </ins><span class="cx"> def commit(self, *obj): </span><span class="cx"> """deprecated""" </span><del>- raise InvalidRequestError("Session.commit() is deprecated. use install_mod('legacy_session') to enable the old behavior") </del><ins>+ raise exceptions.InvalidRequestError("Session.commit() is deprecated. use install_mod('legacy_session') to enable the old behavior") </ins><span class="cx"> </span><span class="cx"> def flush(self, objects=None): </span><span class="cx"> """flushes all the object modifications present in this session to the database. 'objects' </span><span class="lines">@@ -314,7 +312,7 @@ </span><span class="cx"> ident = mapper.identity(object) </span><span class="cx"> for k in ident: </span><span class="cx"> if k is None: </span><del>- raise InvalidRequestError("Instance '%s' does not have a full set of identity values, and does not represent a saved entity in the database. Use the add() method to add unsaved instances to this Session." % repr(obj)) </del><ins>+ raise exceptions.InvalidRequestError("Instance '%s' does not have a full set of identity values, and does not represent a saved entity in the database. Use the add() method to add unsaved instances to this Session." % repr(obj)) </ins><span class="cx"> key = mapper.identity_key(ident) </span><span class="cx"> u = self.uow </span><span class="cx"> if u.identity_map.has_key(key): </span><span class="lines">@@ -330,7 +328,7 @@ </span><span class="cx"> def _save_impl(self, object, **kwargs): </span><span class="cx"> if hasattr(object, '_instance_key'): </span><span class="cx"> if not self.uow.has_key(object._instance_key): </span><del>- raise InvalidRequestError("Instance '%s' is already persistent in a different Session" % repr(object)) </del><ins>+ raise exceptions.InvalidRequestError("Instance '%s' is already persistent in a different Session" % repr(object)) </ins><span class="cx"> else: </span><span class="cx"> entity_name = kwargs.get('entity_name', None) </span><span class="cx"> if entity_name is not None: </span><span class="lines">@@ -342,7 +340,7 @@ </span><span class="cx"> if self._is_attached(object) and object not in self.deleted: </span><span class="cx"> return </span><span class="cx"> if not hasattr(object, '_instance_key'): </span><del>- raise InvalidRequestError("Instance '%s' is not persisted" % repr(object)) </del><ins>+ raise exceptions.InvalidRequestError("Instance '%s' is not persisted" % repr(object)) </ins><span class="cx"> if global_attributes.is_modified(object): </span><span class="cx"> self._register_dirty(object) </span><span class="cx"> else: </span><span class="lines">@@ -366,7 +364,7 @@ </span><span class="cx"> if getattr(obj, '_sa_session_id', None) != self.hash_key: </span><span class="cx"> old = getattr(obj, '_sa_session_id', None) </span><span class="cx"> if old is not None: </span><del>- raise InvalidRequestError("Object '%s' is already attached to session '%s'" % (repr(obj), old)) </del><ins>+ raise exceptions.InvalidRequestError("Object '%s' is already attached to session '%s'" % (repr(obj), old)) </ins><span class="cx"> </span><span class="cx"> # auto-removal from the old session is disabled. but if we decide to </span><span class="cx"> # turn it back on, do it as below: gingerly since _sessions is a WeakValueDict </span><span class="lines">@@ -384,7 +382,7 @@ </span><span class="cx"> </span><span class="cx"> def _unattach(self, obj): </span><span class="cx"> if not self._is_attached(obj): #getattr(obj, '_sa_session_id', None) != self.hash_key: </span><del>- raise InvalidRequestError("Object '%s' is not attached to this Session" % repr(obj)) </del><ins>+ raise exceptions.InvalidRequestError("Object '%s' is not attached to this Session" % repr(obj)) </ins><span class="cx"> del obj._sa_session_id </span><span class="cx"> </span><span class="cx"> def _is_attached(self, obj): </span><span class="lines">@@ -416,9 +414,6 @@ </span><span class="cx"> def get_row_key(row, class_, primary_key, entity_name=None): </span><span class="cx"> return Session.get_row_key(row, class_, primary_key, entity_name) </span><span class="cx"> </span><del>-def mapper(*args, **params): - return sqlalchemy.orm.mapper(*args, **params) - </del><span class="cx"> def object_mapper(obj, **kwargs): </span><span class="cx"> return sqlalchemy.orm.object_mapper(obj, **kwargs) </span><span class="cx"> </span><span class="lines">@@ -448,9 +443,9 @@ </span><span class="cx"> s = current_session(obj) </span><span class="cx"> if s is None: </span><span class="cx"> if obj is None: </span><del>- raise InvalidRequestError("No global-level Session context is established. Use 'import sqlalchemy.mods.threadlocal' to establish a default thread-local context.") </del><ins>+ raise exceptions.InvalidRequestError("No global-level Session context is established. Use 'import sqlalchemy.mods.threadlocal' to establish a default thread-local context.") </ins><span class="cx"> else: </span><del>- raise InvalidRequestError("No Session context is established for class '%s', and no global-level Session context is established. Use 'import sqlalchemy.mods.threadlocal' to establish a default thread-local context." % (obj.__class__)) </del><ins>+ raise exceptions.InvalidRequestError("No Session context is established for class '%s', and no global-level Session context is established. Use 'import sqlalchemy.mods.threadlocal' to establish a default thread-local context." % (obj.__class__)) </ins><span class="cx"> return s </span><span class="cx"> </span><span class="cx"> def _default_session(obj=None): </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemypoolpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/pool.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/pool.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/lib/sqlalchemy/pool.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -199,12 +199,13 @@ </span><span class="cx"> </span><span class="cx"> class QueuePool(Pool): </span><span class="cx"> """uses Queue.Queue to maintain a fixed-size list of connections.""" </span><del>- def __init__(self, creator, pool_size = 5, max_overflow = 10, **params): </del><ins>+ def __init__(self, creator, pool_size = 5, max_overflow = 10, timeout=30, **params): </ins><span class="cx"> Pool.__init__(self, **params) </span><span class="cx"> self._creator = creator </span><span class="cx"> self._pool = Queue.Queue(pool_size) </span><span class="cx"> self._overflow = 0 - pool_size </span><span class="cx"> self._max_overflow = max_overflow </span><ins>+ self._timeout = timeout </ins><span class="cx"> </span><span class="cx"> def do_return_conn(self, conn): </span><span class="cx"> try: </span><span class="lines">@@ -218,7 +219,7 @@ </span><span class="cx"> </span><span class="cx"> def do_get(self): </span><span class="cx"> try: </span><del>- return self._pool.get(self._max_overflow > -1 and self._overflow >= self._max_overflow) </del><ins>+ return self._pool.get(self._max_overflow > -1 and self._overflow >= self._max_overflow, self._timeout) </ins><span class="cx"> except Queue.Empty: </span><span class="cx"> self._overflow += 1 </span><span class="cx"> return self._creator() </span></span></pre></div> <a id="sqlalchemybranchesschematestmapperpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/mapper.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/mapper.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/test/mapper.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -2,8 +2,8 @@ </span><span class="cx"> import testbase </span><span class="cx"> import unittest, sys, os </span><span class="cx"> from sqlalchemy import * </span><ins>+import sqlalchemy.exceptions as exceptions </ins><span class="cx"> </span><del>- </del><span class="cx"> from tables import * </span><span class="cx"> import tables </span><span class="cx"> </span><span class="lines">@@ -255,7 +255,7 @@ </span><span class="cx"> 'user_name' : relation(mapper(Address, addresses)), </span><span class="cx"> }) </span><span class="cx"> self.assert_(False, "should have raised ArgumentError") </span><del>- except ArgumentError, e: </del><ins>+ except exceptions.ArgumentError, e: </ins><span class="cx"> self.assert_(True) </span><span class="cx"> </span><span class="cx"> clear_mappers() </span></span></pre></div> <a id="sqlalchemybranchesschematestpoolpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/pool.py (1400 => 1401)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/pool.py 2006-05-05 15:05:00 UTC (rev 1400) +++ sqlalchemy/branches/schema/test/pool.py 2006-05-05 16:15:08 UTC (rev 1401) </span><span class="lines">@@ -1,5 +1,5 @@ </span><span class="cx"> from testbase import PersistTest </span><del>-import unittest, sys, os </del><ins>+import unittest, sys, os, time </ins><span class="cx"> </span><span class="cx"> from pysqlite2 import dbapi2 as sqlite </span><span class="cx"> import sqlalchemy.pool as pool </span><span class="lines">@@ -90,6 +90,15 @@ </span><span class="cx"> c2 = None </span><span class="cx"> self.assert_(status(p) == (3, 2, 0, 1)) </span><span class="cx"> </span><ins>+ def test_timeout(self): + p = pool.QueuePool(creator = lambda: sqlite.connect('foo.db'), pool_size = 3, max_overflow = 0, use_threadlocal = False, echo = False, timeout=2) + c1 = p.get() + c2 = p.get() + c3 = p.get() + now = time.time() + c4 = p.get() + assert int(time.time() - now) == 2 + </ins><span class="cx"> def testthreadlocal_del(self): </span><span class="cx"> self._do_testthreadlocal(useclose=False) </span><span class="cx"> </span></span></pre> </div> </div> </body> </html> |