示例#1
0
    def run(self):
        query = StudentAnswersEntity.all().run(limit=600)
        for ans_ent in query:
            ans_dict = transforms.loads(ans_ent.data)
            for assessment, answers in ans_dict.iteritems():
                student = Student.all().filter('user_id',
                                               ans_ent.key().name()).get()
                s_scores = transforms.loads(student.scores)
                d = {
                    'email': student.key().name(),
                    'assessment': assessment,
                    'score': s_scores.get(assessment, '?????? wtf'),
                }

                for answer in answers:
                    k = 'q%d' % (answer['index'] + 1)
                    if answer['correct']:
                        d[k] = 'correct'
                    else:
                        if isinstance(answer['value'], int):
                            d[k] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[
                                answer['value']]
                        else:
                            d[k] = ''

                yield d
    def run(self):
        """Computes student statistics."""

        enrollment = EnrollmentAggregator()
        scores = ScoresAggregator()
        names = NamesAggregator()
        mapper = utils.QueryMapper(Student.all(),
                                   batch_size=500,
                                   report_every=1000)

        def map_fn(student):
            enrollment.visit(student)
            scores.visit(student)
            names.visit(student)

        mapper.run(map_fn)

        data = {
            'enrollment': {
                'enrolled': enrollment.enrolled,
                'unenrolled': enrollment.unenrolled
            },
            'scores': scores.name_to_tuple,
            'id': names.st_id
        }

        return data
示例#3
0
  def post(self):
    user = self.personalizePageAndGetUser()
    if not user:
      self.redirect(users.create_login_url(self.request.uri))
      return

    if (MAX_CLASS_SIZE and Student.all(keys_only=True).count() >= MAX_CLASS_SIZE):
      self.templateValue['course_status'] = 'full'
    else:
      # Create student record
      name = self.request.get('form01')

      # create new or re-enroll old student
      student = Student.get_by_email(user.email())
      if student:
        if not student.is_enrolled:
          student.is_enrolled = True
          student.name = name
      else:
        student = Student(key_name=user.email(), name=name, is_enrolled=True)
      student.put()

    # Render registration confirmation page
    self.templateValue['navbar'] = {'registration': True}
    self.render('confirmation.html')
示例#4
0
 def run(self):
     query = Student.all().filter('is_participant', True).run(limit=600)
     for student in query:
         yield {
                 'email': student.key().name(),
                 'group_id': student.group_id,
                 }
示例#5
0
    def run(self):
        """Computes student statistics."""

        enrollment = EnrollmentAggregator()
        scores = ScoresAggregator()
        student_scores = StudentAggregator()
        feedback = PostcourseAggregator()
        mapper = utils.QueryMapper(
            Student.all(), batch_size=500, report_every=1000)

        def map_fn(student):
            enrollment.visit(student)
            scores.visit(student)
	    student_scores.visit(student)

        mapper.run(map_fn)

        mapper = utils.QueryMapper(
            StudentAnswersEntity.all(), batch_size=500, report_every=1000)

        def map_fn1(student):
            feedback.visit(student)

        mapper.run(map_fn1)

        data = {
            'enrollment': {
                'enrolled': enrollment.enrolled,
                'unenrolled': enrollment.unenrolled},
            'scores': scores.name_to_tuple,
	    'students' : student_scores.name_to_tuple,
	    'feedback' : feedback.name_to_tuple}

        return data
示例#6
0
 def run(self):
     query = Student.all().filter('is_participant', True).run(limit=600)
     for student in query:
         yield {
             'email': student.key().name(),
             'group_id': student.group_id,
         }
示例#7
0
def get_student_count():
    count = generalcounter.get_count(PARTICIPANT_COUNT)
    if not count:
        count = Student.all(keys_only=True).filter("is_participant",
                                                   True).count(limit=10000)
        generalcounter.increment(PARTICIPANT_COUNT, by=count)
    return count
    def run(self):
        """Computes student statistics."""

        enrollment = EnrollmentAggregator()
        scores = ScoresAggregator()
        names = NamesAggregator()
        mapper = utils.QueryMapper(
            Student.all(), batch_size=500, report_every=1000)

        def map_fn(student):
            enrollment.visit(student)
            scores.visit(student)
            names.visit(student)

        mapper.run(map_fn)
        
        data = {
            'enrollment': {
                'enrolled': enrollment.enrolled,
                'unenrolled': enrollment.unenrolled},
            'scores': scores.name_to_tuple,
            'id': names.st_id
                }

        return data
