Example #1
0
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.")
Example #2
0
 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()
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
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
Example #6
0
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)
Example #7
0
 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
     )
Example #8
0
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}
Example #9
0
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)
Example #10
0
 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)
Example #11
0
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}
Example #12
0
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}
Example #13
0
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}
Example #14
0
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}
Example #15
0
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}
Example #16
0
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}
Example #17
0
 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)
Example #18
0
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
Example #19
0
    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)
Example #20
0
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))
Example #21
0
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))
Example #22
0
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
Example #23
0
    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)
Example #24
0
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))
Example #25
0
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))
Example #27
0
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))
Example #28
0
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.')
Example #30
0
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()
Example #31
0
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}
Example #32
0
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
Example #33
0
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}
Example #34
0
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.')
Example #36
0
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(),
    }
Example #37
0
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()
Example #38
0
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,
    }
Example #39
0
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,
    }
Example #40
0
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 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()
Example #42
0
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(),
    )
Example #43
0
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}
Example #44
0
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}
Example #45
0
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(),
    )
Example #46
0
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))
Example #48
0
 def setUp(self):
     super(TestMeetingListView, self).setUp()
     Conference.remove()
     ConferenceFactory()
     ConferenceFactory()
     ConferenceFactory()
Example #49
0
 def get_queryset(self):
     return Conference.find()
Example #50
0
 def get_queryset(self):
     return Conference.find()