viernes, 24 de febrero de 2017

[Flask] - TypeError: 'NoneType' object is not iterable

Problema:


Flask reporta el error:

TypeError: 'NoneType' object is not iterable

Al hacer POST en un formulario Flask-WTF. La vista que la maneja es:

def nuevo_proyecto():
    newprojectform = NewProjectForm()
    if newprojectform.validate_on_submit():
        return redirect('/')
    else:
        tutors = User.query.filter(User.id != current_user.id)
        newprojectform.tutor.choices = [(t.id, t.username) for t in tutors]
        newprojectform.line.choices = [(l.id, l.nombreLinea) for l in lines]
        return render_template('nuevo_proyecto.html', lines=lines, newprojectform = newprojectform)


Solución:


Hay que definir choices antes de validar el formulario:

def nuevo_proyecto():
    newprojectform = NewProjectForm()
    tutors = User.query.filter(User.id != current_user.id)
    newprojectform.tutor.choices = [(t.id, t.username) for t in tutors]
    newprojectform.line.choices = [(l.id, l.nombreLinea) for l in lines]
    if newprojectform.validate_on_submit():
        return redirect('/')
    else:
        return render_template('nuevo_proyecto.html', lines=lines, newprojectform = newprojectform)

Funciona correctamente!


domingo, 5 de febrero de 2017

[Munin] Fallo al acceder a Munin en servidor Fedora FC4

Rechaza usuario y contraseña al acceder por web. El log de errores de apache devuelve:

access to /munin/ failed, reason: require directives present and no Authoritative handler.

Para mí, la solución ha sido editar /var/etc/httpd/conf/httpd.conf:

<Directory /var/www/html/munin>
    Require all granted
    Options FollowSymLinks SymLinksIfOwnerMatch
</Directory>

____________

<Directory /var/www/html/munin>
    Require valid-user
    Options FollowSymLinks SymLinksIfOwnerMatch
</Directory>

martes, 24 de enero de 2017

[GitHub] Branches no sincronizadas después de 'git pull'

Después de hacer un git pull origin master en un equipo que esté detrás de origin, al hacer git status nos dirá que está X commits por delante (tantos como estuviera por delante el remoto respecto del local):

~ git pull origin master
<pasan cosas>

~ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)

Esto se debe a que la referencia al HEAD de origin no ha cambiado en el local, para actualizarla basta con hacer git fetch origin:

~ git fetch origin
<pasan cosas>

~ git status
# On branch master
nothing to commit (working directory clean)

Para evitar esta situación o evitar tener que hacer un fetch después de un pull (cuando se supone que un pull es un fetch + merge), podemos hacer directamente:

~ git pull origin
<pasan cosas, pero esta vez sincronizando los HEAD del branch remoto y del local>