示例#1
0
文件: views.py 项目: theiviaxx/ladder
    def create(self, request):
        res = Result()
        #context = self._processRequest(request)

        ladder = Ladder.objects.get(pk=request.POST.get('lid', None))
        red = Team.objects.get(pk=request.POST.get('red', None))
        blu = Team.objects.get(pk=request.POST.get('blu', None))

        if len(set(red.members.all()).intersection(blu.members.all())) > 0:
            res.isError = True
            res.message = CH_SAME_TEAM
            
            return JsonResponse(res)

        game = Game()
        game.ladder = ladder
        game.red = red
        game.blu = blu
        game.save()

        res.isSuccess = True
        res.message = CH_SUCCESS

        #mail('You have been challenged!', 'ladder/email/game.html', {'object': game}, [user.email for user in game.blu.members.all()])

        return JsonResponse(res)
示例#2
0
文件: views.py 项目: theiviaxx/ladder
    def manual(self, request, obj_id):
        """ Handles manual game entries """
        res = Result()
        message = ''
        error = False
        context = self._processRequest(request, obj_id)
        red = Team.objects.get(pk=request.POST.get('red', None))
        blu = Team.objects.get(name=request.POST.get('blu', None))
        games = request.POST.get('games', '').split(',')
        
        if request.user in red.members.all() and request.user in blu.members.all():
            error = True
            message = IN_BOTH_TEAMS
        try:
            red.laddermembership_set.get(ladder=context['object'])
        except ObjectDoesNotExist:
            message = RED_NOT_MEMBER
            error = True
        try:
            blu.laddermembership_set.get(ladder=context['object'])
        except ObjectDoesNotExist:
            message = BLU_NOT_MEMBER
            error = True
        if error:
            res.isError = True
            res.message = message
            return JsonResponse(res)

        forMail = []

        for game in games:
            winner = 'red' if game == '0' else 'blu'
            game = Game(
                ladder = context['object'],
                red = red,
                blu = blu,
                status = Game.Closed
            )
            game.save()
            game.update(winner)
            forMail.append(game)
            time.sleep(1)

        self.mail_manual(request.user, forMail)

        res.isSuccess = True
        res.message = message

        return JsonResponse(res)
示例#3
0
文件: views.py 项目: theiviaxx/ladder
    def put(self, request, obj_id, requestData={}):
        context = requestData
        res = Result()
        status = context['PUT'].get('status', None)
        if status:
            context['object'].status = int(status)
            context['object'].save()

            res.isSuccess = True
            res.message = "Status update to %i" % context['object'].status
        else:
            res.isError = True
            res.message = "Status was missing or invalid"    
        
        return JsonResponse(res)
示例#4
0
文件: views.py 项目: theiviaxx/ladder
 def quick(self, request):
     res = Result()
     context = self._processRequest(request)
     serobj = context['request'].POST.get('q', False)
     if serobj:
         obj = json.loads(serobj)
         ladder = Ladder.objects.get(pk=obj['ladder'])
         red = Team.objects.get(pk=obj['red'])
         blu = Team.objects.get(pk=obj['blu'])
         games = []
         for n in xrange(obj['red_wins']):
             g = Game(ladder=ladder, red=red, blu=blu)
             g.save()
             g.update(red)
             games.append(g)
         for n in xrange(obj['blu_wins']):
             g = Game(ladder=ladder, red=red, blu=blu)
             g.save()
             g.update(blu)
             games.append(g)
         
         res.isSuccess = True    
         res.append([g.json() for g in games])
     else:
         res.isError = True
         res.message = "No query provided"
     
     return JsonResponse(res)
示例#5
0
    def init(self, request, obj_id):
        t = Tournament.objects.get(pk=obj_id)
        t.init()

        result = Result()
        result.isSuccess = True
        result.message = "All matches have been generated"

        return JsonResponse(result)
