|
View:
New views
2 Messages
—
Rating Filter:
Alert me
|
|
|
JSON method/view nameHi,
I want to use 'getAccounts.json' in the url for a JSON view. Because the method name of a grok.JSON view class will be used as name of the json view and because a method name normally can not contain a dot, I had to make a work around. The work around is: class JSONApi(grok.JSON): grok.context(tmx.ITopicMapX) def getAccounts(self): return { "status": "ok"} getAccounts.__name__ = 'getAccounts.json' setattr(JSONApi, 'getAccounts.json', JSONApi.getAccounts) This work around works ok, but it looks uggly. Is this is preferred way to do so or do you have a better solution? Regards, Marc _______________________________________________ Grok-dev mailing list Grok-dev@... https://mail.zope.org/mailman/listinfo/grok-dev |
|
|
Re: JSON method/view nameHey,
Marc Rijken wrote: > I want to use 'getAccounts.json' in the url for a JSON view. Because the > method name of a grok.JSON view class will be used as name of the json > view and because a method name normally can not contain a dot, I had to > make a work around. The work around is: > > class JSONApi(grok.JSON): > grok.context(tmx.ITopicMapX) > > def getAccounts(self): > return { "status": "ok"} > > getAccounts.__name__ = 'getAccounts.json' > > setattr(JSONApi, 'getAccounts.json', JSONApi.getAccounts) > > This work around works ok, but it looks uggly. Is this is preferred way > to do so or do you have a better solution? There's no official better solution. We should look into creating one, possibly involving making @grok.name() a decorator that can be used in this context. For a temporary somewhat prettier solution you could make your own decorator that sets __name__ and does the setattr too (though I think the latter is difficult as you wouldn't have access to the class yet unless you resorted to frame hacks, I think). Alternatively you could create your own grok.View subclass that implements its own render() method to handle JSON. You should then be able to use grok.name(). Finally you could create an alternative baseclass along the lines of grok.JSON and implement your own JSONGrokker that does the name inspection. If you're up to the challenge you'd be more than welcome to try to get this into Grok itself. This applies to anyone else too, of course! I think the @grok.name() decorator could be used: @grok.name('getAccounts.json) def getAccounts(self): .... Reusing a directive as a decorator is tricky however. We have a precedent in grok.require, but it isn't the easiest thing to get going. It'd be nice if we had more general infrastructure to accomplish this in Martian. Regards, Martijn _______________________________________________ Grok-dev mailing list Grok-dev@... https://mail.zope.org/mailman/listinfo/grok-dev |
| Free embeddable forum powered by Nabble | Forum Help |