I don't know if I'm dumb, ignorant, inexperienced, or asleep but while I can sometimes beat a plugin into submission, once I have setup.py working I treat it with superstition and reverence, unable to change anything with a plan or with confidence that it will do the right thing. I've looked and asked and I have never gotten a pointer to a clear explanation of what to put in it. Help!
I'm working my IQueryPreprocessor (http://trac.edgewall.org/ticket/10983) I'm now trying to port my ExtensionPoint in 0.11.6 to an OrderedExtensionsOption in 1.0 (or 1.1 or whatever the development branch is). In 0.11.6, I can test my changes to query.py with my TracPM code but that's not ported to or tested in 1.0 yet so I figured I'd just put together a trivial implementation to illustrate and test the interface (at the end of this message). My example translates "foo" to "id" so [[TicketQuery(foo=1)]] is the same as [[TicketQuery(id=1)]] and [[TicketQuery(id=1|2,foo=3)]] is the same as [[TicketQuery(id=1|2|3)]]. I put my code in trac/sample-plugins/sampleQueryPreprocessor/sampleQueryPreprocessor.py and tried and tried to create a setup.py in that directory. Nothing I try works. I build my egg and deploy it and my trac.log says: 2013-01-21 15:45:27,463 Trac[loader] DEBUG: Adding plugin SampleQueryPreprocessor 0.1 from /opt/trac/trac1.0/plugins/SampleQueryPreprocessor-0.1-py2.7.egg 2013-01-21 15:45:27,470 Trac[loader] DEBUG: Loading SampleQueryPreprocessor from /opt/trac/trac1.0/plugins/SampleQueryPreprocessor-0.1-py2.7.egg 2013-01-21 15:45:27,473 Trac[loader] ERROR: Skipping "SampleQueryPreprocessor = SampleQueryPreprocessor": Traceback (most recent call last): File "build/bdist.linux-x86_64/egg/trac/loader.py", line 68, in _load_eggs entry.load(require=True) File "build/bdist.linux-i686/egg/pkg_resources.py", line 1954, in load entry = __import__(self.module_name, globals(),globals(), ['__name__']) ImportError: No module named SampleQueryPreprocessor My setup.py (modeled on something else I found on my disk that I think works) is: #!/usr/bin/env python # -*- coding: iso-8859-1 -*- from setuptools import find_packages, setup setup( name = 'SampleQueryPreprocessor', author = 'Chris Nelson', author_email = 'chris.nel...@sixnet.com', description = 'Example of a IQueryPreprocessor implementation', version = '0.1', license='BSD', packages=find_packages(exclude=['*tests*']), entry_points = """ [trac.plugins] SampleQueryPreprocessor=SampleQueryPreprocessor """, ) What should it be? Better yet, where can I find a tutorial or reference so I can get this right next time. This is making me insane! ----8<---- plugin source follows --->8----- from trac.core import implements, Component from trac.ticket import IQueryPreprocessor # A sample implementation of IQueryPreprocessor # # This trivial example implements foo= as a synonym for id=. That is, # [[TicketQuery(foo=1)]] is the same as [[TicketQuery(id=1)]]. Also, # [[TicketQuery(id=1|2,foo=3)]] becomes [[TicketQuery(id=1|2|3)]]. class SampleQueryHelper(Component): implements(IQueryPreprocessor) def __init__(self): self.myConstraint = 'foo' self.env.log.info('SampleQueryHelper will translate "foo" to "id".') # IQueryPreprocessor methods # Return the list of constraints handled by process_constraints() def custom_constraints(self): self.env.log.info('SampleQueryPreprocessor.custom_constraints.') return [ self.myConstraint ] # Turn custom constraints (e.g., foo) into standard contraints (e.g., id) # # @param req the Trac web request object, may be None # @param constraints hash indexed by contraint name (e.g., 'foo', # 'id'). Each entry is a list of values. # # @return updated constraints. def process_constraints(self, req, constraints): self.env.log.info('SampleQueryPreprocessor.process_constraints.') # constraint values are lists, TracPM.preQuery() expects # pipe-delimited strings. options = {} for constraint in self.custom_constraints(): if constraint in constraints: options[constraint] = "|".join(constraints[constraint]) del constraints[constraint] # Our magic IDs are in 'foo'. ids = constraints[ self.myConstraint ] if len(ids): if 'id' not in constraints: constraints['id'] = [] for tid in ids: if tid not in constraints['id']: constraints['id'].append(tid) return constraints -- You received this message because you are subscribed to the Google Groups "Trac Development" group. To post to this group, send email to trac-dev@googlegroups.com. To unsubscribe from this group, send email to trac-dev+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/trac-dev?hl=en.