示例#9
0
    def run(self):
        query = Student.all().filter('is_participant =', True).run(limit=600)
        unit = self.unit
        for student in query:
            # TODO use defaultdict('') instead of local vars?
            unit_page = WikiPage.get_page(student, unit=unit)
            posted_unit = bool(unit_page)
            num_endorsements = num_exemplaries = num_comments = ''
            if unit_page:
                num_endorsements = Annotation.endorsements(
                    what=unit_page).count()
                num_exemplaries = Annotation.exemplaries(
                    what=unit_page).count()
                num_comments = WikiComment.all().filter('topic',
                                                        unit_page).count()
                fields = viewable_model(unit_page)
            else:
                fields = {}

            num_given = Annotation.endorsements(who=student, unit=unit).count()
            exemps_given = Annotation.exemplaries(who=student,
                                                  unit=unit).count()

            info = {
                'email':
                student.key().name(),
                'name':
                student.name,
                'unit':
                unit,
                'group_id':
                student.group_id,
                'posted_unit':
                posted_unit,
                'endorsements_received':
                num_endorsements,
                'endorsements_given':
                num_given,
                'exemplaries_received':
                num_exemplaries,
                'exemplaries_given':
                exemps_given,
                'num_comments':
                num_comments,
                'link':
                Markup('<a href="%s%s?%s">link</a>') %
                (self.request.host_url, '/wiki',
                 urllib.urlencode({
                     'unit': unit,
                     'student': student.wiki_id,
                     'action': 'view'
                 })),
            }
            info.update(
                {k: re.sub(r'<[^>]*?>', '', v)
                 for k, v in fields.items()})
            #info.update(fields)
            yield info
示例#10
0
    def get(self):


        if not(Roles.is_course_admin(self.app_context)):
            self.redirect("preview")

        self.response.headers['Content-type'] = 'text/csv'
        self.response.headers['Content-disposition'] = 'attachment; filename=students.csv'


        course = self.get_course()

        assessments=[]

        for unit in course.get_units():
            if (unit.type=="A"):
                assessments.append(str(unit.unit_id))


        writer = UnicodeWriter(self.response.out)

        keys = Student.all(keys_only=True).run()

        rows=[]

        for key in keys:

            student=Student.get_by_key_name(key.name())

            rec={"email": key.name(), "name": student.name, "enrolled": unicode(student.is_enrolled), "dateEnrolled": unicode(student.enrolled_on) }

            if (student.scores):
                scores=json.loads(student.scores)

                for assessmentName, score in scores.iteritems():
                    rec[assessmentName]=str(score)


            rows.append(rec)

        headerRow = ["Email", "Name", "Is Enrolled", "Enrolled On"]

        for assessmentName in assessments:
            headerRow.append(course.find_unit_by_id(assessmentName).title)

        writer.writerow(headerRow)

        for row in rows:

            renderedRow=[row["email"],row["name"],row["enrolled"],row["dateEnrolled"]]

            for assessmentName in assessments:
                if (assessmentName in row):
                    renderedRow.append(row[assessmentName])
                else:
                    renderedRow.append("")

            writer.writerow(renderedRow)
示例#11
0
    def run(self):
        for s in Student.all().run(limit=9999):
            d = db.to_dict(s)
            d['email'] = s.key().name()
            if d.get('is_participant', False):
                d['can_use_location'] = find_can_use_location(s)

            for p in d.keys():
                if type(d[p]) is list:
                    d[p] = u", ".join(d[p])
            yield d
示例#12
0
    def run(self):
        for s in Student.all().run(limit=9999):
            d = db.to_dict(s)
            d['email'] = s.key().name()
            if d.get('is_participant', False):
                d['can_use_location'] = find_can_use_location(s)

            for p in d.keys():
                if type(d[p]) is list:
                    d[p] = u", ".join(d[p])
            yield d
