Exemplo n.º 1
0
class Evaluacion(gj.Document):
    alumno = db.ReferenceField(Alumno)
    curso = db.ReferenceField(Curso)
    acierto = db.IntField(default=0)
    creado = db.DateTimeField(default=datetime.now)
    actualizado = db.DateTimeField(default=datetime.now)
    respuestas = db.ListField(db.EmbeddedDocumentField(Respuesta))
    json = db.StringField()
    meta = {'strict': False}

    def save(self, *args):
        self.actualizado = datetime.now()
        super().save()

    def to_dict(self):
        contenidos_respuesta = []
        for respuesta in self.respuestas:
            contenidos_respuesta.append(respuesta.to_dict())
        return {
            "id": str(self.id),
            "alumno": self.alumno.to_dict(False),
            "recurso": str(self.curso.id),
            "recurso_nombre": self.curso.nombre,
            "respuestas": contenidos_respuesta,
            "acierto": self.acierto
        }
Exemplo n.º 2
0
class SuperAdmin(db.Document, UserMixin):
    email = db.EmailField()
    password = db.StringField()
    active = db.BooleanField(default=True)
    confirmed_at = db.DateTimeField()
    created = db.DateTimeField(default=datetime.now)
    updated = db.DateTimeField(default=datetime.now)

    meta = {'strict': False}

    def encrypt_password(self, password_to_encrypt):
        self.password = hash_password(password_to_encrypt)

    def check_password(self, password_to_check):
        return verify_password(self.password, str(password_to_check).strip())
Exemplo n.º 3
0
class Historial(db.EmbeddedDocument):
    fecha = db.DateTimeField(default=datetime.now)
    data = db.StringField()
    meta = {'strict': False}

    def to_dict(self):
        return {"fecha": str(self.fecha), "data": self.data}
Exemplo n.º 4
0
class CursoBase(gj.Document):
    nombre = db.StringField(verbose_name="Nombre curso", max_length=200)
    descripcion = db.StringField()
    fecha_creacion = db.DateTimeField(default=datetime.now)
    contenidos = db.ListField(db.EmbeddedDocumentField(Contenido))
    institucion = db.ReferenceField(Institucion)
    categoria = db.ReferenceField(Categoria)
    habilidades = db.ListField(db.ReferenceField(Habilidad)) 

    imagen = db.StringField()
    meta = {'strict': False}

    def __str__(self):
        return self.nombre
    
    def to_dict(self):
        contenidos = []
        for contenido in self.contenidos:
            contenidos.append(contenido.to_dict())

        habilidades = []
        for habilidad in self.habilidades:
            habilidades.append(habilidad.to_dict())

        return{
            "id": str(self.id),
            "nombre": self.nombre,
            "descripcion": self.descripcion,
            "fecha_creacion": str(self.fecha_creacion),
            "contenidos": contenidos,
            "imagen": self.imagen,
            "categoria": self.categoria.to_dict(),
            "habilidades": habilidades
        }
Exemplo n.º 5
0
class Evento(gj.Document):
    title = db.StringField(max_length=256)
    start = db.DateTimeField()
    backgroundColor = db.StringField()
    textColor = db.StringField(default="white")
    cursos = db.ListField(db.ReferenceField(Curso))
    activo = db.BooleanField(default=False)
    eliminado = db.BooleanField(default=False)

    def setStart(self):
        mes = str(self.start.month)
        dia = str(self.start.day)
        if len(str(self.start.month)) is 1:
            mes = "0" + str(self.start.month)
        if len(str(self.start.day)) is 1:
            dia = "0" + str(self.start.day)
        return str(self.start.year) + "-" + mes + "-" + dia

    def to_dict(self):
        cursos = []
        for curso in self.cursos:
            cursos.append(curso.nombre)
        return {
            "id": str(self.id),
            "title": self.title,
            "start": self.setStart(),
            "backgroundColor": self.backgroundColor,
            "textColor": self.textColor,
            "cursos": cursos,
            "activo": self.activo
        }
