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())
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'}
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)
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())
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())
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())
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)
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'}
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
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))
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='')))
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
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'])
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'