>
>  I created an editcounter in class ReplaceRobot of replace.py and was
> disappointed with my counter not listening to the failure of put_async.
>
> Now I created a callback function:
>     def lacika(self, page, err):
>         if err is None:
>             print u'%s saved successfully' % page.title() #for debug
>         else:
>             print 9999999
>             self.editcounter -= 1
>             print self.editcounter
>

Note that this is not thread safe (or maybe it is due to the GIL - but it
could happen self.editcounter changes between reading it, subtracting one,
and writing it back).


> Now I ran four tests:
> 1. Successful save, it's OK.
> 2. After loading the page, while replace.py waits for my choice, I
> protected the page. Result:
> 1 page was changed. <-- message from main process
> Updating page [[Szerkesztő:BinBot/semmi]] via API
> 9999999 <-- just a test message from callback
> 0 <-- New self.editcounter, correct, but too late
>

What is exactly the problem here? This is exactly the expected behaviour:
it runs the callback /after/ the page has been saved. It's not a time
machine. If you need to have an exact editcount during the main loop, use
.put(). Alternatively, move your logic into the callback function - that is
the only place where the correct information is available.


> Here comes my first problem. As far as I understood, I should use *join*to 
> make the main process wait for put_async. But put_asyn is taken from
> wikipedia.py. How can I use *join* here, where should I write it? Could
> someone write a simple example to make the bot wait for put_async?
>
Why would you want to join() the thread? The bot always waits for all save
operations to finish.


> 4th test: After loading the page, while the bot is waiting for my choice,
> I delete the page. This seems to be a bug:
> 1 page was changed.
> Updating page [[Szerkesztő:BinBot/semmi]] via API
> Unknown Error. API Error code:missingtitle
> Information:The article you tried to edit doesn't exist
> Szerkeszt<:BinBot/semmi saved successfully
>
So did it re-create the page? or...?

Best,
Merlijn
_______________________________________________
Pywikipedia-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-l

Reply via email to