示例#13
0
    def run(self):
        """Computes student statistics."""
        enrollment = self.EnrollmentAggregator()
        scores = self.ScoresAggregator()
        mapper = models_utils.QueryMapper(Student.all(), batch_size=500, report_every=1000)

        def map_fn(student):
            enrollment.visit(student)
            scores.visit(student)

        mapper.run(map_fn)

        data = {
            "enrollment": {"enrolled": enrollment.enrolled, "unenrolled": enrollment.unenrolled},
            "scores": scores.name_to_tuple,
        }

        return data
示例#14
0
    def run(self):
        query = Student.all().filter('is_participant =', True).run(limit=600)
        unit = self.unit
        for student in query:
            # TODO use defaultdict('') instead of local vars?
            unit_page = WikiPage.get_page(student, unit=unit)
            posted_unit = bool(unit_page)
            num_endorsements = num_exemplaries = num_comments = ''
            if unit_page:
                num_endorsements = Annotation.endorsements(what=unit_page).count()
                num_exemplaries = Annotation.exemplaries(what=unit_page).count()
                num_comments = WikiComment.all().filter('topic', unit_page).count()
                fields = viewable_model(unit_page)
            else:
                fields = {}

            num_given = Annotation.endorsements(who=student, unit=unit).count()
            exemps_given = Annotation.exemplaries(who=student, unit=unit).count()

            info = {
                    'email': student.key().name(),
                    'name': student.name,
                    'unit': unit,
                    'group_id': student.group_id,
                    'posted_unit': posted_unit,
                    'endorsements_received': num_endorsements,
                    'endorsements_given': num_given,
                    'exemplaries_received': num_exemplaries,
                    'exemplaries_given': exemps_given,
                    'num_comments': num_comments,
                    'link': Markup('<a href="%s%s?%s">link</a>') % (
                        self.request.host_url,
                        '/wiki',
                        urllib.urlencode({
                            'unit': unit,
                            'student': student.wiki_id,
                            'action': 'view'
                            })),
                    }
            info.update({k: re.sub(r'<[^>]*?>', '', v) for k, v in fields.items()})
            #info.update(fields)
            yield info
示例#15
0
文件: utils.py 项目: alu042/bmed
    def post(self):
        user = users.get_current_user()
        if user:
            email = user.email()
            self.templateValue["email"] = email
            self.templateValue["logoutUrl"] = users.create_logout_url("/")

        # Restrict the maximum course size to 250000 people
        # FIXME: you can change this number if you wish.
        students = Student.all(keys_only=True)
        if students.count() > 249999:
            self.templateValue["course_status"] = "full"

        # Create student record
        name = self.request.get("form01")
        student = Student(key_name=user.email(), name=name)
        student.put()

        # Render registration confirmation page
        navbar = {"registration": True}
        self.templateValue["navbar"] = navbar
        self.render("confirmation.html")
示例#16
0
文件: utils.py 项目: alu042/bmed
    def post(self):
        user = users.get_current_user()
        if user:
            email = user.email()
            self.templateValue['email'] = email
            self.templateValue['logoutUrl'] = users.create_logout_url('/')

        # Restrict the maximum course size to 250000 people
        # FIXME: you can change this number if you wish.
        students = Student.all(keys_only=True)
        if (students.count() > 249999):
            self.templateValue['course_status'] = 'full'

        # Create student record
        name = self.request.get('form01')
        student = Student(key_name=user.email(), name=name)
        student.put()

        # Render registration confirmation page
        navbar = {'registration': True}
        self.templateValue['navbar'] = navbar
        self.render('confirmation.html')
示例#17
0
  def post(self):
    user = users.get_current_user()
    if user:
      email = user.email()
      self.templateValue['email'] = email
      self.templateValue['logoutUrl'] = users.create_logout_url('/')

    # Restrict the maximum course size to 250000 people
    # FIXME: you can change this number if you wish.
    students = Student.all(keys_only=True)
    if (students.count() > 249999):
      self.templateValue['course_status'] = 'full'

    # Create student record
    name = self.request.get('form01')
    student = Student(key_name=user.email(), name=name)
    student.put()

    # Render registration confirmation page
    navbar = {'registration': True}
    self.templateValue['navbar'] = navbar
    self.render('confirmation.html')
