Discussion:
[Trac-dev] Modifying ticket field properties in a plugin
Thomas Moschny
2017-02-07 10:39:00 UTC
Permalink
Hi,

we have some (internal) plugin that modifies ticket field properties
on the fly. It hooks into /ticket and /query requests via
IRequestFilter.post_process_request() and modifies data['fields'].

This worked fine for older Trac versions. But newer Trac seems not to
use 'data' in /query requests anymore. Instead the ticket field
properties are passed in the global JS 'properties' variable (via
add_script_data()).

Now, in my plugin's post_process_request hook, I can also call
add_script_data(). Unfortunately, updating 'properties' doesn't really
work that way, as one can only replace whole keys.

One easy way would be to access req.chrome['script_data'] directly,
but that feels a bit like cheating (working around the API).

Another (more sledgehammery) way would be to add a JS snippet that
modifies 'properties'.

Is there some clean way in between?

Thanks,
Thomas
--
You received this message because you are subscribed to the Google Groups "Trac Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to trac-dev+***@googlegroups.com.
To post to this group, send email to trac-***@googlegroups.com.
Visit this group at https://groups.google.com/group/trac-dev.
For more options, visit https://groups.google.com/d/optout.
RjOllos
2017-02-07 17:04:12 UTC
Permalink
Post by Thomas Moschny
Hi,
we have some (internal) plugin that modifies ticket field properties
on the fly. It hooks into /ticket and /query requests via
IRequestFilter.post_process_request() and modifies data['fields'].
This worked fine for older Trac versions. But newer Trac seems not to
use 'data' in /query requests anymore. Instead the ticket field
properties are passed in the global JS 'properties' variable (via
add_script_data()).
Now, in my plugin's post_process_request hook, I can also call
add_script_data(). Unfortunately, updating 'properties' doesn't really
work that way, as one can only replace whole keys.
One easy way would be to access req.chrome['script_data'] directly,
but that feels a bit like cheating (working around the API).
Another (more sledgehammery) way would be to add a JS snippet that
modifies 'properties'.
Is there some clean way in between?
Thanks,
Thomas
Looks like you are right about the "properties" dict not being a part of
"data":
https://trac.edgewall.org/browser/tags/trac-1.2/trac/ticket/query.py?marks=1149-1155#L1148

I haven't done any testing, but I suppose we could put "properties" in
"data" so that it can be modified in post_process_request. Grabbing it from
req.chrome['script_data'] sounds like a good workaround.

If you find a modification to Trac that would make your job easier, feel
free to propose a patch. What changes do you need to make to the
"properties" dict for your plugin to function correctly?

- Ryan
--
You received this message because you are subscribed to the Google Groups "Trac Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to trac-dev+***@googlegroups.com.
To post to this group, send email to trac-***@googlegroups.com.
Visit this group at https://groups.google.com/group/trac-dev.
For more options, visit https://groups.google.com/d/optout.
Loading...