Esempio n. 1
0
    def _process(self):
        contribution_persons = (ContributionPersonLink.find(
            ContributionPersonLink.contribution.has(
                self._membership_filter)).all())
        contribution_persons.extend(
            SubContributionPersonLink.find(
                SubContributionPersonLink.subcontribution.has(
                    SubContribution.contribution.has(
                        self._membership_filter))).all())

        contribution_persons_dict = defaultdict(lambda: {
            'speaker': False,
            'primary_author': False,
            'secondary_author': False
        })
        for contrib_person in contribution_persons:
            person_roles = contribution_persons_dict[contrib_person.person]
            person_roles['speaker'] |= contrib_person.is_speaker
            person_roles[
                'primary_author'] |= contrib_person.author_type == AuthorType.primary
            person_roles[
                'secondary_author'] |= contrib_person.author_type == AuthorType.secondary
        return jsonify_template(
            'events/management/contribution_person_list.html',
            event_persons=contribution_persons_dict,
            event=self.event_new)
Esempio n. 2
0
    def _process(self):
        contribution_persons = (ContributionPersonLink.find(
            ContributionPersonLink.contribution.has(
                self._membership_filter)).all())
        contribution_persons.extend(
            SubContributionPersonLink.find(
                SubContributionPersonLink.subcontribution.has(
                    SubContribution.contribution.has(
                        self._membership_filter))).all())

        registered_persons = get_registered_event_persons(self.event)

        contribution_persons_dict = defaultdict(
            lambda: {
                'speaker': False,
                'primary_author': False,
                'secondary_author': False,
                'not_registered': True
            })
        for contrib_person in contribution_persons:
            person_roles = contribution_persons_dict[contrib_person.person]
            person_roles['speaker'] |= contrib_person.is_speaker
            person_roles[
                'primary_author'] |= contrib_person.author_type == AuthorType.primary
            person_roles[
                'secondary_author'] |= contrib_person.author_type == AuthorType.secondary
            person_roles[
                'not_registered'] = contrib_person.person not in registered_persons

        return jsonify_template(self.template,
                                event_persons=contribution_persons_dict,
                                event=self.event)
Esempio n. 3
0
def test_unused_event_person(db, dummy_user, dummy_event, create_contribution,
                             create_subcontribution, create_abstract):
    person = EventPerson.create_from_user(dummy_user, event=dummy_event)
    assert not person.has_links

    dummy_event.person_links.append(EventPersonLink(person=person))
    db.session.flush()
    assert person.has_links

    dummy_event.person_links.clear()
    db.session.flush()
    assert not person.has_links

    set_feature_enabled(dummy_event, 'abstracts', True)
    abstract = create_abstract(dummy_event,
                               'Dummy abstract',
                               submitter=dummy_user,
                               person_links=[
                                   AbstractPersonLink(
                                       person=person,
                                       is_speaker=True,
                                       author_type=AuthorType.primary)
                               ])
    assert person.has_links
    abstract.is_deleted = True
    assert not person.has_links

    contrib = create_contribution(
        dummy_event,
        'Dummy contribution',
        person_links=[ContributionPersonLink(person=person, is_speaker=True)])
    assert person.has_links
    contrib.is_deleted = True
    assert not person.has_links
    db.session.delete(contrib)

    contrib = create_contribution(dummy_event,
                                  'Dummy contribution',
                                  person_links=[])
    assert not person.has_links
    create_subcontribution(contrib,
                           'Dummy subcontribution',
                           person_links=[
                               SubContributionPersonLink(person=person,
                                                         is_speaker=True)
                           ])
    assert person.has_links

    contrib.is_deleted = True
    assert not person.has_links

    db.session.delete(contrib)
    assert not person.has_links
Esempio n. 4
0
 def _migrate_subcontribution_person_links(self, old_entry):
     person_link_map = {}
     person_link_data_map = defaultdict(list)
     for speaker in getattr(old_entry, 'speakers', []):
         person = self._get_person(speaker)
         if not person:
             continue
         person_link_data = self._get_person_data(speaker)
         person_link_data_map[person].append(person_link_data)
         link = person_link_map.get(person)
         if link:
             self._update_link_data(link, person_link_data_map[person])
             self.print_warning('%[yellow!]Duplicated speaker "{}" for sub-contribution'
                                .format(person.full_name))
         else:
             link = SubContributionPersonLink(person=person, **person_link_data)
             person_link_map[person] = link
             yield link
Esempio n. 5
0
def test_access_speakers_subcontrib(dummy_contribution, dummy_user,
                                    dummy_event):
    set_feature_enabled(dummy_event, 'registration', True)
    menu_entry = MenuEntry(event=dummy_event,
                           type=MenuEntryType.page,
                           access=MenuEntryAccess.speakers)
    person = EventPerson.create_from_user(dummy_user, dummy_event)
    assert not menu_entry.can_access(dummy_user)
    subcontrib = SubContribution(contribution=dummy_contribution,
                                 title='sc',
                                 duration=timedelta(minutes=10))
    subcontrib_person_link = SubContributionPersonLink(person=person)
    subcontrib.person_links.append(subcontrib_person_link)
    assert menu_entry.can_access(dummy_user)
    dummy_contribution.is_deleted = True
    assert not menu_entry.can_access(dummy_user)
    dummy_contribution.is_deleted = False
    subcontrib.is_deleted = True
    assert not menu_entry.can_access(dummy_user)
