def create(request): """Create a new game.""" form = GameForm() if request.POST: form = GameForm(request.POST) if form.is_valid(): new_game = form.save(commit=False) new_game.creator = request.user new_game.save() messages.success(request, "Your game was successfully saved!") return HttpResponseRedirect(new_game.get_absolute_url()) return render(request, 'games/create.html', {'form': form})
def submit_game(request): form = GameForm(request.POST or None, request.FILES or None) if request.method == "POST" and form.is_valid(): game = form.save() submission = GameSubmission(user=request.user, game=game) submission.save() # Notify managers a game has been submitted admin_url = "https://lutris.net" + reverse("admin:games_game_change", args=(game.id, )) context = { "game_name": game.name, "username": request.user.username, "admin_link": admin_url, } subject = "New game submitted: {}".format(game.name) send_email("new_game", context, subject, settings.MANAGERS[0][1]) redirect_url = request.build_absolute_uri(reverse("game-submitted")) # Enforce https if not settings.DEBUG: redirect_url = redirect_url.replace("http:", "https:") LOGGER.info("Game submitted, redirecting to %s", redirect_url) return redirect(redirect_url) return render(request, "games/submit.html", {"form": form})
def submit_game(request): form = GameForm(request.POST or None, request.FILES or None) if request.method == "POST" and form.is_valid(): game = form.save() submission = GameSubmission(user=request.user, game=game) submission.save() # Notify managers a game has been submitted subject = u"New game submitted: {0}".format(game.name) admin_url = reverse("admin:games_game_change", args=(game.id, )) body = u""" The game {0} has been added by {1}. It can be modified and published at https://lutris.net{2} """.format(game.name, request.user, admin_url) mail_managers(subject, body) redirect_url = request.build_absolute_uri(reverse("game-submitted")) # Enforce https if not settings.DEBUG: redirect_url = redirect_url.replace('http:', 'https:') LOGGER.info('Game submitted, redirecting to %s', redirect_url) return redirect(redirect_url) return render(request, 'games/submit.html', {'form': form})
def test_form_save_handles_saving_to_player(self): a_player = Player.objects.create() a_form = GameForm(data={'text': 'A new game'}) new_game = a_form.save(for_player=a_player) self.assertEqual(new_game, Game.objects.first()) self.assertEqual(new_game.text, "A new game") self.assertEqual(new_game.player, a_player)
def screenshots(request, game_id): """View/edit screenshots for a game.""" game = get_object_or_404(Game, id=game_id, creator=request.user) room_for_more = game.screenshot_set.count() < settings.SCREENSHOTS_MAX form = ScreenshotForm() game = get_object_or_404(Game, creator=request.user, pk=game_id) form = GameForm(instance=game) room_for_more = game.screenshot_set.count() < settings.SCREENSHOTS_MAX screenshot_form = ScreenshotForm() if request.POST and room_for_more: screenshot_form = ScreenshotForm(request.POST, request.FILES) if screenshot_form.is_valid(): new_screenshot = screenshot_form.save(commit=False) new_screenshot.game = game new_screenshot.save() messages.success(request, "Your screenshot has been uploaded!") return HttpResponseRedirect(reverse('games.edit', args=[game.id])) c = { 'game': game, 'form': form, 'room_for_more': room_for_more, 'screenshot_form': screenshot_form, } return render(request, 'games/edit.html', c)
def new_game(request): if request.method == 'POST': form = GameForm(request.POST) if form.is_valid(): game = form.save() logger.info( f"Created new game -- location: {game.location} -- datetime: {game.datetime} -- max_players: {game.max_players}" ) return redirect(reverse('games:detail', args=(game.id, ))) else: form = GameForm() context = {'form': form} return render(request, "games/new_game.html", context)
def new_player(request): a_form = GameForm(data=request.POST) if a_form.is_valid(): player = Player.objects.create() a_form.save(for_player=player) response = redirect(player) else: response = render(request, "home.html", {"form": a_form}) return response
def test_blank_data(self): form = GameForm({}) self.assertFalse(form.is_valid()) self.assertEqual( form.errors, { 'location': ['This field is required.'], 'datetime': ['This field is required.'], 'max_players': ['This field is required.'], 'min_players': ['This field is required.'], })
def test_valid_data(self): form = GameForm({ 'location': 'Roble Field', 'datetime': datetime.now(tz=timezone.utc) + timedelta(days=1), 'max_players': 12, 'min_players': 10, }) self.assertTrue(form.is_valid())
def edit(request, game_id): """Edit an existing game.""" game = get_object_or_404(Game, creator=request.user, pk=game_id) form = GameForm(instance=game) room_for_more = game.screenshot_set.count() < settings.SCREENSHOTS_MAX screenshot_form = ScreenshotForm() c = { 'game': game, 'form': form, 'room_for_more': room_for_more, 'screenshot_form': screenshot_form, } if request.POST: form = GameForm(request.POST, instance=game) c.update({'form': form}) if form.is_valid(): form.save() messages.success(request, "Your changes were saved!") return HttpResponseRedirect(game.get_absolute_url()) return render(request, 'games/edit.html', c)
def home_page(request): a_form = GameForm() response = render(request, "home.html", {"form": a_form}) return response
def test_form_validation_for_blank_games(self): a_form = GameForm(data={'text': ''}) self.assertFalse(a_form.is_valid()) self.assertEqual(a_form.errors['text'], [EMPTY_GAME_ERROR])
def test_form_game_input_has_placeholder_and_css_classes(self): # ESCAPE changes both " <, but not both are escaped in AS_P. a_form = GameForm() self.assertIn('placeholder="Enter game <SCORE : PLAYER_AGAINST>"', a_form.as_p()) self.assertIn('class="form-control input-lg"', a_form.as_p())