Exemple #1
0
    def patch(self):
        team = get_current_team()
        if team.captain_id != session["id"]:
            return (
                {
                    "success": False,
                    "errors": {
                        "": ["Only team captains can edit team information"]
                    },
                },
                403,
            )

        data = request.get_json()

        response = TeamSchema(view="self", instance=team,
                              partial=True).load(data)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        db.session.commit()

        response = TeamSchema("self").dump(response.data)
        db.session.close()

        return {"success": True, "data": response.data}
Exemple #2
0
    def delete(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        data = request.get_json()
        user_id = data["user_id"]
        user = Users.query.filter_by(id=user_id).first_or_404()

        if user.team_id == team.id:
            team.members.remove(user)

            # Remove information that links the user to the team
            Submissions.query.filter_by(user_id=user.id).delete()
            Awards.query.filter_by(user_id=user.id).delete()
            Unlocks.query.filter_by(user_id=user.id).delete()

            db.session.commit()
        else:
            return (
                {"success": False, "errors": {"id": ["User is not part of this team"]}},
                400,
            )

        view = "admin" if is_admin() else "user"
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        members = response.data.get("members")

        return {"success": True, "data": members}
Exemple #3
0
    def post(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        data = request.get_json()
        user_id = data["user_id"]
        user = Users.query.filter_by(id=user_id).first_or_404()
        if user.team_id is None:
            team.members.append(user)
            db.session.commit()
        else:
            return (
                {
                    "success": False,
                    "errors": {
                        "id": ["User has already joined a team"]
                    },
                },
                400,
            )

        view = "admin" if is_admin() else "user"
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        members = response.data.get("members")

        return {"success": True, "data": members}
Exemple #4
0
    def post(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        data = request.get_json()
        user_id = data['id']
        user = Users.query.filter_by(id=user_id).first_or_404()
        if user.team_id is None:
            team.members.append(user)
            db.session.commit()
        else:
            return {
                'success': False,
                'errors': {
                    'id': ['User has already joined a team']
                }
            }, 400

        view = 'admin' if is_admin() else 'user'
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {'success': False, 'errors': response.errors}, 400

        members = response.data.get('members')

        return {'success': True, 'data': members}
Exemple #5
0
    def delete(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        data = request.get_json()
        user_id = data['id']
        user = Users.query.filter_by(id=user_id).first_or_404()

        if user.team_id == team.id:
            team.members.remove(user)
            db.session.commit()
        else:
            return {
                'success': False,
                'errors': {
                    'id': ['User is not part of this team']
                }
            }, 400

        view = 'admin' if is_admin() else 'user'
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {'success': False, 'errors': response.errors}, 400

        members = response.data.get('members')

        return {'success': True, 'data': members}
Exemple #6
0
    def post(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        # Generate an invite code if no user or body is specified
        if len(request.data) == 0:
            invite_code = team.get_invite_code()
            response = {"code": invite_code}
            return {"success": True, "data": response}

        data = request.get_json()
        user_id = data.get("user_id")
        user = Users.query.filter_by(id=user_id).first_or_404()
        if user.team_id is None:
            team.members.append(user)
            db.session.commit()
        else:
            return (
                {
                    "success": False,
                    "errors": {"id": ["User has already joined a team"]},
                },
                400,
            )

        view = "admin" if is_admin() else "user"
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        members = response.data.get("members")

        return {"success": True, "data": members}
Exemple #7
0
    def get(self):
        team = get_current_team()
        response = TeamSchema(view="self").dump(team)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        response.data["place"] = team.place
        response.data["score"] = team.score
        return {"success": True, "data": response.data}
Exemple #8
0
    def get(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        view = 'admin' if is_admin() else 'user'
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {'success': False, 'errors': response.errors}, 400

        members = response.data.get('members')

        return {'success': True, 'data': members}
Exemple #9
0
    def get(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        view = "admin" if is_admin() else "user"
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        members = response.data.get("members")

        return {"success": True, "data": members}
Exemple #10
0
def load_teams_csv(dict_reader):
    schema = TeamSchema()
    errors = []
    for i, line in enumerate(dict_reader):
        response = schema.load(line)
        if response.errors:
            errors.append((i, response.errors))
        else:
            db.session.add(response.data)
            db.session.commit()
    if errors:
        return errors
    return True
Exemple #11
0
    def get(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        if (team.banned or team.hidden) and is_admin() is False:
            abort(404)

        view = TeamSchema.views.get(session.get("type", "user"))
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        return {"success": True, "data": response.data}
    def get(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        if (team.banned or team.hidden) and is_admin() is False:
            abort(404)

        view = TeamSchema.views.get(session.get('type', 'user'))
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {'success': False, 'errors': response.errors}, 400

        return {'success': True, 'data': response.data}
    def patch(self):
        team = get_current_team()
        data = request.get_json()

        response = TeamSchema(view='self', instance=team,
                              partial=True).load(data)

        if response.errors:
            return {'success': False, 'errors': response.errors}, 400

        db.session.commit()

        response = TeamSchema('self').dump(response.data)
        db.session.close()

        return {'success': True, 'data': response.data}
Exemple #14
0
    def get(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()

        if (team.banned or team.hidden) and is_admin() is False:
            abort(404)

        user_type = get_current_user_type(fallback="user")
        view = TeamSchema.views.get(user_type)
        schema = TeamSchema(view=view)
        response = schema.dump(team)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        response.data["place"] = team.place
        response.data["score"] = team.score
        return {"success": True, "data": response.data}
    def get(self):
        team = get_current_team()
        response = TeamSchema(view='self').dump(team)

        if response.errors:
            return {'success': False, 'errors': response.errors}, 400

        return {'success': True, 'data': response.data}
Exemple #16
0
    def patch(self, team_id):
        team = Teams.query.filter_by(id=team_id).first_or_404()
        data = request.get_json()
        data["id"] = team_id

        schema = TeamSchema(view="admin", instance=team, partial=True)

        response = schema.load(data)
        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        response = schema.dump(response.data)
        db.session.commit()
        db.session.close()

        clear_standings()

        return {"success": True, "data": response.data}
    def post(self):
        req = request.get_json()
        view = TeamSchema.views.get(session.get('type', 'self'))
        schema = TeamSchema(view=view)
        response = schema.load(req)

        if response.errors:
            return {'success': False, 'errors': response.errors}, 400

        db.session.add(response.data)
        db.session.commit()

        response = schema.dump(response.data)
        db.session.close()

        clear_standings()

        return {'success': True, 'data': response.data}
Exemple #18
0
    def post(self):
        req = request.get_json()
        view = TeamSchema.views.get(session.get("type", "self"))
        schema = TeamSchema(view=view)
        response = schema.load(req)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        db.session.add(response.data)
        db.session.commit()

        response = schema.dump(response.data)
        db.session.close()

        clear_standings()

        return {"success": True, "data": response.data}
Exemple #19
0
    def get(self):
        teams = Teams.query.filter_by(hidden=False, banned=False)
        view = copy.deepcopy(TeamSchema.views.get(session.get("type", "user")))
        view.remove("members")
        response = TeamSchema(view=view, many=True).dump(teams)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        return {"success": True, "data": response.data}
    def get(self):
        teams = Teams.query.filter_by(hidden=False, banned=False)
        view = copy.deepcopy(TeamSchema.views.get(session.get('type', 'user')))
        view.remove('members')
        response = TeamSchema(view=view, many=True).dump(teams)

        if response.errors:
            return {'success': False, 'errors': response.errors}, 400

        return {'success': True, 'data': response.data}
Exemple #21
0
    def patch(self):
        team = get_current_team()
        if team.captain_id != session['id']:
            return {
                'success': False,
                'errors': {
                    '': ['Only team captains can edit team information']
                }
            }, 400

        data = request.get_json()

        response = TeamSchema(view='self', instance=team,
                              partial=True).load(data)

        if response.errors:
            return {'success': False, 'errors': response.errors}, 400

        db.session.commit()

        response = TeamSchema('self').dump(response.data)
        db.session.close()

        return {'success': True, 'data': response.data}
Exemple #22
0
    def get(self):
        if is_admin() and request.args.get("view") == "admin":
            teams = Teams.query.filter_by()
        else:
            teams = Teams.query.filter_by(hidden=False, banned=False)

        user_type = get_current_user_type(fallback="user")
        view = copy.deepcopy(TeamSchema.views.get(user_type))
        view.remove("members")
        response = TeamSchema(view=view, many=True).dump(teams)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        return {"success": True, "data": response.data}
Exemple #23
0
    def get(self, query_args):
        q = query_args.pop("q", None)
        field = str(query_args.pop("field", None))
        filters = build_model_filters(model=Teams, query=q, field=field)

        if is_admin() and request.args.get("view") == "admin":
            teams = (
                Teams.query.filter_by(**query_args)
                .filter(*filters)
                .paginate(per_page=50, max_per_page=100)
            )
        else:
            teams = (
                Teams.query.filter_by(hidden=False, banned=False, **query_args)
                .filter(*filters)
                .paginate(per_page=50, max_per_page=100)
            )

        user_type = get_current_user_type(fallback="user")
        view = copy.deepcopy(TeamSchema.views.get(user_type))
        view.remove("members")
        response = TeamSchema(view=view, many=True).dump(teams.items)

        if response.errors:
            return {"success": False, "errors": response.errors}, 400

        return {
            "meta": {
                "pagination": {
                    "page": teams.page,
                    "next": teams.next_num,
                    "prev": teams.prev_num,
                    "pages": teams.pages,
                    "per_page": teams.per_page,
                    "total": teams.total,
                }
            },
            "success": True,
            "data": response.data,
        }