[Grok-dev] unique item in container question

modiadi adi at modiadi.com
Tue Mar 17 08:07:49 EDT 2009


Case closed !

This is the solution, thanks !

After searching this solution on grok dev and not finding it, I wonder  
if I miss some important informations about grok. Should I read or  
learn something else before grok(like zope3)?


On Mar 17, 2009, at 1:38 PM, Christian Klinger wrote:

> Hi again,
>
> another option is to use the validator on your grok.action.
>
> Look at this little snippet maybe it helps you.
>
>
> ##################################################
>
>     def simple_validator(self, action, data):
>         errors = self.validate(action, data)
>         if object already there:
>             errors = (u"Entry already exists",)
>         return errors
>
>     @grok.action(u'Anlegen', validator=simple_validator)
>
> ##################################################
>
> Christian
>
>> Hi Christian,
>>
>> Thank you for the suggestion it is very helpful.
>>
>> I still have to find a way to make the form report the error. I that
>> this issue is grok related.
>>
>> My problem becomes when the NameChoser rises a ValueError how can I
>> make the form report the error to the user?
>>
>> At this moment if i do this :
>>
>>     @grok.action('Add event')
>>     def add(self,**data):
>>         .....
>>         if self.context.has_key(name):
>>             raise ValueError("some error")
>> It will report the exception in zope error log. I need to find a way
>> to inform the user about the problem so he can change the name (in  
>> the
>> context of this application this is how we must handle the situation)
>>
>> Thank again
>>
>>
>>
>> On Mar 17, 2009, at 11:53 AM, Christian Klinger wrote:
>>
>>> Hi modiadi,
>>>
>>> in zope3 there is a concept called NamedChooser. You can look here  
>>> [1]
>>> for the default implementation. Of course you can override the
>>> NameChooser for your NewsContainer so you can check if the news item
>>> already exists.
>>>
>>> There is an example in Philipp´s *Web Component Development with
>>> Zope3*.
>>>
>>> Hope this helps
>>> - Christian
>>>
>>> [1]
>>> http://svn.zope.org/zope.container/trunk/src/zope/container/contained.py?rev=97508&view=auto
>>>
>>>
>>>> Hello,
>>>>
>>>> I have a grok.AddForm wich adds a NewsItem in a NewsContainer. I  
>>>> try
>>>> to write some kind of validation so I dont have duplicate news in  
>>>> the
>>>> container.
>>>>
>>>> As I see I have 3 a few options:
>>>>
>>>> 1. Write an invariant in the NewsItem model where I check if the  
>>>> news
>>>> is unique in the *container*. I don't see this as a good option
>>>> because I have to explicitly refer to the container in side a  
>>>> model.
>>>>
>>>> 2. Write the validation in the Add grok.action. The idea is that  
>>>> just
>>>> before adding the new item in the container I check if I have
>>>> duplicates. This was easy to do.
>>>>
>>>> My problem is that I can't(or I don't know how to) return an  
>>>> error to
>>>> the user from this place.
>>>>
>>>>    @grok.action('Add event')
>>>>      def add(self,**data):
>>>>          ...... do some validation
>>>> 	  return None?
>>>>
>>>> Do you have any suggestions ?
>>>>
>>>> Thank you !
>>> _______________________________________________
>>> Grok-dev mailing list
>>> Grok-dev at zope.org
>>> http://mail.zope.org/mailman/listinfo/grok-dev
>>>
>
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> http://mail.zope.org/mailman/listinfo/grok-dev
>



More information about the Grok-dev mailing list