Пример #1
0
def test_undo_match(g):
    p = Player("test player")
    p2 = Player("test player 2")
    player_dao.create(p)
    p.id = 1
    player_dao.create(p2)
    p2.id = 2
    t = Tournament(0,'','T1','type',0)
    tournament_dao.create(t)
    t.id = 1
    match_dao.create([p.id, p2.id], t.id)
    match_id = 1
    match = Match(player1=p,player2=p2,id=match_id)
    match.score1 = 19
    match.score2 = 21
    match_dao.update(match)

    match_dao.undo(match)
    retrieved_match = match_dao.find(match_id)
    matches = match_dao.find_by_tournament(t.id)

    assert retrieved_match.score1 == 0
    assert retrieved_match.score2 == 0
    assert retrieved_match.player1.fname == p.fname
    assert retrieved_match.player2.fname == p2.fname
    assert retrieved_match.player1.id == p.id
    assert retrieved_match.player2.id == p2.id
    assert not matches[0].entered_time
Пример #2
0
def createTournament(request):

    if request.method == 'POST':
        form = CreateTournamentForm(request.POST, request.FILES)

        if form.is_valid():
            user = User.objects.get(user=request.user)

            tournament = Tournament(
                name=form.cleaned_data.get("name"),
                start=form.cleaned_data.get("start"),
                end=form.cleaned_data.get("end"),
                username=user,
                type=form.cleaned_data.get("type"),
                file=request.FILES.get("file"),
                description=form.cleaned_data.get("description"))
            tournament.save()

            Manager.objects.create(user_id=user, tournament=tournament)

            return redirect('/user/')
    else:
        form = CreateTournamentForm()

    return render_to_response('createtournament.html',
                              RequestContext(request, {
                                  'form': form,
                              }))
Пример #3
0
def test_create_and_find_scheduled_by_tournament(g):
    p = Player("test player")
    p2 = Player("test player 2")
    p3 = Player("test player 3")
    player_dao.create(p)
    p.id = 1
    player_dao.create(p2)
    p2.id = 2
    player_dao.create(p3)
    p3.id = 3
    t = Tournament(0,'','T1','type',0)
    tournament_dao.create(t)
    t.id = 1
    t2 = Tournament(0,'','T2','type',0)
    tournament_dao.create(t2)
    t2.id = 2

    match_dao.create([p.id,p2.id], t.id)
    match_dao.create([p.id,p2.id], t2.id)
    match_dao.create([p.id,p3.id], t2.id)
    retrieved_matches = match_dao.find_by_tournament(t2.id)

    assert len(retrieved_matches) == 2
    assert retrieved_matches[0].player2.fname == p2.fname
    assert retrieved_matches[1].id == 3
Пример #4
0
def test_standings_with_games_not_played(g):
    p = Player("test player")
    p2 = Player("test player 2")
    p3 = Player("test player 3")
    player_dao.create(p)
    p.id = 1
    player_dao.create(p2)
    p2.id = 2
    player_dao.create(p3)
    p3.id = 3
    t = Tournament(0,'','T1','type',0)
    tournament_dao.create(t)
    t.id = 1
    match_dao.create([p.id, p2.id], t.id)
    match_dao.create([p.id, p3.id], t.id)
    match_dao.create([p3.id, p2.id], t.id)

    standings = standings_dao.find(t.id)

    assert standings[0].win == 0
    assert standings[0].loss == 0
    assert standings[0].tie == 0
    assert standings[1].win == 0
    assert standings[1].loss == 0
    assert standings[1].tie == 0
    assert standings[2].win == 0
    assert standings[2].loss == 0
    assert standings[2].tie == 0
Пример #5
0
    def scrape(self):

        # Get tournament info
        try:
            results = requests.get(self.tournament_url)
        except requests.exceptions.MissingSchema:
            results = requests.get("http://{}".format(self.tournament_url))
        results_tree = html.fromstring(results.content)
        try:
            tournament_name = results_tree.xpath(
                '//span[@class="tournName"]/text()')[0]
            updated = (results_tree.xpath('//span[@class="lastUpdate"]/text()')
                       [0].replace('Last Updated:', '').strip())
        except IndexError:
            raise ScrapeError("Tournament info not found.")

        self.tournament = Tournament(tournament_name, results.url, updated)

        # Get tournament events
        try:
            event_urls = results_tree.xpath(
                '//div[@id="schedule"]/table/tr/td/a[text()="View"]/@href')
        except IndexError:
            raise ScrapeError("No event schedule found.")

        loop = asyncio.new_event_loop()
        loop.run_until_complete(self.scrape_events(event_urls))

        return self.tournament
Пример #6
0
def init(request, scope):
    tournament = Tournament()
    if scope == 'all' or scope == 'matches':
        tournament.initialize_matches()
    if scope == 'all' or scope == 'teams':
        tournament.initialize_teams()
    return HttpResponse()
Пример #7
0
def add_tournament():
    add_url = url_for('.add_tournament')

    if request.method == 'POST':
        file = request.files['file']

        filename = file.filename
        if not filename:
            flash('Додайте файл з турнірними даними', 'isa_warning')
            return redirect(url_for('.add_tournament'))

        if not allowed_file(filename):
            flash('Файл має бути текстовим', 'isa_error')
            return redirect(url_for('.add_tournament'))

        insert_data = dict(request.form)
        insert_data['is_ranked'] = 'is_ranked' in insert_data.keys()
        insert_data['date_start'] = request.form.getlist('date_start')[0]
        insert_data['date_end'] = request.form.getlist('date_end')[0]
        tournament_id = None
        try:
            tournament_id = Tournament.execute_insert([insert_data])[0]
            parser = TournamentParser(file.read(), tournament_id)
            parser.run()
        except Exception:
            flash('Oops!', 'isa_error')
            if tournament_id:
                pairing_ids = Pairing.select_attrs(
                    ['id'], {'tp.tournament_id': tournament_id})
                existing_participant_ids = Participant.select_attrs(
                    ['id'], {'tournament_id': tournament_id})
                Pairing.execute_delete([p[0] for p in pairing_ids])
                Participant.execute_delete(
                    [p[0] for p in existing_participant_ids])
                Tournament.execute_delete([tournament_id])
            return redirect(url_for('.add_tournament'))
        return redirect(
            url_for('.tournament_info', tournament_id=tournament_id))

    cities = City.select_attrs(['id', 'name'])

    form = '\n'.join([
        '<div class="container">',
        f'<form action="{add_url}" enctype="multipart/form-data" method="post">',
        render_text_input_row("name", "Назва"),
        render_select_row('city_id', "Місто", cities),
        render_date_row('date_start', 'Дата початку',
                        str(datetime.date.today())),
        render_date_row('date_end', 'Дата закінчення',
                        str(datetime.date.today())),
        render_text_input_row("pin", "EGF PIN"),
        render_checkbox_row('is_ranked', "Рейтинговий"),
        render_file_row('file', 'Файл'),
        render_submit(),
        '</form>',
        '</div>',
    ])

    return render_template('add_tournament.html', form=form)