Exemplo n.º 6
0
class EventModel(db.Document):

    name = db.StringField(required=True)
    organizer = db.StringField()
    location = db.StringField()
    about = db.StringField()
    attendees = db.ListField(default=[])
    date = db.DateTimeField()
    event_type = db.StringField(default='other',
                                choices=[
                                    'tech', 'science', 'finance',
                                    'artisan skills', 'health', 'education',
                                    'art', 'other'
                                ])

    meta = {'collection': 'events'}

    def json(self):
        return json.loads(self.to_json())

    def save_to_db(self):
        self.save()

    def delete_from_db(self):
        self.delete()
Exemplo n.º 7
0
class Blockchainid(db.Document):
    # metadata
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    # account data
    username = db.StringField(max_length=255, required=True)
    profile = db.StringField(required=True)
    transfer_address = db.StringField(max_length=255, required=True)
Exemplo n.º 8
0
class User(db.Document, UserMixin):
    email = db.StringField(max_length=255)
    password = db.StringField(max_length=255)
    active = db.BooleanField(default=True)
    confirmed_at = db.DateTimeField()
    roles = db.ListField(db.ReferenceField(Role), default=[])

    def __unicode__(self):
        return self.email
Exemplo n.º 9
0
class Product(db.Document):
    meta = {"collection": "products", "queryset_class": MyQuerySet}

    name = db.StringField(required=True)
    description = db.StringField(required=True)
    price = db.DecimalField(0, precision=2, required=True)
    location = db.EmbeddedDocumentField(Location, required=True)
    dateAdded = db.DateTimeField(default=datetime.now, required=True)
    seller = db.LazyReferenceField(User, reverse_delete_rule=2, required=True)

    def to_json(self):
        data = self.to_mongo()
        data["seller"] = loads(self.seller.fetch().to_json())
        return json_util.dumps(data)
Exemplo n.º 10
0
class Justificacion(db.Document):
    fecha = db.DateTimeField(default=datetime.now)
    asistencia = db.ReferenceField(Asistencia)
    alumno = db.ReferenceField(Alumno)
    causa = db.StringField(max_length=200)
    activo = db.BooleanField(default=True)

    def to_dict(self):
        return {
            "id": str(self.id),
            "asistencia": self.asistencia.to_dict_short(),
            "alumno": self.alumno.to_dict(),
            "causa": self.causa,
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S")
        }
Exemplo n.º 11
0
class Alerta(db.Document):
    tipo = db.StringField(choices=TIPOS_ALERTA)
    alumno = db.ReferenceField(Alumno)
    asignatura = db.ReferenceField(Asignatura)
    data = db.StringField(max_length=250)
    fecha = db.DateTimeField(default=datetime.now)
    historial = db.ListField(db.EmbeddedDocumentField(Historial))

    def to_dict(self):
        return {
            "id": str(self.id),
            "alumno": self.alumno.to_dict(),
            "data": self.data,
            "fecha": self.fecha.strftime("%m/%d/%Y %H:%M:%S"),
            "tipo": self.tipo,
            "asignatura": self.asignatura.to_dict()
        }
Exemplo n.º 12
0
class CursoBase(gj.Document):
    nombre = db.StringField(verbose_name="Nombre curso", max_length=200)
    descripcion = db.StringField()
    fecha_creacion = db.DateTimeField(default=datetime.now)
    contenidos = db.ListField(db.EmbeddedDocumentField(Contenido))
    categoria = db.ReferenceField(Categoria, requiered=True)
    habilidades = db.ListField(db.ReferenceField(Habilidad))
    imagen = db.StringField()

    # juego
    android = db.URLField(help_text="Url para android")
    ios = db.URLField(help_text="Url para ios")

    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self):
        contenidos = []
        contador = 0
        for contenido in self.contenidos:
            contenido.indentificador = contador
            contenidos.append(contenido.to_dict())
            contador = contador + 1

        habilidades = []
        for habilidad in self.habilidades:
            habilidades.append(habilidad.to_dict())

        categoria = {}
        if self.categoria:
            categoria = self.categoria.to_dict()

        self.save()
        return {
            "id": str(self.id),
            "nombre": self.nombre,
            "descripcion": self.descripcion,
            "fecha_creacion": str(self.fecha_creacion),
            "contenidos": contenidos,
            "imagen": self.imagen,
            "categoria": categoria,
            "habilidades": habilidades
        }
