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

Reply via email to