示例#1
0
class AddTipoItem(AddRecordForm):
    """ Define el formato del formulario para crear un nuevo tipo de ítem"""
    __model__ = TipoItem
    __omit_fields__ = ['id', 'fase', 'id_fase', 'items', 'caracteristicas']
    nombre = All(NotEmpty(), ValidarExpresion(r'^[A-Za-z][A-Za-z0-9 ]*$'), \
            Unico())
    codigo = All(NotEmpty(), ValidarExpresion(r'^[A-Za-z][A-Za-z]*$'), \
            MaxLength(2), MinLength(2), CodigoUnico())
示例#2
0
class AddProyecto(AddRecordForm):
    """ Define el formato del formulario para crear un nuevo proyecto"""
    __model__ = Proyecto
    __omit_fields__ = ['id', 'fases', 'fichas', 'estado', 'fecha_inicio', \
                      'fecha_fin']
    nombre = All(NotEmpty(), ValidarExpresion(r'^[A-Za-z][A-Za-z0-9 ]*$'), \
            Unico())
    nro_fases = All(NotEmpty(), Int(min=0))
    __dropdown_field_names__ = {'lider': 'nombre_usuario'}
示例#3
0
class RegisterSchema(Schema):
    filter_extra_fields = True
    allow_extra_fields = True
    name = validators.UnicodeString(not_empty=True, strip=True)
    nickname = validators.PlainText(strip=True,
                                    if_empty='',
                                    if_missing='',
                                    if_invalid='')
    gender = validators.Int(min=0,
                            max=3,
                            if_empty=0,
                            if_missing=0,
                            if_invalid=0)
    email = All(validators.Email(not_empty=True, strip=True), UniqueEmail())
    phoneNumber = national.USPhoneNumber(strip=True,
                                         if_empty='',
                                         if_missing='',
                                         if_invalid='')
    password = validators.String(not_empty=True)
    graduationYear = validators.Int(min=1967, not_empty=True)
    biography = validators.UnicodeString(strip=True,
                                         if_empty=u'',
                                         if_missing=u'',
                                         if_invalid=u'')
    active = validators.StringBool(if_empty=False,
                                   if_missing=False,
                                   if_invalid=False,
                                   strip=True)
    recaptcha_challenge_field = validators.String(strip=True, not_empty=True)
    recaptcha_response_field = RecaptchaValidator(strip=True, not_empty=True)
    _csrf = validators.String(strip=True, not_empty=True)
示例#4
0
class EditTipoItem(EditableForm):
    """ 
    Define el formato del formulario para la modificación de un tipo de ítem
    """
    __model__ = TipoItem
    __hide_fields__ = ['id', 'fase', 'items', 'caracteristicas', 'codigo']
    nombre = All(NotEmpty(), ValidarExpresion(r'^[A-Za-z][A-Za-z0-9 ]*$'), \
            Unico())
示例#5
0
class AddFase(AddRecordForm):
    """ Define el formato de la tabla para agregar fases.
    """
    __model__ = Fase
    __omit_fields__ = ['id', 'proyecto', 'lineas_base', 'fichas', \
                    'tipos_item', 'id_proyecto', 'estado', 'fecha_inicio','fecha_fin']
    orden = OrdenFieldNew
    nombre = All(NotEmpty(), ValidarExpresion(r'^[A-Za-z][A-Za-z0-9 ]*$'), \
            Unico())
示例#6
0
class EditFase(EditableForm):
    """ Define el formato de la tabla para editar fases.
    """
    __model__ = Fase
    __hide_fields__ = ['id', 'lineas_base', 'fichas', 'estado', \
                    'fecha_inicio', 'id_proyecto', 'tipos_item', 'proyecto', 'fecha_fin']
    orden = OrdenFieldEdit
    nombre = All(NotEmpty(), ValidarExpresion(r'^[A-Za-z][A-Za-z0-9 ]*$'), \
            Unico())
