Project

General

Profile

Bug #674

Attempting to use SmorgasbordMixin to replace connection object triggers AttributeError

Added by Niek Bergman about 12 years ago. Updated about 12 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Elmer de Looff
Category:
-
Target version:
-
Start date:
2012-03-09
Due date:
% Done:

100%

Estimated time:
Spent time:

Description

After attempting to use the SmorgasbordMixin and MongoMixin to replace the self.connection object in PageMaker with self.bord for my database calls, an AttributeError is triggered and a traceback is shown by the DebuggingPageMaker.

What follows is part of the debug data generated by the DebuggingPageMaker, with the line marked by DebuggingPageMaker as triggering the fault prefixed with a ">":

<type 'exceptions.AttributeError'>
__exit__

Traceback (most recent call first)

        File: "/home/niek/Repos/floes/ads/model.py" 
        Scope: RandomFromAdspot
        Source code
        74    Returns an Advert object.""" 
        75    if isinstance(adspot, Adspot):
        76      adspot = adspot.key
>       77    with connection as cursor:
        78      record = cursor.Execute(""" 
        79      SELECT advert.*, resource.adsize
        80      FROM `adspot`
        Frame locals
        adspot     =1
        cls        =<class 'floes.ads.model.Advert'>
        connection =<uweb.model.Smorgasbord object at 0x186d990>

The PageMaker class currently has the following subclasses defined on it in my pages.py file:

class PageMaker(uweb.pagemaker.MongoMixin,
                uweb.pagemaker.SmorgasbordMixin,
                uweb.DebuggingPageMaker):

Associated revisions

Revision 192:bf1cf9c3dcb8 (diff)
Added by Elmer de Looff about 12 years ago

Smorgasbord Pagemaker mixin now stores connections in the local dictionary instead of passing them through every request. Also upated Smorgasbord class in the model after finding out that Python2.7 does not agree with enter and exit being returned by getattribute while not belonging to the actual object that returned them. They now cascade down to their relevant connections. This resolves #674.

History

#1 Updated by Elmer de Looff about 12 years ago

Actually, this is a core uWeb model issue that was introduced in Python2.7. This is because the with statement was changed to a single opcode

>>> from underdark.libs.sqltalk import mysql
>>> from uweb import model
>>> connection = mysql.Connec('example', 'example')
>>> bord = model.Smorgasbord()
>>> bord.AddConnection(connection, 'relational')
>>> with bord as cursor:
...   cursor.Select('message')
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: __exit__

The fix for this is to add explicit __enter__ and __exit__ methods to Smorgasbord that do The Right Thing™

#2 Updated by Elmer de Looff about 12 years ago

  • Status changed from New to Resolved
  • % Done changed from 0 to 70

Applied in changeset bf1cf9c3dcb8.

#3 Updated by Elmer de Looff about 12 years ago

  • Status changed from Resolved to Closed
  • % Done changed from 70 to 100

Also available in: Atom PDF