def add_conference(endpoint, name, active, admins, info_url=None, logo_url=None, public_projects=None): try: admin_users = [ User.find_one(Q('username', 'iexact', admin)) for admin in admins ] except ModularOdmException: raise RuntimeError( "Admin must be a current registered user on the OSF.") conf = Conference(endpoint=endpoint, name=name, active=active, info_url=info_url, logo_url=logo_url, admins=admin_users) try: conf.save() except ModularOdmException: raise RuntimeError("Conference already exists.")
def setUp(self): super(TestMeetingCreateFormView, self).setUp() Conference.remove() self.user = AuthUserFactory() self.request = RequestFactory().post('/fake_path') self.view = MeetingCreateFormView() mod_data = dict(data) mod_data.update({'admins': self.user.emails[0]}) self.form = MeetingForm(data=mod_data) self.form.is_valid()
def form_valid(self, form): custom_fields, data = get_custom_fields(form.cleaned_data) endpoint = data.pop("endpoint") self.kwargs.setdefault("endpoint", endpoint) # Form validation already checks emails for existence admin_users = get_admin_users(data.pop("admins")) # Form validation already catches if a conference endpoint exists new_conf = Conference(endpoint=endpoint, admins=admin_users, **data) new_conf.field_names.update(custom_fields) new_conf.save() return super(MeetingCreateFormView, self).form_valid(form)
def form_valid(self, form): custom_fields, data = get_custom_fields(form.cleaned_data) endpoint = data.pop('endpoint') self.kwargs.setdefault('endpoint', endpoint) # Form validation already checks emails for existence admin_users = get_admin_users(data.pop('admins')) # Form validation already catches if a conference endpoint exists new_conf = Conference(endpoint=endpoint, admins=admin_users, **data) new_conf.field_names.update(custom_fields) new_conf.save() return super(MeetingCreateFormView, self).form_valid(form)
def conference_data(meeting): try: Conference.find_one(Q('endpoint', 'iexact', meeting)) except ModularOdmException: raise HTTPError(http.NOT_FOUND) nodes = Node.find( Q('tags', 'eq', meeting) & Q('is_public', 'eq', True) & Q('is_deleted', 'eq', False)) data = [ _render_conference_node(each, idx) for idx, each in enumerate(nodes) ] return data
def meeting_hook(): """View function for email conference submission. """ message = ConferenceMessage() try: message.verify() except ConferenceError as error: logger.error(error) raise HTTPError(httplib.NOT_ACCEPTABLE) try: conference = Conference.get_by_endpoint(message.conference_name, active=False) except ConferenceError as error: logger.error(error) raise HTTPError(httplib.NOT_ACCEPTABLE) if not conference.active: send_mail( message.sender_email, CONFERENCE_INACTIVE, fullname=message.sender_display, presentations_url=web_url_for('conference_view', _absolute=True), ) raise HTTPError(httplib.NOT_ACCEPTABLE) add_poster_by_email(conference=conference, message=message)
def test_form_valid(self): view = setup_form_view(self.view, self.request, self.form) view.form_valid(self.form) nt.assert_equal( Conference.find(Q('endpoint', 'iexact', data['endpoint'])).count(), 1 )
def conference_submissions(**kwargs): """Return data for all OSF4M submissions. The total number of submissions for each meeting is calculated and cached in the Conference.num_submissions field. """ submissions = [] # TODO: Revisit this loop, there has to be a way to optimize it for conf in Conference.find(): if (hasattr(conf, 'is_meeting') and (conf.is_meeting is False)): break # For efficiency, we filter by tag first, then node # instead of doing a single Node query projects = set() tags = Tag.find(Q('lower', 'eq', conf.endpoint.lower())).get_keys() nodes = Node.find( Q('tags', 'in', tags) & Q('is_public', 'eq', True) & Q('is_deleted', 'ne', True)) projects.update(list(nodes)) for idx, node in enumerate(projects): submissions.append(_render_conference_node(node, idx, conf)) num_submissions = len(projects) # Cache the number of submissions conf.num_submissions = num_submissions conf.save() if num_submissions < settings.CONFERENCE_MIN_COUNT: continue submissions.sort(key=lambda submission: submission['dateCreated'], reverse=True) return {'submissions': submissions}
def dispatch(self, request, *args, **kwargs): endpoint = self.kwargs.get("endpoint") try: self.conf = Conference.get_by_endpoint(endpoint, active=False) except ConferenceError: raise Http404('Meeting with endpoint "{}" not found'.format(endpoint)) return super(MeetingFormView, self).dispatch(request, *args, **kwargs)
def conference_submissions(**kwargs): """Return data for all OSF4M submissions. The total number of submissions for each meeting is calculated and cached in the Conference.num_submissions field. """ submissions = [] for conf in Conference.find(): # For efficiency, we filter by tag first, then node # instead of doing a single Node query projects = set() for tag in Tag.find(Q('lower', 'eq', conf.endpoint.lower())): for node in tag.node__tagged.find(Q('is_public', 'eq', True) & Q('is_deleted', 'eq', False)): projects.add(node) for idx, node in enumerate(projects): submissions.append(_render_conference_node(node, idx, conf)) num_submissions = len(projects) # Cache the number of submissions conf.num_submissions = num_submissions conf.save() if num_submissions < settings.CONFERENCE_MIN_COUNT: continue submissions.sort(key=lambda submission: submission['dateCreated'], reverse=True) return {'submissions': submissions}
def conference_view(**kwargs): meetings = [] submissions = [] for conf in Conference.find(): # For efficiency, we filter by tag first, then node # instead of doing a single Node query projects = set() for tag in Tag.find(Q('_id', 'iexact', conf.endpoint)): for node in tag.node__tagged: if not node: continue if not node.is_public or node.is_deleted: continue projects.add(node) for idx, node in enumerate(projects): submissions.append(_render_conference_node(node, idx, conf)) num_submissions = len(projects) if num_submissions < settings.CONFERENCE_MIN_COUNT: continue meetings.append({ 'name': conf.name, 'active': conf.active, 'url': web_url_for('conference_results', meeting=conf.endpoint), 'count': num_submissions, }) submissions.sort(key=lambda submission: submission['dateCreated'], reverse=True) meetings.sort(key=lambda meeting: meeting['count'], reverse=True) return {'meetings': meetings, 'submissions': submissions}
def conference_view(**kwargs): meetings = [] submissions = [] for conf in Conference.find(): query = (Q('tags', 'iexact', conf.endpoint) & Q('is_public', 'eq', True) & Q('is_deleted', 'eq', False)) projects = Node.find(query) for idx, node in enumerate(projects): submissions.append(_render_conference_node(node, idx, conf)) num_submissions = projects.count() if num_submissions < settings.CONFERNCE_MIN_COUNT: continue meetings.append({ 'name': conf.name, 'active': conf.active, 'url': web_url_for('conference_results', meeting=conf.endpoint), 'count': num_submissions, }) submissions.sort(key=lambda submission: submission['dateCreated'], reverse=True) meetings.sort(key=lambda meeting: meeting['count'], reverse=True) return {'meetings': meetings, 'submissions': submissions}
def conference_submissions(**kwargs): """Return data for all OSF4M submissions. The total number of submissions for each meeting is calculated and cached in the Conference.num_submissions field. """ conferences = Conference.find(Q('is_meeting', 'ne', False)) # TODO: Revisit this loop, there has to be a way to optimize it for conf in conferences: # For efficiency, we filter by tag first, then node # instead of doing a single Node query projects = set() tags = Tag.find( Q('system', 'eq', False) & Q('name', 'iexact', conf.endpoint.lower())).values_list( 'pk', flat=True) nodes = Node.find( Q('tags', 'in', tags) & Q('is_public', 'eq', True) & Q('is_deleted', 'ne', True)).include('guids') projects.update(list(nodes)) num_submissions = len(projects) # Cache the number of submissions conf.num_submissions = num_submissions bulk_update(conferences, update_fields=['num_submissions']) return {'success': True}
def conference_submissions(**kwargs): """Return data for all OSF4M submissions. The total number of submissions for each meeting is calculated and cached in the Conference.num_submissions field. """ submissions = [] # TODO: Revisit this loop, there has to be a way to optimize it for conf in Conference.find(): # For efficiency, we filter by tag first, then node # instead of doing a single Node query projects = set() tags = Tag.find(Q('lower', 'eq', conf.endpoint.lower())).get_keys() nodes = Node.find( Q('tags', 'in', tags) & Q('is_public', 'eq', True) & Q('is_deleted', 'ne', True) ) projects.update(list(nodes)) for idx, node in enumerate(projects): submissions.append(_render_conference_node(node, idx, conf)) num_submissions = len(projects) # Cache the number of submissions conf.num_submissions = num_submissions conf.save() if num_submissions < settings.CONFERENCE_MIN_COUNT: continue submissions.sort(key=lambda submission: submission['dateCreated'], reverse=True) return {'submissions': submissions}
def conference_view(**kwargs): meetings = [] submissions = [] for conf in Conference.find(): query = ( Q('tags', 'iexact', conf.endpoint) & Q('is_public', 'eq', True) & Q('is_deleted', 'eq', False) ) projects = Node.find(query) for idx, node in enumerate(projects): submissions.append(_render_conference_node(node, idx, conf)) num_submissions = projects.count() if num_submissions < settings.CONFERNCE_MIN_COUNT: continue meetings.append({ 'name': conf.name, 'active': conf.active, 'url': web_url_for('conference_results', meeting=conf.endpoint), 'count': num_submissions, }) submissions.sort(key=lambda submission: submission['dateCreated'], reverse=True) meetings.sort(key=lambda meeting: meeting['count'], reverse=True) return {'meetings': meetings, 'submissions': submissions}
def dispatch(self, request, *args, **kwargs): endpoint = self.kwargs.get('endpoint') try: self.conf = Conference.get_by_endpoint(endpoint, active=False) except ConferenceError: raise Http404( 'Meeting with endpoint "{}" not found'.format(endpoint)) return super(MeetingFormView, self).dispatch(request, *args, **kwargs)
def conference_data(meeting): try: Conference.find_one(Q('endpoint', 'iexact', meeting)) except ModularOdmException: raise HTTPError(httplib.NOT_FOUND) nodes = Node.find( Q('tags', 'iexact', meeting) & Q('is_public', 'eq', True) & Q('is_deleted', 'eq', False) ) ret = [ _render_conference_node(each, idx) for idx, each in enumerate(nodes) ] return ret
def test_add_conference(self): user = UserFactory() add_conference('spsp2014', name='SPSP', admins=[user.username], active=True) conf = Conference.find_one(Q('endpoint', 'eq', 'spsp2014')) assert_equal(conf.name, 'SPSP') assert_true(conf.active) assert_in(user, conf.admins)
def populate_conferences(): for meeting, attrs in MEETING_DATA.iteritems(): meeting = meeting.strip() admin_emails = attrs.pop('admins') admin_objs = [] for email in admin_emails: try: user = User.find_one(Q('username', 'iexact', email)) admin_objs.append(user) except ModularOdmException: raise RuntimeError('Username {0!r} is not registered.'.format(email)) conf = Conference( endpoint=meeting, admins=admin_objs, **attrs ) try: conf.save() except ModularOdmException: print('{0} Conference already exists. Updating existing record...'.format(meeting)) conf = Conference.find_one(Q('endpoint', 'eq', meeting)) for key, value in attrs.items(): setattr(conf, key, value) conf.admins = admin_objs changed_fields = conf.save() if changed_fields: print('Changed: {}'.format(changed_fields))
def populate_conferences(): for meeting, attrs in MEETING_DATA.iteritems(): meeting = meeting.strip() admin_emails = attrs.pop('admins', []) admin_objs = [] for email in admin_emails: try: user = User.find_one(Q('username', 'iexact', email)) admin_objs.append(user) except ModularOdmException: raise RuntimeError('Username {0!r} is not registered.'.format(email)) custom_fields = attrs.pop('field_names', {}) conf = Conference( endpoint=meeting, admins=admin_objs, **attrs ) conf.field_names.update(custom_fields) try: conf.save() except ModularOdmException: conf = Conference.find_one(Q('endpoint', 'eq', meeting)) for key, value in attrs.items(): if isinstance(value, dict): current = getattr(conf, key) current.update(value) setattr(conf, key, current) else: setattr(conf, key, value) conf.admins = admin_objs changed_fields = conf.save() if changed_fields: print('Updated {}: {}'.format(meeting, changed_fields)) else: print('Added new Conference: {}'.format(meeting))
def conference_data(meeting): try: conf = Conference.find_one(Q("endpoint", "iexact", meeting)) except ModularOdmException: raise HTTPError(httplib.NOT_FOUND) nodes = Node.find(Q("tags", "iexact", meeting) & Q("is_public", "eq", True) & Q("is_deleted", "eq", False)) ret = [_render_conference_node(each, idx, conf) for idx, each in enumerate(nodes)] return ret
def populate_conferences(): for meeting, attrs in MEETING_DATA.iteritems(): meeting = meeting.strip() admin_emails = attrs.pop('admins', []) admin_objs = [] for email in admin_emails: try: user = User.find_one(Q('username', 'iexact', email)) admin_objs.append(user) except ModularOdmException: raise RuntimeError('Username {0!r} is not registered.'.format(email)) conf = Conference( endpoint=meeting, admins=admin_objs, **attrs ) try: conf.save() except ModularOdmException: conf = Conference.find_one(Q('endpoint', 'eq', meeting)) for key, value in attrs.items(): setattr(conf, key, value) conf.admins = admin_objs changed_fields = conf.save() if changed_fields: print('Updated {}: {}'.format(meeting, changed_fields)) else: print('Added new Conference: {}'.format(meeting))
def populate_conferences(dev=False): if dev: Conference.remove() date_format = '%b %d %Y' for meeting, attrs in MEETING_DATA.iteritems(): meeting = meeting.strip() admin_emails = attrs.pop('admins', []) admin_objs = [] if not dev: for email in admin_emails: try: user = User.find_one(Q('username', 'iexact', email)) admin_objs.append(user) except ModularOdmException: raise RuntimeError('Username {0!r} is not registered.'.format(email)) # Convert string into datetime object try: attrs['end_date'] = datetime.strptime(attrs.get('end_date'), date_format) attrs['start_date'] = datetime.strptime(attrs.get('start_date'), date_format) except TypeError: print '** Meeting {} does not have a start or end date. **'.format(meeting) custom_fields = attrs.pop('field_names', {}) conf = Conference( endpoint=meeting, admins=admin_objs, **attrs ) conf.field_names.update(custom_fields) try: conf.save() except ModularOdmException: conf = Conference.find_one(Q('endpoint', 'eq', meeting)) for key, value in attrs.items(): if isinstance(value, dict): current = getattr(conf, key) current.update(value) setattr(conf, key, current) else: setattr(conf, key, value) conf.admins = admin_objs changed_fields = conf.save() if changed_fields: print('Updated {}: {}'.format(meeting, changed_fields)) else: print('Added new Conference: {}'.format(meeting))
def populate_conferences(): for meeting, attrs in MEETING_DATA.iteritems(): meeting = meeting.strip() admin_emails = attrs.pop("admins") admin_objs = [] for email in admin_emails: try: user = User.find_one(Q("username", "iexact", email)) admin_objs.append(user) except ModularOdmException: raise RuntimeError("Username {0!r} is not registered.".format(email)) conf = Conference(endpoint=meeting, admins=admin_objs, **attrs) try: conf.save() except ModularOdmException: print("{0} Conference already exists. Updating existing record...".format(meeting)) conf = Conference.find_one(Q("endpoint", "eq", meeting)) for key, value in attrs.items(): setattr(conf, key, value) conf.admins = admin_objs changed_fields = conf.save() if changed_fields: print("Changed: {}".format(changed_fields)) else: print("Added new Conference: {}".format(meeting))
def populate_conferences(): for meeting, attrs in MEETING_DATA.iteritems(): custom_fields = attrs.pop("field_names", {}) conf = Conference(endpoint=meeting, **attrs) conf.field_names.update(custom_fields) try: conf.save() except ModularOdmException: conf = Conference.find_one(Q("endpoint", "eq", meeting)) for key, value in attrs.items(): if isinstance(value, dict): current = getattr(conf, key) current.update(value) setattr(conf, key, current) else: setattr(conf, key, value) changed_fields = conf.save() if changed_fields: print("Updated {}: {}".format(meeting, changed_fields)) else: print("Added new Conference: {}".format(meeting))
def add_conference(endpoint, name, active, admins, info_url=None, logo_url=None, public_projects=None): try: admin_users = [ User.find_one(Q('username', 'iexact', admin)) for admin in admins ] except ModularOdmException: raise RuntimeError("Admin must be a current registered user on the OSF.") conf = Conference( endpoint=endpoint, name=name, active=active, info_url=info_url, logo_url=logo_url, admins=admin_users ) try: conf.save() except ModularOdmException: raise RuntimeError("Conference already exists.")
def main(): init_app(set_backends=True, routes=False) dry = '--dry' in sys.argv if not dry: scripts_utils.add_file_logger(logger, __file__) for conf in Conference.find(): if not conf.field_names.get('homepage_link_text'): logger.info('Setting conference {} field_names["homepage_link_text"] to default value: {}'.format(conf.endpoint, DEFAULT_FIELD_NAMES['homepage_link_text'])) conf.field_names['homepage_link_text'] = DEFAULT_FIELD_NAMES['homepage_link_text'] if not dry: conf.save() logger.info('Done.')
def populate_conferences(): for meeting, attrs in MEETING_DATA.iteritems(): conf = Conference(endpoint=meeting, **attrs) try: conf.save() except ModularOdmException: print('{0} Conference already exists. Updating existing record...'. format(meeting)) conf = Conference.find_one(Q('endpoint', 'eq', meeting)) for key, value in attrs.items(): setattr(conf, key, value) conf.save()
def conference_view(**kwargs): meetings = [] for conf in Conference.find(): if conf.num_submissions < settings.CONFERENCE_MIN_COUNT: continue meetings.append({ 'name': conf.name, 'active': conf.active, 'url': web_url_for('conference_results', meeting=conf.endpoint), 'count': conf.num_submissions, }) meetings.sort(key=lambda meeting: meeting['count'], reverse=True) return {'meetings': meetings}
def conference_data(meeting): try: conf = Conference.find_one(Q('endpoint', 'iexact', meeting)) except ModularOdmException: raise HTTPError(httplib.NOT_FOUND) nodes = Node.objects.filter(tags__id__in=Tag.objects.filter( name__iexact=meeting, system=False).values_list('id', flat=True), is_public=True, is_deleted=False) ret = [ _render_conference_node(each, idx, conf) for idx, each in enumerate(nodes) ] return ret
def conference_view(**kwargs): meetings = [] for conf in Conference.find(): if conf.num_submissions < settings.CONFERENCE_MIN_COUNT: continue meetings.append({ 'name': conf.name, 'location': conf.location, 'end_date': conf.end_date.strftime("%b %d, %Y") if conf.end_date else None, 'start_date': conf.start_date.strftime("%b %d, %Y") if conf.start_date else None, 'url': web_url_for('conference_results', meeting=conf.endpoint), 'count': conf.num_submissions, }) meetings.sort(key=lambda meeting: meeting['count'], reverse=True) return {'meetings': meetings}
def conference_results(meeting): """Return the data for the grid view for a conference. :param str meeting: Endpoint name for a conference. """ try: conf = Conference.find_one(Q('endpoint', 'iexact', meeting)) except ModularOdmException: raise HTTPError(http.NOT_FOUND) data = conference_data(meeting) return { 'data': json.dumps(data), 'label': meeting, 'meeting': conf.to_storage(), }
def main(): init_app(set_backends=True, routes=False) dry = '--dry' in sys.argv if not dry: scripts_utils.add_file_logger(logger, __file__) for conf in Conference.find(): if not conf.field_names.get('homepage_link_text'): logger.info( 'Setting conference {} field_names["homepage_link_text"] to default value: {}' .format(conf.endpoint, DEFAULT_FIELD_NAMES['homepage_link_text'])) conf.field_names['homepage_link_text'] = DEFAULT_FIELD_NAMES[ 'homepage_link_text'] if not dry: conf.save() logger.info('Done.')
def populate_conferences(): for meeting, attrs in MEETING_DATA.iteritems(): conf = Conference( endpoint=meeting, **attrs ) try: conf.save() except ModularOdmException: print('{0} Conference already exists. Updating existing record...'.format(meeting)) conf = Conference.find_one(Q('endpoint', 'eq', meeting)) for key, value in attrs.items(): setattr(conf, key, value) conf.save()
def conference_results(meeting): """Return the data for the grid view for a conference. :param str meeting: Endpoint name for a conference. """ try: conf = Conference.find_one(Q('endpoint', 'iexact', meeting)) except ModularOdmException: raise HTTPError(httplib.NOT_FOUND) data = conference_data(meeting) return { 'data': data, 'label': meeting, 'meeting': conf.to_storage(), # Needed in order to use base.mako namespace 'settings': settings, }
def conference_results(meeting): """Return the data for the grid view for a conference. :param str meeting: Endpoint name for a conference. """ try: conf = Conference.find_one(Q("endpoint", "iexact", meeting)) except ModularOdmException: raise HTTPError(httplib.NOT_FOUND) data = conference_data(meeting) return { "data": json.dumps(data), "label": meeting, "meeting": conf.to_storage(), # Needed in order to use base.mako namespace "settings": settings, }
def populate_conferences(email): for meeting, attrs in MEETING_DATA.iteritems(): admin_objs = [] try: user = User.find_one(Q('username', 'iexact', email)) admin_objs.append(user) except ModularOdmException: raise RuntimeError('Username {0!r} is not registered.'.format(email)) conf = Conference( endpoint=meeting, admins=admin_objs, **attrs ) try: conf.save() except ModularOdmException: print('{0} Conference already exists. Updating existing record...'.format(meeting)) conf = Conference.find_one(Q('endpoint', 'eq', meeting)) for key, value in attrs.items(): setattr(conf, key, value) conf.admins = admin_objs conf.save()
def meeting_hook(): # Fail if not from Mailgun check_mailgun_headers() form = escape_html(request.form.to_dict()) meeting, category = parse_mailgun_receiver(form) conf = Conference.find(Q('endpoint', 'iexact', meeting)) if conf.count(): conf = conf[0] else: raise HTTPError(http.NOT_FOUND) # Fail if not found or inactive # Note: Throw 406 to disable Mailgun retries try: if not conf.active: logger.error('Conference {0} is not active'.format(conf.endpoint)) raise HTTPError(http.NOT_ACCEPTABLE) except KeyError: # TODO: Can this ever be reached? raise HTTPError(http.NOT_ACCEPTABLE) name, address = get_mailgun_from() # Add poster add_poster_by_email( conf=conf, recipient=form['recipient'], address=address, fullname=name, subject=get_mailgun_subject(form), message=form['stripped-text'], attachments=get_mailgun_attachments(), tags=[meeting], system_tags=[meeting], is_spam=check_mailgun_spam(), )
def conference_view(**kwargs): meetings = [] for conf in Conference.find(): query = ( Q('tags', 'iexact', conf.endpoint) & Q('is_public', 'eq', True) & Q('is_deleted', 'eq', False) ) projects = Node.find(query) submissions = projects.count() if submissions < settings.CONFERNCE_MIN_COUNT: continue meetings.append({ 'name': conf.name, 'active': conf.active, 'url': web_url_for('conference_results', meeting=conf.endpoint), 'submissions': submissions, }) meetings.sort(key=lambda meeting: meeting['submissions'], reverse=True) return {'meetings': meetings}
def meeting_hook(): # Fail if not from Mailgun check_mailgun_headers() form = escape_html(request.form.to_dict()) meeting, category = parse_mailgun_receiver(form) conf = Conference.find(Q('endpoint', 'iexact', meeting)) if conf.count(): conf = conf[0] else: raise HTTPError(http.NOT_FOUND) # Fail if not found or inactive # Note: Throw 406 to disable Mailgun retries try: if not conf.active: raise HTTPError(http.NOT_ACCEPTABLE) except KeyError: raise HTTPError(http.NOT_ACCEPTABLE) name, address = get_mailgun_from() # Add poster add_poster_by_email( conf=conf, recipient=form['recipient'], address=address, fullname=name, subject=get_mailgun_subject(form), message=form['stripped-text'], attachments=get_mailgun_attachments(), tags=[meeting], system_tags=[meeting], is_spam=check_mailgun_spam(), )
def conference_view(**kwargs): meetings = [] submissions = [] for conf in Conference.find(): query = Q("tags", "iexact", conf.endpoint) & Q("is_public", "eq", True) & Q("is_deleted", "eq", False) projects = Node.find(query) for idx, node in enumerate(projects): submissions.append(_render_conference_node(node, idx, conf)) num_submissions = projects.count() if num_submissions < settings.CONFERNCE_MIN_COUNT: continue meetings.append( { "name": conf.name, "active": conf.active, "url": web_url_for("conference_results", meeting=conf.endpoint), "count": num_submissions, } ) submissions.sort(key=lambda submission: submission["dateCreated"], reverse=True) meetings.sort(key=lambda meeting: meeting["count"], reverse=True) return {"meetings": meetings, "submissions": submissions}
def populate_conferences(): for meeting, attrs in MEETING_DATA.iteritems(): custom_fields = attrs.pop('field_names', {}) conf = Conference(endpoint=meeting, **attrs) conf.field_names.update(custom_fields) try: conf.save() except ModularOdmException: conf = Conference.find_one(Q('endpoint', 'eq', meeting)) for key, value in attrs.items(): if isinstance(value, dict): current = getattr(conf, key) current.update(value) setattr(conf, key, current) else: setattr(conf, key, value) changed_fields = conf.save() if changed_fields: print('Updated {}: {}'.format(meeting, changed_fields)) else: print('Added new Conference: {}'.format(meeting))
def setUp(self): super(TestMeetingListView, self).setUp() Conference.remove() ConferenceFactory() ConferenceFactory() ConferenceFactory()
def get_queryset(self): return Conference.find()