Hi Poojan, Sorry for the slow response.
> I am trying to write a simple Python script which dumps out all items in > my Home collection as a text file. (Just the item names as a simple flat > list, 1 line per item.) This attempt is related to my wanting to be able > to print out a simple list of my items (see > http://lists.osafoundation.org/pipermail/chandler-users/2007-October/000822.html). > > It is my understanding that since Chandler Desktop is written in Python, > it is possible to run simple scripts to perform repeated (or desirable) > tasks. > > I've tried to harness the tools->scripting menu item to do > this--recording a script of a .ics file dump. > However, this seems to record mostly wxWidget calls (including mouse > clicks & keyboard presses). Furthermore, dumping as an .ics file isn't > exactly what I want. (I would have to post-process the result to get > only the item names. I've done this manually before, but there must be > a better way.) There are different possible meanings of the word script. The record script functionality you tried is focused on allowing users to repeat actions inside Chandler, as you discovered, that isn't going to help you with your project. You want to write a Python script that works with data in Chandler. > My first step in this endeavor is to figure out how to get hold of my > Home collection's object. Is there a way to get the Python object of a > collection by simply knowing its name--or, really, a list of items in > the repository that belong to a specific collection? Here's how to write and install a plugin for Chandler that can access your collections (I've written it so it looks at the selected collection). To make this work, you should create a new directory, I'll call it YourPlugin. Create a file called setup.py: ---------- YourPlugin/setup.py ---------- from setuptools import setup setup( name = "YourPlugin", version = "0.1", packages = ["your_plugin"], entry_points = { "chandler.parcels": ["YourPlugin package = your_plugin"], }, ) #---------- End of setup.py Next, create a subdirectory called your_plugin, with a file called __init__.py: ---------- YourPlugin/your_plugin/__init__.py ---------- from application import schema from osaf.framework.blocks import BlockEvent, MenuItem from osaf.framework.blocks.Block import Block from i18n import MessageFactory # using _ for unicode that will be displayed to users enables localizers to # change the unicode _ = MessageFactory("YourPlugin") def installParcel(parcel, oldVersion=None): # find the parent menu for your new menu item parentMenu = schema.ns('osaf.views.main', parcel).FileMenu # the code that should handle events when your menu item is chosen handler = YourPluginMenuBlock.update(parcel, None, blockName='YourPluginMenuHandler') # the event that's sent when your menu item is chosen addYourPluginEvent = BlockEvent.update(parcel, None, blockName='ActionOnYourPlugin', dispatchEnum='SendToBlockByReference', destinationBlockReference=handler) # create the menu item MenuItem.update(parcel, None, blockName='YourPluginMenu', title=_(u"Some action"), accel = _(u'Ctrl+Shift+Y'), helpString=_(u"This does something"), event=addYourPluginEvent, parentBlock=parentMenu) class YourPluginMenuBlock(Block): # the method name has to be the blockName of the BlockEvent above # sandwiched with "on" and "Event" def onActionOnYourPluginEvent(self, event): for item in Block.findBlockByName("MainView").getSidebarSelectedCollection(): item_title = item.displayName # Python's print can't print unicode, encode as utf-8 print item_title.encode('utf-8') #---------- End of __init__.py To install your plugin, you'll need to use the python that comes with Chandler (I'll call it chandler_python) in the YourPlugin directory: chandler_python setup.py develop Then, restart Chandler. To uninstall your plugin, you can always do: chandler_python setup.py develop -u You should rename YourPlugin whatever you want, of course. The action method I included is just a stub that iterates over the items in the collection and prints their titles, for your purposes you could pop up a dialog to choose a file and write whatever you want to it. Hope that helps, feel free to ask if you have more questions! Sincerely, Jeffrey _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Open Source Applications Foundation "chandler-dev" mailing list http://lists.osafoundation.org/mailman/listinfo/chandler-dev
