Oops sorry forgot a detail, I did this a while back I have a simple mapping of top level menu item to controller name so this works for me because of how it is organized. This allows me to remove functions from the application depending on where it is installed. Some clients don't use every possible top level menu item.
So to figure out the active path in model/menu.py all i need is active_path = request.controller Then the menu items are constructed with a True False in the second item of the tuple using logic like this on each item. response.menu+=[ (MAP, True if active_path == 'map' else False, URL(c='map', f='index'), []) ] MAP = T('Map') to allow translation to fill out a missing part of the above code fragment. I realize this has some limitations such as forcing a top level menu item and a controller name to be connected but I was willing to accept that..