示例#6
0
文件: views.py 项目: theiviaxx/ladder
    def join(self, request, obj_id, context):
        """ Joins a team to a ladder """
        res = Result()
        teamId = context['request'].POST.get('team', None)

        if teamId:
            try:
                team = Team.objects.get(pk=teamId)
            except ObjectDoesNotExist:
                res.isError = True
                res.message = "Team not found"

                return JsonResponse(res)
            
            if context['object'].laddermembership_set.filter(team=team).count() > 0:
                res.isError = True
                res.message = ALREADY_MEMBER

                return JsonResponse(res)
            
            if len(team) != context['object'].team_size:
                res.isError = True
                res.message = L_INCORRECT_SIZE % context['object'].team_size

                return JsonResponse(res)
            
            # Get a new rating object
            rating = RatingHistory(team=team,ladder=context['object'])
            rating.save()

            lm = LadderMembership(team=team, ladder=context['object'], rating=rating)
            lm.save()

            res.isSuccess = True
            res.append(team.json())

            #self.mail_join(team)

            return JsonResponse(res)
        else:
            res.isError = True
            res.message = "No team provided"

            return JsonResponse(res)
示例#7
0
    def put(self, request, obj_id):
        result = Result()
        tourn = Tournament.objects.get(pk=obj_id)

        if tourn.state != Tournament.Open:
            result.isError = True
            result.message = "This tournament is not open"
            return JsonResponse(result)
        
        teamID = self.PUT.get('team', None)
        if teamID:
            team = Team.objects.get(pk=teamID)

            if team.members.all().count() != tourn.team_size:
                result.isError = True
                result.message = "%s does not have the correct number of players (%i) to join this tournament" % (team.name, tourn.team_size)
                return JsonResponse(result)

            hasJoined = tourn.matches.filter(Q(red=team) | Q(blu=team), round=1)
            if len(hasJoined):
                result.message = '%s has already joined this tournament' % team.name
                result.isError = True
                return JsonResponse(result)

            matches = tourn.matches.filter(red__isnull=True, round=1)
            if not matches:
                matches = tourn.matches.filter(blu__isnull=True, round=1)
            match = random.choice(matches)

            if match.red:
                match.blu = team
            else:
                match.red = team
            
            tourn.teams.add(team)
            match.save()
            
            result.isSuccess = True
        else:
            result.isError = True
            result.message = "No team provided"

        return JsonResponse(result)
示例#8
0
文件: views.py 项目: theiviaxx/ladder
    def challenge(self, request, obj_id):
        """ Handles manual challenges """
        res = Result()
        context = self._processRequest(request, obj_id)
        red = Team.objects.get(pk=request.POST.get('red', None))
        blu = Team.objects.get(pk=request.POST.get('blu', None))
        if request.user in blu.members.all():
            res.isError = True
            res.message = CH_SAME_TEAM

            return JsonResponse(res)

        game = Game(ladder=context['object'], red=red, blu=blu, status=Game.Open)
        game.save()

        res.isSuccess = True
        res.message = CH_SUCCESS

        #self.mail_challenge(challenge)

        return JsonResponse(res)
示例#9
0
文件: views.py 项目: theiviaxx/ladder
    def update(self, request, obj_id, context):
        """
        Does the maths for the result of the game and closes it out
        """
        
        updatePending()
        res = Result()
        request.POST
        
        if context['object'].status != 0:
            res.isError = True
            res.message = "This game is not open"
            
            return JsonResponse(res)

        if context['request'].user in context['object'].red.members.all() or context['request'].user in context['object'].blu.members.all():
            result = request.POST.get('result', None)
            if not result:
                res.isError = True
                res.message = "Incorrect result type, int required"
                
                return JsonResponse(res)

            context['object'].update(Team.objects.get(pk=result))

            # Send the emails of the results
            red = [user.email for user in context['object'].red.members.all()]
            blu = [user.email for user in context['object'].blu.members.all()]
            #mail('Game has ended', 'ladder/email/game.html', {'game': context['object'], 'user': context['request'].user}, red + blu)
            res.isSuccess = True
            res.message = "Game is now closed"
            res.append(context['object'].json())
        else:
            res.isError = True
            res.message = 'You are not a member of either team for this game.'

        return JsonResponse(res)
示例#10
0
    def post(self, request, obj_id):
        result = Result()
        matchResult = self.POST.get('result', False)
        if matchResult:
            obj = Match.objects.get(pk=obj_id)
            teams = request.user.teams.all()

            if obj.red not in teams and obj.blu not in teams:
                result.isError = True
                result.message = "You are not a member of a team in this match"
            else:
                winner = Team.objects.get(pk=matchResult)
                matchTeams = [obj.red, obj.blu]
                if winner not in matchTeams:
                    result.isError = True
                    result.message = "Team ID provided is not in this match"

                    return JsonResponse(result)
                
                if obj.state != Match.Open:
                    result.isError = True
                    result.message = "Match is not open"

                    return JsonResponse(result)
                
                newMatch = obj.promote(winner)
                if newMatch.state == Match.Open:
                    # mail new teams
                    pass

                result.isSuccess = True
                result.message = "Match result recorded: %s %s %s" % (obj.red.name, '>' if winner == obj.red else '<', obj.blu.name)
        else:
            result.isError = True
            result.message = "No winning team ID provided"

        return JsonResponse(result)
