Exemplo n.º 1
0
def test_get_registered_event_persons(dummy_event, dummy_user, dummy_regform):
    create_registration(dummy_regform, {
        'email': '*****@*****.**',
        'first_name': 'John',
        'last_name': 'Doe',
    },
                        notify_user=False)

    user_person = EventPerson.create_from_user(dummy_user, dummy_event)
    no_user_person = EventPerson(email='*****@*****.**',
                                 first_name='John',
                                 last_name='Doe')

    create_registration(dummy_regform, {
        'email': '*****@*****.**',
        'first_name': 'Jane',
        'last_name': 'Doe',
    },
                        notify_user=False)

    no_user_no_reg = EventPerson(email='*****@*****.**',
                                 first_name='No',
                                 last_name='Show')
    dummy_event.persons.append(user_person)
    dummy_event.persons.append(no_user_person)
    dummy_event.persons.append(no_user_no_reg)
    db.session.flush()

    registered_persons = get_registered_event_persons(dummy_event)
    assert registered_persons == {user_person, no_user_person}
Exemplo n.º 2
0
 def _clone_persons(self, new_event):
     attrs = get_simple_column_attrs(EventPerson) | {'user'}
     for old_person in self.old_event.persons:
         person = EventPerson(event=new_event)
         person.populate_from_attrs(old_person, attrs)
         assert person not in db.session
         self._person_map[old_person] = person
Exemplo n.º 3
0
def create_event_person(event, create_untrusted_persons=False, **data):
    """Create an event person from data passed as kwargs."""
    title = next((x.value for x in UserTitle if data.get('title') == x.title), None)
    return EventPerson(event=event, email=data.get('email', '').lower(), _title=title,
                       first_name=data.get('firstName'), last_name=data['familyName'],
                       affiliation=data.get('affiliation'), address=data.get('address'),
                       phone=data.get('phone'), is_untrusted=create_untrusted_persons)
Exemplo n.º 4
0
 def _event_person_from_legacy(self, old_person):
     data = dict(first_name=convert_to_unicode(old_person._firstName),
                 last_name=convert_to_unicode(old_person._surName),
                 _title=self.USER_TITLE_MAP.get(
                     getattr(old_person, '_title', ''), UserTitle.none),
                 affiliation=convert_to_unicode(old_person._affilliation),
                 address=convert_to_unicode(old_person._address),
                 phone=convert_to_unicode(old_person._telephone))
     email = strict_sanitize_email(old_person._email)
     if email:
         person = (self.event_persons_by_email.get(email)
                   or self.event_persons_by_user.get(
                       self.importer.all_users_by_email.get(email)))
     else:
         person = self.event_persons_noemail_by_data.get(
             (data['first_name'], data['last_name'], data['affiliation']))
     if not person:
         user = self.importer.all_users_by_email.get(email)
         person = EventPerson(event_new=self.event,
                              user=user,
                              email=email,
                              **data)
         if email:
             self.event_persons_by_email[email] = person
         if user:
             self.event_persons_by_user[user] = person
         if not email and not user:
             self.event_persons_noemail_by_data[(
                 person.first_name, person.last_name,
                 person.affiliation)] = person
     person_link = AbstractPersonLink(person=person)
     person_link.populate_from_dict(data)
     return person_link
Exemplo n.º 5
0
 def event_person_from_legacy(self,
                              old_person,
                              skip_empty_email=False,
                              skip_empty_names=False):
     """Translate an old participation-like (or avatar) object to an EventPerson."""
     data = self._get_person_data(old_person)
     if skip_empty_names and not data['first_name'] and not data[
             'last_name']:
         self.print_warning('%[yellow!]Skipping nameless event person',
                            always=False)
         return None
     # retrieve e-mail in both Avatar and Participation objects
     email = strict_sanitize_email(
         getattr(old_person, '_email', None)
         or getattr(old_person, 'email', None))
     if email:
         person = (self.event_ns.event_persons_by_email.get(email)
                   or self.event_ns.event_persons_by_user.get(
                       self.global_ns.users_by_email.get(email)))
     elif skip_empty_email:
         return None
     else:
         person = self.event_ns.event_persons_by_data.get(
             (data['first_name'], data['last_name'], data['affiliation']))
     if not person:
         user = self.global_ns.users_by_email.get(email)
         person = EventPerson(event=self.event,
                              user=user,
                              email=email,
                              **data)
         self.add_event_person(person)
     return person
