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}
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}
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}
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}
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}
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
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}
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}
def cancel_campaign(user_dao, campaign_id): coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id) results = coord_dao.cancel_campaign() return {'data': results}
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}
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
def unpublish_report(user_dao, campaign_id): coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id) coord_dao.unpublish_report()
def reopen_campaign(user_dao, campaign_id): coord_dao = CoordinatorDAO.from_campaign(user_dao, campaign_id) coord_dao.reopen_campaign()