Esempio n. 1
0
    def handle(self, *args, **options):

        for q in Quizes.objects.all():

            # Call to qualtrics
            api_string = "https://survey.qualtrics.com/WRAPI/ControlPanel/api.php?API_SELECT=ControlPanel&Version=2.3&Request=getLegacyResponseData&User=econ%20ra&Token=h6ylmTK5Jr5yQhjHNwJrAmWzJCQl1UomFJAZIIS9&Format=JSON&SurveyID="
            api_call = "%s%s" % (api_string, q.q_id)
            r = requests.get(api_call)
            data = r.json()
            #self.stdout.write('%s' % data)

            for response_id in data:
                try:
                    score = str(data[response_id]['Score']['Sum'])
                except TypeError:
                    score = str(data[response_id]['Score'])
                finished = data[response_id]['Finished']

                if score == '':  #and finished == u'1':
                    score = "0"

                if Results.objects.filter(response_id=response_id).count() > 0:
                    # CHecks if previously not finished and updates according
                    if Results.objects.get(
                            response_id=response_id).finished == "0" and data[
                                response_id]['Finished'] == u'1':
                        Results.objects.filter(response_id=response_id).update(
                            score=encode(score, 'utf-8'), finished="1")
                    else:
                        continue

                new_r = Results(response_id=response_id,
                                score=encode(score, 'utf_8'),
                                finished=finished)
                #new_r.response_id = response_id
                #new_r.score = encode(score, 'utf-8')
                #new_r.finished = finished
                new_r.save()

                # Associate with Quizes
                quiz = Quizes.objects.get(q_id=q.q_id)
                r = Results.objects.get(id=new_r.id)
                quiz.results_set.add(r)

                # Associate with user
                temp_uname = encode(data[response_id]['Name'], 'utf_8')
                uname = temp_uname.replace("Doe, ", "")
                #self.stdout.write('%s' % uname)
                try:
                    user = User.objects.get(username=uname)
                    user.results_set.add(r)

                except ObjectDoesNotExist:
                    new_misfit = MisfitNames(username=uname)
                    new_misfit.save()
Esempio n. 2
0
    def handle(self, *args, **options):

        self.stdout.write("%s: Begin!" % str(datetime.now()))

        api_string = "https://survey.qualtrics.com/WRAPI/ControlPanel/api.php?API_SELECT=ControlPanel&Version=2.3&Request=getLegacyResponseData&User=econ%20ra&Token=h6ylmTK5Jr5yQhjHNwJrAmWzJCQl1UomFJAZIIS9&Format=JSON&SurveyID="

        api_urls = []

        for q in Quizes.objects.all():
            api_url = "%s%s" % (api_string, q.q_id)
            api_urls.append(api_url)

        rs = (grequests.get(u, stream=False) for u in api_urls)
        dataListDict = []
        #grequests.map(rs)

        qualtricsData = grequests.map(rs)

        #creates a dictionary of all new results
        errorInQualData = False

        for r in qualtricsData:
            seperator = 'SurveyID='
            try:
                before, seperator, q_id = r.url.partition(seperator)
            except AttributeError:
                errorInQualData = True
                break
            else:
                data = r.json()
                for response_id in data:
                    try:
                        score = str(data[response_id]['Score']['Sum'])
                    except TypeError:
                        score = str(data[response_id]['Score'])
                    else:
                        finished = data[response_id]['Finished']

                        if score == '':  #and finished == u'1':
                            score = "0"

                        temp_uname = encode(data[response_id]['Name'])
                        uname = temp_uname.replace("Doe, ", "")

                        try:
                            existingResult = Results.objects.get(
                                response_id=response_id)
                            continue
                        except ObjectDoesNotExist:

                            try:
                                user = User.objects.get(username=uname)
                            except ObjectDoesNotExist:
                                new_misfit = MisfitNames(username=uname)
                                new_misfit.save()
                            else:
                                quiz = Quizes.objects.get(q_id=q_id)
                                new_r = Results(name_id=user.id,
                                                response_id=response_id,
                                                score=encode(score, 'utf_8'),
                                                finished=finished,
                                                quiz_id=quiz.id)
                                dataListDict.append(new_r)

        if errorInQualData:
            self.stdout.write("Connection to Qualtrics Timed out")
            #del qualtricsData, r, data, dataListDict, api_urls, rs, q_id, api_string, api_url
        else:
            Results.objects.bulk_create(dataListDict)
            gc.collect()
            #del qualtricsData, r, data, dataListDict, api_urls, rs, q_id, api_string, api_url

            self.stdout.write("%s: DONE" % str(datetime.now()))