Parcar una fecha en python sin usar una @ predetermina

Estoy usando Python'sdateutil.parser herramienta para analizar algunas fechas que obtengo de un feed de terceros. Permite especificar una fecha predeterminada, que por defecto es la actual, para completar los elementos faltantes de la fecha analizada. Si bien esto es útil en general, no existe un valor predeterminado razonable para mi caso de uso, y preferiría tratar las fechas parciales como si no hubiera obtenido una fecha (ya que casi siempre significa que obtuve datos confusos). He escrito el siguiente trabajo:

from dateutil import parser
import datetime

def parse_no_default(dt_str):
  dt = parser.parse(dt_str, default=datetime.datetime(1900, 1, 1)).date()
  dt2 = parser.parse(dt_str, default=datetime.datetime(1901, 2, 2)).date()
  if dt == dt2:
    return dt
  else:
    return None

(Este fragmento solo mira la fecha, ya que eso es todo lo que me importa para mi aplicación, pero una lógica similar podría extenderse para incluir el componente de tiempo).

Me pregunto (espero) que haya una mejor manera de hacer esto. Analizar la misma cadena dos veces solo para ver si llena diferentes valores predeterminados parece, por decir lo menos, un gran desperdicio de recursos.

Aquí está el conjunto de pruebas (usando generadores de prueba nasal) para el comportamiento esperado:

import nose.tools
import lib.tools.date

def check_parse_no_default(sample, expected):
  actual = lib.tools.date.parse_no_default(sample)
  nose.tools.eq_(actual, expected)

def test_parse_no_default():
  cases = ( 
      ('2011-10-12', datetime.date(2011, 10, 12)),
      ('2011-10', None),
      ('2011', None),
      ('10-12', None),
      ('2011-10-12T11:45:30', datetime.date(2011, 10, 12)),
      ('10-12 11:45', None),
      ('', None),
      )   
  for sample, expected in cases:
    yield check_parse_no_default, sample, expected

Respuestas a la pregunta(8)

Su respuesta a la pregunta