Exemplo n.º 13
0
class ObservacionProfesor(gj.Document):
    titulo = db.StringField(max_length=30)
    contenido = db.StringField(max_length=200)
    anonimo = db.StringField(choices=ANONIMATO)
    alumno = db.ReferenceField(Alumno)
    profesor = db.ReferenceField(Profesor)
    fecha = db.DateTimeField(default=datetime.now)

    def to_dict(self):
        return{
            "id": str(self.id),
            "titulo": self.titulo,
            "contenido": self.contenido,
            "anonimo": self.anonimo,
            "alumno": self.alumno.to_dict(),
            "profesor": self.profesor.to_dict(),
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S")
        }
Exemplo n.º 14
0
class Observacion(gj.Document):
    titulo = db.StringField(max_length=30)
    contenido = db.StringField(max_length=200)
    tipo = db.StringField(choices=TIPOS_OBSERVACION)
    nombre_personal = db.StringField(max_length=30)
    alumno = db.ReferenceField(Alumno)
    fecha = db.DateTimeField(default=datetime.now)

    def to_dict(self):
        return{
            "id": str(self.id),
            "titulo": self.titulo,
            "contenido": self.contenido,
            "tipo": self.tipo,
            "nombre_personal": self.nombre_personal,
            "alumno": self.alumno.to_dict(),
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S")
        }
Exemplo n.º 15
0
class ArticleModel(db.Document):

    title = db.StringField(required=True)
    content = db.StringField()
    author = db.StringField()
    date = db.DateTimeField()
    article_type = db.StringField(default='other', choices=['business news', 'tech news', 'science news', 'other'])
   
    meta = {'collection': 'articles'}

    def json(self):
        return json.loads(self.to_json())

    def save_to_db(self):
        self.save()

    def delete_from_db(self):
        self.delete()
Exemplo n.º 16
0
class Curso(gj.Document):
    nombre = db.StringField(verbose_name="Nombre curso", max_length=200)
    fecha_creacion = db.DateTimeField(default=datetime.now)
    contenidos = db.ListField(db.EmbeddedDocumentField(Contenido))
    asignatura = db.ReferenceField(Asignatura)
    institucion = db.ReferenceField(Institucion)
    profesor = db.ReferenceField(Profesor)
    categoria = db.ReferenceField(Categoria)
    alumnos = db.ListField(db.ReferenceField(Alumno))
    activo = db.BooleanField(default=True)
    version = db.StringField(default="1.0")
    curso_base = db.ReferenceField(CursoBase)
    descripcion = db.StringField()
    aprobacion = db.IntField(default=0)
    imagen = db.StringField()
    habilidades = db.ListField(db.ReferenceField(Habilidad))
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self, full=True):
        data = {
            "id": str(self.id),
            "nombre": self.nombre,
            "fecha_creacion": str(self.fecha_creacion),
            "profesor": self.profesor.to_dict(),
            "activo": self.activo,
            "version": self.version,
            "descripcion": self.descripcion,
            "imagen": self.imagen,
            "curso_base": self.curso_base.to_dict(),
            "categoria": self.categoria.to_dict()
        }
        if full:
            data.update({
                "contenidos": [x.to_dict() for x in self.contenidos],
                "asignatura": self.asignatura.to_dict(),
                "alumnos": [x.to_dict() for x in self.alumnos],
                "aprobacion": self.aprobacion,
                "curso_base": self.curso_base.to_dict(),
                "habilidades": [x.to_dict() for x in self.habilidades]
            })
        return data
Exemplo n.º 17
0
class Institucion(gj.Document):
    nombre = db.StringField(verbose_name="Nombre Institucion", max_length=200)
    fecha_creacion = db.DateTimeField(default=datetime.now)
    logo = db.StringField()
    identificador = db.StringField()

    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self):
        return{
            "id": str(self.id),
            "nombre": self.nombre,
            "fecha_creacion": str(self.fecha_creacion),
            "logo": self.logo,
            "identificador": self.identificador
        }