Esempio n. 6
0
    def _process(self):
        contribution_persons = ContributionPersonLink.find(
            ContributionPersonLink.contribution.has(self._membership_filter)
        ).all()
        contribution_persons.extend(
            SubContributionPersonLink.find(
                SubContributionPersonLink.subcontribution.has(SubContribution.contribution.has(self._membership_filter))
            ).all()
        )

        contribution_persons_dict = defaultdict(
            lambda: {"speaker": False, "primary_author": False, "secondary_author": False}
        )
        for contrib_person in contribution_persons:
            person_roles = contribution_persons_dict[contrib_person.person]
            person_roles["speaker"] |= contrib_person.is_speaker
            person_roles["primary_author"] |= contrib_person.author_type == AuthorType.primary
            person_roles["secondary_author"] |= contrib_person.author_type == AuthorType.secondary
        return jsonify_template(
            "events/management/contribution_person_list.html",
            event_persons=contribution_persons_dict,
            event=self.event_new,
        )
Esempio n. 7
0
def test_dump_subcontribution(db, dummy_user, dummy_event, dummy_contribution,
                              create_entry, scheduled):
    from .schemas import SubContributionRecordSchema

    extra = {}
    if scheduled:
        create_entry(dummy_contribution,
                     utc.localize(datetime(2020, 4, 20, 4, 20)))
        extra = {
            'start_dt': dummy_contribution.start_dt.isoformat(),
            'end_dt': dummy_contribution.end_dt.isoformat(),
        }

    subcontribution = SubContribution(
        contribution=dummy_contribution,
        title='Dummy Subcontribution',
        description='A dummy <strong>subcontribution</strong>',
        duration=timedelta(minutes=10))

    person = EventPerson.create_from_user(dummy_user, dummy_event)
    subcontribution.person_links.append(
        SubContributionPersonLink(person=person))

    db.session.flush()
    category_id = dummy_contribution.event.category_id
    schema = SubContributionRecordSchema(
        context={'schema': 'test-subcontribs'})
    assert schema.dump(subcontribution) == {
        '$schema':
        'test-subcontribs',
        '_access': {
            'delete': ['IndicoAdmin'],
            'owner': ['IndicoAdmin'],
            'update': ['IndicoAdmin'],
        },
        '_data': {
            'description': 'A dummy subcontribution',
            'location': {
                'address': '',
                'room_name': '',
                'venue_name': ''
            },
            'persons': [{
                'name': 'Guinea Pig'
            }],
            'site': 'http://localhost',
            'title': 'Dummy Subcontribution',
        },
        'category_id':
        category_id,
        'category_path': [
            {
                'id': 0,
                'title': 'Home',
                'url': '/'
            },
            {
                'id': category_id,
                'title': 'dummy',
                'url': f'/category/{category_id}/'
            },
        ],
        'contribution_id':
        dummy_contribution.id,
        'duration':
        10,
        'event_id':
        0,
        'subcontribution_id':
        subcontribution.id,
        'type':
        'subcontribution',
        'url':
        f'http://localhost/event/0/contributions/{dummy_contribution.id}/subcontributions/{subcontribution.id}',
        **extra
    }
Esempio n. 8
0
def test_dump_subcontribution(db, dummy_user, dummy_event, dummy_contribution,
                              create_entry, scheduled):
    from indico.modules.search.schemas import SubContributionSchema

    extra = {'start_dt': None, 'end_dt': None}
    if scheduled:
        create_entry(dummy_contribution,
                     utc.localize(datetime(2020, 4, 20, 4, 20)))
        extra = {
            'start_dt': dummy_contribution.start_dt.isoformat(),
            'end_dt': dummy_contribution.end_dt.isoformat(),
        }

    subcontribution = SubContribution(contribution=dummy_contribution,
                                      title='Dummy Subcontribution',
                                      description='A dummy subcontribution',
                                      duration=timedelta(minutes=10))

    person = EventPerson.create_from_user(dummy_user, dummy_event)
    subcontribution.person_links.append(
        SubContributionPersonLink(person=person))

    db.session.flush()
    category_id = dummy_contribution.event.category_id
    schema = SubContributionSchema()
    assert schema.dump(subcontribution) == {
        'description':
        'A dummy subcontribution',
        'location': {
            'address': '',
            'room_name': '',
            'venue_name': ''
        },
        'persons': [{
            'affiliation': None,
            'name': 'Guinea Pig'
        }],
        'title':
        'Dummy Subcontribution',
        'category_id':
        category_id,
        'category_path': [
            {
                'id': 0,
                'title': 'Home',
                'url': '/'
            },
            {
                'id': category_id,
                'title': 'dummy',
                'url': f'/category/{category_id}/'
            },
        ],
        'contribution_id':
        dummy_contribution.id,
        'duration':
        10,
        'event_id':
        0,
        'subcontribution_id':
        subcontribution.id,
        'type':
        'subcontribution',
        'url':
        f'/event/0/contributions/{dummy_contribution.id}/subcontributions/{subcontribution.id}',
        **extra
    }