Will's blog

purpose: Will Kahn-Greene's blog of Python, Linux, random content, PyBlosxom, Miro, and other projects mixed in there ad hoc, half-baked, and with a twist of lemon

Mon, 26 Jan 2004

Tip for storing state between callbacks

Some plugins can do all their functionality in one callback and don't have any need to store state. These are your simple plugins that do things like count how many words there are in an entry and then store that number in the entry object's properties. More complex plugins do some stuff in one callback, then need to store their state, and do some other things in another callback.

In PyBlosxom 0.8 and prior, you could do this by storing the state in global variables on the plugin module like this:

      state = {}

      def cb_date_head(args):
          global state
          if state.has_key(...):
              ...

      def cb_filelist(args):
          global state
          ...
          state["blah"] = "blahblah"
   

This is "ok" for previous versions of PyBlosxom. In future versions (post 0.8), this is not ok and the official way to maintain state is to store state information on the Request object in the data dict using a unique key:

      STATE_KEY = "myplugin_state"

      def cb_date_head(args):
          request = args["request"]
          data = request.getData()

          if data.has_key(STATE_KEY) and data[STATE_KEY]["blah"] == "blahblah":
              ...


      def cb_filelist(args):
          request = args["request"]
          data = request.getData()

          data[STATE_KEY] = {}
          data[STATE_KEY]["blah"] = "blahblah"
   

changelog

Please keep comments appropriate. I reserve the right to remove anonymous comments, flames, spammy, inappropriate, and other comments that I deem to be worth removing.

Note: New comments get placed in a "draft" status and will NOT show up on the site until I explicitly approve it. Usually that happens within 24 hours, but sometimes I go away and it takes a day or two.

Note 2: There is now a preview button for those of you who want to see a preview! However, it doesn't quite work the way you'd think it should work. I'll look into adjusting it some day.

Note 3: If you can't for some reason post a comment, send me an email: willg at bluesock dot org.

Your name:


Your e-mail address (this doesn't get displayed to anyone--I use it to contact you if there are issues):


URL of your website (optional):


Comment:


Yes, I am a human!

pyblosxom::2.0 dev

All contents Copyright 1996 to 2008 Will Guaraldi.
Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.