Exemplo n.º 18
0
class Asistencia(db.Document):
    fecha = db.DateTimeField(default=datetime.now)
    curso = db.ReferenceField(Curso)
    asignatura = db.ReferenceField(Asignatura)
    alumnos_presentes = db.ListField(db.ReferenceField(Alumno))
    alumnos_ausentes = db.ListField(db.ReferenceField(Alumno))

    def to_dict_short(self):
        return {
            "id": str(self.id),
            "asignatura": self.asignatura.nombre,
            "alumnos_presentes": len(self.alumnos_presentes),
            "alumnos_ausentes": len(self.alumnos_ausentes),
            "curso": self.curso.nombre,
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S"),
        }

    def to_dict(self):
        curso = Curso.objects(id=self.curso.id).first()
        asignatura = Asignatura.objects(id=self.asignatura.id).first()
        alumnos_presentes = []
        alumnos_ausentes = []
        for alumno in self.alumnos_presentes:
            alumno_aux = Alumno.objects(id=alumno.id).first()
            alumnos_presentes.append(alumno_aux.to_dict())

        for alumno in self.alumnos_ausentes:
            alumno_aux = Alumno.objects(id=alumno.id).first()
            alumnos_ausentes.append(alumno_aux.to_dict())

        return {
            "id": str(self.id),
            "asignatura": asignatura.to_dict(),
            "alumnos_presentes": alumnos_presentes,
            "alumnos_ausentes": alumnos_ausentes,
            "curso": self.curso.to_dict(),
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S")
        }
Exemplo n.º 19
0
class History(db.Document):
    date = db.DateTimeField(required=True)
    list = db.ListField(DataRecord)
    user = db.ReferenceField(Account)
Exemplo n.º 20
0
class Email(db.Document):
    # metadata
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    # account data
    address = db.EmailField(required=True, unique=True)
    email_list = db.StringField(max_length=255, required=True)
Exemplo n.º 21
0
class TokenBlocklist(db.Document, BaseMixin):
    jti = db.StringField(max_length=36)
    created_at = db.DateTimeField(default=datetime.utcnow())
Exemplo n.º 22
0
class Archivo(gj.Document):
    nombre = db.StringField(verbose_name="Nombre Archivo", max_length=200)
    path = db.StringField(verbose_name="Path", max_length=200)
    asignatura = db.ReferenceField(Asignatura)
    fecha = db.DateTimeField(default=datetime.now)
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self):
        return {
            "id": str(self.id),
            "nombre": self.nombre,
            "path": self.path,
            "asignatura": self.asignatura.to_dict(),
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S")
        }

    # literal los class method son los services en java
    @classmethod
    def upload(cls, base_path, new_file, asignatura_id):
        asignatura = Asignatura.objects(id=asignatura_id).first()
        folder = base_path + str(asignatura['id'])
        if not os.path.exists(folder):
            os.mkdir(folder)
        file_name = secure_filename(new_file.filename)
        path = os.path.join(folder, file_name)
        new_file.save(path)
        if os.path.exists(path):
            archivo = Archivo(nombre=file_name,
                              path=path,
                              asignatura=asignatura)
            archivo.save()
        return archivo.to_dict()

    @classmethod
    def get_all_by_asignatura(cls, asignatura_id):
        archivos = Archivo.objects(asignatura=asignatura_id).all()
        result_list = []
        for archivo in archivos:
            result_list.append(archivo.to_dict())
        return result_list

    @classmethod
    def download(cls, archivo_id):
        archivo = Archivo.objects(id=archivo_id).first()
        print(60 * "*", archivo.path)
        return send_file(archivo.path,
                         as_attachment=True,
                         attachment_filename=archivo.nombre + "")

    @classmethod
    def erase(cls, archivo_id):
        try:
            archivo = Archivo.objects(id=archivo_id).first()
            os.remove(archivo.path)
            archivo.delete()
            return "Archivo eliminado"
        except Exception as e:
            print(str(e))
            return "No se pudo eliminar el archivo"

    @classmethod
    def get_all(cls):
        archivos = Archivo.objects().all()
        result_list = []
        for archivo in archivos:
            result_list.append(archivo.to_dict())
        return result_list
