I hope someone here can suggest a good way of handling this situation.

We have an application that supports a given user profile view via two or 
more possible URL patterns:

   "/users/{username_regex}"
   "/users/{userid_regex}"

To handle this within one route declaration, a `factory` is used:

        config.add_route("user_focus", "/users/{user_identifier}", 
factory=factory__useraccount)

The factory does regex on the `user_identifier` placeholder, and updates 
the request matchdict with an extracted `user_name` or `user_id`. this 
works perfect and allows us to avoid this:

        config.add_route("user_focus_a", "/users/{username_identifier}")
        config.add_route("user_focus_b", "/users/{userid_identifier}")

we also avoid using view_config to register 2 routes onto each callable


We've added some new functionality, and I'm having a problem figuring out 
the best way to implement it.

users matching a particular new format of the `user_identifier` placeholder 
need to respond to another route

there are essentially 4 potential patterns

        config.add_route("usertype_a_focus_username", 
"/users/{username_A_regex}")
        config.add_route("usertype_a_focus_userid", 
"/users/{userid_A_regex}")
        config.add_route("usertype_b_focus_username", 
"/users/{username_B_regex}")
        config.add_route("usertype_b_focus_userid", 
"/users/{userid_B_regex}")

ideally i'd love to simplify this into 2 routes, as they map to 2 views. 
something like:

        config.add_route("usertype_a_focus", 
"/users/{usertype_a_identifier}", ...)
        config.add_route("usertype_b_focus", 
"/users/{usertype_b_identifier}", ...)

the problem with the approach is that `usertype_a_focus` grabs the route,  
and the `factory` (to my knowledge) can only raise a not-found - not fail 
the lookup and continue on to future patterns - so `usertype_b_focus` never 
runs.

it looks like I could do this by running a regex in the placeholder, but 
then I'm running it again in the factory to alter the matchdict. that will 
also require duplicating an already complied regex into the pattern syntax 
for the route.  the app is large, so I'd like to avoid having to keep two 
different regex patterns in sync with one another.

does anyone know if it is possible to better use factory, or implement some 
other amazing Pyramid utility like predicates or something else in this 
situation?

thank you all in advance.

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to pylons-discuss+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pylons-discuss/d603ef95-b391-43e2-8c2f-82132fc1f952%40googlegroups.com.

Reply via email to