I am not able see the total_sales column in sqlite manager plugin of
firefox and sqlagrid of toscawidgets. But I can access the total_sales when
I use toscawidget's dbform. Any known reasons?
On Tuesday, 7 August 2012 20:56:07 UTC+5:30, jeetu wrote:
>
> Just one minor update for future reference, We have to add the None
> checking condition in _update_artist method as well for the update to
> happen properly in the web application. But I was unable to produce the
> problem in the text sqlalchemy file that I have posted in the pastebin.
>
> @validates("artist", include_removes=True)
> def _update_artist(self, key, artist, is_remove):
> if artist is not None:
> artist.__dict__.pop('total_sales', None)
> return artist
>
>
>
> On Tuesday, 7 August 2012 17:06:25 UTC+5:30, jeetu wrote:
>>
>> Just ignore the above post. I am able to get it working for adding new
>> artist with albums. But I am still getting some problems while updating the
>> albums's sales values from Turogears/toscawidgets2 interface. Let me bring
>> the problem to sqlalchemy level then I will post it further (if the problem
>> still remains). The code in the above post is working fine for adding new
>> Artist and Albums. Thanks Michael for helping me out.
>>
>> On Tuesday, 7 August 2012 11:19:54 UTC+5:30, jeetu wrote:
>>>
>>> Thanks Michael for looking into my problem. I tried following your
>>> advice but still not able to get the total_sale. Do I have to implement
>>> some special getter/setter for memoized property. If you run the code, you
>>> will see that nowhere 'print "SETTING TOTAL_SALES"' is getting executed
>>> which is in the memoized definition. Also how can i access the memoized
>>> property as it is not available in straight forward querying on Artist.
>>>
>>> http://pastebin.com/Gqa7b0dd
>>>
>>> On Tuesday, 7 August 2012 00:14:07 UTC+5:30, Michael Bayer wrote:
>>>>
>>>> @memoized_property is a handy tool, and works simply, just clear out
>>>> __dict__ of that key and it's reset.
>>>>
>>>> since you're looking to work in python, the total sales are just:
>>>>
>>>> @memoized_property
>>>> def total_sales(self):
>>>> # This should be the sum of all Album sales for this Artist. It
>>>> should
>>>> # be updated as soon as/just after a new Album is added or an
>>>> Album's
>>>> # sales is updated.
>>>> return sum([album.sales or 0 for album in self.albums])
>>>>
>>>> the events you need are simple, just whenever "sales" or "artist"
>>>> (ideally you'd name this in the singular since it is many-to-one) change,
>>>> pop the "total_sales" out of the dict:
>>>>
>>>> from sqlalchemy.orm import validates
>>>>
>>>> class Album(Base):
>>>> # ...
>>>> @validates("sales")
>>>> def _update_sales(self, key, value):
>>>> if self.artist is not None:
>>>> self.artist.__dict__.pop('total_sales', None)
>>>> return value
>>>>
>>>> @validates("artist", include_removes=True)
>>>> def _update_artist(self, key, artist, is_remove):
>>>> artist.__dict__.pop('total_sales', None)
>>>> return artist
>>>>
>>>>
>>>>
>>>> On Aug 6, 2012, at 4:08 AM, jeetu wrote:
>>>>
>>>> My problem scenario is analogous to the following. I have an Artist
>>>> table and an Album table. Each artist can have multiple albums with sales
>>>> of each album. The artist also has a total_sales column which is basically
>>>> a cumulative of album's sales for that artist. I tried reading about
>>>> attribute events and memoized property but I am unable to get it
>>>> integrated
>>>> with my code. I tried to achieve something like
>>>> https://groups.google.com/forum/?fromgroups#!topic/sqlalchemy/o_KxuHwz4WQ.
>>>> But my lack of thorough understanding of decoraters and sqlalchemy is
>>>> proving to be a hindrance. My example code (heavily borrowed from
>>>> resources
>>>> on internet and sqlalchemy group) is http://pastebin.com/vhRTcrWV
>>>> Just for information if at all it matters:n my actual code I am using
>>>> toscawidgets (inside turbogears) and dynamic forms for creating Albums
>>>> table's values and Artist's values on a single page.
>>>>
>>>> PS: I hope it is not sounding like homework
>>>>
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "sqlalchemy" group.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msg/sqlalchemy/-/CcGMUZ2UHSYJ.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected].
>>>> 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 view this discussion on the web visit
https://groups.google.com/d/msg/sqlalchemy/-/T3U9xjR-NS0J.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.