was a yatl bug in len(XML('')) 
now fixed in yatl

On Saturday, 15 June 2019 00:56:45 UTC-7, 黄祥 wrote:
>
> *work in web2py*
> def json_row_as_list():
>     if not request.env.request_method == 'GET': raise HTTP(403)
>     import json
>     table_name = request.args(0)
>     id = request.args(1)
>     if id.isdigit() and int(id) > 0:
>         query = (db[table_name]['id'] == id)
>     else:
>         query = (db[table_name]['id'] > 0)
>     rows = db(query).select()
>     json_list = json.dumps(rows.as_list(), default = str, sort_keys = True
> )
>     return dict(data = XML(json_list) )
>
> *in web3py return an error when using XML() helper, but when not using 
> XML() helper it works fine in web3py*
> *code*
> from yatl.helpers import XML
> @action('api/json_row_as_list/<table_name>/<id>', method = 'GET')
> @action.uses(db)
> def json_row_as_list(table_name, id):
>     import json
>     if id.isdigit() and int(id) > 0:
>         query = (db[table_name]['id'] == id)
>     else:
>         query = (db[table_name]['id'] > 0)
>     row = db(query).select()
>     json_list = json.dumps(row.as_list(), default = str, sort_keys = True)
>     return dict(data = XML(json_list) )
>
> *result*
> ERROR:root:Traceback (most recent call last):
>   File "/Users/sugizo/learn/python/web3py/web3py/core.py", line 416, in 
> wrapper
>     ret = dumps(ret)
>   File "/Users/sugizo/learn/python/web3py/web3py/core.py", line 157, in 
> dumps
>     return json.dumps(obj, default=objectify, sort_keys=sort_keys, indent=
> indent)
>   File 
> "/Users/sugizo/miniconda3/envs/python3_test/lib/python3.7/json/__init__.py"
> , line 238, in dumps
>     **kw).encode(obj)
>   File 
> "/Users/sugizo/miniconda3/envs/python3_test/lib/python3.7/json/encoder.py"
> , line 201, in encode
>     chunks = list(chunks)
>   File 
> "/Users/sugizo/miniconda3/envs/python3_test/lib/python3.7/json/encoder.py"
> , line 431, in _iterencode
>     yield from _iterencode_dict(o, _current_indent_level)
>   File 
> "/Users/sugizo/miniconda3/envs/python3_test/lib/python3.7/json/encoder.py"
> , line 405, in _iterencode_dict
>     yield from chunks
>   File 
> "/Users/sugizo/miniconda3/envs/python3_test/lib/python3.7/json/encoder.py"
> , line 438, in _iterencode
>     o = _default(o)
>   File "/Users/sugizo/learn/python/web3py/web3py/core.py", line 146, in 
> objectify
>     return list(obj)
>   File 
> "/Users/sugizo/miniconda3/envs/python3_test/lib/python3.7/site-packages/yatl/helpers.py"
> , line 226, in __len__
>     return len(str(self))
>   File 
> "/Users/sugizo/miniconda3/envs/python3_test/lib/python3.7/site-packages/yatl/helpers.py"
> , line 226, in __len__
>     return len(str(self))
>   File 
> "/Users/sugizo/miniconda3/envs/python3_test/lib/python3.7/site-packages/yatl/helpers.py"
> , line 226, in __len__
>     return len(str(self))
>   [Previous line repeated 482 more times]
> RecursionError: maximum recursion depth exceeded while calling a Python 
> object
>
> *code*
> from yatl.helpers import XML
> @action('api/json_row_as_list/<table_name>/<id>', method = 'GET')
> @action.uses(db)
> def json_row_as_list(table_name, id):
>     import json
>     if id.isdigit() and int(id) > 0:
>         query = (db[table_name]['id'] == id)
>     else:
>         query = (db[table_name]['id'] > 0)
>     row = db(query).select()
>     json_list = json.dumps(row<span style="color: #660;" class="s
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/bc03d136-fb59-4222-b93b-11b2d336d940%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to