Ejemplo n.º 1
0
def edit_campaign(user_dao, campaign_id, request_dict):
    """
    Summary: Change the settings for a campaign

    Request model:
        campaign_id
        request_dict

    """
    edit_dict = {}
    name = request_dict.get('name')
    if name:
        edit_dict['name'] = name

    is_archived = request_dict.get('is_archived')
    if is_archived is not None:
        edit_dict['is_archived'] = is_archived

    open_date = request_dict.get('open_date')
    if open_date:
        edit_dict['open_date'] = js_isoparse(open_date)
    close_date = request_dict.get('close_date')
    if close_date:
        edit_dict['close_date'] = js_isoparse(close_date)

    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    coord_dao.edit_campaign(edit_dict)
    return {'data': edit_dict}
Ejemplo n.º 2
0
def create_campaign(user_dao, request_dict):
    """
    Summary: Post a new campaign

    Request model:
        campaign_name:
            type: string

    Response model: AdminCampaignDetails
    """
    org_dao = OrganizerDAO(user_dao)

    name = request_dict.get('name')

    if not name:
        raise InvalidAction('name is required to create a campaign, got %r' %
                            name)
    now = datetime.datetime.utcnow().isoformat()
    open_date = request_dict.get('open_date', now)

    if open_date:
        open_date = js_isoparse(open_date)

    close_date = request_dict.get('close_date')

    if close_date:
        close_date = js_isoparse(close_date)

    url = request_dict['url']

    series_id = request_dict.get('series_id', 1)

    coord_names = request_dict.get('coordinators')

    coords = [user_dao.user
              ]  # Organizer is included as a coordinator by default
    for coord_name in coord_names:
        coord = org_dao.get_or_create_user(coord_name, 'coordinator')
        coords.append(coord)

    campaign = org_dao.create_campaign(name=name,
                                       open_date=open_date,
                                       close_date=close_date,
                                       series_id=series_id,
                                       url=url,
                                       coords=set(coords))
    # TODO: need completion info for each round
    data = campaign.to_details_dict()

    return {'data': data}
Ejemplo n.º 3
0
def _prepare_round_params(coord_dao, request_dict):
    rnd_dict = {}
    req_columns = ['jurors', 'name', 'vote_method', 'deadline_date']
    extra_columns = ['description', 'config', 'directions', 'show_stats']
    valid_vote_methods = ['ranking', 'rating', 'yesno']

    for column in req_columns + extra_columns:
        val = request_dict.get(column)
        if not val and column in req_columns:
            raise InvalidAction('%s is required to create a round (got %r)'
                                % (column, val))
        if column is 'vote_method' and val not in valid_vote_methods:
            raise InvalidAction('%s is an invalid vote method' % val)
        if column is 'deadline_date':
            val = js_isoparse(val)
        if column is 'jurors':
            juror_names = val
        rnd_dict[column] = val

    default_quorum = len(rnd_dict['jurors'])
    rnd_dict['quorum'] = request_dict.get('quorum', default_quorum)
    rnd_dict['jurors'] = []

    for juror_name in juror_names:
        juror = coord_dao.get_or_create_user(juror_name, 'juror')
        rnd_dict['jurors'].append(juror)

    return rnd_dict