Il 03/02/2012 11:03, Bruno Rocha ha scritto:
look the code in dal.py referencing check_reserved, you can copy
patterns and dicts from there in to your validator.
http://zerp.ly/rochacbruno
ok thanks again Bruno,
I solved defining this subsequent custom validator with some cut&paste
code from dal.py as suggested:
in modules/plugin_metadb.py
from dal import regex_python_keywords
from validators import Validator, translate
class IS_VALID_SQL_TABLE_NAME(Validator):
def __init__(self, db, check_reserved='common'):
self.db = db
self.check_reserved = check_reserved
if self.check_reserved:
from reserved_sql_keywords import ADAPTERS as RSK
self.RSK = RSK
def check_reserved_keyword(self, name):
"""
Validates ``name`` against SQL keywords
Uses self.check_reserve which is a list of
operators to use.
self.check_reserved
['common', 'postgres', 'mysql']
self.check_reserved
['all']
"""
for backend in self.check_reserved:
if name.upper() in self.RSK[backend]:
raise SyntaxError, 'invalid table/column name "%s" is a
"%s" reserved SQL keyword' % (name, backend.upper())
def __call__(self, value):
if value.startswith('_') or hasattr(self.db,value.lower()) or \
regex_python_keywords.match(value):
return (value, translate('invalid table name: %s' % value))
elif value.lower() in self.db.tables:
return (value, translate('table already defined: %s' % value))
elif self.check_reserved:
try:
self.check_reserved_keyword(value)
except Exception, error:
return (value, translate(str(error)))
else:
return (value, None)
I hope it could be usefull to someone else.
Cheers
Manuele