Routes mapper in turbogears2 (again)

84 views
Skip to first unread message

Artur Gavkaliuk

unread,
Jul 9, 2012, 7:13:40 AM7/9/12
to turbo...@googlegroups.com
Hello
This question was raised several times but I didn't see clear and up-to-date answer.
So, is there any convenient way to map TGController subclass with custom url?
Pylons WSGIController is mapped easily but I would like to have @expose decorator working.
I'm following 'classic' example from app_config:
                    # Add a Samples route
                    map.connect('/samples/', controller='samples', action=index)

                    # Setup a default route for the root of object dispatch
                    map.connect('*url', controller='root', action='routes_placeholder')

Alessandro Molina

unread,
Jul 9, 2012, 7:28:23 AM7/9/12
to turbo...@googlegroups.com
I'm not a routes user, so my answer might be somehow wrong, it is
mostly based on the knowledge that I have of the TurboGears routing
system.

The routes integration was not used by TurboGears itself, was there
due to Pylons and was hijacked to always route to the RootController
which was then in charge of the real routing. This is the reason why
you can only route to Pylons controller using routes and not to
TurboGears one, losing so the TurboGears features like validation,
expose and so on. If you add routes that route to a TurboGears
controller the controller itself will try to route them again,
obviously doing the wrong thing

Somehow you might be able to use routes with validation and expose by
creating a Pylons controller that inherits from
tg.controllers.decoratedcontroller.DecoratedController but keep in
mind that this might break any time in the future.

The TurboGears way to manage regular expression based routing is to
handle them inside the _lookup method and return the actual controller
instance that has to handle them with the remaining part of the url
for which the dispatch has to continue from the returned controller.
> --
> You received this message because you are subscribed to the Google Groups
> "TurboGears" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/turbogears/-/8yXhtPQj6zUJ.
> To post to this group, send email to turbo...@googlegroups.com.
> To unsubscribe from this group, send email to
> turbogears+...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/turbogears?hl=en.

Artur Gavkaliuk

unread,
Jul 9, 2012, 7:42:43 AM7/9/12
to turbo...@googlegroups.com
Thank you for quick answer.
I'm wondering if there is a way to set exact method of controller which should handle request inside _lookup.
And, are _lookup methods called hierarchically (particularly, will root _lookup be called if  the one from mounted controller failed)?

Понеділок, 9 липня 2012 р. 14:28:23 UTC+3 користувач Alessandro Molina написав:
> turbogears+unsubscribe@googlegroups.com.

Artur Gavkaliuk

unread,
Jul 10, 2012, 5:01:44 AM7/10/12
to turbo...@googlegroups.com
Hello
I've found solution and would like to hear your opinion.
It's very basic but could be easily improved.
I've just added next method to my BaseController:
class BaseController(TGController):
........   
    def _perform_call(self, func, args):
        if (func != self.routes_placeholder):
            if hasattr(self, '_before'):
                self._before(*args, **args)
            r = self._call(func, args, remainder=None)
            if hasattr(self, '_after'):
                self._after(*args, **args)
            return r
        else:
            return TGController._perform_call(self, func, args)

Could it be added to original TG code?

Понеділок, 9 липня 2012 р. 14:42:43 UTC+3 користувач Artur Gavkaliuk написав:

Alessandro Molina

unread,
Jul 10, 2012, 6:42:26 AM7/10/12
to turbo...@googlegroups.com
Actually the future TG versions are getting rid of routes by default
as it was a huge performance bottleneck.
So it will make a lot of sense to create a tgext which provides routes
based controller _lookup and so on.
I can give a try at it as soon as I'll have some spare time, but it is
not something will happen soon.

I think your solution should work but probably overriding
_get_dispatchable to return what you need would be a solution that has
to mimic less TG things like setting up i18n, calling _before, _after
and so on as the _call would remain the same.

Both anyway rely a lot on internals of TG that might change in the future
>>> > turbogears+...@googlegroups.com.
>>> > For more options, visit this group at
>>> > http://groups.google.com/group/turbogears?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "TurboGears" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/turbogears/-/5RFVdh94nf8J.
>
> To post to this group, send email to turbo...@googlegroups.com.
> To unsubscribe from this group, send email to
> turbogears+...@googlegroups.com.

Artur Gavkaliuk

unread,
Jul 10, 2012, 7:25:11 AM7/10/12
to turbo...@googlegroups.com
I see.
It'll be grate to have _lookup based routes extension for future tg versions.

Вівторок, 10 липня 2012 р. 13:42:26 UTC+3 користувач Alessandro Molina написав:
>>> > turbogears+unsubscribe@googlegroups.com.
>>> > For more options, visit this group at
>>> > http://groups.google.com/group/turbogears?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "TurboGears" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/turbogears/-/5RFVdh94nf8J.
>
> To post to this group, send email to turbo...@googlegroups.com.
> To unsubscribe from this group, send email to
> turbogears+unsubscribe@googlegroups.com.

Mengu

unread,
Jul 11, 2012, 5:42:39 AM7/11/12
to TurboGears
hi alessandro,

out of curiousity, does telling "hey, if there's a url mapped for this
controller action serve it else map this controller action as the
url." affecting performance that much?

On Jul 10, 1:42 pm, Alessandro Molina <alessandro.mol...@gmail.com>
wrote:
> >>> On Mon, Jul 9, 2012 at 1:13 PM, Artur Gavkaliuk <mandebu...@gmail.com>
Reply all
Reply to author
Forward
0 new messages