def create_challenge(challenge: Challenge) -> JSONResponse: """ Adds a new challenge. :param challenge: the challenge information :return: status code and response data """ db = _get_db() challenge.challenge_id = db["challenges"].find().count() + 1 db["challenges"].insert_one(challenge.to_dict()) return JSONResponse(status_code=status.HTTP_201_CREATED, content=dumps([]))
def edit(request): if request.method == 'POST': title = request.POST['title'] desc = request.POST['desc'] ch = Challenge(title = title, desc = desc) ch.save() return HttpResponseRedirect(reverse('challenges')) return render(request, 'edit_form.html')
def make_challenge(request, username): user = get_user(username) done = False while not done: try: challenge = Challenge(destination=user) challenge.save() done = True except IntegrityError: pass # occasional cleanup if challenge.code[1] == "0": Challenge.objects.filter(valid_until__lt=datetime.now()).delete() return HttpResponse(challenge.code)
def post(self, *args, **kwargs): user = User.by_user_name(self.session.data['user_name']) try: token = self.get_argument("token") challenge = Challenge.get_by_id(self.get_argument("challenge")) except: self.render("user/error.html", operation = "Submit Challenge", errors = "Please enter a token") if user.team != None: if not challenge in user.team.challenges: if token == challenge.token: action = Action( classification = unicode("Challenge Completed"), description = unicode(user.user_name+" has succesfully completed "+challenge.name+" !"), value = challenge.value, user_id = user.id ) challenge.teams.append(user.team) self.dbsession.add(challenge) self.dbsession.add(action) self.dbsession.flush() self.redirect('/challenge') else: self.render("user/error.html", operation = "Submit Challenge", errors = "Invalid Token") else: self.render("user/error.html", operation = "Submit Challenge", errors = "This challenge was already completed") else: self.render("user/error.html", operation = "Submit Challenge", errors = "You're not on a team")
def launch(request, to_id): user_to = get_object_or_404(Player, pk=to_id) user_to = user_to.get_extension(ChallengeUser) user_from = request.user.get_profile().get_extension(ChallengeUser) if ChallengeGame.disabled(): return do_result(request, error='Provocarile sunt dezactivate') if (not user_to.is_eligible()) or (not user_from.is_eligible()): return do_result(request, error='Ne pare rau, doar studentii de anul I pot provoca/fi provocati') if not user_from.can_launch(): return do_result(request, _('You cannot launch another challenge today.')) if not user_from.has_enough_points(): return do_result(request, _('You need at least 30 points to launch a challenge')) if user_from.can_challenge(user_to): try: chall = Challenge.create(user_from=user_from, user_to=user_to) except ChallengeException as e: # Some error occurred during question fetch. Clean up, and display error return do_result(request, e.message) #Checking if user_to is stored in session PREFIX = "_user:"******"multiple-login" if (PREFIX + user_to.user.username) in request.session: from wouso.interface.activity.signals import addActivity addActivity.send(sender=None, user_to=user_to, user_from=user_from, action=action_msg, game=None, public=False) return do_result(request, message=_('Successfully challenged')) else: return do_result(request, _('This user cannot be challenged.'))
def launch(request, to_id): user_to = get_object_or_404(Player, pk=to_id) user_to = user_to.get_extension(ChallengeUser) user_from = request.user.get_profile().get_extension(ChallengeUser) if ChallengeGame.disabled(): return do_result(request, error='Provocarile sunt dezactivate') if (not user_to.is_eligible()) or (not user_from.is_eligible()): return do_result(request, error='Ne pare rau, doar studentii de anul I pot provoca/fi provocati') if not user_from.can_launch(): return do_result(request, _('You cannot launch another challenge today.')) if not user_from.has_enough_points(): return do_result(request, _('You need at least 30 points to launch a challenge')) if user_from.can_challenge(user_to): try: chall = Challenge.create(user_from=user_from, user_to=user_to) except ChallengeException as e: # Some error occurred during question fetch. Clean up, and display error return do_result(request, e.message) return do_result(request, message=_('Successfully challenged')) else: return do_result(request, _('This user cannot be challenged.'))
def launch(request, to_id): user_to = get_object_or_404(Player, pk=to_id) user_to = user_to.get_extension(ChallengeUser) user_from = request.user.get_profile().get_extension(ChallengeUser) if ChallengeGame.disabled(): return do_result(request, error='Provocarile sunt dezactivate') if (not user_to.is_eligible()) or (not user_from.is_eligible()): return do_result(request, error=_('Sorry, challenge failed.')) if not user_from.can_launch(): return do_result(request, _('You cannot launch another challenge today.')) if not user_from.has_enough_points(): return do_result(request, _('You need at least 30 points to launch a challenge')) if user_from.can_challenge(user_to): try: chall = Challenge.create(user_from=user_from, user_to=user_to) except ChallengeException as e: # Some error occurred during question fetch. Clean up, and display error return do_result(request, e.message) #Checking if user_to is stored in session PREFIX = "_user:"******"multiple-login" if (PREFIX + user_to.user.username) in request.session: from wouso.core.signals import addActivity addActivity.send(sender=None, user_to=user_to, user_from=user_from, action=action_msg, game=None, public=False) return do_result(request, message=_('Successfully challenged')) else: return do_result(request, _('This user cannot be challenged.'))
def launch(request, to_id): user_to = get_object_or_404(Player, pk=to_id) user_to = user_to.get_extension(ChallengeUser) user_from = request.user.get_profile().get_extension(ChallengeUser) if (not user_to.is_eligible()) or (not user_from.is_eligible()): return do_result(request, error='Ne pare rau, doar studentii de anul I pot provoca/fi provocati') if not user_from.can_launch(): return do_result(request, _('You cannot launch another challenge today.')) if not user_from.has_enough_points(): return do_result(request, _('You need at least 30 points to launch a challenge')) if user_from.can_challenge(user_to): try: chall = Challenge.create(user_from=user_from, user_to=user_to) except ValueError as e: # Some error occurred during question fetch. Clean up, and display error return do_result(request, e.message) return do_result(request, message=_('Successfully challenged')) else: return do_result(request, _('This user cannot be challenged.'))
def test_challengeUpdateCompletedOperation(self): # check that error raised when record does not exist print('--- check that error raised when record does not exist') self.assertRaises(ErrorWithCode, challengeUpdateCompletedOperation, 1, 2, 2, 1) # adding challenge challenge = Challenge(1, 2, 2) db.session.add(challenge) db.session.commit() # check that when successful, result returned by function is of the correct type print( '--- check that when successful, result returned by function is of the correct type' ) challenge = Challenge.query.filter_by(from_student_id=1).filter_by( to_student_id=2).filter_by(quiz_id=1).first() self.assertEqual(challenge.is_completed, False) self.assertIsNone(challenge.winner_id) challengeUpdateCompletedOperation(1, 2, 1, 1) challenge = Challenge.query.filter_by(from_student_id=1).filter_by( to_student_id=2).filter_by(quiz_id=1).first() self.assertEqual(challenge.is_completed, True) self.assertEqual(challenge.winner_id, 1)
def challenge_list_json(request): challenges = [] for challenge in Challenge.current_challenges(): challenges.append({'id': challenge.id, 'name': challenge.name, 'short_name': challenge.short_name}) return JsonResponse({'challenges': challenges})
def get(self): user = users.get_current_user() if(user): userQuery = User.query(User.userid == user.user_id()) userEntity = None for thisUser in userQuery: userEntity = thisUser formCheck(self, user) missedLectureCheck(user) if userEntity.email is None: userEntity.email = user.email() userEntity.put() if userEntity is None: userEntity = User( userid=user.user_id(), score=0, streak=0, count=0, history=[], email = user.email()) module1Query = Module.query(Module.code == 'GENG0013') for module in module1Query: for lecture in module.lectures: userEntity.lectures.append(lecture) module2Query = Module.query(Module.code == 'GENG0002') for module in module2Query: for lecture in module.lectures: userEntity.lectures.append(lecture) challengeQuery = Challenge.query().order(Challenge.challengeid) for challenge in challengeQuery: userEntity.challenges.append(challenge) userEntity.put() self.redirect('/info') completedChalls = [] for challenge in userEntity.challenges: if challenge.complete: completedChalls.append(challenge) template_values = { 'username' : userEntity.username, 'logout' : users.create_logout_url(self.request.uri), 'score' : userEntity.score, 'count' : userEntity.count, 'streak' : userEntity.streak, 'completedChalls' : completedChalls } template = JINJA_ENVIRONMENT.get_template('/assets/home.html') self.response.write(template.render(template_values)) else: self.redirect(users.create_login_url(self.request.uri))
def get(self, *args, **kwargs): user = User.by_user_name(self.session.data['user_name']) all_challenges = Challenge.get_all() correct_challenges = [] for challenge in all_challenges: if user.team != None: if not challenge in user.team.challenges: correct_challenges.append(challenge) self.render("user/challenge.html", challenges = correct_challenges)
def login(request): if 'key' in request.COOKIES: try: user = User.objects.get(sessionID=request.COOKIES['key']) return HttpResponseRedirect("/main") except User.DoesNotExist: pass rkey = randomkey() key = Challenge(key=rkey, ip=request.META['REMOTE_ADDR']) key.save() message = "" if 'msg' in request.GET: message = msgdict[request.GET['msg']] t = loader.get_template('aponurho/login.html') c = RequestContext(request, { 'challenge': rkey, 'message': message }) return HttpResponse(t.render(c))
def api_get_challenge_create(): """ 创建新挑战,返回挑战id """ max_level = db.session.query(func.max(Challenge.level)).one_or_none()[0] challenge = Challenge(level=(1 if not max_level else max_level + 1)) db.session.add(challenge) db.session.commit() return make_response(0, id=challenge.id)
def create_challenge(): dat = json.loads(request.data) text = dat.get("text") GIPHY_SEARCH_PARAMETERS = { 'api_key': GIPHY_API_KEY, 'limit': 1, # default 'q': text } giphy_dat = requests.get(GIPHY_SEARCH_URL, params=GIPHY_SEARCH_PARAMETERS).json() challenge = Challenge( text=text, imgURL=giphy_dat['data'][0]['images']['fixed_height']['url'], timeToFinish=dat.get("timeToFinish")) db.session.add(challenge) db.session.commit() res = {'success': True, 'data': challenge.serialize()} return json.dumps(res), 201
def setUp(self): print('\r') # drop all tables in the database db.session.remove() db.drop_all() # crete all tables in the database db.create_all() # adding users user_1 = User('*****@*****.**', encrypt('password'), 'student_1') student_1 = Student(user_1, 'U00000000A') db.session.add(student_1) user_2 = User('*****@*****.**', encrypt('password'), 'student_2') student_2 = Student(user_2, 'U00000000B') db.session.add(student_2) user_3 = User('*****@*****.**', encrypt('password'), 'teacher_1') staff_1 = Staff(user_3) db.session.add(staff_1) # adding topics topic = Topic(name='seng') db.session.add(topic) # adding lessons lesson = Lesson(1, 1, 'lesson_1', 'content') db.session.add(lesson) # adding quizzes quiz_1 = Quiz(3, 'quiz_1', True, '2020-03-30', '2020-03-31') db.session.add(quiz_1) quiz_2 = Quiz(3, 'quiz_2', True, '2020-03-30', '2020-03-31') db.session.add(quiz_2) # adding questions question_1 = Question(1, 1, 'question_1') db.session.add(question_1) question_2 = Question(1, 1, 'question_2') db.session.add(question_2) question_3 = Question(1, 1, 'question_3') db.session.add(question_3) question_4 = Question(1, 1, 'question_4') db.session.add(question_4) # adding challenges challenge = Challenge(1, 2, 1) db.session.add(challenge) db.session.commit()
def update_challenge(challenge: Challenge) -> JSONResponse: """ Updates a challenge. :param challenge: the challenge information :return: status code and response data """ _get_db()["challenges"].update_one( {"challenge_id": challenge.challenge_id}, {"$set": challenge.to_dict()}) return JSONResponse(status_code=status.HTTP_204_NO_CONTENT, content=dumps([]))
def new_challenge(): if request.method == 'POST' and len(request.form) >= 6: if logged_in(): errors = [] #try: eid = request.form['eid'] name = request.form['name'] category = request.form['category'] value = int(request.form['value']) desc = request.form['description'] #except: if len(errors) > 0: return "Failed to add challenge [2]" else: new_chal = Challenge(eid, name, category, desc, value) db.session.add(new_chal) db.session.commit() cid = new_chal.cid #try: files = request.files.getlist('file[]') if files and len(files) > 0: for f in files: if f and len(f.filename) > 0: #try: upload_file(f) new_file = File(cid, f.filename) db.session.add(new_file) db.session.commit() #except: #errors.append("Something went wrong") else: errors.append( "Error: something wrong with the file or filename" ) #except: # errors.append("No files recieved") db.session.close() return redirect('/event/{}'.format(eid)) else: flash('Must be logged in to create challenges') return redirect(url_for('auth.login')) else: return "Failed to add challenge"
def test_challengeUpdate(self): # create a new Challenge object and add it to the database challenge = Challenge(1, 2, 1) db.session.add(challenge) db.session.commit() # update value of Topic object Challenge.query.filter_by(from_student_id=1).filter_by( to_student_id=2).filter_by(quiz_id=1).first().is_completed = True challengeUpdate() # check if value of Topic object has been updated print('--- check if value of Topic object has been updated') self.assertEqual( Challenge.query.filter_by(from_student_id=1).filter_by( to_student_id=2).filter_by(quiz_id=1).first().is_completed, True)
def create_challenge(jwt): data = request.get_json() error = False try: challenge = Challenge(task_id=data["task_id"], series_id=data["series_id"]) isTest = False if "isTest" in data: isTest = data["isTest"] DBHelper.insert(challenge) except: DBHelper.rollback() error = True finally: DBHelper.close() if error: abort(404) return jsonify({"success": True})
def test_challengeCreate(self): # create a new Challenge object challenge = Challenge(1, 2, 1) # add Challenge object to the database challengeCreate(challenge) # check that the number of record added is correct print('--- check that the number of record added is correct') self.assertEqual(len(Challenge.query.all()), 1) # check that object cannot be added to database if already exist print( '--- check that object cannot be added to database if already exist' ) challengeCreate(challenge) self.assertEqual(len(Challenge.query.all()), 1)
def test_challengeRead(self): # check that function returns the right number of result (= 0) print( '--- check that function returns the right number of result (= 0)') self.assertEqual(len(challengeRead(None, None, None, None)), 0) self.assertEqual(len(challengeRead(1, 2, 1, None)), 0) # create a new Challenge object and add to database challenge = Challenge(1, 2, 1) db.session.add(challenge) db.session.commit() # check that function returns the right number of result (= 1) print( '--- check that function returns the right number of result (= 1)') self.assertEqual(len(challengeRead(None, None, None, None)), 1) self.assertEqual(len(challengeRead(1, 2, 1, None)), 1) self.assertEqual(len(challengeRead(1, 2, None, None)), 1)
def challenge(request): if request.is_ajax(): challenge_bot_id = json.loads(request.body)['msg'] challenge_bot = Bot.objects.get(pk=challenge_bot_id) # get the user current bot user_prof = UserProfile.objects.get(user=request.user) if not user_prof.current_bot: print "Can not challenge if does not have a bot!" return HttpResponse("Error") if challenge_bot.owner == user_prof: print "[CHEATING!] - wrong challenge bot!" return HttpResponse("Error") # challenged bot must be the owners current bot if not challenge_bot.is_current_bot: print "[CHEATING!] - wrong challenge bot!, must be the owners current bot!." return HttpResponse("Error") print "Got a challenge for bot: ", challenge_bot # Get pending challenges for this user challenges = Challenge.objects.filter(requested_by=user_prof, played=False, canceled=False) if challenges.count() > 0: # has pending challenges, must wait. return HttpResponse("Can not challenge more than one bot at a time") # Check if these bots haven't already played. #played_challs = Challenge.objects.filter(challenger_bot=user_prof.current_bot, # challenged_bot=challenge_bot, played=True) #if played_challs.count() > 0: # # has already played against this bot, must upload a new one # return HttpResponse("Already played against this bot!. Upload a new one.") if (user_prof.current_bot.valid != Bot.READY or challenge_bot.valid != Bot.READY): return JsonResponse({'success': False, 'msg': 'One of the bot is not READY' }) new_challengue = Challenge() new_challengue.requested_by = user_prof new_challengue.challenger_bot = user_prof.current_bot new_challengue.challenged_bot = challenge_bot new_challengue.save() return JsonResponse({'success': True})
def challenge(request): if request.is_ajax(): challenge_bot_id = json.loads(request.body)['msg'] challenge_bot = Bot.objects.get(pk=challenge_bot_id) # get the user current bot user_prof = UserProfile.objects.get(user=request.user) if not user_prof.current_bot: print "Can not challenge if does not have a bot!" return HttpResponse("Error") if challenge_bot.owner == user_prof: print "[CHEATING!] - wrong challenge bot!" return HttpResponse("Error") # challenged bot must be the owners current bot if not challenge_bot.is_current_bot: print "[CHEATING!] - wrong challenge bot!, must be the owners current bot!." return HttpResponse("Error") print "Got a challenge for bot: ", challenge_bot # Get pending challenges for this user challenges = Challenge.objects.filter(requested_by=user_prof, played=False, canceled=False) if challenges.count() > 0: # has pending challenges, must wait. return HttpResponse("Can not challenge more than one bot at a time") # Check if these bots haven't already played. #played_challs = Challenge.objects.filter(challenger_bot=user_prof.current_bot, # challenged_bot=challenge_bot, played=True) #if played_challs.count() > 0: # # has already played against this bot, must upload a new one # return HttpResponse("Already played against this bot!. Upload a new one.") if (user_prof.current_bot.valid != Bot.READY or challenge_bot.valid != Bot.READY): return JsonResponse({'success': False, 'msg': 'One of the bot is not READY' }) new_challengue = Challenge() new_challengue.requested_by = user_prof new_challengue.challenger_bot = user_prof.current_bot new_challengue.challenged_bot = challenge_bot new_challengue.save() return JsonResponse({'success': True})
def challenge(request): if request.is_ajax(): challenge_bot_id = json.loads(request.body)['msg'] challenge_bot = Bot.objects.get(pk=challenge_bot_id) # get the user current bot user_prof = UserProfile.objects.get(user=request.user) if not user_prof.current_bot: print "Can not challenge if does not have a bot!" return HttpResponse("Error") if challenge_bot.owner == user_prof: print "[CHEATING!] - wrong challenge bot!" return HttpResponse("Error") # challenged bot must be the owners current bot if not challenge_bot.is_current_bot: print "[CHEATING!] - wrong challenge bot!, must be the owners current bot!." return HttpResponse("Error") print "Got a challenge for bot: ", challenge_bot # Get pending challenges for this user challenges = Challenge.objects.filter(requested_by=user_prof, played=False) if challenges.count() > 0: # has pending challenges, must wait. return HttpResponse("Can not challenge more than one bot at a time") # Check if these bots haven't already played. played_challs = Challenge.objects.filter(challenger_bot=user_prof.current_bot, challenged_bot=challenge_bot, played=True) if played_challs.count() > 0: # has already played against this bot, must upload a new one return HttpResponse("Already played against this bot!. Upload a new one.") new_chall = Challenge() new_chall.requested_by = user_prof new_chall.challenger_bot = user_prof.current_bot new_chall.challenged_bot = challenge_bot new_chall.save() return HttpResponse(json.dumps({'success' : True}), mimetype='application/json')
def create(request): challenge = Challenge(creator=request.user) return _edit(request, challenge)
def delete_challenge(Challenge): Challenge.delete_instance()
def create_challenge(name, language, steps=1): Challenge.create(name=name, language=language, steps=steps)
def createChallenge(self): task = self.createTask() series = self.createSeries() challenge = Challenge(task_id=task["id"], series_id=series["id"]) return self.createEntity(challenge)
def search_challenges(name, language): return Challenge.select().where(Challenge.name.contains(name), Challenge.language == language)
if run_result.code != 0: return ChallengeError('Error in running the code', run_result) validate_result = challenge_execution.run_step('bash', 'validate', 'scripts/validate.sh', timeout=10) if validate_result.code != 0: return ChallengeError('Error in validating the result', validate_result) challenge_execution.run_step('bash', 'cleanup', 'scripts/cleanup.sh') return ChallengeResult(build_result, run_result, validate_result) if __name__ == '__main__': with open('participants.yml') as participants_stream: participants = yaml.load(participants_stream, Loader=yaml.FullLoader) with open('challenges.yml') as challenges_stream: challenges = yaml.load(challenges_stream, Loader=yaml.FullLoader) for challenge_dict in challenges: challenge = Challenge.from_dict(challenge_dict) round_id = int(time.time()) reporter.start_round(round_id, challenge.name) for p in participants: repository = p['repository'] nickname = p['nickname'] ce = ChallengeExecution(challenge, p['repository']) result = run_challenge(ce) reporter.report(nickname, challenge.name, round_id, result) print(result) reporter.finish_round(round_id, challenge.name)
def get_queryset(self): return Challenge.current_challenges()
# # Created by Dulio Denis on 1/1/19. # Copyright (c) 2019 ddApps. All rights reserved. # ------------------------------------------------ # Challenge 2: First Queries # ------------------------------------------------ # Challenge Task 1 of 4 # Import the Challenge class from models.py. from models import Challenge # ------------------------------------------------ # Challenge Task 2 of 4 # Now, create a variable named all_challenges. # It should select all of the available challenges # from the database. all_challenges = Challenge.select() # ------------------------------------------------ # Challenge Task 3 of 4 # Next, create a new Challenge. # The language should be "Ruby", the name should be "Booleans". Challenge.create(language='Ruby', name='Booleans') # ------------------------------------------------ # Challenge Task 4 of 4 # Finally, make a variable named sorted_challenges # that is all of the Challenge records, ordered by # the steps attribute on the model. # The order should be ascending, which is the default direction. sorted_challenges = Challenge.select().order_by(Challenge.steps)
def loadChallenges(): currentTime = time.time() chall1 = Challenge(challengeid=1, title='First Step', description='Check in to 1 lecture', complete=False, expiresat=currentTime+864000, badge=Badge(iconName='/img/firststeps.png'), points=10) chall2 = Challenge(challengeid=2, title='Not Bad', description='Check in to 5 lectures', complete=False, expiresat=currentTime+1382400, badge=Badge(iconName='/img/notbad.png'), points=30) chall3 = Challenge(challengeid=3, title='Golden Student', description='Check in to 10 lectures', complete=False, expiresat=currentTime+2592000, badge=Badge(iconName='/img/goldenstudent.png'), points=50) chall4 = Challenge(challengeid=4, title='Gotta Go Fast', description='Be the first in your class to check in to a lecture', complete=False, expiresat=currentTime+2592000, badge=Badge(iconName='/img/gottagofast.png'), points=30) chall5 = Challenge(challengeid=5, title='Hat-trick', description='Check in to 3 consecutive lectures', complete=False, expiresat=currentTime+1382400, badge=Badge(iconName='/img/hattrick.png'), points=30) chall6 = Challenge(challengeid=6, title='Unstoppable', description='Check in to 5 consecutive lectures', complete=False, expiresat=currentTime+2592000, badge=Badge(iconName='/img/unstoppable.png'), points=50) chall7 = Challenge(challengeid=7, title='Perfect Week', description='Attend every lecture in a week', complete=False, expiresat=currentTime+2592000, badge=Badge(iconName='/img/perfectweek.png'), points=20) chall8 = Challenge(challengeid=8, title='Selective Attendance', description='Attend the same lecture 3 weeks in a row', complete=False, expiresat=currentTime+2592000, badge=Badge(iconName='/img/selectiveattendance.png'), points=30) chall9 = Challenge(challengeid=9, title='Early Bird', description='Make it to a 9am lecture', complete=False, expiresat=currentTime+1382400, badge=Badge(iconName='/img/earlybird.png'), points=10) chall10 = Challenge(challengeid=10, title='Long day', description='Check in to 4 lectures in the same day', complete=False, expiresat=currentTime+1987200, badge=Badge(iconName='/img/longday.png'), points=30) chall1.put() chall2.put() chall3.put() chall4.put() chall5.put() chall6.put() chall7.put() chall8.put() chall9.put() chall10.put()
def get_challenge_or_404(slug): """Return a challenge or 404""" challenge = Challenge.get(slug) if not challenge: abort(404) return challenge
def launch(request, to_id): lock = challengeLock.lock() logging.info("Locked.") flush_transaction() user_to = get_object_or_404(Player, pk=to_id) user_to = user_to.get_extension(ChallengeUser) user_from = request.user.get_profile().get_extension(ChallengeUser) if ChallengeGame.disabled(): messages.error(request, _('Provocarile sunt dezactivate')) logging.info("Ready to unlock (disabled).") lock.unlock() return redirect('challenge_index_view') if (not user_to.is_eligible()) or (not user_from.is_eligible()): messages.error(request, _('Sorry, challenge failed.')) logging.info("Ready to unlock (is eligible).") lock.unlock() return redirect('challenge_index_view') if not user_from.can_launch(): messages.error(request, _('You cannot launch another challenge today.')) logging.info("Ready to unlock (cannot launch today).") lock.unlock() return redirect('challenge_index_view') if not user_from.in_same_division(user_to): messages.error(request, _('You are not in the same division')) logging.info("Ready to unlock (not in same divission).") lock.unlock() return redirect('challenge_index_view') if not user_from.has_enough_points(): messages.error(request, _('You need at least 30 points to launch a challenge')) logging.info("Ready to unlock (not enough points).") lock.unlock() return redirect('challenge_index_view') if user_from.can_challenge(user_to): try: chall = Challenge.create(user_from=user_from, user_to=user_to) logging.info("Created challenge: %s" %(chall)) except ChallengeException as e: # Some error occurred during question fetch. Clean up, and display error messages.error(request, e.message) lock.unlock() return redirect('challenge_index_view') #Checking if user_to is stored in session PREFIX = "_user:"******"multiple-login" if (PREFIX + user_to.user.username) in request.session: from wouso.core.signals import addActivity addActivity.send(sender=None, user_to=user_to, user_from=user_from, action=action_msg, game=None, public=False) messages.success(request, _('Successfully challenged')) logging.info("Ready to unlock (save).") lock.unlock() return redirect('challenge_index_view') else: messages.error(request, _('This user cannot be challenged.')) logging.info("Ready to unlock (no user challenge).") lock.unlock() return redirect('challenge_index_view')
def initializeChallenge(from_student_id, to_student_id, quiz_id): return Challenge(from_student_id, to_student_id, quiz_id)
def setUp(self): print('\r') # drop all tables in the database db.session.remove() db.drop_all() # crete all tables in the database db.create_all() self.maxDiff = None self.app = app.test_client() # adding students user_1 = User('*****@*****.**', encrypt('password'), 'student_1') student_1 = Student(user_1, 'U00000000A') db.session.add(student_1) user_2 = User('student_2gmail.com', encrypt('password'), 'student_2') student_2 = Student(user_2, 'U00000000B') db.session.add(student_2) # adding staff user_3 = User('*****@*****.**', encrypt('password'), 'staff_1') staff_1 = Staff(user_3) db.session.add(staff_1) # adding topics topic_1 = Topic(name='topic_1') db.session.add(topic_1) topic_2 = Topic(name='topic_2') db.session.add(topic_2) # adding lessons lesson_1 = Lesson(topic_id=1, id=1, name='lesson_1', content='content') db.session.add(lesson_1) lesson_2 = Lesson(topic_id=1, id=2, name='lesson_2', content='content') db.session.add(lesson_2) lesson_3 = Lesson(topic_id=1, id=3, name='lesson_3', content='content') db.session.add(lesson_3) lesson_4 = Lesson(topic_id=2, id=1, name='lesson_4', content='content') db.session.add(lesson_4) # adding quizzes quiz_1 = Quiz(3, 'quiz_1', True, '2020-03-30', '2020-03-31') db.session.add(quiz_1) quiz_2 = Quiz(3, 'quiz_2', True, '2020-03-30', '2020-03-31') db.session.add(quiz_2) quiz_3 = Quiz(3, 'quiz_3', True, '2020-03-30', '2020-03-31') db.session.add(quiz_3) # adding questions question_1 = Question(1, 1, 'description_1') db.session.add(question_1) question_2 = Question(1, 1, 'description_2') db.session.add(question_2) question_3 = Question(1, 3, 'description_3') db.session.add(question_3) question_4 = Question(1, 3, 'description_4') db.session.add(question_4) question_5 = Question(1, 3, 'description_5') db.session.add(question_5) # assign questions to quiz rs_1 = Rs_quiz_question_contain(1, 1) db.session.add(rs_1) rs_2 = Rs_quiz_question_contain(3, 3) db.session.add(rs_2) rs_3 = Rs_quiz_question_contain(3, 4) db.session.add(rs_3) rs_4 = Rs_quiz_question_contain(3, 5) db.session.add(rs_4) # add attempts to questions question_attempt_1 = QuestionAttempt(1, 1, True, 10) db.session.add(question_attempt_1) question_attempt_2 = QuestionAttempt(1, 1, False, 20) db.session.add(question_attempt_2) question_attempt_3 = QuestionAttempt(1, 2, True, 30) db.session.add(question_attempt_3) question_attempt_4 = QuestionAttempt(1, 3, False, 40) db.session.add(question_attempt_4) # add question choices to questions qc_1 = QuestionChoice(1, 1, 'choice_1', True) db.session.add(qc_1) qc_2 = QuestionChoice(1, 2, 'choice_2', True) db.session.add(qc_2) qc_3 = QuestionChoice(1, 3, 'choice_3', True) db.session.add(qc_3) # adding quiz attempts quiz_attempt_1 = QuizAttempt(1, 1, 0) db.session.add(quiz_attempt_1) quiz_attempt_2 = QuizAttempt(2, 3, 2) db.session.add(quiz_attempt_2) quiz_attempt_3 = QuizAttempt(1, 3, 3) db.session.add(quiz_attempt_3) # adding quizzes to lessons rs_lesson_quiz_contain_1 = Rs_lesson_quiz_contain(1, 1, 1) db.session.add(rs_lesson_quiz_contain_1) rs_lesson_quiz_contain_2 = Rs_lesson_quiz_contain(1, 1, 2) db.session.add(rs_lesson_quiz_contain_2) rs_lesson_quiz_contain_3 = Rs_lesson_quiz_contain(1, 3, 3) db.session.add(rs_lesson_quiz_contain_3) # adding courses course = Course('cz1005') db.session.add(course) # enrol students into courses enrol_1 = Rs_student_course_enrol(1, 'cz1005') db.session.add(enrol_1) enrol_2 = Rs_student_course_enrol(2, 'cz1005') db.session.add(enrol_2) # make staff teach course teach_1 = Rs_staff_course_teach(3, 'cz1005') db.session.add(teach_1) # adding quizzes to courses Rs_quiz_course_assign_1 = Rs_quiz_course_assign(1, 'cz1005') db.session.add(Rs_quiz_course_assign_1) Rs_quiz_course_assign_2 = Rs_quiz_course_assign(2, 'cz1005') db.session.add(Rs_quiz_course_assign_2) Rs_quiz_course_assign_3 = Rs_quiz_course_assign(3, 'cz1005') db.session.add(Rs_quiz_course_assign_3) # adding challenges challenge_1 = Challenge(1, 2, 1) db.session.add(challenge_1) challenge_2 = Challenge(1, 2, 2) db.session.add(challenge_2) challenge_3 = Challenge(2, 1, 1) db.session.add(challenge_3) db.session.commit()
# Import the Challenge class from models.py from models import Challenge # Now create a variable named all_challenges. It should select all of the available challenges from the database. all_challenges = Challenge.select() # Next create a new Challenge. The language should be 'Ruby', the name should be 'Booleans'. Challenge.create(language='Ruby', name='Booleans') # Finally make a variable named sorted_challenges that is all of the Challenge records, ordered by the steps attribute on the model # The order should be ascending, which is the default direction. sorted_challenges = all_challenges.order_by(Challenge.steps)
database = db # ============= Part 2 ============= # Task 1 of 4 # Import the Challenge class from models.py. from models import Challenge # Task 2 of 4 # Now, create a variable named all_challenges. It should select all of the available challenges from the database. from models import Challenge all_challenges = Challenge.select() # Task 3 of 4 # Next, create a new Challenge. The language should be "Ruby", the name should be "Booleans". from models import Challenge all_challenges = Challenge.select() Challenge.create(language="Ruby", name="Booleans") # Task 4 of 4 # Finally, make a variable named sorted_challenges that is all of the Challenge records, ordered by the steps attribute on the model. The order should be ascending, which is the default direction. from models import Challenge
def get_challenge_or_404(slug): """Return a challenge or 404""" challenge = Challenge.get(slug) if not challenge: abort(404) return challenge