def add_session_to_event(request, event_id, state=None, use_current_user=True): """ Session will be saved to database with proper Event id :param use_current_user: :param state: :param request: The request :param event_id: Session belongs to Event by event id """ form = request.form slide_temp_url = form.get('slides_url') video_temp_url = form.get('video_url') audio_temp_url = form.get('audio_url') slide_file = '' video_file = '' audio_file = '' if slide_temp_url: slide_file = UploadedFile(get_path_of_temp_url(slide_temp_url), slide_temp_url.rsplit('/', 1)[1]) if video_temp_url: video_file = UploadedFile(get_path_of_temp_url(video_temp_url), video_temp_url.rsplit('/', 1)[1]) if audio_temp_url: audio_file = UploadedFile(get_path_of_temp_url(audio_temp_url), audio_temp_url.rsplit('/', 1)[1]) if not state: state = form.get('state', 'draft') event = DataGetter.get_event(event_id) new_session = Session(title=form.get('title', ''), subtitle=form.get('subtitle', ''), long_abstract=form.get('long_abstract', ''), start_time=event.start_time, end_time=event.start_time + timedelta(hours=1), event_id=event_id, short_abstract=form.get('short_abstract', ''), level=form.get('level', ''), comments=form.get('comments', ''), language=form.get('language', ''), state=state) if form.get('track', None) != "": new_session.track_id = form.get('track', None) if form.get('session_type', None) != "": new_session.session_type_id = form.get('session_type', None) speaker = Speaker.query.filter_by(email=form.get('email', '')).filter_by(event_id=event_id).first() speaker = save_speaker( request, event_id=event_id, speaker=speaker, user=login.current_user if use_current_user else None ) new_session.speakers.append(speaker) save_to_db(new_session, "Session saved") if state == 'pending': trigger_new_session_notifications(new_session.id, event=event) if slide_temp_url != "" and slide_file: slide_url = upload( slide_file, UPLOAD_PATHS['sessions']['slides'].format( event_id=int(event_id), id=int(new_session.id) )) new_session.slides = slide_url if audio_temp_url != "" and audio_file: audio_url = upload( audio_file, UPLOAD_PATHS['sessions']['audio'].format( event_id=int(event_id), id=int(new_session.id) )) new_session.audio = audio_url if video_temp_url != "" and video_file: video_url = upload( video_file, UPLOAD_PATHS['sessions']['video'].format( event_id=int(event_id), id=int(new_session.id) )) new_session.video = video_url record_activity('create_session', session=new_session, event_id=event_id) update_version(event_id, False, 'sessions_ver') invite_emails = form.getlist("speakers[email]") for index, email in enumerate(invite_emails): if not string_empty(email): new_invite = Invite(event_id=event_id, session_id=new_session.id) hash = random.getrandbits(128) new_invite.hash = "%032x" % hash save_to_db(new_invite, "Invite saved") link = url_for('event_sessions.invited_view', session_id=new_session.id, event_id=event_id, _external=True) Helper.send_email_invitation(email, new_session.title, link) # If a user is registered by the email, send a notification as well user = DataGetter.get_user_by_email(email, no_flash=True) if user: cfs_link = url_for('event_detail.display_event_cfs', identifier=event.identifier) Helper.send_notif_invite_papers(user, event.name, cfs_link, link)
def import_from_pentabarf(file_path=None, string=None, creator=None, task_handle=None): if file_path: with open(file_path, 'r') as xml_file: string = xml_file.read().replace('\n', '') if not creator: creator = current_user try: update_status(task_handle, 'Parsing XML file') conference_object = PentabarfParser.parse(string) update_status(task_handle, 'Processing event') event = Event() event.start_time = conference_object.start event.end_time = conference_object.end event.has_session_speakers = True event.creator = creator event.name = conference_object.title event.location_name = conference_object.venue + ', ' + conference_object.city event.searchable_location_name = conference_object.city event.state = 'Published' event.privacy = 'public' db.session.add(event) update_status(task_handle, 'Adding sessions') index = 1 for day_object in conference_object.day_objects: for room_object in day_object.room_objects: microlocation, _ = get_or_create(Microlocation, event_id=event.id, name=room_object.name) for event_object in room_object.event_objects: session_type_id = None if event_object.type: session_type, _ = get_or_create( SessionType, event_id=event.id, name=event_object.type, length=30) session_type_id = session_type.id track_id = None if event_object.track: string_to_hash = event_object.track seed = int('100'.join( list( str(ord(character)) for character in string_to_hash))) random.seed(seed) color = "#%06x" % random.randint(0, 0xFFFFFF) track, _ = get_or_create(Track, event_id=event.id, name=event_object.track, color=color) track_id = track.id session = Session() session.track_id = track_id session.microlocation_id = microlocation.id session.session_type_id = session_type_id session.title = event_object.title session.short_abstract = event_object.abstract session.long_abstract = event_object.description session.start_time = event_object.date + string_to_timedelta( event_object.start) session.end_time = session.start_time + string_to_timedelta( event_object.duration) session.slides = event_object.slides_url session.video = event_object.video_url session.audio = event_object.audio_url session.signup_url = event_object.conf_url session.event_id = event.id session.state = 'accepted' db.session.add(session) update_status(task_handle, 'Adding session "' + session.title + '"') index += 1 for person_object in event_object.person_objects: name_mix = person_object.name + ' ' + conference_object.title email = ''.join( x for x in name_mix.title() if not x.isspace()) + '@example.com' speaker = Speaker(name=person_object.name, event_id=event.id, email=email, country='Earth', organisation=person_object.name) db.session.add(speaker) update_status(task_handle, 'Saving data') save_to_db(event) update_status(task_handle, 'Finalizing') except Exception as e: from app.api.helpers.import_helpers import make_error raise make_error('event', er=e) return event
def add_session_to_event(request, event_id, state=None, use_current_user=True, no_name=False): """ Session will be saved to database with proper Event id :param use_current_user: :param state: :param request: The request :param event_id: Session belongs to Event by event id """ form = request.form slide_temp_url = form.get('slides_url') video_temp_url = form.get('video_url') audio_temp_url = form.get('audio_url') slide_file = '' video_file = '' audio_file = '' if slide_temp_url: slide_file = UploadedFile(get_path_of_temp_url(slide_temp_url), slide_temp_url.rsplit('/', 1)[1]) if video_temp_url: video_file = UploadedFile(get_path_of_temp_url(video_temp_url), video_temp_url.rsplit('/', 1)[1]) if audio_temp_url: audio_file = UploadedFile(get_path_of_temp_url(audio_temp_url), audio_temp_url.rsplit('/', 1)[1]) if not state: state = form.get('state', 'draft') event = DataGetter.get_event(event_id) new_session = Session(title=form.get('title', ''), subtitle=form.get('subtitle', ''), long_abstract=form.get('long_abstract', ''), start_time=event.start_time, end_time=event.start_time + timedelta(hours=1), event_id=event_id, short_abstract=form.get('short_abstract', ''), level=form.get('level', ''), comments=form.get('comments', ''), language=form.get('language', ''), state=state) if form.get('track', None) != "": new_session.track_id = form.get('track', None) if form.get('session_type', None) != "": new_session.session_type_id = form.get('session_type', None) if form.get('email', '') != '': speaker = Speaker.query.filter_by(email=form.get('email', '')).filter_by(event_id=event_id).first() speaker = save_speaker( request, event_id=event_id, speaker=speaker, user=login.current_user if use_current_user else None, no_name=no_name ) new_session.speakers.append(speaker) save_to_db(new_session, "Session saved") if state == 'pending': trigger_new_session_notifications(new_session.id, event=event) if slide_temp_url != "" and slide_file: slide_url = upload( slide_file, UPLOAD_PATHS['sessions']['slides'].format( event_id=int(event_id), id=int(new_session.id) )) new_session.slides = slide_url if audio_temp_url != "" and audio_file: audio_url = upload( audio_file, UPLOAD_PATHS['sessions']['audio'].format( event_id=int(event_id), id=int(new_session.id) )) new_session.audio = audio_url if video_temp_url != "" and video_file: video_url = upload( video_file, UPLOAD_PATHS['sessions']['video'].format( event_id=int(event_id), id=int(new_session.id) )) new_session.video = video_url record_activity('create_session', session=new_session, event_id=event_id) update_version(event_id, False, 'sessions_ver') invite_emails = form.getlist("speakers[email]") for index, email in enumerate(invite_emails): if not string_empty(email): new_invite = Invite(event_id=event_id, session_id=new_session.id) hash = random.getrandbits(128) new_invite.hash = "%032x" % hash save_to_db(new_invite, "Invite saved") link = url_for('event_sessions.invited_view', session_id=new_session.id, event_id=event_id, _external=True) Helper.send_email_invitation(email, new_session.title, link) # If a user is registered by the email, send a notification as well user = DataGetter.get_user_by_email(email, no_flash=True) if user: cfs_link = url_for('event_detail.display_event_cfs', identifier=event.identifier) Helper.send_notif_invite_papers(user, event.name, cfs_link, link)
def import_data(file_path, creator_id, task_handle): with open(file_path, 'r') as xml_file: string = xml_file.read().replace('\n', '') update_status(task_handle, 'Parsing XML file') conference_object = PentabarfParser.parse(string) update_status(task_handle, 'Processing event') event = Event() event.start_time = conference_object.start event.end_time = conference_object.end event.has_session_speakers = True event.name = conference_object.title event.location_name = conference_object.venue # + ', ' + conference_object.city event.searchable_location_name = conference_object.city event.state = 'Published' event.privacy = 'public' db.session.add(event) event_time_updated = False update_status(task_handle, 'Adding sessions') for day_object in conference_object.day_objects: for room_object in day_object.room_objects: microlocation, _ = get_or_create(Microlocation, event_id=event.id, name=room_object.name) for event_object in room_object.event_objects: session_type_id = None if event_object.type: session_type, _ = get_or_create(SessionType, event_id=event.id, name=event_object.type, length=str(30)) # TODO: hardcoded here session_type_id = session_type.id track_id = None if event_object.track: string_to_hash = event_object.track seed = int('100'.join(list(str(ord(character)) for character in string_to_hash))) random.seed(seed) color = "#%06x" % random.randint(0, 0xFFFFFF) track, _ = get_or_create(Track, event_id=event.id, name=event_object.track, color=color) track_id = track.id session = Session() session.track_id = track_id session.microlocation_id = microlocation.id session.session_type_id = session_type_id session.title = event_object.title session.short_abstract = event_object.abstract session.long_abstract = event_object.description session.level = getattr(event_object, 'level', None) # https://github.com/niranjan94/python-pentabarf-xml/issues/3 session.start_time = event_object.date + string_to_timedelta(event_object.start) session.end_time = session.start_time + string_to_timedelta(event_object.duration) session.slides = event_object.slides_url session.video = event_object.video_url session.audio = event_object.audio_url session.signup_url = event_object.conf_url session.event_id = event.id session.state = 'accepted' session.speakers = [] save_to_db(session, 'Session Updated') if not event_time_updated: event.start_time = None event.end_time = None event_time_updated = True if not event.start_time or session.start_time < event.start_time: event.start_time = session.start_time if not event.end_time or session.end_time > event.end_time: event.end_time = session.end_time for person_object in event_object.person_objects: name_mix = person_object.name + ' ' + conference_object.title email = ''.join(x for x in name_mix.title() if not x.isspace()) + '@example.com' speaker = Speaker(name=person_object.name, event_id=event.id, email=email, country='Earth', organisation='') db.session.add(speaker) session.speakers.append(speaker) db.session.commit() update_status(task_handle, 'Added session "' + session.title + '"') update_status(task_handle, 'Saving data') save_to_db(event) update_status(task_handle, 'Finalizing') own_event(event=event, user_id=creator_id) return event