jueves, 1 de marzo de 2012

Con qué día empieza la semana en python? What's the first day of the week in python?

Venga, vamos a jugar un poco más con las fechas. ¿Con qué día empezó esta semana?.

d=datetime.date.today()
delta=datetime.timedelta(days=1)
fecha_inicio_semana=d-(delta*(d.isoweekday()-1))

Warning, for the the non-ISO calendars such as UK/USA: the function isoweekday assumes that the first day of the week is Monday.

miércoles, 29 de febrero de 2012

Menor de edad en python / Legal age in python

Hoy día 29/02/2012 (29 de febrero de año bisiesto), me he encontrado con que el algoritmo que usaba para el cálculo de minoría de edad me ha fallado. Después de varias indagaciones he dejado este como bueno:

from datetime import date, datetime, timedelta

def menor_edad(nascut):
  """ accepts a string date in iso format Y-m-d and returns True if
        it is in spanish legal age today """
  t=timedelta(seconds=31556926*18)
  fa_divuit=date.today()-t
  fecha=datetime.strptime(nascut, '%Y-%m-%d').date()
  return (fecha > =fa_divuit)


lunes, 27 de febrero de 2012

Presentación del vector VEGA de la ESA

Aunque sea con un cierto retraso después del lanzamiento inaugural, en este vídeo del constructor aeroespacial italiano Avio podemos ver alguna de las principales características del lanzador. Vega: Un gran trabajo de los italianos con gran participación española.

En este otro vídeo de Euronews hay entrevistas y se profundiza en los detalles más innovadores del proyecto tales como la estructura hecha en materiales compuestos con el método del "filament winding".


viernes, 24 de febrero de 2012

Filtrado fácil de clave foránea en una ficha de django

Es sabido que django mapea las claves foráneas a un ModelChoiceField en ModelForm, pero ¿qué ocurre cuando sólo queremos seleccionar un subconjunto de ellas?.

Por ejemplo, supongamos que estamos dando de alta un empleado y a la hora de seleccionar su categoría sólo queremos que aparezcan las que están asociadas a su sección.

Tenemos la ficha:


class AddForm(forms.ModelForm):
  class Meta:
   model=Empleado
    fields=('clave', 'descripcion', 'categoria', 'jefe_seccion', 'email',)


La propiedad queryset del campo categoría estará definida por defecto como Categoria.objects.all(), así que hacemos:

p=AddForm()
p.fields['categoria'].queryset=Categoria.objects.filter(seccion=self.seccion)

Con lo que en la ficha sólo nos saldrán las categorías de la sección actual.
Otra forma más complicada consiste en pasarle el parámetro al constructor de la clase pero hay que hacerlo con los kwargs por que si no tendremos problemas en cuando queramos usar la ficha para editar.

class AddForm(forms.ModelForm):
  categoria=forms.ModelChoiceField( label=u'Categoría', queryset = Categoria.objects.none())
  def __init__(self, *args, **kwargs):
   sec = kwargs.pop('sec', None)
   super(AddForm, self).__init__(*args, **kwargs)
   if sec:
    self.fields['categoria'].queryset = Categoria.objects.filter(seccion = sec)
  class Meta:
   model=Empleado
   fields=('clave', 'descripcion', 'categoria', 'jefe_seccion', 'email',)

sábado, 11 de febrero de 2012

Procesador de texto "Sublime Text"

No soy yo muy dado a cambiar mi preciado vi para programar. Sin embargo, me he encontrado con este procesador de texto (hecho en python) que tiene versiones para Linux, Win y Mac. Tiene muy buena pinta. Su nombre es Sublime Text.

Para empezar a usarlo ve a una carpeta que tenga código. Haz Project->Save As... luego Project->Add Folder.

 Voy a probarlo una temporada a ver que tal.