Exemple #1
0
def clone_event(event, start_dt, cloners, category=None):
    """Clone an event on a given date/time.

    Runs all required cloners.

    :param start_dt: The start datetime of the new event;
    :param cloners: A set containing the names of all enabled cloners;
    :param category: The `Category` the new event will be created in.
    """
    end_dt = start_dt + event.duration
    data = {
        'start_dt': start_dt,
        'end_dt': end_dt,
        'timezone': event.timezone,
        'title': event.title,
        'description': event.description,
    }
    new_event = create_event(category or event.category, event.type_, data,
                             features=features_event_settings.get(event, 'enabled'),
                             add_creator_as_manager=False)

    # Run the modular cloning system
    EventCloner.run_cloners(event, new_event, cloners)
    signals.event.cloned.send(event, new_event=new_event)

    # Grant access to the event creator -- must be done after modular cloners
    # since cloning the event ACL would result in a duplicate entry
    with new_event.logging_disabled:
        new_event.update_principal(session.user, full_access=True)

    return new_event
Exemple #2
0
def clone_event(event, start_dt, cloners, category=None):
    """Clone an event on a given date/time.

    Runs all required cloners.

    :param start_dt: The start datetime of the new event;
    :param cloners: A set containing the names of all enabled cloners;
    :param category: The `Category` the new event will be created in.
    """
    end_dt = start_dt + event.duration
    data = {
        'start_dt': start_dt,
        'end_dt': end_dt,
        'timezone': event.timezone,
        'title': event.title,
        'description': event.description,
    }
    new_event = create_event(category or event.category,
                             event.type_,
                             data,
                             features=features_event_settings.get(
                                 event, 'enabled'),
                             add_creator_as_manager=False)

    # Run the modular cloning system
    EventCloner.run_cloners(event, new_event, cloners)
    signals.event.cloned.send(event, new_event=new_event)

    # Grant access to the event creator -- must be done after modular cloners
    # since cloning the event ACL would result in a duplicate entry
    with new_event.logging_disabled:
        new_event.update_principal(session.user, full_access=True)

    return new_event
Exemple #3
0
    def clone(self, startDate):
        # startDate is in the timezone of the event
        old_event = self.as_event
        start_dt = old_event.tzinfo.localize(startDate).astimezone(utc)
        end_dt = start_dt + old_event.duration
        data = {
            'start_dt': start_dt,
            'end_dt': end_dt,
            'timezone': old_event.timezone,
            'title': old_event.title,
            'description': old_event.description,
            'visibility': old_event.visibility
        }
        event = create_event(old_event.category, old_event.type_, data,
                             features=features_event_settings.get(self, 'enabled'),
                             add_creator_as_manager=False)

        # Run the new modular cloning system
        EventCloner.run_cloners(old_event, event)
        signals.event.cloned.send(old_event, new_event=event)

        # Grant access to the event creator -- must be done after modular cloners
        # since cloning the event ACL would result in a duplicate entry
        with event.logging_disabled:
            event.update_principal(session.user, full_access=True)

        return event.as_legacy
Exemple #4
0
def clone_into_event(source_event, target_event, cloners):
    """Clone data into an existing event.

    Runs all required cloners.

    :param source_event: The `Event` to clone data from;
    :param target_event: The `Event` to clone data into;
    :param cloners: A set containing the names of all enabled cloners.
    """

    # Run the modular cloning system
    g.importing_event = True
    EventCloner.run_cloners(source_event,
                            target_event,
                            cloners,
                            event_exists=True)
    del g.importing_event
    signals.event.imported.send(target_event, source_event=source_event)
    cloner_classes = {c.name: c for c in get_event_cloners().values()}
    target_event.log(EventLogRealm.event,
                     LogKind.change,
                     'Event',
                     'Data imported',
                     session.user,
                     data={
                         'Modules':
                         ', '.join(
                             orig_string(cloner_classes[c].friendly_name)
                             for c in cloners
                             if not cloner_classes[c].is_internal)
                     })

    return target_event
Exemple #5
0
def test_registration_clone(dummy_event, dummy_regform, create_event, dummy_user):
    set_feature_enabled(dummy_event, 'registration', True)

    assert dummy_regform.event == dummy_event
    assert dummy_event.registrations.one().user == dummy_user
    assert dummy_event.registrations.one().checked_in

    copied_event = create_event()
    EventCloner.run_cloners(dummy_event, copied_event, {'registrations', 'registration_forms'})
    copied_registration = copied_event.registrations.one()

    assert copied_registration.event == copied_event
    assert copied_registration.user == dummy_user
    assert not copied_registration.checked_in
Exemple #6
0
def clone_event(event,
                n_occurrence,
                start_dt,
                cloners,
                category=None,
                refresh_users=False):
    """Clone an event on a given date/time.

    Runs all required cloners.

    :param n_occurrence: The 1-indexed number of the occurrence, if this is a "recurring" clone, otherwise `0`
    :param start_dt: The start datetime of the new event;
    :param cloners: A set containing the names of all enabled cloners;
    :param category: The `Category` the new event will be created in.
    :aparam refresh_users: Whether `EventPerson` data should be updated from
                           their linked `User` object
    """
    end_dt = start_dt + event.duration
    data = {
        'start_dt': start_dt,
        'end_dt': end_dt,
        'timezone': event.timezone,
        'title': event.title,
        'description': event.description,
        'own_map_url': event.own_map_url
    }
    new_event = create_event(category or event.category,
                             event.type_,
                             data,
                             features=features_event_settings.get(
                                 event, 'enabled'),
                             add_creator_as_manager=False,
                             cloning=True)

    # Run the modular cloning system
    EventCloner.run_cloners(event, new_event, cloners, n_occurrence)
    if refresh_users:
        new_event.refresh_event_persons(notify=False)
    signals.event.cloned.send(event, new_event=new_event)

    # Grant access to the event creator -- must be done after modular cloners
    # since cloning the event ACL would result in a duplicate entry
    with new_event.logging_disabled:
        new_event.update_principal(session.user, full_access=True)

    return new_event
Exemple #7
0
def clone_into_event(source_event, target_event, cloners):
    """Clone data into an existing event.

    Runs all required cloners.

    :param source_event: The `Event` to clone data from;
    :param target_event: The `Event` to clone data into;
    :param cloners: A set containing the names of all enabled cloners.
    """

    # Run the modular cloning system
    EventCloner.run_cloners(source_event,
                            target_event,
                            cloners,
                            event_exists=True)
    signals.event.imported.send(target_event, source_event=source_event)

    return target_event