Пример #8
0
  def post(self):
    tournament_name  = self.request.get("tournament_name")
    if Tournament.get_by_key_name(tournament_name):
      # TODO error: already exists
      return

    max_enrollment   = int(self.request.get("max_enrollment"))
    assert not (max_enrollment < 4 or max_enrollment > 64)

    background       = self.request.get("background")
    seed_by          = self.request.get("seed_by")
    coach            = Coach.get_by_key_name(self.request.get("coach_key_name"))
    min_tv           = self.request.get("min_tv")
    max_tv           = self.request.get("max_tv")
    min_ma           = self.request.get("min_ma")
    max_ma           = self.request.get("max_ma")

    # compute race restrictions
    race_restriction = self.request.get("race_restriction")
    if race_restriction:
      races_allowed = self.request.get_all("races_allowed")
      races_allowed = [
          db.Key.from_path("Race", race_name) for race_name in races_allowed]
    else:
      races_allowed = []

    tournament = Tournament(
        key_name       = tournament_name,
        owner          = coach,
        background     = background,
        max_enrollment = max_enrollment,
        seed_by        = seed_by,
        races_allowed  = races_allowed)

    def format_tv(tv):
      tv = (tv / 10) * 10
      return max(0, min(3500, tv))

    if min_tv:
      tournament.min_tv = int(min_tv)
    if max_tv:
      tournament.max_tv = int(max_tv)

    if min_ma:
      tournament.min_ma = int(min_ma)
    if max_ma:
      tournament.max_ma = int(max_ma)

    trophy_pic = self.request.get("trophy_pic")
    if trophy_pic:
      pic = TournamentPicture.create_from_img(tournament_name, trophy_pic)
      pic.put()
      tournament.pic = pic

    tournament.put()
    views.Tournaments.clear()

    # I need to give a response or I get an error. Nobody on the internet seems
    # to know why.  See https://github.com/malsup/form/issues#issue/22.
    self.response.out.write("OK") 
Пример #9
0
    def test_participants_add_two_count(self):
        # add two/more participants, assert the number of participants
        num_participants = self.session.query(Participant).count()
        character_one = Character(name='Snorlax',
                                  universe='Pokemon',
                                  weight='180',
                                  moves='Rollout, Belly Drum, Heavy Slam, Yawn',
                                  debut='2004',
                                  tier='E',
                                  image_path='Snorlax.png')

        character_two = Character(name='Sonic',
                                  universe='Sonic',
                                  weight='95',
                                  moves='Hammer Spin Dash, Burning Spin Dash, Spring Jump, Springing Headbutt',
                                  debut='2013',
                                  tier='A',
                                  image_path='Sonic.png')

        tournament_one = Tournament(name='bust2',
                                    sanitized='bust2',
                                    date='April 11th, 2015',
                                    location='CA',
                                    image_path='https://images.smash.gg/images/tournament/1035/image-10e39229043ff962dd367a516b0bc090.png')

        tournament_two = Tournament(name='Smash Broski',
                                    sanitized='smash-broski',
                                    date='April 1, 2017',
                                    location='MA',
                                    image_path='path_to_image')

        participant_one = Participant(sponsor='C9',
                                      tag='mang0',
                                      main=character_one,
                                      location='California',
                                      tournament=tournament_one)

        participant_two = Participant(sponsor='Selfless',
                                      tag='Broseidon',
                                      main=character_two,
                                      location='Russia',
                                      tournament=tournament_two)

        self.object_list.append(character_one)
        self.object_list.append(character_two)
        self.object_list.append(tournament_one)
        self.object_list.append(tournament_two)
        self.object_list.append(participant_one)
        self.object_list.append(participant_two)

        self.commit_objects()

        self.assertEqual(self.session.query(Participant).count(),
                         num_participants + 2)
Пример #10
0
	def post(self):
		user = tusers.get_current_user()

		if user:
			#Check if we are modifying a tournament or making a new one
			if self.request.get('id'):
				new_tournament = ndb.Key('Tournament', int(self.request.get('id'))).get()
			else:
				new_tournament = Tournament()
			new_tournament.name = self.request.get('name')
			new_tournament.owner = [user.key]
			new_tournament.trackpin = pin_gen()
						
			dates_valid = True
			
			try:
				new_tournament.start = datetime.datetime.strptime(self.request.get('start'), '%Y-%m-%d').date()
				new_tournament.end = datetime.datetime.strptime(self.request.get('end'), '%Y-%m-%d').date()
			except ValueError:
				dates_valid = False
				
			if (dates_valid and len(new_tournament.name) > 0):
				new_tournament.put()
			#Send the user back to the tournaments page
			self.redirect('/tournaments')

		else:
			self.redirect(tusers.create_login_url(self.request.uri))
Пример #11
0
def create_tournament(request):
    # if this is a POST request we need to process the form data
    if request.method == "POST":
        # create a form instance and populate it with data from the request:
        form = TournamentForm(request.POST)
        # check whether it"s valid:
        if form.is_valid():
            tournament = Tournament(name=form.cleaned_data["name"])
            form.cleaned_data['url'] = ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(20))
            tournament.setup(form.cleaned_data)
            tournament.save()
            return render(request, "tournament/detail.html", {"tournament": tournament})
    else:
        form = TournamentForm()
    return render(request, "tournament/create.html", {"form": form, "action":reverse("create_tournament")})