Exemplo n.º 6
0
def test_dump_event(db, dummy_user, dummy_event):
    from indico.modules.search.schemas import EventSchema
    schema = EventSchema()
    dummy_event.description = 'A dummy event'
    dummy_event.keywords = ['foo', 'bar']
    person = EventPerson.create_from_user(dummy_user, dummy_event)
    person2 = EventPerson(event=dummy_event,
                          first_name='Admin',
                          last_name='Saurus',
                          affiliation='Indico')
    dummy_event.person_links.append(EventPersonLink(person=person))
    dummy_event.person_links.append(EventPersonLink(person=person2))
    db.session.flush()
    category_id = dummy_event.category_id
    assert schema.dump(dummy_event) == {
        'description':
        'A dummy event',
        'keywords': ['foo', 'bar'],
        'location': {
            'address': '',
            'room_name': '',
            'venue_name': ''
        },
        'persons': [{
            'affiliation': None,
            'name': 'Guinea Pig'
        }, {
            'affiliation': 'Indico',
            'name': 'Admin Saurus'
        }],
        'title':
        'dummy#0',
        'category_id':
        category_id,
        'category_path': [
            {
                'id': 0,
                'title': 'Home',
                'url': '/'
            },
            {
                'id': category_id,
                'title': 'dummy',
                'url': f'/category/{category_id}/'
            },
        ],
        'end_dt':
        dummy_event.end_dt.isoformat(),
        'event_id':
        0,
        'start_dt':
        dummy_event.start_dt.isoformat(),
        'type':
        'event',
        'event_type':
        'meeting',
        'url':
        '/event/0/',
    }
Exemplo n.º 7
0
def create_event_person(event, create_untrusted_persons=False, **data):
    """Create an event person from data passed as kwargs."""
    from indico.modules.events.persons.schemas import EventPersonSchema
    event_person = EventPerson(event=event,
                               is_untrusted=create_untrusted_persons)
    event_person.populate_from_dict(
        EventPersonSchema(unknown=EXCLUDE).load(data))
    return event_person
Exemplo n.º 8
0
def person_from_data(person_data, event):
    user = User.find_first(~User.is_deleted, User.all_emails.contains(person_data['email'].lower()))
    if user:
        return EventPerson.for_user(user, event)

    person = EventPerson.find_first(event_new=event, email=person_data['email'].lower())
    if not person:
        person = EventPerson(event_new=event, **person_data)
    return person
Exemplo n.º 9
0
 def _create_event_person(self, data):
     title = next((x.value for x in UserTitle if data.get('title') == x.title), None)
     person = EventPerson(event_new=self.event, email=data.get('email', '').lower(), _title=title,
                          first_name=data.get('firstName'), last_name=data['familyName'],
                          affiliation=data.get('affiliation'), address=data.get('address'),
                          phone=data.get('phone'))
     # Keep the original data to cancel the conversion if the person is not persisted to the db
     self.event_person_conversions[person] = data
     return person
Exemplo n.º 10
0
 def _create(event, user=None, first_name=None, last_name=None, email=None, affiliation=None, title=None):
     person = EventPerson(event_new=event,
                          user=user,
                          first_name=first_name or user.first_name,
                          last_name=last_name or user.last_name,
                          email=email or user.email,
                          affiliation=affiliation or user.affiliation,
                          title=title or user.title)
     db.session.add(person)
     db.session.flush()
     return person
Exemplo n.º 11
0
 def _copy_person_link_data(link_data):
     # Copy person link data since we would otherwise end up
     # adding the EventPersons of the first event in all other
     # events of the series.
     for link, submitter in link_data.items():
         link_copy = EventPersonLink(**{col: getattr(link, col)
                                        for col in get_simple_column_attrs(EventPersonLink)})
         link_copy.person = EventPerson(**{col: getattr(link.person, col)
                                           for col in get_simple_column_attrs(EventPerson)})
         link_copy.person.user = link.person.user
         yield link_copy, submitter
