Example #1
0
def cancel_event(id):
    """Canceles event by ID."""
    event = current_user.event_or_404(id)
    this_url = url_for('cancel_event', id=event.id)

    if event.facebook_id:
        try:
            api = facebook.create_api()
            api.delete(path='/' + event.facebook_id)
        except (facebook.ConnectionError, facebook.OAuthError):
            return redirect(facebook.create_authorize_url(
                action_url=this_url,
                error_url=this_url
            ))

    if event.google_id:
        try:
            api = google.create_api(google.CalendarClient)
            entry = api.GetEventEntry(event.google_id)
            api.Delete(entry)

        except (google.ConnectionError, google.UnauthorizedError) as e:
            return redirect(google.create_authorize_url(
                action_url=this_url,
                error_url=this_url,
                scope='https://www.google.com/calendar/feeds/ https://www.google.com/m8/feeds/'
            ))

    with db.transaction as session:
        session.delete(event)
    return redirect(url_for('events'))
Example #2
0
def event(id):
    """Public event page."""
    event = Event.fetch_or_404(id)
    this_url = url_for('event', id=event.id)

    if event.facebook_id and current_user.is_authenticated():
        try:
            api = facebook.create_api()
            data = api.get(path='/' + event.facebook_id + '/invited')['data']

            for friend in data:
                contact = current_user.find_facebook_contact(friend['id'])
                if not contact:
                    with db.transaction as session:
                        contact = FacebookContact()
                        contact.user = current_user
                        contact.facebook_id = friend['id']
                        contact.name = friend['name']
                        session.add(contact)
                with db.transaction:
                    event.set_attendance(contact, Attendance.types_mapping[friend['rsvp_status']])

        except (facebook.ConnectionError, facebook.OAuthError):
            return redirect(facebook.create_authorize_url(
                action_url=this_url,
                error_url=this_url
            ))

    if event.google_id and current_user.is_authenticated():
        try:
            api = google.create_api(google.CalendarClient)
            entry = api.GetEventEntry(event.google_id)

            for participant in entry.who:
                contact = current_user.find_email_contact(participant.email)
                if not contact:
                    continue
                with db.transaction:
                    if not participant.attendee_status and participant.rel == 'http://schemas.google.com/g/2005#event.organizer':
                        event.set_attendance(contact, 'going')
                    else:
                        event.set_attendance(contact, Attendance.types_mapping[participant.attendee_status.value])

        except (google.ConnectionError, google.UnauthorizedError) as e:
            return redirect(google.create_authorize_url(
                action_url=this_url,
                error_url=this_url,
                scope='https://www.google.com/calendar/feeds/ https://www.google.com/m8/feeds/'
            ))

    return render_template('event.html', event=event)
Example #3
0
def google_event(id):
    event = current_user.event_or_404(id)
    if event.is_google_involved():
        try:
            api = google.create_api(google.CalendarClient)

            if event.google_id:
                entry = api.GetEventEntry(event.google_id)
            else:
                entry = CalendarEventEntry()

            entry.title = Title(text=event.name)
            if event.description:
                entry.content = Content(text=event.description)
            if event.venue:
                entry.where.append(CalendarWhere(value=event.venue))
            if event.starts_at:
                entry.when.append(When(
                    start=event.starts_at.strftime('%Y-%m-%dT%H:%M:%SZ'),
                    end=event.ends_at.strftime('%Y-%m-%dT%H:%M:%SZ')
                ))

            contacts_to_invite = list(event.contacts_google_to_invite)
            if contacts_to_invite:
                for contact in contacts_to_invite:
                    entry.who.append(EventWho(email=contact.email, rel='http://schemas.google.com/g/2005#event.attendee'))
                    # event.who.append(EventWho(email=contact.email, rel='http://schemas.google.com/g/2005#event.organizer'))
                entry.send_event_notifications = SendEventNotificationsProperty(value='true')

            if event.google_id:
                entry = api.Update(entry)
            else:
                entry = api.InsertEvent(entry)
                with db.transaction:
                    event.google_id = entry.GetSelfLink().href # entry.id.text

            with db.transaction:
                for contact in contacts_to_invite:
                    event.set_invitation_sent(contact)

        except (google.ConnectionError, google.UnauthorizedError) as e:
            return redirect(google.create_authorize_url(
                action_url=url_for('google_event', id=event.id),
                error_url=url_for('edit_event', id=event.id),
                scope='https://www.google.com/calendar/feeds/ https://www.google.com/m8/feeds/'
            ))
    return redirect(url_for('event', id=event.id))
Example #4
0
def import_google_contacts():
    try:
        api = google.create_api(google.ContactsClient)

        group_id = None
        feed = api.GetGroups()
        for entry in feed.entry:
            if entry.title.text == 'System Group: My Contacts':
                group_id = entry.id.text

        query = ContactsQuery()
        query.max_results = 10000
        if group_id:
            query.group = group_id
        feed = api.GetContacts(q=query)

        my_emails = current_user.emails

        for entry in feed.entry:
            with db.transaction as session:
                for email in entry.email:
                    if not entry.name or not entry.name.full_name:
                        continue
                    contact = current_user.find_email_contact(email.address)
                    if not contact:
                        contact = create_email_contact(email.address)
                        contact.name = entry.name.full_name.text
                        contact.email = email.address
                        contact.user = current_user
                        contact.belongs_to_user = email.address in my_emails
                        session.add(contact)
                    else:
                        contact.name = entry.name.full_name.text

        return redirect(url_for('contacts'))

    except (google.ConnectionError, google.UnauthorizedError):
        return redirect(
            google.create_authorize_url(
                action_url=url_for('import_google_contacts'),
                error_url=url_for('contacts'),
                scope=
                'https://www.google.com/calendar/feeds/ https://www.google.com/m8/feeds/'
            ))
Example #5
0
def import_google_contacts():
    try:
        api = google.create_api(google.ContactsClient)

        group_id = None
        feed = api.GetGroups()
        for entry in feed.entry:
            if entry.title.text == 'System Group: My Contacts':
                group_id = entry.id.text

        query = ContactsQuery()
        query.max_results = 10000
        if group_id:
            query.group = group_id
        feed = api.GetContacts(q=query)

        my_emails = current_user.emails

        for entry in feed.entry:
            with db.transaction as session:
                for email in entry.email:
                    if not entry.name or not entry.name.full_name:
                        continue
                    contact = current_user.find_email_contact(email.address)
                    if not contact:
                        contact = create_email_contact(email.address)
                        contact.name = entry.name.full_name.text
                        contact.email = email.address
                        contact.user = current_user
                        contact.belongs_to_user = email.address in my_emails
                        session.add(contact)
                    else:
                        contact.name = entry.name.full_name.text

        return redirect(url_for('contacts'))

    except (google.ConnectionError, google.UnauthorizedError):
        return redirect(google.create_authorize_url(
            action_url=url_for('import_google_contacts'),
            error_url=url_for('contacts'),
            scope='https://www.google.com/calendar/feeds/ https://www.google.com/m8/feeds/'
        ))