Пример #12
0
 def new_tt(self):
     """ create new tournament object """
     self.tournament_view.new_tournament_name()
     name = input()
     location = self.tournament_view.new_tournament_location()
     date = self.tournament_view.new_tournament_date()
     rounds_number = 4
     tt_list = ()
     pl_list = []
     timer = self.tournament_view.new_tournament_timer()
     description = self.tournament_view.new_tournament_description()
     new_tournament = Tournament(name, location, date, rounds_number,
                                 tt_list, pl_list, timer, description)
     self.tournament_table.insert(new_tournament.serialize_tournament())
     self.tournament_menu()
Пример #13
0
def process_players():#This method sets up players in the database so that their scores can be tracked
    if request.method == 'POST':
        player_1_Name = request.form['player1']
        player_2_Name = request.form['player2']
        player_3_Name = request.form['player3']
        player_4_Name = request.form['player4']
        tournament_Name = request.form['tournament_name']

        if (player_1_Name and player_2_Name and player_3_Name and player_4_Name) == None or (player_1_Name and player_2_Name and player_3_Name and player_4_Name) == "" or (player_1_Name and player_2_Name and player_3_Name and player_4_Name) == False:
            flash('No blank names allowed, please input 4 player names.')
            return redirect('/initiate_tournament?p1='+player_1_Name+'&p2='+player_2_Name+'&p3='+player_3_Name+'&p4='+player_4_Name+'&tname='+tournament_Name)
        else:#This adds a tournament and players to the database
            logged_in_user_id = User.query.filter_by(email=session['user']).first().id
            db.session.add(Tournament(logged_in_user_id, tournament_Name))
            db.session.commit()
            session['tournament_Id'] = Tournament.query.filter_by(name=tournament_Name).first().id

            db.session.add(Player(player_1_Name,session['tournament_Id'],logged_in_user_id))#Players are instatiated using player name from template POST request and tournament_ID session variable
            db.session.add(Player(player_2_Name,session['tournament_Id'],logged_in_user_id))
            db.session.add(Player(player_3_Name,session['tournament_Id'],logged_in_user_id))
            db.session.add(Player(player_4_Name,session['tournament_Id'],logged_in_user_id))
            db.session.commit()
            #After players have been confirmed in the DB, their name is assigned into Session variables
            player_1_Id = Player.query.filter_by(name = player_1_Name , owner_id = logged_in_user_id).first().id
            player_2_Id = Player.query.filter_by(name = player_2_Name , owner_id = logged_in_user_id).first().id
            player_3_Id = Player.query.filter_by(name = player_3_Name , owner_id = logged_in_user_id).first().id
            player_4_Id = Player.query.filter_by(name = player_4_Name , owner_id = logged_in_user_id).first().id

            session['player_1_Id'] = player_1_Id
            session['player_2_Id'] = player_2_Id
            session['player_3_Id'] = player_3_Id
            session['player_4_Id'] = player_4_Id
            return redirect('/score_input')
Пример #14
0
 def get(self):
   tournament = Tournament.get(self.request.get("tournament_key"))
   if tournament.pic:
     self.response.headers['Content-Type'] = "image/png"
     self.response.out.write(getattr(tournament.pic, self.request.get("size")))
   else:
     self.error(404)
Пример #15
0
	def get(self):
		user = tusers.get_current_user()
		
		if user:
			
			#Get a list of tournaments that the user owns
			owner_q = Tournament.query(Tournament.owner == user.key)

			#Get a list of tournaments that the user is attending
			attend_q = Attending.query(ancestor=user.key)


			#Build a list of tournaments to pass to the view
			tournaments = []
			for a in attend_q:
				tournament = tournament_bean()
				tournament.tournament = a.tournament.get()
				tournament.role = a.role
				tournaments.append(tournament)


			template_values = {
				'user' : user,
				'tournaments' : owner_q,
				'attending' : tournaments,
				'logout' : tusers.create_logout_url('/'),
			}
			template = JINJA_ENVIRONMENT.get_template('view/tournaments.html')
			self.response.write(template.render(template_values))
		else:
			self.redirect(tusers.create_login_url(self.request.uri))
Пример #16
0
    def test_participants_add_one(self):
        # add a participant
        character = Character(name='Snorlax',
                              universe='Pokemon',
                              weight='180',
                              moves='Rollout, Belly Drum, Heavy Slam, Yawn',
                              debut='2004',
                              tier='E',
                              image_path='Snorlax.png')

        tournament = Tournament(name='bust2',
                                sanitized='bust2',
                                date='April 11th, 2015',
                                location='CA',
                                image_path='https://images.smash.gg/images/tournament/1035/image-10e39229043ff962dd367a516b0bc090.png')

        participant = Participant(sponsor='C9',
                                  tag='mang0',
                                  main=character,
                                  location='California',
                                  tournament=tournament)

        self.object_list.append(character)
        self.object_list.append(tournament)
        self.object_list.append(participant)

        self.commit_objects()

        result = self.session.query(Participant).order_by(
            Participant.id.desc()).first()
        self.assertEqual(result.sponsor, participant.sponsor)
        self.assertEqual(result.tag, participant.tag)
        self.assertEqual(result.location, participant.location)
        self.assertEqual(result.tournament, participant.tournament)
Пример #17
0
 def resolve_schools(parent, info):
     schools_info = SQLTournament.get_schools_for_tournament(parent.id)
     schools = [
         School(tournament_id=school["tournament_id"], name=school["name"])
         for school in schools_info
     ]
     return schools
Пример #18
0
def delete_tournament(tournament_id):
    try:
        pairing_ids = Pairing.select_attrs(['id'],
                                           {'tp.tournament_id': tournament_id})
        existing_participant_ids = Participant.select_attrs(
            ['id'], {'tournament_id': tournament_id})
        Pairing.execute_delete([str(p[0]) for p in pairing_ids])
        Participant.execute_delete(
            [str(p[0]) for p in existing_participant_ids])
        Tournament.execute_delete([str(tournament_id)])
        flash('Турнір видалений', 'isa_success')
        return redirect(url_for('.tournaments'))
    except mysql.connector.Error as err:
        flash(err.msg, 'isa_error')
        return redirect(
            url_for('.tournament_info', tournament_id=tournament_id))
