Example #1
0
from flask_restplus import Resource, fields
from flask import request
from src.models import Prize, Challenge, Sponsor
from src.helpers.prize_helper import format_prizes
from src.routes import namespace, api
from src.helpers.user_helper import current_user
from src import dbi

create_prize_model = api.model(
    'Prize', {
        'challengeId': fields.Integer(required=True),
        'sponsorId': fields.Integer(required=True),
        'name': fields.String(required=True),
        'count': fields.Integer(required=True)
    })

update_prize_model = api.model(
    'Prize', {
        'id': fields.Integer(required=True),
        'sponsorId': fields.Integer(required=True),
        'name': fields.String(required=True),
        'count': fields.Integer(required=True)
    })


@namespace.route('/prize')
class RestfulPrize(Resource):
    @namespace.doc('create_prize')
    @namespace.expect(create_prize_model, validate=True)
    def post(self):
        user = current_user()
Example #2
0
from flask_restplus import Resource, fields
from src import delayed, dbi
from src.routes import namespace, api
from src.services import create_project, train_model
from src.models import Project

# Formats to compare request param structures against
create_project_model = api.model('Project',
                                 {'repo': fields.String(required=True)})

train_project_model = api.model('Project',
                                {'uid': fields.String(required=True)})


@namespace.route('/projects')
class CreateProject(Resource):
    """Create new project"""
    @namespace.doc('create_project')
    @namespace.expect(create_project_model, validate=True)
    def post(self):
        # Get project repository url
        repo = api.payload['repo']

        # Schedule a create_new_project service
        delayed.add_job(create_project.perform, args=[repo])

        return '', 200


@namespace.route('/train')
class TrainProject(Resource):
Example #3
0
from flask_restplus import Resource, fields
from src.routes import namespace, api
from src.helpers.user_helper import current_user
from src.helpers.prize_helper import format_prizes
from src.helpers.sponsor_helper import format_sponsors
from src.helpers.challenge_helper import format_challenges, current_week_num
from operator import attrgetter
from src.challenges import universal_challenge_info
from datetime import datetime, timedelta
from src import dbi, logger
from src.models import Challenge
from src.helpers.error_codes import CHALLENGE_NOT_EXIST, INVALID_CHALLENGE_ACCESS

update_challenge_section_model = api.model(
    'Challenge', {
        'id': fields.Integer(required=True),
        'text': fields.String(required=True),
        'points': fields.Integer(required=True)
    })

# TODO: Validate JSON field types for 'suggestions' and 'challenges' below
# update_suggestions_model = api.model('Challenge', {
#   'id': fields.Integer(required=True),
#   'suggestions': fields.String(required=True)
# })

# update_challenges_model = api.model('Challenge', {
#   'challenges': fields.String(required=True),
#   'startDate': fields.String(required=True)
# })

Example #4
0
from flask_restplus import Resource, fields
from src.models import Sponsor
from src.routes import namespace, api
from src.helpers.sponsor_helper import format_sponsors
from src.helpers.user_helper import current_user
from src import dbi, logger
from slugify import slugify
from src.integrations.s3 import upload_image
from uuid import uuid4


create_sponsor_model = api.model('Sponsor', {
  'logo': fields.String(required=True),
  'name': fields.String(required=True),
  'url': fields.String(required=True)
})


@namespace.route('/sponsor')
class RestfulSponsor(Resource):

  @namespace.doc('create_sponsor')
  @namespace.expect(create_sponsor_model, validate=True)
  def post(self):
    user = current_user()

    if not user or not user.is_admin:
      return '', 403

    school = user.school
Example #5
0
from flask_restplus import Resource, fields
from src.routes import namespace, api
from src.helpers.user_helper import current_user
from src.helpers import random_subset
from src.helpers.winner_helper import formatted_winners
from src import dbi
from operator import attrgetter
from datetime import date
from src.models import Winner, User, Prize, CheckInAnswer
from src.mailers import challenge_mailer
from random import shuffle

choose_winners_model = api.model(
    'Winner', {'challenge_id': fields.Integer(required=True)})


@namespace.route('/winners')
class RestfulWinners(Resource):
    @namespace.doc('get_formatted_winners_list')
    def get(self):
        user = current_user()

        if not user or not user.is_admin:
            return '', 403

        challenges = sorted(user.school.active_challenges(),
                            key=attrgetter('start_date'))

        data = formatted_winners(challenges)

        return data
Example #6
0
from flask import request
from flask_restplus import Resource, fields
from src import dbi, logger
from src.api_responses.errors import *
from src.api_responses.success import *
from src.helpers.definitions import auth_header_name
from src.helpers.user_helper import current_user
from src.models import User
from src.routes import namespace, api
from src.utils import auth_util

# Models used to "match" what a request's params should look like
create_user_model = api.model(
    'User', {
        'email': fields.String(required=True),
        'name': fields.String(required=True),
        'password': fields.String(required=True)
    })

user_login_model = api.model(
    'User', {
        'email': fields.String(required=True),
        'password': fields.String(required=True)
    })


@namespace.route('/user')
class CreateUser(Resource):
    """Lets you POST to create a new user"""
    @namespace.doc('create_user')
    @namespace.expect(create_user_model, validate=True)
Example #7
0
from flask_restplus import Resource, fields
import os
from operator import attrgetter
from datetime import date
from src import dbi, logger
from src.helpers import auth_util, user_validation, decode_url_encoded_str
from src.helpers.user_helper import current_user
from src.models import User, Token, School
from src.routes import namespace, api
from src.mailers import user_mailer

create_user_model = api.model('User', {
  'email': fields.String(required=True),
  'name': fields.String(required=True),
  'age': fields.String(required=False),
  'gender': fields.String(required=False),
  'school': fields.String(required=True)
})

verify_email_model = api.model('VerifyEmail', {
  'userId': fields.Integer(required=True),
  'token': fields.String(required=True)
})

verify_demo_token_model = api.model('VerifyDemoToken', {
  'token': fields.String(required=True)
})

trigger_forgot_pw_email_model = api.model('TriggerForgotPwEmail', {
  'email': fields.String(required=True)
})
Example #8
0
from flask_restplus import Resource, fields
from src.models import School
from src.routes import namespace, api
from src import dbi

school_model = api.model(
    'School', {
        'name': fields.String(),
        'slug': fields.String(),
        'domains': fields.List(fields.String())
    })

schools_model = api.model('Schools', {
    'schools': fields.List(fields.Nested(school_model)),
})


@namespace.route('/schools')
class GetSchools(Resource):
    """Fetch all non-destroyed Schools"""
    @namespace.doc('get_schools')
    @namespace.marshal_with(schools_model)
    def get(self):
        schools = dbi.find_all(School, {'is_demo': False})
        school_data = [{
            'name': s.name,
            'slug': s.slug,
            'domains': s.domains
        } for s in schools]
        return {'schools': school_data}