Hi, I updated my trunk version However, The same issue is still
This is the new traceback Traceback (most recent call last): File "/home/drayco/web2py/gluon/restricted.py", line 188, in restricted exec ccode in environment File "/home/drayco/web2py/applications/iscada/models/cfedb.py", line 16, in <module> migrate = False) File "/home/drayco/web2py/gluon/dal.py", line 3471, in define_table sequence_name=sequence_name)) File "/home/drayco/web2py/gluon/dal.py", line 3755, in __init__ "primarykey must be a list of fields from table '%s " % tablename SyntaxError: primarykey must be a list of fields from table 'med_dnpmst_4 SnapShot <type 'exceptions.SyntaxError'>(primarykey must be a list of fields from table 'med_dnpmst_4 ) File /home/drayco/web2py/gluon/dal.py in __init__ at line 3755 Function argument list (self=<Table {'indice': <gluon.dal.Field object at 0x2...ractual': <gluon.dal.Field object at 0x25b25d0>}>, db=<DAL {'_lastsql': "SET sql_mode='NO_BACKSLASH_ES...tables': [], '_migrate': True, '_pool_size': 10}>, tablename='med_dnpmst_4', *fields=[<gluon.dal.Field object>, <gluon.dal.Field object>, <gluon.dal.Field object>, <gluon.dal.Field object>, <gluon.dal.Field object>, <gluon.dal.Field object>, <gluon.dal.Field object>], **args={'primarykey': ['DireccionUTR', 'Indice'], 'sequence_name': None, 'trigger_name': None}) Code listing 3750. 3751. 3752. 3753. 3754. 3755. 3756. 3757. 3758. 3759. if hasattr(self,'_primarykey'): for k in self._primarykey: if k not in self.fields: raise SyntaxError, \ "primarykey must be a list of fields from table '%s " % tablename else: self[k].notnull = True On Jan 28, 8:35 am, Massimo Di Pierro <massimo.dipie...@gmail.com> wrote: > this should now be fixed in trunk > > On Jan 8, 2:58 pm, Thadeus Burgess <thade...@thadeusb.com> wrote: > > > All I know is that tables are issued as lowercase, but you can still access > > your table as an uppercase attribute. > > > There is an inconsistency in the DAL somewhere because of this... Somewhere > > it is forgetting to convert to lower case. I don't know why converting table > > names to lower case is forced in web2py and I disagree with it. > > > for example: > > > db = DAL() > > db.define_table('TableA', Field('Superman')) > > # CREATE TABLE tablea WITH FIELDS superman > > db(db.TableA.Superman == "clark").select().first().Superman > > # SELECT * FROM tablea WHERE superman="clark" > > > -- > > Thadeus > > > On Sat, Jan 8, 2011 at 1:17 AM, mart <msenecal...@gmail.com> wrote: > > > really? I didn't know, thanks for pointing that out... > > > > just out of curiosity.... > > > > in > > > > in __getitem__ > > > return dict.__getitem__(self, str(key)) > > > KeyError: 'tecnogradua' > > > > don't the attribute lookups get done by python ultimately? Just > > > trying to understand... > > > how could this have worked if doing x.__getitem__ ? Even if dal does a > > > string.lower() or something, once the table is named and created, > > > would something (outside of migrate) not catch that error and set off > > > the alarm even before any change need to happen? > > > > Thanks, > > > Mart :) > > > > On Jan 8, 1:44 am, Thadeus Burgess <thade...@thadeusb.com> wrote: > > > > I can also confirm this is a bug with the new DAL. > > > > > It is only caused when using upper case characters in the table or field > > > > names. It seems that web2py converts all of the tablenames to lower case > > > > when issuing the SQL (so your actual tables are lower regardless of what > > > you > > > > specify in the python). There is something in the migrations that cause > > > this > > > > to come up, because it will work just fine one run and crash on another > > > run > > > > after changing some unrelated tables. > > > > > I don't think the DAL should force the tables to lowercase. > > > > > -- > > > > Thadeus > > > > > On Sat, Jan 8, 2011 at 12:38 AM, mart <msenecal...@gmail.com> wrote: > > > > > no, this is python... > > > > > > not sure how it could have worked before, but the key (technogradua) > > > > > in .keys() is not being picked up... dal is simply pointing that out > > > > > with the exception being thrown. I did notice when I made the switch > > > > > that a few more of my mistakes got picked up (or it could be that I > > > > > forgot that I changed something), but regardless... since switching to > > > > > the latest DAL release and fixing my mistakes that it quickly picked > > > > > up, I have had no problems (except those that I cause). I would simply > > > > > take those exceptions for cash, change the case and enjoy one less > > > > > exception ;) > > > > > > Mart :) > > > > > > On Jan 8, 1:19 am, drayco <antrod...@gmail.com> wrote: > > > > > > Ok, I understand your point. > > > > > > > But this is a issue of DAL or what? > > > > > > > because I only update web2py to trunk version > > > > > > > On Jan 8, 12:15 am, mart <msenecal...@gmail.com> wrote: > > > > > > > > Probably just being unhappy with the case :) > > > > > > > > tecnoGradua != tecnogradua > > > > > > > > Mart :) > > > > > > > > Field("tecnoGradua", 'string', > > > > > > > > On Jan 8, 12:57 am, drayco <antrod...@gmail.com> wrote: > > > > > > > > > Hi, this code works with web2py 1.89.5 with mysql > > > > > > > > > but with web2py in trunk and mysql it dosent works. > > > > > > > > > db.define_table("lentes", > > > > > > > > audit, > > > > > > > > Field("tecnoGradua", 'string', > > > > requires=IS_IN_SET(['MONOFOCAL','BIFOCAL','MULTIFOCAL']),label="Num. > > > > > > > > de Graduaciones"), > > > > > > > > Field("material", "string", requires=IS_IN_SET(['MICA > > > > > CR-39','ORMA > > > > > > > > 1.50','HIGH INDEX','THIN & LITE 1.67 > > > > > > > > ASFÉRICA','POLICARBONATO','CRISTAL'])), > > > > > > > > Field("tipo", "string",requires=IS_NULL_OR(IS_IN_SET(['FLAT > > > > > > > > TOP','BLEND O YOUNGER','PROGRESIVOS','PROGRESIVOS VARILUX > > > > > > > > COMFORT > > > > > > > > NE','PROGRESIVOS COMPACTOS','PROGRESIVOS VARILUX COMFORT > > > SHORT']))), > > > > > > > > Field("tecnoVisual", > > > > 'string',requires=IS_NULL_OR(IS_IN_SET(['PHOTOGRAY','TRANSITIONS'])),label= > > > > > "Tecnologia > > > > > > > > de Visualización"), > > > > > > > > Field("tratamiento", > > > "string",requires=IS_NULL_OR(IS_IN_SET(['CON > > > > > > > > ANTIRREFLEJANTE','ESPEJEADO','CRIZAL FORTE','CRIZAL ALIZÉ']))), > > > > > > > > Field('limitup','double', writable=False, readable=False), > > > > > > > > Field('limitdown','double', writable=False, readable=False), > > > > > > > > Field("promo", "double", > > > requires=[IS_NOT_EMPTY(error_message='No > > > > > > > > puede estar > > > > > > > > vacio'),IS_FLOAT_IN_RANGE(0,10000,error_message='Debe > > > ser > > > > > > > > un numero positivo entre 0 y 10000')], label='Precio de > > > Promoción'), > > > > > > > > Field("precio", "double", writable=False, readable=False), > > > > > > > > Field("costo", "double", writable=False, readable=False), > > > > > > > > Field("observaciones","text", writable=False, > > > readable=False)) > > > > > > > > > This is the traceback > > > > > > > > > Traceback (most recent call last): > > > > > > > > File "/home/drayco/web2py/gluon/restricted.py", line 188, in > > > > > > > > restricted > > > > > > > > exec ccode in environment > > > > > > > > File "/home/drayco/web2py/applications/movil/models/db.py", > > > line > > > > > > > > 272, in <module> > > > > > > > > Field("observaciones","text", writable=False, > > > readable=False)) > > > > > > > > File "/home/drayco/web2py/gluon/dal.py", line 3441, in > > > define_table > > > > > > > > polymodel=polymodel) > > > > > > > > File "/home/drayco/web2py/gluon/dal.py", line 551, in > > > create_table > > > > > > > > fake_migrate=fake_migrate) > > > > > > > > File "/home/drayco/web2py/gluon/dal.py", line 595, in > > > migrate_table > > > > > > > > and not isinstance(table[key].type, SQLCustomType) \ > > > > > > > > File "/home/drayco/web2py/gluon/dal.py", line 3778, in > > > __getitem__ > > > > > > > > return dict.__getitem__(self, str(key)) > > > > > > > > KeyError: 'tecnogradua' > > > > > > > > > Can I need to change something? > >