[sqlalchemy] Re: @synonym_for lose the docstrings
Hi Michael, Do you want me to create a ticket on this issue so it does not get lost ? Thanks, Christophe 2009/6/15 Christophe de VIENNE cdevie...@gmail.com Hi, I tried the patch, but got the following error : /home/cdevienne/prog/sqlalchemy/lib/sqlalchemy/ext/declarative.pyc in decorate(fn) 645 646 def decorate(fn): -- 647 return util.update_wrapper(_orm_synonym(name, map_column=map_column, descriptor=fn), fn) 648 return decorate 649 /usr/lib/python2.5/functools.pyc in update_wrapper(wrapper, wrapped, assigned, updated) 31 32 for attr in assigned: --- 33 setattr(wrapper, attr, getattr(wrapped, attr)) 34 for attr in updated: 35 getattr(wrapper, attr).update(getattr(wrapped, attr, {})) AttributeError: 'property' object has no attribute '__module__' I think the problem is, in that case, that the decorator is applied on property, not a function. I also tried to do the following : def decorate(fn): w = _orm_synonym(name, map_column=map_column, descriptor=fn) w.__doc__ = fn.__doc__ return w return decorate But in my documentation, I get A combination of InsturmentedAttribute and a regular descriptor., which is the docstring of a Proxy class defined in proxied_attribute_factory, in attributes.py. From what I could understand, at one moment the attributes.register_descriptor function replace my property on the class, and it is seems to be at that moment that the docstring is lost. I might be completely wrong though, it is just a guess. Thanks, Chrisotphe 2009/6/12 Michael Bayer mike...@zzzcomputing.com try this patch: Index: lib/sqlalchemy/ext/declarative.py === --- lib/sqlalchemy/ext/declarative.py (revision 6051) +++ lib/sqlalchemy/ext/declarative.py (working copy) @@ -639,8 +639,9 @@ prop = synonym('col', descriptor=property(_read_prop, _write_prop)) + def decorate(fn): -return _orm_synonym(name, map_column=map_column, descriptor=fn) +return util.update_wrapper(_orm_synonym(name, map_column=map_column, descriptor=fn), fn) return decorate def comparable_using(comparator_factory): @@ -661,7 +662,7 @@ def decorate(fn): -return comparable_property(comparator_factory, fn) +return util.update_wrapper(comparable_property(comparator_factory, fn), fn) return decorate def _declarative_constructor(self, **kwargs): Angri wrote: I think that patch which you would like to provide could add functools.wraps decorator to the decorator defined in synonym_for(). See http://docs.python.org/library/functools.html#functools.wraps -- Anton Gritsay http://angri.ru On 12 ÉÀÎ, 22:20, Christophe de VIENNE cdevie...@gmail.com wrote: Hi, I noticed that when I use the @synonym_for decorator, my function docstring get lost. I got lost in SA code around the attributes.register_descriptor function, which is one of the steps I guess the doc is not copied (along with the decorator function itself), and cannot propose a patch. I workaround the issue by doing the plain synonym declaration and using the sphinx specific docstrings for class attributes, but it would be really great if it could just work. And thanks for the awesome tool SqlAlchemy is : it is a constant source of amazement to me. Regards, Christophe --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups sqlalchemy group. To post to this group, send email to sqlalchemy@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 -~--~~~~--~~--~--~---
[sqlalchemy] Re: @synonym_for lose the docstrings
Hi, I tried the patch, but got the following error : /home/cdevienne/prog/sqlalchemy/lib/sqlalchemy/ext/declarative.pyc in decorate(fn) 645 646 def decorate(fn): -- 647 return util.update_wrapper(_orm_synonym(name, map_column=map_column, descriptor=fn), fn) 648 return decorate 649 /usr/lib/python2.5/functools.pyc in update_wrapper(wrapper, wrapped, assigned, updated) 31 32 for attr in assigned: --- 33 setattr(wrapper, attr, getattr(wrapped, attr)) 34 for attr in updated: 35 getattr(wrapper, attr).update(getattr(wrapped, attr, {})) AttributeError: 'property' object has no attribute '__module__' I think the problem is, in that case, that the decorator is applied on property, not a function. I also tried to do the following : def decorate(fn): w = _orm_synonym(name, map_column=map_column, descriptor=fn) w.__doc__ = fn.__doc__ return w return decorate But in my documentation, I get A combination of InsturmentedAttribute and a regular descriptor., which is the docstring of a Proxy class defined in proxied_attribute_factory, in attributes.py. From what I could understand, at one moment the attributes.register_descriptor function replace my property on the class, and it is seems to be at that moment that the docstring is lost. I might be completely wrong though, it is just a guess. Thanks, Chrisotphe 2009/6/12 Michael Bayer mike...@zzzcomputing.com try this patch: Index: lib/sqlalchemy/ext/declarative.py === --- lib/sqlalchemy/ext/declarative.py (revision 6051) +++ lib/sqlalchemy/ext/declarative.py (working copy) @@ -639,8 +639,9 @@ prop = synonym('col', descriptor=property(_read_prop, _write_prop)) + def decorate(fn): -return _orm_synonym(name, map_column=map_column, descriptor=fn) +return util.update_wrapper(_orm_synonym(name, map_column=map_column, descriptor=fn), fn) return decorate def comparable_using(comparator_factory): @@ -661,7 +662,7 @@ def decorate(fn): -return comparable_property(comparator_factory, fn) +return util.update_wrapper(comparable_property(comparator_factory, fn), fn) return decorate def _declarative_constructor(self, **kwargs): Angri wrote: I think that patch which you would like to provide could add functools.wraps decorator to the decorator defined in synonym_for(). See http://docs.python.org/library/functools.html#functools.wraps -- Anton Gritsay http://angri.ru On 12 ÉÀÎ, 22:20, Christophe de VIENNE cdevie...@gmail.com wrote: Hi, I noticed that when I use the @synonym_for decorator, my function docstring get lost. I got lost in SA code around the attributes.register_descriptor function, which is one of the steps I guess the doc is not copied (along with the decorator function itself), and cannot propose a patch. I workaround the issue by doing the plain synonym declaration and using the sphinx specific docstrings for class attributes, but it would be really great if it could just work. And thanks for the awesome tool SqlAlchemy is : it is a constant source of amazement to me. Regards, Christophe --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups sqlalchemy group. To post to this group, send email to sqlalchemy@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 -~--~~~~--~~--~--~---
[sqlalchemy] Re: @synonym_for lose the docstrings
I think that patch which you would like to provide could add functools.wraps decorator to the decorator defined in synonym_for(). See http://docs.python.org/library/functools.html#functools.wraps -- Anton Gritsay http://angri.ru On 12 июн, 22:20, Christophe de VIENNE cdevie...@gmail.com wrote: Hi, I noticed that when I use the @synonym_for decorator, my function docstring get lost. I got lost in SA code around the attributes.register_descriptor function, which is one of the steps I guess the doc is not copied (along with the decorator function itself), and cannot propose a patch. I workaround the issue by doing the plain synonym declaration and using the sphinx specific docstrings for class attributes, but it would be really great if it could just work. And thanks for the awesome tool SqlAlchemy is : it is a constant source of amazement to me. Regards, Christophe --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups sqlalchemy group. To post to this group, send email to sqlalchemy@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 -~--~~~~--~~--~--~---
[sqlalchemy] Re: @synonym_for lose the docstrings
try this patch: Index: lib/sqlalchemy/ext/declarative.py === --- lib/sqlalchemy/ext/declarative.py (revision 6051) +++ lib/sqlalchemy/ext/declarative.py (working copy) @@ -639,8 +639,9 @@ prop = synonym('col', descriptor=property(_read_prop, _write_prop)) + def decorate(fn): -return _orm_synonym(name, map_column=map_column, descriptor=fn) +return util.update_wrapper(_orm_synonym(name, map_column=map_column, descriptor=fn), fn) return decorate def comparable_using(comparator_factory): @@ -661,7 +662,7 @@ def decorate(fn): -return comparable_property(comparator_factory, fn) +return util.update_wrapper(comparable_property(comparator_factory, fn), fn) return decorate def _declarative_constructor(self, **kwargs): Angri wrote: I think that patch which you would like to provide could add functools.wraps decorator to the decorator defined in synonym_for(). See http://docs.python.org/library/functools.html#functools.wraps -- Anton Gritsay http://angri.ru On 12 ÉÀÎ, 22:20, Christophe de VIENNE cdevie...@gmail.com wrote: Hi, I noticed that when I use the @synonym_for decorator, my function docstring get lost. I got lost in SA code around the attributes.register_descriptor function, which is one of the steps I guess the doc is not copied (along with the decorator function itself), and cannot propose a patch. I workaround the issue by doing the plain synonym declaration and using the sphinx specific docstrings for class attributes, but it would be really great if it could just work. And thanks for the awesome tool SqlAlchemy is : it is a constant source of amazement to me. Regards, Christophe --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups sqlalchemy group. To post to this group, send email to sqlalchemy@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 -~--~~~~--~~--~--~---