Re: [web2py] Invalid request with special chars in URL

2013-09-11 Thread Wonton
Hello!

Sorry for answering myself, but I've been working on this problem without 
success. This time I've tried with this post:

https://groups.google.com/forum/#!msg/web2py/JZSL1R9J-C0/qsZ32kVfhGAJ

Following Massimo advise in that post I've done this:

This is my Routes.py:

#!/usr/bin/python
# -*- coding: utf-8 -*-
routes_in = (('/myapp/default/public_call/json/public_function_1/$1/$2/$3', 
'/myapp/default/public_call/json/public_function_1?var1=$1var2=$2var3=$3'
), ('/myapp/default/private_call/json/private_function_1/$1/$2', 
'/myapp/default/private_call/json/private_function_1?var1=$1var2=$2'))



And this is my default.py:

...
public_services=Service()
private_services=Service()
...
def public_call(): 
return public_services()


@auth.requires_login()
def private_call(): 
return private_services()
...
@public_services.json
def public_function_1():
var1 = request.vars.var1
var2 = request.vars.var2
var3 = request.vars.var3
print var1
print var2
print var3
...


@private_services.json
def private_function_1():
var1 = request.vars.var1
var2 = request.vars.var2
print var1
print var2
...


But the output in both cases is

None
None
None

and 

None
None

What am I doing wrong??

On Thursday, September 5, 2013 9:54:09 PM UTC+2, Wonton wrote:


 Arrgh! I must be missing something, I'm very sorry :-(.

 I've tried this:

 - No changes. The site is working correctly except for the special chars.
 - I've created in web2py root directory the routes.py file with this 
 content:

 routes_apps_raw=['myapp']

 -I've restarted web2py.
 - My app is not working anymore. All request are getting an invalid 
 request error.
 - I've edited routes.py, now it contains:

 #!/usr/bin/python
 # -*- coding: utf-8 -*-
 routes_apps_raw=['myapp']

 -I've restarted web2py.
 - My app is not working yet, all request are invalid.
 -I've deleted routes.py file.
 -I've restarted web2py.
 -My app is working correctly except for the special chars.

 So, I'm sure I'm doing anythong very wrong. Besides creating the routes.py 
 file, should I change any other thing in my controllers?

 Thank you very much again!




-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
web2py-users group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: [web2py] Invalid request with special chars in URL

2013-09-05 Thread Jonathan Lundell
On 5 Sep 2013, at 12:11 AM, Wonton rferb...@gmail.com wrote:
 Hello Marcio,
 
 First of all, thank you so much for your answer, I haven thought on that 
 possibility and it's very interesting.
 
 However, I have a huge number of services and I often test them manually, so 
 I would like to maintain the URLs as readable as possible. I would like to 
 try first with the routes.py solution, disabling the args validation for my 
 app. But I will keep in mind your solution.

Did you restart web2py after changing routes.py? routes_apps_raw ought to do 
what you want.

When your app is in the routes_apps_raw list, your args string (eg 
'json/public_function/...') is in request.raw_args (as usual) and request.args 
is None. It's then the responsibility of your app (and you can do this in your 
model if you like) to validate and parse request.raw_args, and (if you want to) 
put the results in request.args as a List() object.

Putting routes.py in the wrong place (it should be in the web2py root) or 
changing it without restarting is the most common reason for trouble with 
routes.py.

(As an alternative you can use the parametric router and specify your own 
validation regex for args: args_match.)

 
 Kind regards!
 
 On Thursday, September 5, 2013 3:50:17 AM UTC+2, Marcio Andrey Oliveira wrote:
 Can't you send encoded parameters (say in Bas64 or hexadecimal) and decode 
 them inside the methods?
 
 Regards.
 
 On Wednesday, September 4, 2013 8:24:26 PM UTC-3, Wonton wrote:
 Hello everyone!
 
 I've developed a web2py backend which is given me problems with special chars 
 in URLs. I'm a newbie with web2py so maybe I'm missing something very easy, 
 sorry if that is the case ;-).
 
 These are the details of my app.
 
 - I have no routes.py file.
 
 - In controllers/default.py I have this:
 
 
 ...
 public_services=Service()
 private_services=Service()
 ...
 def public_call(): 
 return public_services()
 
 @auth.requires_login()
 def private_call(): 
 return private_services()
 ...
 @public_services.json
 def public_function_1(var1, var2, var3):
 ...
 @private_services.json
 def private_function_1(var1, var2):
 ...
 
 
 - I call these methods this way:
 
 http://mydomain/myapp/default/public_call/json/public_function_1/var1/var2/var3
 http://mydomain/myapp/default/private_call/json/private_function_1/var1/var2
 
 - Everything is working except if my URL contains special chars, (var1, var2 
 or var3 can contain 'ñ' or accents, coded with %...) then I get an invalid 
 request error.
 
 - After reading all posts related to this issue I'm a bit lost, sorry. I've 
 tried to create a routes.py and the only line inside it is this:
 routes_apps_raw=['myapp']
 
 But obviously this is not enough because I have the same problem yet.
 
 Besides this, I don't understand the request.raw_args thing, am I supposed 
 to do anything with that? I can't see any request.raw_args in my code.
 
 Thank you very much and kind regards!
 
 
 -- 
  



