Is read_file() always called after an activity __init__?

Gary C Martin gary at garycmartin.com
Thu Feb 28 06:45:42 EST 2008


Hi Tomeu,

On 28 Feb 2008, at 09:40, Tomeu Vizoso wrote:

> Well, __init__ is too soon.

Well before calling activity.Activity.__init__(self, handle) yes that  
would be a real bad idea for sure :-) but after that it 'should' be  
fine shouldn't it, as the activity class is all set up? I can  
certainly read the metadata in my main __int__ just after the call up  
to super, and all works well.

> AFAIK, the API docs say that you can
> safely access Activity.metadata in the read_file() and write_file()
> methods. read_file() is called when the user is resuming an existing
> activity and write_file() when sugar thinks it is a good time to save
> changes to the journal (probably several times during the life of an
> activity).

It does seem like read_file() is only triggered if you have previously  
saved an actual file to filesystem, if you just have metadata, no call  
is ever made to read_file() so it's a rather bad place to pick-up the  
metadata. At least this is what I'm seeing here – I've just created a  
0 size file in my write_file() and now a resume from that journal  
entry is triggering read_file() every time.

> Is very probable that the API documentation is lacking, can you point
> me to the docs you were following? Have you already read the HIG in
> the wiki?

Not an officially maintained page I know, but:
	http://wiki.laptop.org/go/Beyond_Hello_World

Same suggestion comes from the current pydocs:
	http://<xo_running_pydoc-p8080>:8080/ 
sugar.activity.activity.html#Activity-read_file
	http://www.vrplumber.com/sugar-docs/sugar.activity.activity.html#Activity-read_file 
  (an online version)

I also went through a number of activity sources in git looking for  
examples, but I didn't find one that ONLY used metadata. They all seem  
to either not bother storing any UI state (so resuming or from new  
makes no difference), or they save actual files.

BTW: I'm quite happy with read_file() not getting called in file-less  
cases, just a matter of documenting it somewhere (if that is indeed  
the correct behaviour intended).

Thanks for your input.


More information about the Devel mailing list