Пример #19
0
    def post(self):
        user = users.get_current_user()
        if not CheckUserLoggedInAndMaybeReturnStatus(self.response, user):
            return

        request_dict = self._ParseRequestInfoAndMaybeSetStatus()
        if not request_dict:
            return

        name = request_dict['name']
        no_pairs = request_dict['no_pairs']
        no_boards = request_dict['no_boards']
        player_list = request_dict.get('players')
        if not self._CheckValidTournamentInfoAndMaybeSetStatus(
                name, no_pairs, no_boards, player_list):
            return

        tourney = Tournament.CreateAndPersist(
            owner_id=user.user_id(),
            name=name,
            no_pairs=no_pairs,
            no_boards=no_boards,
            boards=boardgenerator.GenerateBoards(35))
        tourney.PutPlayers(player_list, no_pairs)
        self.response.set_status(201)
        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(json.dumps({"id": str(tourney.key.id())}))
  def post(self):
    user = users.get_current_user()
    request_dict = self._ValidateNewTournamentInfoAndMaybeSetStatus(user)
    if not request_dict:
      return

    name = request_dict['name']
    no_pairs = request_dict['no_pairs']
    no_boards = request_dict['no_boards']
    player_list = request_dict.get('players')
    allow_score_overwrites = request_dict.get('allow_score_overwrites', False)

    tourney = Tournament.CreateAndPersist(owner_id=user.user_id(),
                                          name=name,
                                          no_pairs=no_pairs,
                                          no_boards=no_boards,
                                          boards=boardgenerator.GenerateBoards(35))
    tourney.PutPlayers(player_list, 0)

    if allow_score_overwrites:
      tourney.Unlock()
    else:
      tourney.MakeLockable()
    self.response.set_status(201)
    self.response.headers['Content-Type'] = 'application/json'
    self.response.out.write(json.dumps({"id": str(tourney.key.id())}))
Пример #21
0
 def resolve_outstanding_competitors(parent, info, role):
     return [
         IndividualAward(
             side=Side.PL,
             ranks=s["ranks"],
             student=Student(id=s["id"], name=s["name"]),
         ) for s in SQLTournament.get_all_witness_awards(parent.id)
     ]
Пример #22
0
 def get(self):
     tournament = Tournament.get(self.request.get("tournament_key"))
     if tournament.pic:
         self.response.headers['Content-Type'] = "image/png"
         self.response.out.write(
             getattr(tournament.pic, self.request.get("size")))
     else:
         self.error(404)
Пример #23
0
def create_tournament():
    name = request.values['tournament-name']

    tournament = Tournament(organizer=current_user, name=name)
    pair = Pair(tournament=tournament)

    for i in range(17):
        key = 'captain{}'.format(i)
        if key in request.values:
            if request.values[key] != '':
                id = request.values[key]
                cap = Captain.query.get(int(id))
                cap.team.total_score = 0
                for member in cap.team.members:
                    member.score = 0
                    member.assessed = False
                    db.session.add(member)
                cap.tournament = tournament

                if len(pair.captains) < 2:
                    pair.captains.append(cap)
                else:
                    pair = Pair(tournament=tournament)
                    pair.captains.append(cap)

                db.session.add(cap)
                db.session.add(pair)
                db.session.commit()

    for i in range(6):
        key = 'judge{}'.format(i)
        if key in request.values:
            if request.values[key] != '':
                id = request.values[key]
                judge = Judge.query.get(int(id))
                tournament.judges.append(judge)
                db.session.add(tournament)
                db.session.commit()

    number_of_teams = request.values['number-of-teams']
    tournament.number_of_teams = number_of_teams
    db.session.add(tournament)
    db.session.commit()

    flash('Tournament has been created successfully!')
    return redirect(url_for('index'))
Пример #24
0
def test_create_and_find_match(g):
    p = Player("test player")
    p2 = Player("test player 2")
    player_dao.create(p)
    p.id = 1
    player_dao.create(p2)
    p2.id = 2
    t = Tournament(0,'','T1','type',0)
    tournament_dao.create(t)
    t.id = 1

    match_dao.create([p.id, p2.id], t.id)
    retrieved_match = match_dao.find(1)

    assert retrieved_match.id == 1
    assert retrieved_match.player1.fname == p.fname
    assert retrieved_match.player2.fname == p2.fname
Пример #25
0
def index(pk=0):
    signup_form = SignUpForm()

    current_tournament = Tournament.query.filter_by(id=pk).first()
    if current_tournament is None:
        current_tournament = Tournament.query.first()
        if current_tournament is None:
            current_tournament = Tournament(name='Initial')

    judges = Judge.query.all()
    captains = Captain.query.all()
    tournaments = Tournament.query.all()

    round1 = []
    round2 = []
    round3 = []
    round4 = []
    round5 = []

    for pair in current_tournament.pairs:
        if pair.round == 1:
            round1.append(pair)
        elif pair.round == 2:
            round2.append(pair)
        elif pair.round == 3:
            round3.append(pair)
        elif pair.round == 4:
            round4.append(pair)
        elif pair.round == 5:
            round5.append(pair)

    current_captains = []
    caps = dict()

    if current_tournament:
        current_captains = current_tournament.captains.all()

        i = 1
        for captain in current_captains:
            key = "captain{}".format(i)
            caps[key] = captain
            i += 1
    print(current_captains)
    print(caps)
    return render_template('index.html',
                           signup_form=signup_form,
                           judges=judges,
                           captains=captains,
                           tournaments=tournaments,
                           current_tournament=current_tournament,
                           caps=caps,
                           round1=round1,
                           round2=round2,
                           round3=round3,
                           round4=round4,
                           round5=round5,
                           positions=positions)