示例#7
0
class ShortURLAdminController(DefaultAdminController):
    def __init__(self, app):
        self.app = app

    @expose()
    def index(self, **kw):
        redirect(c.project.url() + 'admin/tools')

    @expose('jinja:forgeshorturl:templates/add.html')
    @validate(dict(full_url=All(validators.URL(add_http=True),
                                validators.NotEmpty()),
                   short_url=validators.NotEmpty()))
    def add(self, short_url="",
            full_url="",
            description="",
            private="off", **kw):
        if (request.method == 'POST'):
            if pylons.c.form_errors:
                error_msg = "Error creating Short URL: "
                for msg in list(pylons.c.form_errors):
                    names = {"short_url": "Short name", "full_url": "Full URL"}
                    error_msg += "%s - %s " % (names[msg], c.form_errors[msg])
                    flash(error_msg, "error")
                redirect(request.referer)

            if (short_url != full_url):
                shorturl = ShortUrl.query.find({
                    'app_config_id': self.app.config._id,
                    'short_name': short_url}).first()
                if shorturl is None:
                    shorturl = ShortUrl()
                    shorturl.created = datetime.utcnow()
                    log_msg = 'create short url %s for %s' %\
                              (short_url,
                               full_url)
                else:
                    log_msg = 'update short url %s from %s to %s' %\
                              (short_url,
                               shorturl.full_url,
                               full_url)
                shorturl.full_url = full_url
                shorturl.short_name = short_url
                shorturl.description = description
                shorturl.create_user = c.user._id
                shorturl.app_config_id = self.app.config._id
                if private == "on":
                    shorturl.private = True
                else:
                    shorturl.private = False
                shorturl.last_updated = datetime.utcnow()
                M.AuditLog.log(log_msg)
                flash("Short url created")
            else:
                flash("Error creating Short URL: "
                      "Short Name and Full URL must be different", "error")
            redirect(request.referer)
        return dict(app=self.app)
示例#8
0
class EditProyecto(EditableForm):
    """ 
    Define el formato del formulario para la modificación de un proyecto 
    """
    __model__ = Proyecto
    __base_validator__ = form_validator
    __hide_fields__ = ['id', 'fases', 'fichas', 'estado',  'fecha_inicio', \
                       'fecha_fin']
    nro_fases = CantidadFasesField('nro_fases')
    nombre = All(NotEmpty(), ValidarExpresion(r'^[A-Za-z][A-Za-z0-9 ]*$'), \
            Unico())
    __dropdown_field_names__ = {'lider': 'nombre_usuario'}
示例#9
0
    def schema(self):
        if self._schema is None:
            merged = ListDict()
            for key, validators in chain(self._auto.iteritems(),
                                         self._statements.iteritems()
                                         ):
                merged.add(key, validators)

            schema = dict(
                (key, All.join(*validators))
                for key, validators in merged.iteritems()
            )

            self._schema = Schema(allow_extra_fields=True, **schema)
        return self._schema
示例#10
0
class CommentSchema(Schema):
    allow_extra_fields = True
    filter_extra_fields = True

    # TODO: check post exists
    post_id = validators.Int()
    # TODO: block empty
    # TODO: block whitespace-only
    # TODO: block dupes
    # TODO: block repetitive (gzip gives 10x compression)
    # TODO: limit X posts per Y minutes
    # TODO: captcha
    # TODO: akismet
    # TODO: blacklist phrases
    comment = All(validators.UnicodeString(strip=True, min=1, max=9000))