-- 

--- 
You received this message because you are subscribed to the Google Groups 
web2py-users group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: [web2py] Invalid request with special chars in URL

2013-09-05 Thread Wonton
Arrgh! I must be missing something, I'm very sorry :-(.

I've tried this:

- No changes. The site is working correctly except for the special chars.
- I've created in web2py root directory the routes.py file with this 
content:

routes_apps_raw=['myapp']

-I've restarted web2py.
- My app is not working anymore. All request are getting an invalid 
request error.
- I've edited routes.py, now it contains:

#!/usr/bin/python
# -*- coding: utf-8 -*-
routes_apps_raw=['myapp']

-I've restarted web2py.
- My app is not working yet, all request are invalid.
-I've deleted routes.py file.
-I've restarted web2py.
-My app is working correctly except for the special chars.

So, I'm sure I'm doing anythong very wrong. Besides creating the routes.py 
file, should I change any other thing in my controllers?

Thank you very much again!

On Thursday, September 5, 2013 4:45:11 PM UTC+2, Jonathan Lundell wrote:

 On 5 Sep 2013, at 12:11 AM, Wonton rfer...@gmail.com javascript: 
 wrote:

 Hello Marcio,

 First of all, thank you so much for your answer, I haven thought on that 
 possibility and it's very interesting.

 However, I have a huge number of services and I often test them manually, 
 so I would like to maintain the URLs as readable as possible. I would like 
 to try first with the routes.py solution, disabling the args validation for 
 my app. But I will keep in mind your solution.


 Did you restart web2py after changing routes.py? routes_apps_raw ought to 
 do what you want.

 When your app is in the routes_apps_raw list, your args string (eg 
 'json/public_function/...') is in request.raw_args (as usual) and 
 request.args is None. It's then the responsibility of your app (and you can 
 do this in your model if you like) to validate and parse request.raw_args, 
 and (if you want to) put the results in request.args as a List() object.

 Putting routes.py in the wrong place (it should be in the web2py root) or 
 changing it without restarting is the most common reason for trouble with 
 routes.py.

 (As an alternative you can use the parametric router and specify your own 
 validation regex for args: args_match.)


 Kind regards!

 On Thursday, September 5, 2013 3:50:17 AM UTC+2, Marcio Andrey Oliveira 
 wrote:

 Can't you send encoded parameters (say in Bas64 or hexadecimal) and 
 decode them inside the methods?

 Regards.

 On Wednesday, September 4, 2013 8:24:26 PM UTC-3, Wonton wrote:

 Hello everyone!

 I've developed a web2py backend which is given me problems with special 
 chars in URLs. I'm a newbie with web2py so maybe I'm missing something very 
 easy, sorry if that is the case ;-).

 These are the details of my app.

 - I have no routes.py file.

 - In controllers/default.py I have this:


 ...
 public_services=Service()
 private_services=Service()
 ...
 def public_call(): 
 return public_services()

 @auth.requires_login()
 def private_call(): 
 return private_services()
 ...
 @public_services.json
 def public_function_1(var1, var2, var3):
 ...
 @private_services.json
 def private_function_1(var1, var2):
 ...


 - I call these methods this way:

 http://mydomain/myapp/default/public_call/json/
 public_function_1/var1/var2/var3
 http://mydomain/myapp/default/private_call/json/
 private_function_1/var1/var2

 - Everything is working except if my URL contains special chars, (var1, 
 var2 or var3 can contain 'ñ' or accents, coded with %...) then I get an 
 invalid request error.

 - After reading all posts related to this issue I'm a bit lost, sorry. 
 I've tried to create a routes.py and the only line inside it is this:
 routes_apps_raw=['myapp']

 But obviously this is not enough because I have the same problem yet.

 Besides this, I don't understand the request.raw_args thing, am I 
 supposed to do anything with that? I can't see any request.raw_args in my 
 code.

 Thank you very much and kind regards!


 -- 
  






-- 

--- 
You received this message because you are subscribed to the Google Groups 
web2py-users group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.