Пример #26
0
def get_tournaments():
    """
    Parses data feed of Wizard's MTGO decklist site[1].
    Returns a list of tournament objects or an empty list if an error occurs.
    [1] http://www.wizards.com/magic/Digital/MagicOnline.aspx?x=mtg/digital/magiconline/whatshappening
    """
    try:
        logger.info('Retrieving tournament feed.')
        content = requests.get(TOURNAMENT_INFO_URL).content
        items = json.loads(content)

        logger.info('%i tournaments were found' % len(items))

        with open(PROCESSED_TOURNAMENT_FILE, 'r+') as processed_tournaments_file:
            processed_tournaments = processed_tournaments_file.read().split(',')
            if processed_tournaments == ['']:
                processed_tournaments = []

            results = []
            for item in items:
                if item['Hyperlink'] in processed_tournaments:
                    logger.info('Skipping tournament %s' % item['Hyperlink'])
                    continue
                tournament = Tournament()
                tournament.hyperlink_id = item['Hyperlink']
                tournament.tournament_format = item['Name']
                tournament.tournament_date = item['Date']
                try:
                    logger.info('Processing tournament %s' % tournament.hyperlink_id)
                    for deck in tournament.decks:
                        deck.save()
                    processed_tournaments.append(tournament.hyperlink_id)
                    results.append(tournament)
                except:
                    logger.error('Error downloading tournament-specific information for tournament %s.' % tournament.hyperlink_id)

            processed_tournaments_file.truncate()
            processed_tournaments_file.write(','.join(processed_tournaments))

            return results
    except:
        print sys.exc_info()
        logger.error('An error occurred while downloading tournament information.')
        return []
Пример #27
0
    def __call__(self):
        if len(self.db.all_tournaments_in_progress()) > 0:
            self.tournament_view.display_error_tournament_active()
        else:
            tournament_infos = self.tournament_view.get_info()
            tournament = Tournament(name=tournament_infos[0],
                                    location=tournament_infos[1],
                                    number_of_turns=int(tournament_infos[2]),
                                    description=tournament_infos[3],
                                    time_control=tournament_infos[4])
            tournament.save_in_db()

            n = 1
            while n < 9:
                self.add_a_player(tournament=tournament)
                self.tournament_view.incremented_player_number(n)
                n += 1

        return HomeMenuController()
Пример #28
0
def tournament_getting_players():
    tour_query = db_session.query(Tournament)
    tournaments = tour_query.all()
    curr_tour = None
    if tournaments != None:
        for tournament in tournaments:
            if tournament.semi_final == "":
                curr_tour = tournament
                break
            else:
                if tournament.winner == None:
                    if tournament.final != "":
                        if current_user.id in ast.literal_eval(
                                tournament.final):
                            return abort(409)
                    elif tournament.semi_final != "":
                        if current_user.id in ast.literal_eval(
                                tournament.semi_final):
                            return abort(409)
                    elif tournament.quarter_final != "":
                        if current_user.id in ast.literal_eval(
                                tournament.quarter_final):
                            return abort(409)

    if tournaments == None or curr_tour == None:
        tournament = Tournament()
        db_session.add(tournament)

    waiting = []

    if tournament.waiting_users != "":
        waiting = ast.literal_eval(tournament.waiting_users)
        if len(waiting) > 7:
            return abort(409)

    current_user.is_waiting = 1
    if tournament.quarter_final != "":
        return abort(409)

    waiting.append(current_user.id)
    tournament.waiting_users = str(waiting)
    db_session.commit()
    return "OK"
Пример #29
0
 def resolve_teams(parent, info):
     teams = SQLTournament.get_teams_for_tournament(parent.id)
     return [
         Team(
             tournament_id=parent.id,
             num=team["num"],
             name=team["name"],
             school_name=team["school_name"],
         ) for team in teams
     ]
Пример #30
0
    def init_data(self):
        # upload tournaments and teams from DB
        for l_id in self.FOOTBALL_COMPETITION_IDS:
            tournament = Tournament.get(l_id, self.FIND_TOURN_BY)

            if not tournament:
                self.leagues_list[l_id] = None
            else:
                t_id = str(tournament['_id'])
                self.leagues_list[l_id] = League(t_id, Team.find(t_id))
Пример #31
0
    def test_tournaments_add_two_count(self):
        # add two tournaments, assert there are two tournaments
        num_tournaments = self.session.query(Tournament).count()

        self.object_list.append(Tournament(name='bust2',
                                           sanitized='bust2',
                                           date='April 11th, 2015',
                                           location='CA',
                                           image_path='https://images.smash.gg/images/tournament/1035/image-10e39229043ff962dd367a516b0bc090.png'))

        self.object_list.append(Tournament(name='Smash Broski',
                                           sanitized='smash-broski',
                                           date='April 1, 2017',
                                           location='MA',
                                           image_path='path_to_image'))

        self.commit_objects()

        self.assertEqual(self.session.query(
            Tournament).count(), num_tournaments + 2)
  def put(self):
    ''' Creates a new tournament with all the preexisting hands based on the 
        the parameters specified in the request.
    '''
    user = users.get_current_user()
    new_tournament_dict = self._ValidateNewTournamentInfoAndMaybeSetStatus(user)
    if not new_tournament_dict:
      return

    name = new_tournament_dict['name']
    no_pairs = new_tournament_dict['no_pairs']
    no_boards = new_tournament_dict['no_boards']
    player_list = new_tournament_dict.get('players')
    allow_score_overwrites = new_tournament_dict.get('allow_score_overwrites',
                                                     False)

    tourney = Tournament.CreateAndPersist(owner_id=user.user_id(),
                                          name = name,
                                          no_pairs=no_pairs,
                                          no_boards=no_boards,
                                          boards=boardgenerator.GenerateBoards(35))
    tourney.PutPlayers(player_list, 0)

    if allow_score_overwrites:
      tourney.Unlock()
    else:
      tourney.MakeLockable()

    hands_list = self._ParseHandsFromRequestAndMaybeSetStatus()
    if hands_list is None:
      return

    for hand in hands_list:
      board_no = hand.get("board_no")
      ns_pair = hand.get("ns_pair")
      ew_pair = hand.get("ew_pair")
      if not CheckValidHandPlayersCombinationAndMaybeSetStatus(
         self.response, tourney, int(board_no), int(ns_pair), int(ew_pair)):
        return
      calls = hand.setdefault("calls", {})
      ns_score = hand.get("ns_score")
      ew_score = hand.get("ew_score")
      notes = hand.get("notes")
      if not ValidateHandResultMaybeSetStatus(self.response, int(board_no),
                                              int(ns_pair), int(ew_pair),
                                              ns_score, ew_score, calls):
        return
      tourney.PutHandScore(int(board_no), int(ns_pair), int(ew_pair), calls,
                           ns_score, ew_score, notes, 0)

    self.response.set_status(201)
    self.response.headers['Content-Type'] = 'application/json'
    self.response.out.write(json.dumps({"id": str(tourney.key.id())}))
