Hi Massimo,

I am also not convinced since I'm new to web2py and python, but It works 
fine, as expected in every case I have tested with that little correction 
and a format attribute like this (*nombre* is a *string*, and *precio *is a 
*decimal(2,2):*

format=lambda row: row.nombre + ' - ' + str(row.precio) + '€'

Note that the correction just tries to set the code as in the case of a 
format attribute over a single reference field. I mean, is there a reason 
for thar str() on *list:reference* but not in the case of *reference?*

The chars I'm using are for the spanish language: {áéíóúüñ}, in addition to 
the english alphabet and '€'.

Thanks again for your dedication.




El jueves, 22 de agosto de 2013 02:31:18 UTC-5, Massimo Di Pierro escribió:
>
> I am not sure I am convinced this
>
> return (refs and ', '.join(f(r,x.id) for x in refs) or '')
>
> always works but for now it is in trunk.
>
> On Wednesday, 21 August 2013 19:26:45 UTC-5, juan wrote:
>>
>> The issue wasnt completely resolved that way, there were problems with 
>> list:reference in updates and some weird behaviour, always involving lists 
>> but no simple references, so I debugged my way down to the web2py code and 
>> finally found the problem.
>>
>> In the line 6860 of the file gluon/dal.py, this is written:
>>
>> return (refs and ', '.join(str(f(r,x.id)) for x in refs) or '')
>>
>> Instead, this code below should be written (as is in the case of a non 
>> list reference except for the loop):
>>
>> return (refs and ', '.join(f(r,x.id) for x in refs) or '')
>> [eliminate de str()]
>>
>> This plus the little code stated before solves the encoding problems in 
>> GAE, now all the format attributes work as expected.
>>
>> My version of web2py is 2.5.1-stable+timestamp.2013.06.06.15.39.19
>>
>> I think this change would be OK, I dont know what the developers would 
>> think about this.
>>
>> Thanks Massimo for this great tool.
>>
>> El martes, 20 de agosto de 2013 10:31:13 UTC-5, juan escribió:
>>>
>>> Well, I found a solution for this strangely undocumented issue:
>>>
>>> format=lambda r: r.nombre.decode("utf-8", 'ignore') + ' - ' + 
>>> str(r.precio) + '€'.decode("utf-8", 'ignore')
>>>
>>> Then, using the lambda and decode, it works. Maybe that the 'ignore' 
>>> isn't neccesary, but I left there just in case.
>>>
>>> El lunes, 19 de agosto de 2013 12:26:56 UTC-5, juan escribió:
>>>>
>>>> Thank you Massimo,
>>>>
>>>> but how can it be resolved when the format attribute must represent 
>>>> fields in the database with special chars?. I mean, the hardcoded euro 
>>>> char 
>>>> is the minor problem here.
>>>>
>>>> Thanks
>>>>
>>>>
>>>>
>>>> El jueves, 15 de agosto de 2013 04:07:53 UTC-5, Massimo Di Pierro 
>>>> escribió:
>>>>>
>>>>> replace
>>>>>  format="%(nombre)s - %(precio)s€"
>>>>>
>>>>> with
>>>>>
>>>>>  format= "%(nombre)s - %(precio)s\xe2\x82\xac"
>>>>>
>>>>> because labels mush be in ascii (or utf8) but not unicode.
>>>>>
>>>>> On Wednesday, 14 August 2013 15:57:24 UTC-5, juan wrote:
>>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> It seems that the format option in db.define_table isn't working 
>>>>>> properly when deployed on GAE.
>>>>>>
>>>>>> Please, consider these two tables:
>>>>>>
>>>>>> db.define_table('ingrediente',
>>>>>>                 Field('nombre', 'string', 
>>>>>> requires=IS_NOT_EMPTY(error_message='Se ha de indicar el nombre')),
>>>>>>                 Field('precio', 'decimal(2,2)', 
>>>>>> requires=IS_NOT_EMPTY(error_message='Se ha de indicar el precio'), 
>>>>>> default=1),
>>>>>>                 format="%(nombre)s - %(precio)s")
>>>>>>
>>>>>> db.define_table('bocadillo',
>>>>>>                 Field('nombre', 'string', 
>>>>>> requires=IS_NOT_EMPTY(error_message='Se ha de indicar el nombre')),      
>>>>>>    
>>>>>>           
>>>>>>                 Field('ingredientes', 'list:reference ingrediente', 
>>>>>> comment='Seleccionar los componentes del bocadillo prediseñado usando 
>>>>>> Control+click.'))
>>>>>>
>>>>>> The problem appears only in GAE and happens when some non-english 
>>>>>> character (áéíóú) is in the field name in the first table. It fails to 
>>>>>> render the SQLFORM of the second table. In addition, if I set the first 
>>>>>> table's format to the preferred
>>>>>>
>>>>>>  format="%(nombre)s - %(precio)s€"
>>>>>>
>>>>>> Note the new '€', then it always fails.
>>>>>>
>>>>>> Here is the GAE log:
>>>>>>
>>>>>> Traceback (most recent call last):
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~lapanzaadomicilio-hrd/1.369502662945631224/gluon/restricted.py",
>>>>>>  line 212, in restricted
>>>>>>     exec ccode in environment
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~lapanzaadomicilio-hrd/1.369502662945631224/applications/lapanza/controllers/appadmin.py",
>>>>>>  line 433, in <module>
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~lapanzaadomicilio-hrd/1.369502662945631224/gluon/globals.py",
>>>>>>  line 194, in <lambda>
>>>>>>     self._caller = lambda f: f()
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~lapanzaadomicilio-hrd/1.369502662945631224/applications/lapanza/controllers/appadmin.py",
>>>>>>  line 127, in insert
>>>>>>     form = SQLFORM(db[table], ignore_rw=ignore_rw)
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~lapanzaadomicilio-hrd/1.369502662945631224/gluon/sqlhtml.py",
>>>>>>  line 1140, in __init__
>>>>>>     inp = self.widgets.options.widget(field, default)
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~lapanzaadomicilio-hrd/1.369502662945631224/gluon/sqlhtml.py",
>>>>>>  line 278, in widget
>>>>>>     options = requires[0].options()
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~lapanzaadomicilio-hrd/1.369502662945631224/gluon/validators.py",
>>>>>>  line 553, in options
>>>>>>     self.build_set()
>>>>>>   File 
>>>>>> "/base/data/home/apps/s~lapanzaadomicilio-hrd/1.369502662945631224/gluon/validators.py",
>>>>>>  line 548, in build_set
>>>>>>     self.labels = [self.label % r for r in records]UnicodeDecodeError: 
>>>>>> 'ascii' codec can't decode byte 0xe2 in position 10: ordinal not in 
>>>>>> range(128)
>>>>>>
>>>>>>
>>>>>> Is there anything I missed, or if it's a bug, is there something I 
>>>>>> can do?
>>>>>>
>>>>>> This is my first question and I am totally new to web2py, so please 
>>>>>> if this question is already aswered, I'm sorry to bother you.
>>>>>>
>>>>>> Thank you
>>>>>>
>>>>>>
>>>>>>
>>>>>>

-- 

--- 
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.

Reply via email to