示例#11
0
class ShortURLAdminController(DefaultAdminController):

    shorturl_validators = All(
        validators.NotEmpty(),
        validators.Regex(
            r'^[-_a-zA-Z0-9]+$',
            messages={'invalid':
                      'must include only letters, numbers, dashes and underscores.'}
        )
    )

    @expose()
    def index(self, **kw):
        redirect(c.project.url() + 'admin/tools')

    @without_trailing_slash
    @expose('json:')
    def remove(self, shorturl, **kw):
        require_access(self.app, 'update')
        ShortUrl.query.remove({
            'app_config_id': self.app.config._id,
            'short_name': shorturl})
        return dict(status='ok')

    @expose('jinja:forgeshorturl:templates/form.html')
    @validate(dict(full_url=All(validators.URL(add_http=True),
                                validators.NotEmpty()),
                   short_url=shorturl_validators))
    def add(self, short_url='', full_url='', description='', private='off',
            update=False, **kw):
        if update:
            require_access(self.app, 'update')
        else:
            require_access(self.app, 'create')
        if request.method == 'POST':
            if c.form_errors:
                error_msg = 'Error: '
                for msg in list(c.form_errors):
                    names = {'short_url': 'Short url', 'full_url': 'Full URL'}
                    error_msg += '%s: %s ' % (names[msg], c.form_errors[msg])
                    flash(error_msg, 'error')
                redirect(request.referer)

            shorturl = ShortUrl.query.find({
                'app_config_id': self.app.config._id,
                'short_name': short_url}).first()

            if shorturl is not None:
                if not update:
                    flash('Short url %s already exists' % short_url, 'error')
                    redirect(request.referer)
                else:
                    msg = ('update short url %s from %s to %s'
                           % (short_url, shorturl.full_url, full_url))
                    flash("Short url updated")

            else:
                shorturl = ShortUrl()
                shorturl.created = datetime.utcnow()
                shorturl.app_config_id = self.app.config._id
                msg = 'create short url %s for %s' % (short_url, full_url)
                flash("Short url created")

            shorturl.short_name = short_url
            shorturl.full_url = full_url
            shorturl.description = description
            shorturl.create_user = c.user._id
            shorturl.private = private == 'on'
            shorturl.last_updated = datetime.utcnow()

            M.AuditLog.log(msg)
            redirect(request.referer)
        return dict(
            app=self.app,
            url_len=len(ShortUrl.build_short_url(c.app, short_name='')))
示例#12
0

class AddProyecto(AddRecordForm):
    """ Define el formato del formulario para crear un nuevo proyecto"""
    __model__ = Proyecto
    __omit_fields__ = ['id', 'fases', 'fichas', 'estado', 'fecha_inicio', \
                      'fecha_fin']
    nombre = All(NotEmpty(), ValidarExpresion(r'^[A-Za-z][A-Za-z0-9 ]*$'), \
            Unico())
    nro_fases = All(NotEmpty(), Int(min=0))
    __dropdown_field_names__ = {'lider': 'nombre_usuario'}


add_proyecto_form = AddProyecto(DBSession)

form_validator =  Schema(nro_fases = All(NroValido(), NotEmpty(), Int(min = \
                 0)), ignore_key_missing = True)


class CantidadFasesField(TextField):
    """
    Clase correspondiente a un validador que se utiliza para deshabilitar la
    modificación del número de fases de un proyecto si el mismo ya ha iniciado.
    """
    def update_params(self, d):
        """
        Realiza el control citado anteriormente.
        """
        id_proy = unicode(request.url.split("/")[-2])
        pr = DBSession.query(Proyecto).get(id_proy)
        if pr.estado != u"Nuevo":
            d.disabled = True
示例#13
0
class AddRol(AddRecordForm):
    """ Define el formato del formulario para crear un nuevo rol"""
    __model__ = Rol
    __omit_fields__ = ['id', 'fichas', 'usuarios', 'permisos']
    nombre = All(NotEmpty(), ValidarExpresion(r'^[A-Za-z][A-Za-z0-9 ]*$'))
    tipo = SingleSelectField("tipo", options=['Sistema', 'Proyecto', 'Fase'])
示例#14
0
import tw2.core as twc
import tw2.forms as twf
from formencode.compound import All
from formencode import validators

name_validator = All(validators.NotEmpty(), validators.UnicodeString(),
                     validators.Regex(r'[A-Za-z]'))

phone_validator = All(validators.NotEmpty(), validators.UnicodeString(),
                      validators.Regex(r'[0-9]'))


class SubmitForm(twf.Form):
    class child(twf.TableLayout):
        nome = twf.TextField(size=15, validator=name_validator)
        telefono = twf.TextField(size=15, validator=phone_validator)
        submit = twf.SubmitButton(value='Submit')

    action = '/save'