Пример #33
0
    def init_data(self):
        for t_name in self.config['tournaments_list']:
            tournament = Tournament.get(t_name, self.FIND_TOURN_BY)
            infogol_id = self.config['tournaments_list'][t_name]

            if not tournament:
                self.leagues_list[t_name] = None
            else:
                t_id = str(tournament['_id'])
                self.leagues_list[t_name] = League(t_id, Team.find(t_id),
                                                   Game.find_all(t_id),
                                                   infogol_id)
Пример #34
0
  def post(self):
    user = users.get_current_user()
    coach = Coach.all().filter("user ="******"tournament_key"))
    memberships = [m for m in TournamentMembership.all().ancestor(tournament) if
        m.team.coach.key() == coach.key()]

    membership = memberships[0]
    membership.delete()

    views.Tournaments.clear()
Пример #35
0
    def mutate(parent, info, tournament_id, matchups):
        existing_rounds = SQLTournament.get_all_rounds(tournament_id)
        current_round = len(existing_rounds) + 1

        for matchup in matchups:
            SQLMatchup.add_matchup(
                tournament_id,
                round_num=current_round,
                pl=matchup["pl"],
                defense=matchup["defense"],
            )
        return Round(round_num=current_round, tournament_id=tournament_id)
Пример #36
0
  def get(self):
    tournament = Tournament.get(self.request.get("key"))
    member_count = TournamentMembership.all().ancestor(tournament).count()

    html = ["<input type='hidden' name='tournament_key' value='%s' />" % tournament.key()]
    html.append("<p>Provide each team with a unique seed ranging from 1 to %s:</p>"
        % member_count)
    for member in TournamentMembership.all().ancestor(tournament):
      html.append("%s: <input type='text' name='seed_%s'><br />" % (
        member.team.key().name(), member.key()))

    self.response.out.write("\n".join(html))
  def get(self):
    user = users.get_current_user()
    if not CheckUserLoggedInAndMaybeReturnStatus(self.response, user):
      return

    # TODO: Implement paging if ever needed.
    tourneys = Tournament._query(Tournament.owner_id == 
        user.user_id()).fetch(projection=[Tournament.name])
    tourney_list =  [{"id": str(t.key.id()), "name": t.name} for t in tourneys]
    self.response.set_status(200)
    self.response.headers['Content-Type'] = 'application/json'
    self.response.out.write(json.dumps({"tournaments": tourney_list}, indent=2))
Пример #38
0
    def add_a_player(self, tournament: Tournament):
        """
        Create a player instance and save data in the table "players" from the database
        """
        player_infos = self.player_view.check_if_player_exists()
        player_first_name = player_infos[0]
        player_last_name = player_infos[1]

        if (player_first_name, player_last_name) not in [
            (i.first_name, i.last_name) for i in self.players
        ]:
            more_infos = self.player_view.ask_more_infos()
            Player(first_name=player_first_name,
                   last_name=player_last_name,
                   birth=more_infos[0],
                   gender=more_infos[1]).save_in_db()

        for player in self.db.load_player_data():
            if player.first_name == player_first_name and player.last_name == player_last_name:
                player = player.get_document_from_instance()
                tournament.add_player_in_tournament(player)
Пример #39
0
def test_standings(g):
    p = Player("test player")
    p2 = Player("test player 2")
    p3 = Player("test player 3")
    player_dao.create(p)
    p.id = 1
    player_dao.create(p2)
    p2.id = 2
    player_dao.create(p3)
    p3.id = 3
    t = Tournament(0,'','T1','type',0)
    tournament_dao.create(t)
    t.id = 1
    match_dao.create([p.id, p2.id], t.id)
    match_dao.create([p.id, p3.id], t.id)
    match_dao.create([p3.id, p2.id], t.id)
    match = Match(player1=p,player2=p2,id=1)
    match.score1 = 19
    match.score2 = 21
    match2 = Match(player1=p,player2=p3,id=2)
    match2.score1 = 17
    match2.score2 = 21
    match3 = Match(player1=p3,player2=p2,id=3)
    match3.score1 = 23
    match3.score2 = 21

    match_dao.update(match)
    match_dao.update(match2)
    match_dao.update(match3)
    standings = standings_dao.find(t.id)

    assert standings[0].name == p.fname
    assert standings[0].win == 0
    assert standings[0].loss == 2
    assert standings[1].name == p2.fname
    assert standings[1].win == 1
    assert standings[1].loss == 1
    assert standings[2].name == p3.fname
    assert standings[2].win == 2
    assert standings[2].loss == 0
def create_tournament(payload):
    data = request.json

    # Prepare game
    game = Game.query.filter(Game.id == data['gameId']).first()
    if not game:
        game = Game.query.filter(Game.name.ilike(data['gameName'].strip())).first()
    if not game:
        game = Game(name=data['gameName'])
        db.session.add(game)
        db.session.flush()

    tournament = Tournament(name=data)
    # Generate the UUID
    uuid_len = 6
    tries = 0
    max_tries = 10
    tournament_found = True
    uuid = ''
    while tournament_found:
        if tries >= max_tries:
            tries = 0
            uuid_len += 1
        tries += 1
        uuid = generate_uuid(uuid_len)
        tournament_found = db.session.query(Tournament).filter(tournament.uuid == uuid).first()
    tournament.uuid = uuid
    tournament.name = data['name']
    tournament.max_participants = data['maxParticipants']
    if 'startDate' in data:
        tournament.start_date = data['startDate']
    if 'startDateTz' in data:
        tournament.start_date_tz = data['startDateTz']
    tournament.game_id = game.id
    user = auth.get_logged_user()
    tournament.creator_id = user.id
    db.session.add(tournament)
    db.session.flush()
    db.session.commit()
    return jsonify(tournament.long()), 201