示例#18
0
    def run(self):
        query = StudentAnswersEntity.all().run(limit=600)
        for ans_ent in query:
            ans_dict = transforms.loads(ans_ent.data)
            for assessment, answers in ans_dict.iteritems():
                student = Student.all().filter('user_id', ans_ent.key().name()).get()
                s_scores = transforms.loads(student.scores)
                d = {
                        'email': student.key().name(),
                        'assessment': assessment,
                        'score': s_scores.get(assessment, '?????? wtf'),
                        }

                for answer in answers:
                    k = 'q%d' % (answer['index'] + 1)
                    if answer['correct']:
                        d[k] = 'correct'
                    else:
                        if isinstance(answer['value'], int):
                            d[k] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[answer['value']]
                        else:
                            d[k] = ''

                yield d
示例#19
0
 def get_students(self):
     """CGL-MOOC-Builder: return all students"""
     everyone = Student.all()
     return everyone
示例#20
0
 def get_students(self):
     everyone = Student.all()
     return everyone
示例#21
0
 def get_students(self):
     everyone = Student.all()
     return everyone
示例#22
0
    def get(self):
        """Handles GET requests."""
        if not self.personalize_page_and_get_enrolled():
            return

        
        self.template_value['navbar'] = {'statistics': True}
        
        #cogemos unidades, lecciones y alumnos
        unidades = self.get_units()
        alumnos = [s for s in Student.all()]
        curso = self.get_course()
        
        # dicceionarios auxliares para calculos intermedios
        media_examen = {}
        count_examen = {}
        examen_completado = {}
        
    #**** VARIABLES FINALES
        units = []
        assessments = []
        students = { 'total': 0, 'last_week': 0, 'last_month': 0 }
        

    #**** UNIDADES Y LECCIONES
    
        # Creamos estructura de unidades > lecciones para posteriormente realizar tracking de alumnos
        
        for unit in unidades:
            if unit.type == 'U': # si es unidad, cogemos actividades y creamos objeto
                
                lecciones = curso.get_lessons(unit.unit_id)
                my_lessons = []
                
                for lesson in lecciones:
                    my_lessons.append({'id': lesson.lesson_id, 'title': lesson.title, 'students': 0})
                    
                units.append({ 'id': int(unit.unit_id), 'title': unit.title, 'students': 0, 'lessons': my_lessons })
            
            if unit.type == 'A':
                assessments.append({ 'id': unit.unit_id, 'title': unit.title, 'studentsCompleted': 0, 'studentsDone': 0, 'average': 0})
        
        
        
    #**** ALUMNOS
        
        count_alumnos = len(alumnos)
        alumnos_week = 0
        alumnos_month = 0
        
        last_week = datetime.datetime.now() - datetime.timedelta(days=7)
        last_month = datetime.datetime.now() - datetime.timedelta(days=30)
        
        for alumno in alumnos:
            
            students['total'] += 1
            if alumno.enrolled_on >= last_week:
                students['last_week'] += 1 
            if alumno.enrolled_on >= last_month:
                students['last_month'] += 1 
            
            # Scores del alumno
            scores = curso.get_all_scores(alumno)
            
            for score in scores: # hacemos conteos y acumulaciones para las notas medias
                if score['completed'] == True:
                    examen_completado[score['id']] = examen_completado.get(score['id'], 0) + 1
                    
                media_examen[score['id']] = media_examen.get(score['id'], 0) + score['score']
                count_examen[score['id']] = count_examen.get(score['id'], 0) + 1
                
            # Tracking del alumno
            for unit in units:
                tracker = curso.get_progress_tracker()
                progress = tracker.get_or_create_progress(alumno)

                lecciones_hechas = 0
                lecciones_total = 0

                for lesson in unit['lessons']:
                    lecciones_total += 1

                    if(tracker.get_html_status(progress, unit['id'], lesson['id'])): #lección hecha
                        lecciones_hechas += 1
                        lesson['students'] += 1

                if(lecciones_hechas == lecciones_total):
                    unit['students'] += 1
                
                
        # Calculamos las notas medias
        for asm in assessments:
            if(media_examen[asm['id']] > 0):
                asm['average'] = media_examen[asm['id']] / count_examen[asm['id']]
    
            asm['studentsCompleted'] = examen_completado.get(asm['id'], 0)
        
        
        
        """Insertamos las variables de estadisticas"""
        
        self.template_value['units'] = units
        self.template_value['assessments'] = assessments
        self.template_value['students'] = students
        
        self.render('statistics.html')