Exemplo n.º 23
0
class Curso(gj.Document):
    nombre = db.StringField(verbose_name="Nombre curso", max_length=200)
    fecha_creacion = db.DateTimeField(default=datetime.now)
    contenidos = db.ListField(db.EmbeddedDocumentField(Contenido))
    asignatura = db.ReferenceField(Asignatura)
    institucion = db.ReferenceField(Institucion)
    profesor = db.ReferenceField(Profesor)
    categoria = db.ReferenceField(Categoria)
    alumnos = db.ListField(db.ReferenceField(Alumno))
    activo = db.BooleanField(default=True)
    version_actual = db.BooleanField(default=True)
    publicado = db.BooleanField(default=False)
    eliminado = db.BooleanField(default=False)
    version = db.IntField(default=1)
    curso_base = db.ReferenceField(CursoBase, reverse_delete_rule=3)
    descripcion = db.StringField()
    aprobacion = db.IntField( default=0 )
    imagen = db.StringField()
    habilidades = db.ListField(db.ReferenceField(Habilidad))
    clon_padre = db.ReferenceField('Curso')
    meta = {'strict': False }
    
    def __str__(self):
        return self.nombre
    
    def actualizar_aprobacion(self):
        from models.evaluacion import Evaluacion
        promedio = 0
        cantidad = Evaluacion.objects(curso=self.id).count()
        for evaluacion in Evaluacion.objects(curso=self.id).all():
            promedio = evaluacion.acierto + promedio
        if cantidad>0:
            promedio = int(promedio/cantidad)
        self.aprobacion = promedio

    def to_dict(self, full=True):
        data = {
            "id": str(self.id),
            "nombre": self.nombre,
            "fecha_creacion": str(self.fecha_creacion),
            "activo": self.activo,
            "eliminado": self.eliminado,
            "publicado": self.publicado,
            "version": self.version,
            "descripcion": self.descripcion,
            "imagen": self.imagen,
            "curso_base": self.curso_base.to_dict()
        }
        if self.profesor:
            data['profesor'] = self.profesor.to_dict()
        if self.categoria:
            data['categoria'] = self.categoria.to_dict()
        if full:
            clon_padre = {}
            if self.clon_padre != None:
                clon_padre = self.clon_padre.to_dict()
            data.update({
                "contenidos":  [x.to_dict() for x in self.contenidos],
                "alumnos":     [x.to_dict() for x in self.alumnos],
                "aprobacion":  self.aprobacion,
                "curso_base":  self.curso_base.to_dict(),
                "habilidades": [x.to_dict() for x in self.habilidades],
                "clon_padre": clon_padre,
                "version_actual": self.version_actual
            })
            if self.asignatura:
                data['asignatura'] = self.asignatura.to_dict()
        return data
