Exemple #1
0
def add_coordinator(user_dao, campaign_id, request_dict):
    """
    Summary: -
        Add a new coordinator identified by Wikimedia username to a campaign
        identified by campaign ID

    Request model:
        username

    Response model:
        username
        last_active_date
        campaign_id

    Errors:
       403: User does not have permission to add coordinators

    """
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    new_user_name = request_dict.get('username')
    new_coord = coord_dao.add_coordinator(new_user_name)
    data = {'username': new_coord.username,
            'campaign_id': campaign_id,
            'last_active_date': format_date(new_coord.last_active_date)}
    return {'data': data}
Exemple #2
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}
Exemple #3
0
def get_campaign(user_dao, campaign_id):
    """
    Summary: Get admin-level details for a campaign, identified by campaign ID.

    Request model:
        campaign_id:
            type: int64

    Response model name: AdminCampaignDetails
    Response model:
        id:
            type: int64
        name:
            type: string
        canonical_url_name:
            type: string
        rounds:
            type: array
            items:
                type: AdminRoundInfo
        coordinators:
            type: array
            items:
                type: CoordDetails

    Errors:
       403: User does not have permission to access requested campaign
       404: Campaign not found
    """
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    campaign = coord_dao.campaign
    if campaign is None:
        raise Forbidden('not a coordinator on this campaign')
    data = campaign.to_details_dict()
    return {'data': data}
Exemple #4
0
def remove_coordinator(user_dao, campaign_id, request_dict):
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    username = request_dict.get('username')
    old_coord = coord_dao.remove_coordinator(username)
    data = {'username': username,
            'campaign_id': campaign_id,
            'last_active_date': format_date(old_coord.last_active_date)}
    return {'data': data}
Exemple #5
0
def get_campaign_log(user_dao, campaign_id, request_dict):
    limit = request_dict.get('limit', 100)
    offset = request_dict.get('offset', 0)

    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    audit_logs = coord_dao.get_audit_log()
    ret = [a.to_info_dict() for a in audit_logs]
    return {'data': ret}
Exemple #6
0
def finalize_campaign(user_dao, campaign_id):
    # TODO: add some docs
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    last_rnd = coord_dao.campaign.active_round

    if not last_rnd:
        raise InvalidAction('no active rounds')

    if last_rnd.vote_method != 'ranking':
        raise InvalidAction('only ranking rounds can be finalized')

    campaign_summary = coord_dao.finalize_ranking_round(last_rnd.id)
    coord_dao.finalize_campaign()
    return campaign_summary
Exemple #7
0
def create_round(user_dao, campaign_id, request_dict):
    """
    Summary: Create a new round

    Request model:
        campaign_id
    """
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)

    rnd_params = _prepare_round_params(coord_dao, request_dict)
    rnd = coord_dao.create_round(**rnd_params)

    data = rnd.to_details_dict()
    data['progress'] = rnd.get_count_map()

    return {'data': data}
Exemple #8
0
def get_campaign_log(user_dao, campaign_id, request_dict):
    request_dict = request_dict or dict()
    limit = request_dict.get('limit', 100)
    offset = request_dict.get('offset', 0)
    round_id = request_dict.get('round_id')
    log_id = request_dict.get('id')
    action = request_dict.get('action')

    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    audit_logs = coord_dao.get_audit_log(limit=limit,
                                         offset=offset,
                                         round_id=round_id,
                                         log_id=log_id,
                                         action=action)
    ret = [a.to_info_dict() for a in audit_logs]
    return {'data': ret}
Exemple #9
0
def cancel_campaign(user_dao, campaign_id):
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    results = coord_dao.cancel_campaign()
    return {'data': results}
Exemple #10
0
def get_campaign_report_raw(user_dao, campaign_id):
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    summary = coord_dao.get_campaign_report()
    data = summary.summary
    return {'data': data}
Exemple #11
0
def get_campaign_report(user_dao, campaign_id):
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    summary = coord_dao.get_campaign_report()
    ctx = summary.summary
    ctx['use_ashes'] = True
    return ctx
Exemple #12
0
def unpublish_report(user_dao, campaign_id):
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    coord_dao.unpublish_report()
Exemple #13
0
def reopen_campaign(user_dao, campaign_id):
    coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id)
    coord_dao.reopen_campaign()