Пример #41
0
    def test_tournaments_add_two_validate_data(self):
        # add two tournaments, assertEqual for name, date, location, entrants,
        # picture
        num_tournaments = self.session.query(Tournament).count()

        tournaments = []
        tournament_one = Tournament(name='bust2',
                                    sanitized='bust2',
                                    date='April 11th, 2015',
                                    location='CA',
                                    image_path='https://images.smash.gg/images/tournament/1035/image-10e39229043ff962dd367a516b0bc090.png')

        tournament_two = Tournament(name='Smash Broski',
                                    sanitized='smash-broski',
                                    date='April 1, 2017',
                                    location='MA',
                                    image_path='path_to_image')

        self.object_list.append(tournament_one)
        self.object_list.append(tournament_two)

        tournaments.append(tournament_two)
        tournaments.append(tournament_one)

        self.commit_objects()

        for i in range(0, len(tournaments)):
            result = self.session.query(Tournament).order_by(
                Tournament.id.desc()).first()
            self.assertEqual(result.name, tournaments[i].name)
            self.assertEqual(result.sanitized, tournaments[i].sanitized)
            self.assertEqual(result.date, tournaments[i].date)
            self.assertEqual(result.location, tournaments[i].location)
            self.assertEqual(result.image_path, tournaments[i].image_path)

            # Removing the element from the table
            self.session.delete(result)
            self.session.commit()
            self.object_list.remove(result)
Пример #42
0
def edit_tournament(tournament_id):
    edit_url = url_for('.edit_tournament', tournament_id=tournament_id)

    if request.method == 'POST':
        update_data = dict(request.form)
        update_data['is_ranked'] = 'is_ranked' in update_data.keys()
        update_data['date_start'] = request.form.getlist('date_start')[0]
        update_data['date_end'] = request.form.getlist('date_end')[0]
        try:
            Tournament.execute_update(tournament_id, update_data)
            flash('Дані турніру оновлені', 'isa_success')
            return redirect(
                url_for('.tournament_info', tournament_id=tournament_id))

        except mysql.connector.Error as err:
            flash(err.msg, 'isa_error')
            return redirect(edit_url)

    tournament = Tournament.execute_select({'id': tournament_id})[0]
    cities = City.select_attrs(['id', 'name'])

    form = '\n'.join([
        '<div class="container">',
        f'<form action="{edit_url}" method="post">',
        render_text_input_row("name", "Назва", tournament.name),
        render_select_row('city_id', "Місто", cities, tournament.city.id),
        render_date_row('date_start', 'Дата початку', tournament.date_start),
        render_date_row('date_end', 'Дата закінчення', tournament.date_end),
        render_text_input_row("pin", "EGF PIN", tournament.pin),
        render_checkbox_row('is_ranked', "Рейтинговий", tournament.is_ranked),
        render_submit(),
        '</form>',
        '</div>',
    ])

    return render_template('edit_tournament.html',
                           tournament=tournament,
                           form=form)
Пример #43
0
    def post(self):
        user = users.get_current_user()
        coach = Coach.all().filter("user ="******"tournament_key"))
        memberships = [
            m for m in TournamentMembership.all().ancestor(tournament)
            if m.team.coach.key() == coach.key()
        ]

        membership = memberships[0]
        membership.delete()

        views.Tournaments.clear()
Пример #44
0
 def load_tt(self):
     """ load a tournament from a json """
     tt = []
     self.menu.new_tournament_name()
     Tournament_name = input()
     tournaments = self.tournamentcontroller.tournament_table.search(
         self.tournamentcontroller.tournamentquery.Tournament_name ==
         f"{Tournament_name}")
     if len(tournaments) == 1:
         for tournament in tournaments:
             tt.append(Tournament.deserialize_tournament(tournament))
         return tt[0]
     else:
         self.start_menu()
Пример #45
0
    def post(self):
        request_data = json.loads(self.request.body)
        logging.info(request_data)
        player = current_user_player()
        team_key = player.team
        tournament = Tournament.get_by_id(int(request_data['tournament_id']))

        if team_key in tournament.participants:
            error_400(self.response, "ERROR_ALREADY_IN_TOURNAMENT", "Your team has already joined the tournament '%s'" % tournament.name)
            return

        tournament.participants.append(team_key)
        tournament.put()

        set_json_response(self.response, {'code': "OK"})
Пример #46
0
  def post(self):
    tournament = Tournament.get(self.request.get("tournament_key"))
    member_count = TournamentMembership.all().ancestor(tournament).count()

    for arg in self.request.arguments():
      if arg.startswith("seed_"):
        member_key = arg.split("_")[1]
        member = TournamentMembership.get(member_key)

        seed = int(self.request.get(arg)) - 1
        assert seed >= 0 and seed < member_count
        member.seed = seed
        member.put()

    tournament.schedule()
    views.Tournaments.clear()
Пример #47
0
  def post(self):
    tournament = Tournament.get(self.request.get("tournament_key"))
    team       = Team.get(self.request.get("team_key"))

    member_count = TournamentMembership.all().ancestor(tournament).count()

    if member_count < tournament.max_enrollment:
      TournamentMembership(parent=tournament, team=team, active=True).put()
      #Unretire team if retired.
      if team.retired:
        misc.unretire_team(team)
        
      if (member_count + 1 == tournament.max_enrollment and
          tournament.seed_by != "Custom"):
        tournament.schedule()


    views.Tournaments.clear()
Пример #48
0
	def get(self):
		user = tusers.get_current_user()

		if user:

			#Get a list of tournaments that the user owns
			owner_q = Tournament.query(Tournament.owner == user.key)

			#Tournaments that the user has registered for
			reg_q = RegisteredEntity.query(RegisteredEntity.user == user.key)
			attending = reg_q.map(tournament_for_registration)
			logging.info(attending)

			template_values = {
				'user' : user,
				'tournaments' : owner_q,
				'logout' : tusers.create_logout_url('/'),
				'attending' : attending
			}
			template = JINJA_ENVIRONMENT.get_template('view/tournaments.html')
			self.response.write(template.render(template_values))
		else:
			self.redirect(tusers.create_login_url(self.request.uri))