Exemplo n.º 24
0
class Evaluacion(gj.Document):
    alumno = db.ReferenceField(Alumno)
    prueba = db.ReferenceField(Prueba)
    cantidad_buenas = db.IntField()
    cantidad_malas = db.IntField()
    cantidad_omitidas = db.IntField()
    puntaje = db.IntField()
    fecha = db.DateTimeField(default=datetime.now)
    respuestas = db.ListField(db.EmbeddedDocumentField(Respuesta))
    meta = {'strict': False}

    def to_dict(self):
        respuestas = []
        for respuesta in self.respuestas:
            respuestas.append(respuesta.to_dict())
        return {
            "id": str(self.id),
            "alumno": self.alumno.to_dict(),
            "prueba": self.prueba.to_dict(),
            "cantidad_buenas": self.cantidad_buenas,
            "cantidad_malas": self.cantidad_malas,
            "cantidad_omitidas": self.cantidad_omitidas,
            "puntaje": self.puntaje,
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S"),
            "respuestas": respuestas
        }

    #TODO: validar si existen los objetos asociados
    @classmethod
    def evaluar_prueba(cls, alumno_id, body):
        prueba_id = body["prueba_id"]
        listado_respuestas = body["respuestas"]
        prueba = Prueba.objects(id=prueba_id).first()
        alumno = Alumno.objects(id=alumno_id).first()
        print(prueba_id)
        print("prueba: ", prueba)
        evaluacion = Evaluacion()
        cantidad_buenas = 0
        cantidad_malas = 0
        cantidad_omitidas = 0
        evaluacion.alumno = alumno
        evaluacion.prueba = prueba
        for pregunta in prueba.preguntas:
            respuesta = Respuesta()
            respuesta.numero_pregunta = pregunta.numero_pregunta
            if listado_respuestas[str(pregunta.numero_pregunta)] == "":
                cantidad_omitidas = cantidad_omitidas + 1
                respuesta.correcta = False
                if prueba.tipo != "TAREA":
                    respuesta.alternativa = "O"
            else:
                if prueba.tipo != "TAREA":
                    if listado_respuestas[str(pregunta.numero_pregunta)].upper(
                    ) == pregunta.alternativa.upper():
                        cantidad_buenas = cantidad_buenas + 1
                        respuesta.correcta = True
                    else:
                        cantidad_malas = cantidad_malas + 1
                        respuesta.correcta = False
                    respuesta.alternativa = str(listado_respuestas[str(
                        pregunta.numero_pregunta)].upper())
                else:
                    if listado_respuestas[str(
                            pregunta.numero_pregunta)].upper() == "CORRECTA":
                        cantidad_buenas = cantidad_buenas + 1
                        respuesta.correcta = True
                    if listado_respuestas[str(
                            pregunta.numero_pregunta)].upper() == "INCORRECTA":
                        cantidad_malas = cantidad_malas + 1
                        respuesta.correcta = False
            evaluacion.respuestas.append(respuesta)
        evaluacion.cantidad_buenas = cantidad_buenas
        evaluacion.cantidad_malas = cantidad_malas
        evaluacion.cantidad_omitidas = cantidad_omitidas
        evaluacion.puntaje = int((
            (850 - prueba.puntaje_base) / len(prueba.preguntas)) *
                                 cantidad_buenas + prueba.puntaje_base)
        evaluacion.save()
        return {'Response': 'exito'}

    @classmethod
    def list_to_dict(cls, lista):
        result_list = []
        for element in lista:
            result_list.append(element.to_dict())
        return result_list

    @classmethod
    def get_pruebas_no_respondidas(cls, alumno_id, asignatura_id):
        ensayos = Prueba.objects(asignatura=asignatura_id,
                                 visible=True,
                                 tipo='ENSAYO').all()
        talleres = Prueba.objects(asignatura=asignatura_id,
                                  visible=True,
                                  tipo='TALLER').all()
        pruebas = list(ensayos) + list(talleres)

        pruebas_no_respondidas = []
        for prueba in pruebas:
            evaluacion = Evaluacion.objects(alumno=alumno_id,
                                            prueba=prueba.id).first()
            if evaluacion == None:
                pruebas_no_respondidas.append(prueba)
        return Prueba.list_to_dict(pruebas_no_respondidas)
Exemplo n.º 25
0
class Historial(db.EmbeddedDocument):
    fecha = db.DateTimeField(default=datetime.now)
    id_visto = db.StringField()
    meta = {'strict': False}
Exemplo n.º 26
0
class Session(db.DynamicDocument):
    name = db.StringField(required=True)
    password = db.StringField()
    created_on = db.DateTimeField(default=datetime.utcnow)
    songs = db.ListField(db.EmbeddedDocumentField('Song'))
    messages = db.ListField(db.StringField())