示例#11
0
文件: views.py 项目: theiviaxx/ladder
    def query(self, request):
        q = request.POST.get('search', '')
        results = []
        res = Result()
        if q:
            users = User.objects.filter(Q(username__icontains=q) | Q(first_name__icontains=q) | Q(last_name__icontains=q))
            for n in users:
                results.append([n.id, n.username])
            res.isSuccess = True
            res.append(results)
        else:
            res.isError = True
            res.message = 'No search query provided'

        return JsonResponse(res)
示例#12
0
    def post(self, request, *args, **kwargs):
        result = Result()
        if kwargs.get('obj_id', None):
            self._processRequest(request, kwargs['obj_id'])

            if self.POST.get('start'):
                self.object.state = Tournament.Started
                self.object.save()

                result.isSuccess = True

                return JsonResponse(result)
        else:
            self.object = Tournament()
        
        for k,v in request.POST.iteritems():
            if hasattr(self.object, k):
                try:
                    v = int(v)
                except ValueError:
                    pass
                if v.lower() == 'true':
                    v = True
                elif v.lower() == 'false':
                    v = False
                setattr(self.object, k, v)
            else:
                result.isError = True
                result.message = "Invalid property: %s" % k
                break
        
        if not result.isError:
            self.object.save()
            result.isSuccess = True
        
        return JsonResponse(result)
示例#13
0
文件: views.py 项目: theiviaxx/ladder
    def language(self, request):
        res = Result()
        if request.method != 'POST':
            res.isError = True
            res.message = "Invalid method, use POST"

            return JsonResponse(res)
        
        query = request.POST.get('q', None)
        
        if query:
            try:
                obj = parse(query)
            except:
                res.isError = True
                res.message = "Could not understand your request"
                return JsonResponse(res, 500)
            try:
                ladder = Ladder.objects.get(name=obj['ladder'])
            except ObjectDoesNotExist:
                res.isError = True
                res.message = "The ladder requested was not found"
                return JsonResponse(res, 500)
            ## Red
            if obj['red'] in ['i', 'me']:
                try:
                    red = request.user.teams.filter(ladder=ladder)[0]
                    if ladder.teams.filter(name=obj['blu']).count() == 0:
                        res.isError = True
                        res.message = "Your opponent (%s) does not have any teams in the %s ladder" % (obj['blu'], ladder.name)
                        return JsonResponse(res, 500)
                except:
                    res.isError = True
                    res.message = "You do not have any teams in the %s ladder" % ladder.name
                    return JsonResponse(res, 500)
            else:
                try:
                    red = Team.objects.get(name=obj['red'])
                except ObjectDoesNotExist:
                    res.isError = True
                    res.message = "The team '%s' was not found" % obj['red']
                    return JsonResponse(res, 500)
            ## Blue
            if obj['blu'] in ['i', 'me']:
                try:
                    blu = request.user.teams.filter(ladder=ladder)[0]
                    if ladder.teams.filter(name=obj['red']).count() == 0:
                        res.isError = True
                        res.message = "Your opponent (%s) does not have any teams in the %s ladder" % (obj['red'], ladder.name)
                        return JsonResponse(res, 500)
                except:
                    res.isError = True
                    res.message = "You do not have any teams in the %s ladder" % ladder.name
                    return JsonResponse(res, 500)
            else:
                try:
                    blu = Team.objects.get(name=obj['blu'])
                except ObjectDoesNotExist:
                    res.isError = True
                    res.message = "The team '%s' was not found" % obj['blu']
                    return JsonResponse(res, 500)
            
            winner = red if obj['winner'] == 'red' else blu
            g = Game(red=red, blu=blu, ladder=ladder)
            g.save()
            g.update(winner)

            res.isSuccess = True
            res.message = g.json()
        else:
            res.isError = True
            res.message = "No query provided"

        return JsonResponse(res)