ok, after some work, here's the patch. Massimo, I tried to follow your way, hope you like it. The code is made in non strict way, so it shouldn't break at the first non valid input.
URL() in meta-menu plugin_wiki patch: http://www.speedyshare.com/files/26117790/url-in-meta-menu_plugin_wiki.patch Best regards On Jan 5, 1:53 pm, Jonathan Lundell <[email protected]> wrote: > On Jan 5, 2011, at 2:25 AM, blackthorne wrote: > > > > > ok > > > What about the menu option "/Computer /option", wouldn it be caught by > > the same regex currently used? > > I haven't been following this thread too closely, but all this stuff should > be fine in vars. Question marks, slashes, spaces--all ought to be escaped. > The only problem, IIRC, is '+', since I believe that quote-plus is being used > for vars. > > If the regex doesn't handle it right, the new router will (or I'll fix it). > > > > > > > On Jan 5, 1:07 am, mdipierro <[email protected]> wrote: > >> No it would not because ? is not allowed in args. > > >> On Jan 4, 5:58 pm, blackthorne <[email protected]> wrote: > > >>> there I'm just giving you counter-examples that may break that > >>> notation. > >>> On your second question, the / on the right of = would be an argument > >>> 'a' with '/Computer /option' just without quotes as they are optional. > >>> Making a regular expression for that seems very hard, a real parser > >>> would be required. > > >>> My point is that those rules even if well implemented, can fail in > >>> predictable ways. > > >>> So, should I go ahead for it or reconsider other options such as my > >>> suggestion based on newlines? > > >>> On Jan 4, 10:20 pm, mdipierro <[email protected]> wrote: > > >>>> I do not understand the notation you propose. Are you suggesting a= to > >>>> specify args? Why the / on the right of =? > > >>>> On Jan 4, 3:55 pm, blackthorne <[email protected]> wrote: > > >>>>> what if? > >>>>> menu item path possible arg > >>>>> /Computer_option /path/function?a=/Computer /option > >>>>> /Computer /option /path/function?a='/Computer /option' > >>>>> /Computer_option page:computer > > >>>>> I'm complicating, I know but I'm sure that could find more realistic > >>>>> examples to fit these real possibilities. > > >>>>> On Jan 4, 9:39 pm, mdipierro <[email protected]> wrote: > > >>>>>> I mean > > >>>>>> page_name /controller/action/arg1/arg2?a='Hello Computer'&b=5 > >>>>>> page_name /controller/action/arg1/arg2?a=Hello+Computer&b=5 > > >>>>>> Should be equivalent. So the code should: > >>>>>> 0) If path starts with / > >>>>>> 1) use regex to find "'(?P<x>.*(?<!\\\\))'" and replace with > >>>>>> urllib.quote(math.group('x')) > >>>>>> 2) break the URL into controller, action, everything-else > >>>>>> 3) rebuild the url using URL(..) (in case routes is being used) > > >>>>>> Not too easy but should do it. > > >>>>>> On Jan 4, 3:33 pm, blackthorne <[email protected]> wrote: > > >>>>>>> sure, I'm just not sure what you mean with optional quotes. > > >>>>>>> e.g.: > >>>>>>> page_name /controller/action/arg1/arg2?a='Welcome page2' > >>>>>>> /Computers /controller/action/arg1/arg2?a=Hello Computer > > >>>>>>> should become: > >>>>>>> page_name -> /controller/action/arg1/arg2?a='Welcome page2' > >>>>>>> /Computers -> /controller/action/arg1/arg2?a='Hello Computer' > > >>>>>>> like this? > > >>>>>>> On Jan 4, 5:47 pm, mdipierro <[email protected]> wrote: > > >>>>>>>> I think we can go this way: > > >>>>>>>> page_name /controller/action/arg1/arg2?a='Welcome page2' > > >>>>>>>> but I would make so that the quotes optional (if provided content > >>>>>>>> will > >>>>>>>> be replaced by urllib.quote(content). > > >>>>>>>> Would you send me a revised patch? > > >>>>>>>> On Jan 4, 11:21 am, blackthorne <[email protected]> wrote: > > >>>>>>>>> Well, I see your view. > > >>>>>>>>> In some cases, you can just use %20 instead of white space but not > >>>>>>>>> if > >>>>>>>>> that is part of the argument. > >>>>>>>>> example:http://prernalal.com/banned%20books/==http://prernalal.com/banned > >>>>>>>>> books/ - validhttp://example.com/?page="banned%20books" > >>>>>>>>> !=http://example.com/?page="banned > >>>>>>>>> books" - not valid > > >>>>>>>>> I think this character separation (white space) for meta-menu is way > >>>>>>>>> too common. It's likely that the limitations won't stick with my > >>>>>>>>> examples. An option to define it manually would solve it for all > >>>>>>>>> cases, even if not by convention. > > >>>>>>>>> Aanother idea would be using newlines. One for different parts, two > >>>>>>>>> for different options, e.g: > >>>>>>>>> page_name > >>>>>>>>> /controller/action/arg1/arg2?a='Welcome page' > > >>>>>>>>> page_name2 > >>>>>>>>> page_name /controller/action/arg1/arg2?a='Welcome page2' > > >>>>>>>>> This way it's clean, almost fail-proof and leaves you room to add > >>>>>>>>> things with an arbitrary number of arguments/parts. > > >>>>>>>>> On the other hand, your latest suggestion doesn't require any > >>>>>>>>> change, > >>>>>>>>> which is a plus. > > >>>>>>>>> On Jan 4, 4:59 pm, mdipierro <[email protected]> wrote: > > >>>>>>>>>> This is a big can of worms... Do we really need to pass vars? > > >>>>>>>>>> On Jan 4, 10:45 am, blackthorne <[email protected]> wrote: > > >>>>>>>>>>> sorry, I was considering on using the same code to the wiki pages > >>>>>>>>>>> in > >>>>>>>>>>> the markmin syntax so that you could also make this kind of links > >>>>>>>>>>> in > >>>>>>>>>>> wiki pages. > >>>>>>>>>>> [[namehttp://example.com, args=[], vars={}]] > > >>>>>>>>>>> Other thing, you might want to consider... > >>>>>>>>>>> check your example > >>>>>>>>>>> page_name /controller/action/arg1/arg2?a=b > > >>>>>>>>>>> instead of b if you have a string such as 'welcome page', it won't > >>>>>>>>>>> work because of the white space. > >>>>>>>>>>> page_name /controller/action/arg1/arg2?a='Welcome page' > > >>>>>>>>>>> idea: > >>>>>>>>>>> changing the meta-menu separator character to '|' or '||' > > >>>>>>>>>>> example: > >>>>>>>>>>> page_name|/controller/action/arg1/arg2?a='Welcome page' > > >>>>>>>>>>> On Jan 4, 4:33 pm, mdipierro <[email protected]> wrote: > > >>>>>>>>>>>> Are we still talking about menu links? Why should a menu item > >>>>>>>>>>>> perform > >>>>>>>>>>>> a post? > > >>>>>>>>>>>> On Jan 4, 10:31 am, blackthorne <[email protected]> wrote: > > >>>>>>>>>>>>> fine with me > > >>>>>>>>>>>>> any solution for POST method? > > >>>>>>>>>>>>> On Jan 4, 4:25 pm, mdipierro <[email protected]> wrote: > > >>>>>>>>>>>>>> I have no objection to local URL. but the author of the menu > >>>>>>>>>>>>>> may not > >>>>>>>>>>>>>> be the administrator therefore we cannot eval(...) text in the > >>>>>>>>>>>>>> meta- > >>>>>>>>>>>>>> menu. This poses restrictions on what we can put in there. I > >>>>>>>>>>>>>> suggest > >>>>>>>>>>>>>> we just allow > > >>>>>>>>>>>>>> page_name /controller/action/arg1/arg2?a=b > > >>>>>>>>>>>>>> and if this starts with / this is interpreted as a local URL. > >>>>>>>>>>>>>> No need > >>>>>>>>>>>>>> to specify app name. > > >>>>>>>>>>>>>> On Jan 4, 10:09 am, blackthorne <[email protected]> > >>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>> no local urls for secure mode... yes/no? > > >>>>>>>>>>>>>>> On Jan 4, 3:51 pm, mdipierro <[email protected]> wrote: > > >>>>>>>>>>>>>>>> There cannot be eval in there. The plugin may be in level=1 > >>>>>>>>>>>>>>>> (secure > >>>>>>>>>>>>>>>> mode). > > >>>>>>>>>>>>>>>> On Jan 4, 8:38 am, blackthorne <[email protected]> > >>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>> Broken here: > >>>>>>>>>>>>>>>>> In [21]: url="\'f\',args=[\'x\',\'y\'],vars=dict(z=\'t\')" > > >>>>>>>>>>>>>>>>> In [22]: [part.strip('\'').strip('\"') for part in > >>>>>>>>>>>>>>>>> url[4:].split(',')] > >>>>>>>>>>>>>>>>> Out[22]: ["args=['x", "y']", "vars=dict(z='t')"] > > >>>>>>>>>>>>>>>>> Just use: > >>>>>>>>>>>>>>>>> elif url.lower().startswith('url:'): > >>>>>>>>>>>>>>>>> url=eval("URL(" + url[4:] + ")") > > >>>>>>>>>>>>>>>>> This was my first solution, it works well with args and > >>>>>>>>>>>>>>>>> vars. > >>>>>>>>>>>>>>>>> This case works, tested against: > >>>>>>>>>>>>>>>>> Home url:'homepage','plugin_wiki','index' > >>>>>>>>>>>>>>>>> Articles page:articles > >>>>>>>>>>>>>>>>> Links url:'homepage','default','links' > >>>>>>>>>>>>>>>>> Test url:'f',args=['x','y'],vars=dict(z='t') > >>>>>>>>>>>>>>>>> Projects url:'f',args=['x','y'] > > >>>>>>>>>>>>>>>>> Generated:http://127.0.0.1:8000/homepage/plugin_wiki/indexhttp://127.0.0.1:8000... > > >>>>>>>>>>>>>>>>> The only small gotcha is white space absence being required > >>>>>>>>>>>>>>>>> because of > >>>>>>>>>>>>>>>>> the regular expression being used to "parse" the meta-menu > >>>>>>>>>>>>>>>>> lines... > > >>>>>>>>>>>>>>>>> On Jan 4, 1:13 pm, blackthorne <[email protected]> > >>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>> That way, you can use URL() to pass args [] and vars {} > >>>>>>>>>>>>>>>>>> under the > >>>>>>>>>>>>>>>>>> web2py way. Have to test it though... > > >>>>>>>>>>>>>>>>>> On Jan 4, 12:24 pm, mdipierro <[email protected]> > >>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>> but why not simply > > >>>>>>>>>>>>>>>>>>> url:homepage/plugin_wiki/index > > >>>>>>>>>>>>>>>>>>> or > > >>>>>>>>>>>>>>>>>>> localurl:homepage/plugin_wiki/index > > >>>>>>>>>>>>>>>>>>> and no quotes? > > >>>>>>>>>>>>>>>>>>> On Jan 4, 6:00 am, blackthorne <[email protected]> > >>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>> instead of having common strings ready to be passed as > >>>>>>>>>>>>>>>>>>>> arguments, you > >>>>>>>>>>>>>>>>>>>> would get strings that contain quotes in it. I guess... > > >>>>>>>>>>>>>>>>>>>> Consider my example: > >>>>>>>>>>>>>>>>>>>> home url:'homepage','plugin_wiki','index' > > >>>>>>>>>>>>>>>>>>>> you will get: > >>>>>>>>>>>>>>>>>>>> In [9]: url="url:\'homepage\',\'plugin_wiki\',\'index\'" > > >>>>>>>>>>>>>>>>>>>> In [10]: [part.strip('\'') for part in > >>>>>>>>>>>>>>>>>>>> url[4:].split(',')] > >>>>>>>>>>>>>>>>>>>> Out[10]: ['homepage', 'plugin_wiki', 'index'] > > >>>>>>>>>>>>>>>>>>>> In [11]: [part for part in url[4:].split(',')] > >>>>>>>>>>>>>>>>>>>> Out[11]: ["'homepage'", "'plugin_wiki'", "'index'"] > > >>>>>>>>>>>>>>>>>>>> Best regards > > >>>>>>>>>>>>>>>>>>>> On Jan 4, 11:49 am, mdipierro <[email protected]> > >>>>>>>>>>>>>>>>>>>> wrote:... > > >> read more »