Exemplo n.º 27
0
class Video(gj.Document):
    nombre = db.StringField(verbose_name="Nombre Video", max_length=200)
    uri = db.StringField(verbose_name="Uri", max_length=200)
    asignatura = db.ReferenceField(Asignatura)
    curso = db.ReferenceField(Curso)
    fecha = db.DateTimeField(default=datetime.now)
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self):
        return {
            "id": str(self.id),
            "nombre": self.nombre,
            "uri": self.uri,
            "asignatura": self.asignatura.to_dict(),
            "curso": self.curso.to_dict(),
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S")
        }

    # literal los class method son los services en java
    @classmethod
    def create(cls, new_video):
        asignatura = Asignatura.objects(id=new_video["asignatura_id"]).first()
        curso = Curso.objects(id=new_video["curso_id"]).first()
        id_video = new_video['uri'].split("?v=")
        id_video = id_video[1]
        if "&" in id_video:
            id_video = id_video.split("&")[0]
        embed_link = "https://www.youtube.com/embed/" + id_video
        video = Video(nombre=new_video['nombre'],
                      uri=embed_link,
                      asignatura=asignatura,
                      curso=curso)
        video.save()
        return video.to_dict()

    @classmethod
    def get_all(cls):
        videos = Video.objects().all()
        result_list = []
        for video in videos:
            result_list.append(video.to_dict())
        return result_list

    @classmethod
    def get_all_by_asignatura(cls, asignatura_id):
        videos = Video.objects(asignatura=asignatura_id).all()
        result_list = []
        for video in videos:
            result_list.append(video.to_dict())
        return result_list

    @classmethod
    def get_all_by_asignatura_and_curso(cls, asignatura_id, curso_id):
        videos = Video.objects(asignatura=asignatura_id, curso=curso_id).all()
        result_list = []
        for video in videos:
            result_list.append(video.to_dict())
        return result_list

    @classmethod
    def get_by_id(cls, video_id):
        video = Video.objects(id=video_id).first()
        return video.to_dict()

    @classmethod
    def erase(cls, video_id):
        video = Video.objects(id=video_id).first()
        video.delete()
        return "Video eliminado"
Exemplo n.º 28
0
class Prueba(gj.Document):
    nombre = db.StringField(max_length=250)
    cantidad_preguntas = db.IntField()
    asignatura = db.ReferenceField(Asignatura)
    fecha = db.DateTimeField(default=datetime.now)
    preguntas = db.ListField(db.EmbeddedDocumentField(Pregunta))
    topicos = db.ListField(db.ReferenceField(Topico))
    tipo = db.StringField(choices=TIPOS_PRUEBA)
    visible = db.BooleanField(default=False)
    activo = db.BooleanField(default=True)
    puntaje_base = db.IntField(default=0)
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self):
        topicos = []
        for topico in self.topicos:
            topicos.append(topico.to_dict())
        preguntas = []
        for pregunta in self.preguntas:
            preguntas.append(pregunta.to_dict())
        return {
            "id": str(self.id),
            "nombre": self.nombre,
            "cantidad_preguntas": self.cantidad_preguntas,
            "asignatura": self.asignatura.to_dict(),
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S"),
            "tipo": self.tipo,
            "topicos": topicos,
            "preguntas": preguntas,
            "puntaje_base": self.puntaje_base,
            "visible": self.visible
        }

    #TODO: validar que id de la prueba
    @classmethod
    def load_preguntas(cls, lista, prueba_id):
        try:
            prueba = Prueba.objects(id=prueba_id).first()
            if (prueba == None):
                return {"error": "Prueba no encontrada"}
        except:
            return {"error": "Error en el id de la prueba"}

        listado_preguntas = Pregunta.create_from_excel(lista)
        if (len(listado_preguntas) == 0):
            return {
                "error":
                "Problema al cargar las preguntas de la prueba, favor revisar excel"
            }
        prueba.preguntas = listado_preguntas
        prueba.cantidad_preguntas = len(lista)
        prueba.save()
        return {"Response": "Prueba creada con exito"}

    @classmethod
    def list_to_dict(cls, lista):
        result_list = []
        for element in lista:
            result_list.append(element.to_dict())
        return result_list

    @classmethod
    def update_visible(cls, id_prueba):
        prueba = Prueba.objects(id=id_prueba).first()
        prueba.visible = not prueba.visible
        prueba.save()
        return "Campo visible actualizado"