On 12/05/2011 09:51 AM, Olemis Lang wrote:
On Mon, Dec 5, 2011 at 9:37 AM, Chris Nelson<[email protected]>  wrote:

On 12/05/2011 09:06 AM, Olemis Lang wrote:

On Mon, Dec 5, 2011 at 7:57 AM, Chris Nelson<[email protected]>    wrote:
I think you are missing the point here that ExtensionOption offers a
way to instantiate Components by relying on Python descriptors magic .
Hence that's not the way to go if you want to list the entries under
[components] section in trac.ini . I mentioned before you have
basically two ways to go :

- Use `env.config` object so as to read information in trac.ini file directly
- Use  `ComponentMeta._registry` to list the classes implementing a
given interface
   (review the code for `ExtensionPoint.extensions` method for further details 
;)
   and then invoke `ComponentManager.is_component_enabled` so as to
   know whether that particular class is enabled/disabled in that particular
   Trac environment.


I understand there are several ways to do this. If I wanted multiple listeners 
or processors or whatever, I could use an ExtensionPoint and iterate over all 
the enabled implementations.  But what I want is a configurable single handler. 
 I believe that the way to do that is an ExtensionOption.  I've used that 
successfully for functions in my own plugin but when I try to instantiate an 
implementation in another plugin, it fails.

The class TeamCalendar is implemented in the module calendar.py in the plugin 
teamcalendar but when I pass "teamcalendar.calendar.TeamCalendar' to 
ExtensionOption, it fails to find the class.

   Cannot find an implementation of the "IResourceCalendar" interface
   named "teamcalendar.calendar.TeamCalendar".  Please update the
   option TracPM.calendar in trac.ini.

How can I find the real name of the class?


In that case you should use trac.config.ExtensionOption descriptors ,
rather than defining extension points
;)

I'm not using an ExtensionPoint. I mention that only because I understand that is a way to have pluggable interfaces. I don't know what a "trac.config.ExtensionOption descriptor" is.

My trac.ini says:

    [TracPM]
    ...
    calendar = teamcalendar.calendar.TeamCalendar

and my code says:

    cal = ExtensionOption('TracPM', 'calendar',
                          IResourceCalendar, 'SimpleCalendar')

and I see:

    Cannot find an implementation of the "IResourceCalendar" interface
    named "teamcalendar.calendar.TeamCalendar".  Please update the
    option TracPM.calendar in trac.ini.

If I remove the trac.ini entry, and change the code to:

    cal = ExtensionOption('TracPM', 'calendar',
                          IResourceCalendar,
                          'teamcalendar.calendar.TeamCalendar')

I get the same error.

If I try to import teamcalendar.calendar.TeamCalendar into tracjsgantt/tracpm.py and change to:

    cal = TeamCalendar(self.env)

TracJSGantt won't even load.  The page says:

    No macro or processor named 'TracJSGanttChart' found

and my trac.log says:

   2011-12-05 11:14:14,029 Trac[loader] ERROR: Skipping "tracjsgantt =
   tracjsgantt": (can't import "ImportError: cannot import name
   IResourceCalendar")

I don't know what's missing!

                                                 Chris
--
Christopher Nelson, Software Engineering Manager
SIXNET - Solutions for Your Industrial Networking Challenges
331 Ushers Road, Ballston Lake, NY  12019
Tel: +1.518.877.5173, Fax: +1.518.877.8346 www.sixnet.com

--
You received this message because you are subscribed to the Google Groups "Trac 
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/trac-users?hl=en.

Reply via email to