Пример #49
0
def dress_new(request):
    if request.method=='POST':
        try:
            id = int(request.session[new_dress_key])
            dress = Tournament.objects.get(pk=id)
        except:
            raise Http404
        form = DressForm(count=len(request.FILES), data=request.POST, files=request.FILES)
        if form.is_valid():
            dress = form.save(request.FILES, dress)
            request.session[new_dress_key] = None
            return redirect(dress)
        else:
            form.save_photos(dress)
    else:    
        if new_dress_key in request.session.keys():                        
            try:
                id = int(request.session[new_dress_key])
                dress = Tournament.objects.get(pk=id)
                if not dress.confirmed:
                    dress.delete()
            except:
                pass
    
        dress = Tournament()
        dress.confirmed = False
        dress.date = datetime.datetime.now()
        dress.access_key = ''.join(random.choice(string.letters) for i in xrange(DressForm.ACCESS_KEY_LENGTH))
        dress.save()

        request.session[new_dress_key] = dress.id
        
        form = DressForm()
        
        if settings.DEBUG:
            form.load_test_data()
    return render_to_response('dress_edit.html', {'form':form, 'is_new':True, 'dress': dress}, context_instance=RequestContext(request))
Пример #50
0
  def get(self):

    # check for a cached version
    #--------------------------------------------------------------------#

    if self.emit(self.response.out):
      return

    # not cached or evicted from cache; regenerate
    #--------------------------------------------------------------------#

    user = users.get_current_user()
    coach = None
    if user:
      coach = Coach.all().filter("user ="******"<img src='get_trophy?size=thumb&tournament_key=%s' />" % tournament.key()
      return ""

    def name_getter(tournament):
      return "<a rel='tournaments' href='%s'>%s</a>" % (
          tournament.get_box_href(), tournament.key().name())

    def date_getter(tournament):
      return tournament.created.date()

    def organizer_getter(tournament):
      return tournament.owner.key().name()

    def enrollment_getter(tournament):
      return "%s/%s" % (
        TournamentMembership.all().ancestor(tournament).count(),
        tournament.max_enrollment)

    def final_enrollment_getter(tournament):
      return TournamentMembership.all().ancestor(tournament).count()

    def winner_getter(tournament):
      return "<a rel='winners' href='%s'>%s</a> (%s)" % (
          tournament.winning_team.get_box_href(),
          tournament.winning_team.key().name(),
          tournament.winning_team.coach.key().name())

    def tv_getter(tournament):
      if tournament.min_tv and tournament.max_tv:
        return "%s - %s" % (tournament.min_tv, tournament.max_tv)
      elif tournament.min_tv:
        return "&ge; %s" % tournament.min_tv
      elif tournament.max_tv:
        return "&le; %s" % tournament.max_tv
      else:
        return "Any"

    def ma_getter(tournament):
      if tournament.min_ma != None and tournament.max_ma != None:
        return "%s - %s" % (tournament.min_ma, tournament.max_ma)
      elif tournament.min_ma != None:
        return "&ge; %s" % tournament.min_ma
      elif tournament.max_ma != None:
        return "&le; %s" % tournament.max_ma
      else:
        return "Any"
      
    def races_getter(tournament):
      if tournament.races_allowed:
        return "Restricted"
      else:
        return "Any"

    tournaments = {}
    for tournament in Tournament.all():
      if tournament.winning_team:
        tournaments.setdefault("Completed", []).append(tournament)
      elif tournament.started:
        tournaments.setdefault("In Progress", []).append(tournament)
      else:
        tournaments.setdefault("Open", []).append(tournament)

    tables = [
        ("Open", Table(
          columns = [
            Column("",           "Trophy Image",    trophy_getter,
              center=True),
            Column("Name",       "Tournament name",      name_getter),
            Column("Created",    "Creation date",        date_getter),
            Column("Organizer",  "Tournament organizer", organizer_getter),
            Column("Enrolled",   "Enrollment count",     enrollment_getter),
            Column("TV",         "TV range",             tv_getter),
            Column("Matches Played", "Matches played range", ma_getter),
            Column("Races",      "Races allowed",        races_getter),
            Column("Seed By",    "Teams are seeded by",  attrgetter("seed_by")),
            ],
          query = tournaments.get("Open", []),
          cls = "tablesorter tournaments_table",
          )),

        ("In Progress", Table(
          columns = [
            Column("",           "Trophy Image",    trophy_getter,
              center=True),
            Column("Name",       "Tournament name",      name_getter),
            Column("Created",    "Creation date",        date_getter),
            Column("Organizer",  "Tournament organizer", organizer_getter),
            Column("Enrolled",   "Final enrollment count",     final_enrollment_getter),
            Column("TV",         "TV range",             tv_getter),
            Column("Races",      "Races allowed",        races_getter),
            ],
          query = tournaments.get("In Progress", []),
          cls = "tablesorter tournaments_table",
          )),

        ("Completed", Table(
          columns = [
            Column("",           "Trophy Image",    trophy_getter,
              center=True),
            Column("Name",       "Tournament name",      name_getter),
            Column("Created",    "Creation date",        date_getter),
            Column("Organizer",  "Tournament organizer", organizer_getter),
            Column("Winner",     "Tournament winner",    winner_getter),
            Column("Enrolled",   "Final enrollment count",     final_enrollment_getter),
            Column("TV",         "TV range",             tv_getter),
            Column("Races",      "Races allowed",        races_getter),
            ],
          query = tournaments.get("Completed", []),
          cls = "tablesorter tournaments_table",
          ))]

    # render and update 
    #--------------------------------------------------------------------#

    tournaments = misc.render('tournaments.html', locals())
    self.update(tournaments)
    self.response.out.write(tournaments)
Пример #51
0
 def post(self):
   tournament = Tournament.get(self.request.get("tournament_key"))
   tournament.schedule()
   views.Tournaments.clear()
Пример #52
0
 def get(self):
     set_json_response(self.response, [tournament.get_data() for tournament in Tournament.query()])