Exemplo n.º 12
0
 def _migrate_event_persons(self):
     all_persons = defaultdict(list)
     old_people = []
     for chairperson in getattr(self.conf, '_chairs', []):
         old_people.append(chairperson)
     for old_contrib in self.conf.contributions.itervalues():
         for speaker in getattr(old_contrib, '_speakers', []):
             old_people.append(speaker)
         for author in getattr(old_contrib, '_primaryAuthors', []):
             old_people.append(author)
         for coauthor in getattr(old_contrib, '_coAuthors', []):
             old_people.append(coauthor)
         for old_subcontrib in old_contrib._subConts:
             for speaker in getattr(old_subcontrib, 'speakers', []):
                 old_people.append(speaker)
     schedule = self.conf._Conference__schedule
     if schedule:
         for old_entry in schedule._entries:
             entry_type = old_entry.__class__.__name__
             if entry_type == 'LinkedTimeSchEntry':
                 old_block = old_entry._LinkedTimeSchEntry__owner
                 for convener in getattr(old_block, '_conveners', []):
                     old_people.append(convener)
     for old_person in old_people:
         person = self.event_person_from_legacy(old_person, skip_empty_email=True, skip_empty_names=True)
         if person:
             user = self.global_ns.users_by_email.get(person.email)
             email = user.email if user else person.email
             all_persons[email].append(person)
     for email, persons in all_persons.iteritems():
         person = self.get_event_person_by_email(email)
         if not person:
             person = EventPerson(email=email,
                                  event_new=self.event,
                                  user=self.global_ns.users_by_email.get(email),
                                  first_name=most_common(persons, key=attrgetter('first_name')),
                                  last_name=most_common(persons, key=attrgetter('last_name')),
                                  _title=most_common(persons, key=attrgetter('_title')),
                                  affiliation=most_common(persons, key=attrgetter('affiliation')),
                                  address=most_common(persons, key=attrgetter('address')),
                                  phone=most_common(persons, key=attrgetter('phone')))
             self.add_event_person(person)
         if not self.quiet:
             self.print_info('%[magenta!]Event Person%[reset] {}({})'.format(person.full_name, person.email))
Exemplo n.º 13
0
def test_dump_event(db, dummy_user, dummy_event):
    from .schemas import EventRecordSchema

    schema = EventRecordSchema(context={'schema': 'test-events'})
    dummy_event.description = 'A dummy <strong>event</strong>'
    dummy_event.keywords = ['foo', 'bar']
    person = EventPerson.create_from_user(dummy_user, dummy_event)
    person2 = EventPerson(event=dummy_event,
                          first_name='Admin',
                          last_name='Saurus',
                          affiliation='Indico')
    dummy_event.person_links.append(EventPersonLink(person=person))
    dummy_event.person_links.append(EventPersonLink(person=person2))
    db.session.flush()
    category_id = dummy_event.category_id
    assert schema.dump(dummy_event) == {
        '$schema':
        'test-events',
        '_access': {
            'delete': ['IndicoAdmin'],
            'owner': ['IndicoAdmin'],
            'update': ['IndicoAdmin'],
        },
        '_data': {
            'description':
            'A dummy event',
            'keywords': ['foo', 'bar'],
            'location': {
                'address': '',
                'room_name': '',
                'venue_name': ''
            },
            'persons': [{
                'name': 'Guinea Pig'
            }, {
                'affiliation': 'Indico',
                'name': 'Admin Saurus'
            }],
            'site':
            'http://localhost',
            'title':
            'dummy#0'
        },
        'category_id':
        1,
        'category_path': [
            {
                'id': 0,
                'title': 'Home',
                'url': '/'
            },
            {
                'id': category_id,
                'title': 'dummy',
                'url': f'/category/{category_id}/'
            },
        ],
        'end_dt':
        dummy_event.end_dt.isoformat(),
        'event_id':
        0,
        'start_dt':
        dummy_event.start_dt.isoformat(),
        'type':
        'event',
        'type_format':
        'meeting',
        'url':
        'http://localhost/event/0/',
    }