[sqlalchemy] Declarative classproperty member problem in 0.6.4, not 0.6.3

2010-09-15 Thread Nikolaj
The following test fails in 0.6.4 but not 0.6.3 with AttributeError:
type object 'Person' has no attribute 'foo'. Is this a deliberate
change? It seems a bit weird that every @classproperty on a
declarative subclass is accessed/run on import.

from sqlalchemy import create_engine, Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.util import classproperty

Base = declarative_base()

class Person(Base):
__tablename__ = 'people'

name = Column(String, primary_key=True)

@classproperty
def bar(cls):
return cls.foo

-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.



Re: [sqlalchemy] Declarative classproperty member problem in 0.6.4, not 0.6.3

2010-09-15 Thread Michael Bayer

On Sep 15, 2010, at 10:04 AM, Nikolaj wrote:

 The following test fails in 0.6.4 but not 0.6.3 with AttributeError:
 type object 'Person' has no attribute 'foo'. Is this a deliberate
 change? It seems a bit weird that every @classproperty on a
 declarative subclass is accessed/run on import.
 
 from sqlalchemy import create_engine, Column, String
 from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.util import classproperty
 
 Base = declarative_base()
 
 class Person(Base):
__tablename__ = 'people'
 
name = Column(String, primary_key=True)
 
@classproperty
def bar(cls):
return cls.foo

The backrground for this is deliberate, but the effect you are seeing was not 
originally intended.   Person.foo is being evaluated when Person is first 
created by the declarative base, to see if it returns a mapper property.   If 
.foo isn't available there's your error.

The declarative evaluation is limited to the @classproperty decorator that's 
inside of sqlalchemy.util.   If you use your own external @classproperty it 
won't be called upon.


-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.



Re: [sqlalchemy] Declarative classproperty member problem in 0.6.4, not 0.6.3

2010-09-15 Thread Chris Withers

On 15/09/2010 15:04, Nikolaj wrote:

Base = declarative_base()

class Person(Base):
 __tablename__ = 'people'

 name = Column(String, primary_key=True)

 @classproperty
 def bar(cls):
 return cls.foo


Can you explain why you'd want to do something like this?

Chris

--
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.



Re: [sqlalchemy] Declarative classproperty member problem in 0.6.4, not 0.6.3

2010-09-15 Thread Michael Bayer

On Sep 15, 2010, at 12:10 PM, Chris Withers wrote:

 On 15/09/2010 15:04, Nikolaj wrote:
 Base = declarative_base()
 
 class Person(Base):
 __tablename__ = 'people'
 
 name = Column(String, primary_key=True)
 
 @classproperty
 def bar(cls):
 return cls.foo
 
 Can you explain why you'd want to do something like this?

What I should have done, is had declarative look for a decorator 
@mapperproperty.  Which is identical to @classproperty, except its the specific 
decorator that declarative will actually look at.   I have already hit this 
glitch in my own code where I am using @classproperty for other reasons.

Class-level decorators are going to be more prominent in 0.7 so I will be 
getting this story straight.



 
 Chris
 
 -- 
 You received this message because you are subscribed to the Google Groups 
 sqlalchemy group.
 To post to this group, send email to sqlalch...@googlegroups.com.
 To unsubscribe from this group, send email to 
 sqlalchemy+unsubscr...@googlegroups.com.
 For more options, visit this group at 
 http://groups.google.com/group/sqlalchemy?hl=en.
 

-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.