From 08a032b22c1fcbb789b18c8c78635265f1261fe8 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Mon, 26 Feb 2007 16:43:58 +0000 Subject: [PATCH] =?utf8?q?Eliminar=20constructores=20redundantes.=20Para?= =?utf8?q?=20hacer=20m=C3=A1s=20conveniente=20la=20construcci=C3=B3n=20de?= =?utf8?q?=20objetos=20se=20hab=C3=ADa=20sobrecargado=20todos=20los=20cons?= =?utf8?q?tructores=20de=20los=20SQLObjects=20(parche=20"Sobreescribe=20co?= =?utf8?q?nstructores=20para=20que=20queden=20m\c3\a1s=20lindos.").=20Esto?= =?utf8?q?=20al=20final=20tra=C3=ADa=20problemas=20porque=20SQLObjects=20a?= =?utf8?q?=20veces=20necesita=20crear=20objetos=20vac=C3=ADos,=20as=C3=AD?= =?utf8?q?=20que=20al=20final=20eran=20redundantes=20los=20constructores,?= =?utf8?q?=20salvo=20casos=20excepcionales.=20Estos=20casos=20excepcionale?= =?utf8?q?s=20(generalmente=20en=20clases=20con=20m=C3=A9todos=20add=5Fxxx?= =?utf8?q?)=20fueron=20conservados=20y=20corregidos.=20Ahora=20todos=20los?= =?utf8?q?=20constructores=20se=20llaman=20al=20estilo=20de=20SQLObject,?= =?utf8?q?=20con=20todos=20keyword=20arguments.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- doc/testdata.py | 47 ++++++------ sercom/model.py | 187 +++++++++++++++--------------------------------- 2 files changed, 85 insertions(+), 149 deletions(-) diff --git a/doc/testdata.py b/doc/testdata.py index 4b37151..26d01d1 100644 --- a/doc/testdata.py +++ b/doc/testdata.py @@ -1,46 +1,51 @@ -# vim: set encoding=utf-8 : +# vim: set et sw=4 sts=4 encoding=utf-8 foldmethod=marker : r1 = Rol(nombre='admin', permisos=(entregar_tp, admin)) r2 = Rol(nombre='alumno', permisos=(entregar_tp,)) -d = Docente('luca', u'Leandro Lucarella', 'luca', 'llucax@gmail.com', - '4554-1554', roles=[r1], activo=True) +d = Docente(usuario='luca', nombre=u'Leandro Lucarella', password='luca', + email='llucax@gmail.com', telefono='4554-1554', roles=[r1], activo=True) -a = Alumno('77891', 'Tito Puente', '77891', roles=[r2]) +a = Alumno(padron='77891', nombre='Tito Puente', password='77891', roles=[r2]) -t1 = Tarea('compilar') -t2 = Tarea('probar', dependencias=(t1,)) -t3 = Tarea(u'configurar detector de copias') -t4 = Tarea(u'detectar copias', dependencias=(t3, t2)) +t1 = Tarea(nombre='compilar') +t2 = Tarea(nombre='probar', dependencias=(t1,)) +t3 = Tarea(nombre=u'configurar detector de copias') +t4 = Tarea(nombre=u'detectar copias', dependencias=(t3, t2)) -e1 = Enunciado(u'Un enunciado', 2007, 1, d, u'Ejercicio reeee jodido', (t4,)) -e2 = Enunciado(u'Otro enunciado', 2007, 1, d, u'Ejercicio facilongo', (t2, t4)) -e3 = d.add_enunciado(u'Más enunciados', 2007, 1, u'Ejercicio anónimo') +e1 = Enunciado(nombre=u'Un enunciado', anio=2007, cuatrimestre=1, autor=d, + descripcion=u'Ejercicio reeee jodido', tareas=(t4,)) +e2 = Enunciado(nombre=u'Otro enunciado', anio=2007, cuatrimestre=1, autor=d, + descripcion=u'Ejercicio facilongo', tareas=(t2, t4)) +e3 = d.add_enunciado(u'Más enunciados', anio=2007, cuatrimestre=1, + descripcion=u'Ejercicio anónimo') -c = Curso(2007, 1, 1, u'Martes', [d], [e1, e2]) +c = Curso(anio=2007, cuatrimestre=1, numero=1, descripcion=u'Martes', + docentes=[d], ejercicios=[e1, e2]) -cp1 = e1.add_caso_de_prueba(u'Sin parámetros', retorno=0, descripcion=u'Un caso') -cp2 = e1.add_caso_de_prueba(u'2 parámetross', retorno=0, parametros='--test -c') +cp1 = e1.add_caso_de_prueba(nombre=u'Sin parámetros', retorno=0, + descripcion=u'Un caso') +cp2 = e1.add_caso_de_prueba(nombre=u'2 parámetross', retorno=0, + parametros='--test -c "con espacios"') ej1 = c.ejercicios[0] ej1.grupal = True ej2 = c.ejercicios[1] -ide = ej1.add_instancia(1, datetime(2007, 1, 25), datetime(2007, 1, 31, 20), - observaciones='Entrega fea', activo=False, tareas=(t2, t4)) +ide = ej1.add_instancia(numero=1, inicio=datetime(2007, 1, 25), + fin=datetime(2007, 1, 31, 20), observaciones='Entrega fea', activo=False, + tareas=(t2, t4)) di = c.docentes[0] ai1 = c.add_alumno(a) -ai2 = c.add_alumno(Alumno('83525', u'Pepe Lui'), tutor=di) +ai2 = c.add_alumno(Alumno(padron='83525', nombre=u'Pepe Lui'), tutor=di) g1 = c.add_grupo(5) -g2 = c.add_grupo(8, responsable=ai2) +g2 = c.add_grupo(8, responsable=ai2, miembros=[ai1], tutores=[di]) -g2.add_alumno(ai1) -g2.add_alumno(ai2) -g2.add_docente(di) +g2.add_miembro(ai2) entrega = ai1.add_entrega(ide) ai2.add_entrega(ide, correcta=True) diff --git a/sercom/model.py b/sercom/model.py index b842583..a3897ac 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -1,4 +1,4 @@ -# vim: set et sw=4 sts=4 encoding=utf-8 : +# vim: set et sw=4 sts=4 encoding=utf-8 foldmethod=marker : from datetime import datetime from turbogears.database import PackageHub @@ -132,26 +132,24 @@ class Curso(SQLObject, ByObject): #{{{ grupos = MultipleJoin('Grupo') ejercicios = MultipleJoin('Ejercicio', orderBy='numero') - def __init__(self, anio=None, cuatrimestre=None, numero=None, - descripcion=None, docentes=[], ejercicios=[], **kargs): - SQLObject.__init__(self, anio=anio, cuatrimestre=cuatrimestre, - numero=numero, descripcion=descripcion, **kargs) + def __init__(self, docentes=[], ejercicios=[], **kargs): + super(Curso, self).__init__(**kargs) for d in docentes: self.add_docente(d) for (n, e) in enumerate(ejercicios): self.add_ejercicio(n, e) - def add_docente(self, docente, *args, **kargs): - return DocenteInscripto(self, docente, *args, **kargs) + def add_docente(self, docente, **kargs): + return DocenteInscripto(curso=self, docente=docente, **kargs) - def add_alumno(self, alumno, *args, **kargs): - return AlumnoInscripto(self, alumno, *args, **kargs) + def add_alumno(self, alumno, **kargs): + return AlumnoInscripto(curso=self, alumno=alumno, **kargs) - def add_grupo(self, nombre, *args, **kargs): - return Grupo(self, unicode(nombre), *args, **kargs) + def add_grupo(self, nombre, **kargs): + return Grupo(curso=self, nombre=unicode(nombre), **kargs) - def add_ejercicio(self, numero, enunciado, *args, **kargs): - return Ejercicio(self, numero, enunciado, *args, **kargs) + def add_ejercicio(self, numero, enunciado, **kargs): + return Ejercicio(curso=self, numero=numero, enunciado=enunciado, **kargs) def __repr__(self): return 'Curso(id=%s, anio=%s, cuatrimestre=%s, numero=%s, ' \ @@ -178,6 +176,12 @@ class Usuario(InheritableSQLObject, ByObject): #{{{ # Joins roles = RelatedJoin('Rol') + def __init__(self, password=None, roles=[], **kargs): + passwd = password and encryptpw(password) + super(Usuario, self).__init__(contrasenia=passwd, **kargs) + for r in roles: + self.addRol(r) + def _get_user_name(self): # para identity return self.usuario @@ -207,7 +211,7 @@ class Usuario(InheritableSQLObject, ByObject): #{{{ return self.contrasenia def __repr__(self): - raise NotImplementedError, 'Clase abstracta!' + raise NotImplementedError, _('Clase abstracta!') def shortrepr(self): return '%s (%s)' % (self.usuario, self.nombre) @@ -221,22 +225,15 @@ class Docente(Usuario): #{{{ enunciados = MultipleJoin('Enunciado', joinColumn='autor_id') inscripciones = MultipleJoin('DocenteInscripto') - def __init__(self, usuario=None, nombre=None, password=None, email=None, - telefono=None, nombrado=True, activo=False, observaciones=None, - roles=[], **kargs): - passwd = password and encryptpw(password) - InheritableSQLObject.__init__(self, usuario=usuario, nombre=nombre, - contrasenia=passwd, email=email, telefono=telefono, - nombrado=nombrado, activo=activo, observaciones=observaciones, - **kargs) - for r in roles: - self.addRol(r) + def __init__(self, **kargs): + super(Docente, self).__init__(**kargs) - def add_entrega(self, instancia, *args, **kargs): - return Entrega(instancia, *args, **kargs) + def add_entrega(self, instancia, **kargs): + return Entrega(instancia=instancia, **kargs) - def add_enunciado(self, nombre, anio, cuatrimestre, *args, **kargs): - return Enunciado(nombre, anio, cuatrimestre, self, *args, **kargs) + def add_enunciado(self, nombre, anio, cuatrimestre, **kargs): + return Enunciado(nombre=nombre, anio=anio, cuatrimestre=cuatrimestre, + autor=self, **kargs) def __repr__(self): return 'Docente(id=%s, usuario=%s, nombre=%s, password=%s, email=%s, ' \ @@ -253,14 +250,9 @@ class Alumno(Usuario): #{{{ # Joins inscripciones = MultipleJoin('AlumnoInscripto') - def __init__(self, padron=None, nombre=None, password=None, email=None, - telefono=None, activo=False, observaciones=None, roles=[], **kargs): - passwd = password and encryptpw(password) - InheritableSQLObject.__init__(self, usuario=padron, nombre=nombre, - email=email, contrasenia=passwd, telefono=telefono, activo=activo, - observaciones=observaciones, **kargs) - for r in roles: - self.addRol(r) + def __init__(self, padron=None, **kargs): + if padron: kargs['usuario'] = padron + super(Alumno, self).__init__(**kargs) def _get_padron(self): # alias para poder referirse al alumno por padron return self.usuario @@ -282,9 +274,8 @@ class Tarea(InheritableSQLObject, ByObject): #{{{ descripcion = UnicodeCol(length=255, default=None) # Joins - def __init__(self, nombre=None, descripcion=None, dependencias=(), **kargs): - InheritableSQLObject.__init__(self, nombre=nombre, - descripcion=descripcion, **kargs) + def __init__(self, dependencias=(), **kargs): + super(Tarea, self).__init__(**kargs) if dependencias: self.dependencias = dependencias @@ -348,11 +339,8 @@ class Enunciado(SQLObject, ByObject): #{{{ ejercicios = MultipleJoin('Ejercicio') casos_de_prueba = MultipleJoin('CasoDePrueba') - def __init__(self, nombre=None, anio=None, cuatrimestre=None, autor=None, - descripcion=None, tareas=(), **kargs): - SQLObject.__init__(self, nombre=nombre, descripcion=descripcion, - anio=anio, autorID=autor and autor.id, cuatrimestre=cuatrimestre, - **kargs) + def __init__(self, tareas=(), **kargs): + super(Enunciado, self).__init__(**kargs) if tareas: self.tareas = tareas @@ -360,8 +348,8 @@ class Enunciado(SQLObject, ByObject): #{{{ def selectByCurso(self, curso): return Enunciado.selectBy(cuatrimestre=curso.cuatrimestre, anio=curso.anio) - def add_caso_de_prueba(self, nombre, *args, **kargs): - return CasoDePrueba(self, nombre, *args, **kargs) + def add_caso_de_prueba(self, nombre, **kargs): + return CasoDePrueba(enunciado=self, nombre=nombre, **kargs) def _get_tareas(self): self.__tareas = tuple(Tarea.select( @@ -421,12 +409,6 @@ class CasoDePrueba(SQLObject): #{{{ # Joins pruebas = MultipleJoin('Prueba') - def __init__(self, enunciado=None, nombre=None, parametros=None, - retorno=None, tiempo_cpu=None, descripcion=None, **kargs): - SQLObject.__init__(self, enunciadoID=enunciado and enunciado.id, - nombre=nombre, parametros=parametros, retorno=retorno, - tiempo_cpu=tiempo_cpu, descripcion=descripcion, **kargs) - def __repr__(self): return 'CasoDePrueba(enunciado=%s, nombre=%s, parametros=%s, ' \ 'retorno=%s, tiempo_cpu=%s, descripcion=%s)' \ @@ -448,14 +430,9 @@ class Ejercicio(SQLObject, ByObject): #{{{ # Joins instancias = MultipleJoin('InstanciaDeEntrega') - def __init__(self, curso=None, numero=None, enunciado=None, grupal=False, - **kargs): - if curso and enunciado: - SQLObject.__init__(self, cursoID=curso.id, numero=numero, - enunciadoID=enunciado.id, grupal=grupal, **kargs) - - def add_instancia(self, numero, inicio, fin, *args, **kargs): - return InstanciaDeEntrega(self, numero, inicio, fin, *args, **kargs) + def add_instancia(self, numero, inicio, fin, **kargs): + return InstanciaDeEntrega(ejercicio=self, numero=numero, inicio=inicio, + fin=fin, **kargs) def __repr__(self): return 'Ejercicio(id=%s, curso=%s, numero=%s, enunciado=%s, ' \ @@ -484,12 +461,8 @@ class InstanciaDeEntrega(SQLObject, ByObject): #{{{ correcciones = MultipleJoin('Correccion', joinColumn='instancia_id') casos_de_prueba = RelatedJoin('CasoDePrueba') # TODO CasoInstancia -> private - def __init__(self, ejercicio=None, numero=None, inicio=None, fin=None, - observaciones=None, activo=True, tareas=(), **kargs): - if ejercicio: - SQLObject.__init__(self, ejercicioID=ejercicio.id, numero=numero, - fin=fin, inicio=inicio, observaciones=observaciones, activo=activo, - **kargs) + def __init__(self, tareas=(), **kargs): + super(InstanciaDeEntrega, self).__init__(**kargs) if tareas: self.tareas = tareas @@ -551,14 +524,9 @@ class DocenteInscripto(SQLObject, ByObject): #{{{ entregas = MultipleJoin('Entrega', joinColumn='instancia_id') correcciones = MultipleJoin('Correccion', joinColumn='corrector_id') - def __init__(self, curso=None, docente=None, corrige=True, - observaciones=None, **kargs): - SQLObject.__init__(self, cursoID=curso.id, docenteID=docente.id, - corrige=corrige, observaciones=observaciones, **kargs) - - def add_correccion(self, entrega, *args, **kargs): - return Correccion(entrega.instancia, entrega.entregador, entrega, - self, *args, **kargs) + def add_correccion(self, entrega, **kargs): + return Correccion(instancia=entrega.instancia, entrega=entrega, + entregador=entrega.entregador, corrector=self, **kargs) def __repr__(self): return 'DocenteInscripto(id=%s, docente=%s, corrige=%s, ' \ @@ -580,8 +548,8 @@ class Entregador(InheritableSQLObject, ByObject): #{{{ entregas = MultipleJoin('Entrega') correcciones = MultipleJoin('Correccion') - def add_entrega(self, instancia, *args, **kargs): - return Entrega(instancia, self, *args, **kargs) + def add_entrega(self, instancia, **kargs): + return Entrega(instancia=instancia, entregador=self, **kargs) def __repr__(self): raise NotImplementedError, 'Clase abstracta!' @@ -598,17 +566,18 @@ class Grupo(Entregador): #{{{ miembros = MultipleJoin('Miembro') tutores = MultipleJoin('Tutor') - def __init__(self, curso=None, nombre=None, responsable=None, **kargs): - resp_id = responsable and responsable.id - curso_id = curso and curso.id - InheritableSQLObject.__init__(self, cursoID=curso_id, nombre=nombre, - responsableID=resp_id, **kargs) + def __init__(self, miembros=[], tutores=[], **kargs): + super(Grupo, self).__init__(**kargs) + for a in miembros: + self.add_miembro(a) + for d in tutores: + self.add_tutor(d) - def add_alumno(self, alumno, *args, **kargs): - return Miembro(self, alumno, *args, **kargs) + def add_miembro(self, alumno, **kargs): + return Miembro(grupo=self, alumno=alumno, **kargs) - def add_docente(self, docente, *args, **kargs): - return Tutor(self, docente, *args, **kargs) + def add_tutor(self, docente, **kargs): + return Tutor(grupo=self, docente=docente, **kargs) def __repr__(self): return 'Grupo(id=%s, nombre=%s, responsable=%s, nota=%s, ' \ @@ -635,12 +604,6 @@ class AlumnoInscripto(Entregador): #{{{ entregas = MultipleJoin('Entrega', joinColumn='alumno_id') correcciones = MultipleJoin('Correccion', joinColumn='alumno_id') - def __init__(self, curso=None, alumno=None, condicional=False, tutor=None, - **kargs): - tutor_id = tutor and tutor.id - InheritableSQLObject.__init__(self, cursoID=curso.id, tutorID=tutor_id, - alumnoID=alumno.id, condicional=condicional, **kargs) - def __repr__(self): return 'AlumnoInscripto(id=%s, alumno=%s, condicional=%s, nota=%s, ' \ 'nota_cursada=%s, tutor=%s, observaciones=%s, activo=%s)' \ @@ -661,10 +624,6 @@ class Tutor(SQLObject, ByObject): #{{{ alta = DateTimeCol(notNone=True, default=DateTimeCol.now) baja = DateTimeCol(default=None) - def __init__(self, grupo=None, docente=None, **kargs): - SQLObject.__init__(self, grupoID=grupo.id, docenteID=docente.id, - **kargs) - def __repr__(self): return 'Tutor(docente=%s, grupo=%s, alta=%s, baja=%s)' \ % (self.docente.shortrepr(), self.grupo.shortrepr(), @@ -684,9 +643,6 @@ class Miembro(SQLObject, ByObject): #{{{ alta = DateTimeCol(notNone=True, default=DateTimeCol.now) baja = DateTimeCol(default=None) - def __init__(self, grupo=None, alumno=None, **kargs): - SQLObject.__init__(self, grupoID=grupo.id, alumnoID=alumno.id, **kargs) - def __repr__(self): return 'Miembro(alumno=%s, grupo=%s, nota=%s, alta=%s, baja=%s)' \ % (self.alumno.shortrepr(), self.grupo.shortrepr(), @@ -711,14 +667,8 @@ class Entrega(SQLObject, ByObject): #{{{ codigo_dict = r'0123456789abcdefghijklmnopqrstuvwxyz_.,*@#+' codigo_format = r'%m%d%H%M%S' - def __init__(self, instancia=None, entregador=None, observaciones=None, - **kargs): - entregador_id = entregador and entregador.id - SQLObject.__init__(self, instanciaID=instancia.id, - entregadorID=entregador_id, observaciones=observaciones, **kargs) - - def add_tarea_ejecutada(self, tarea, *args, **kargs): - return TareaEjecutada(tarea, self, *args, **kargs) + def add_tarea_ejecutada(self, tarea, **kargs): + return TareaEjecutada(tarea=tarea, entrega=self, **kargs) def _get_codigo(self): if not hasattr(self, '_codigo'): # cache @@ -760,12 +710,6 @@ class Correccion(SQLObject, ByObject): #{{{ nota = DecimalCol(size=3, precision=1, default=None) observaciones = UnicodeCol(default=None) - def __init__(self, instancia=None, entregador=None, entrega=None, - corrector=None, observaciones=None, **kargs): - SQLObject.__init__(self, instanciaID=instancia.id, entregaID=entrega.id, - entregadorID=entregador.id, correctorID=corrector.id, - observaciones=observaciones, **kargs) - def __repr__(self): return 'Correccion(instancia=%s, entregador=%s, entrega=%s, ' \ 'corrector=%s, asignado=%s, corregido=%s, nota=%s, ' \ @@ -791,12 +735,9 @@ class TareaEjecutada(InheritableSQLObject, ByObject): #{{{ # Joins pruebas = MultipleJoin('Prueba') - def __init__(self, tarea=None, entrega=None, observaciones=None, **kargs): - InheritableSQLObject.__init__(self, tareaID=tarea.id, - entregaID=entrega.id, observaciones=observaciones, **kargs) - - def add_prueba(self, caso_de_prueba, *args, **kargs): - return Prueba(self, caso_de_prueba, *args, **kargs) + def add_prueba(self, caso_de_prueba, **kargs): + return Prueba(tarea_ejecutada=self, caso_de_prueba=caso_de_prueba, + **kargs) def __repr__(self): return 'TareaEjecutada(tarea=%s, entrega=%s, inicio=%s, fin=%s, ' \ @@ -819,12 +760,6 @@ class Prueba(SQLObject): #{{{ pasada = IntCol(default=None) observaciones = UnicodeCol(default=None) - def __init__(self, tarea_ejecutada=None, caso_de_prueba=None, - observaciones=None, **kargs): - SQLObject.__init__(self, tarea_ejecutadaID=tarea_ejecutada.id, - caso_de_pruebaID=caso_de_prueba.id, observaciones=observaciones, - **kargs) - def __repr__(self): return 'Prueba(tarea_ejecutada=%s, caso_de_prueba=%s, inicio=%s, ' \ 'fin=%s, pasada=%s, observaciones=%s)' \ @@ -871,10 +806,6 @@ class Rol(SQLObject): #{{{ permisos = TupleCol(notNone=True) # Joins usuarios = RelatedJoin('Usuario') - - def __init__(self, nombre=None, permisos=(), descripcion=None, **kargs): - SQLObject.__init__(self, nombre=nombre, permisos=permisos, - descripcion=descripcion, **kargs) #}}} # No es un SQLObject porque no tiene sentido agregar/sacar permisos, están -- 2.43.0