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 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}
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