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

Reply via email to