Esempio n. 1
0
def box_app_poll():
    integration = current_user.box_integration

    if integration is None or not (integration.access_token
                                   and integration.refresh_token):
        flash('You have to integrate BOX app first')
        return redirect(url_for('home'))

    user_oauth = OAuth2(client_id=config.BOX_CLIENT_ID,
                        client_secret=config.BOX_CLIENT_SECRET,
                        access_token=integration.access_token,
                        refresh_token=integration.refresh_token)
    client = Client(user_oauth)
    events = client.events().generate_events_with_long_polling()

    for event in events:
        flash(f'Got {event.event_type} event - {event.response_object}')
        return redirect(url_for('home'))

    return redirect(url_for('home'))
Esempio n. 2
0
def box_app_admin_logs():
    integration = current_user.box_integration

    if integration is None or not (integration.access_token
                                   and integration.refresh_token):
        flash('You have to integrate BOX app first')
        return redirect(url_for('home'))

    user_oauth = OAuth2(client_id=config.BOX_CLIENT_ID,
                        client_secret=config.BOX_CLIENT_SECRET,
                        access_token=integration.access_token,
                        refresh_token=integration.refresh_token)
    client = Client(user_oauth)
    events = client.events().get_admin_events(event_types=['UPLOAD'])

    flash(integration.access_token)
    flash(integration.refresh_token)

    for event in events['entries']:
        flash(f'Got {event.event_type} event - {event.response_object}')

    return redirect(url_for('home'))
Esempio n. 3
0
def long_poll_event_listener():
    """

    :return:
    """
    client = Client(oauth=oauth)
    while True:
        try:
            stream_position = client.events().get_latest_stream_position()
            for event in client.events().generate_events_with_long_polling(
                    stream_position=stream_position):
                print(event, ' happened!')
                if event.get('message', '').lower() == 'reconnect':
                    break
                if event['event_type'] == 'ITEM_RENAME':
                    obj_id = event['source']['id']
                    obj_type = event['source']['type']
                    if obj_type == 'file':
                        if int(event['source']['path_collection']
                               ['total_count']) > 1:
                            path = '{}'.format(os.path.sep).join([
                                folder['name'] for folder in event['source']
                                ['path_collection']['entries'][1:]
                            ])
                        else:
                            path = ''
                        path = os.path.join(BOX_DIR, path)
                        file_path = os.path.join(path, event['source']['name'])
                        file_obj = client.file(file_id=obj_id).get()
                        src_file_path = None if not r_c.exists(
                            redis_key(obj_id)) else redis_get(
                                file_obj)['file_path']
                        if src_file_path and os.path.exists(src_file_path):
                            version_info = redis_get(obj=file_obj)
                            src_file_path = version_info['file_path']
                            os.rename(src_file_path, file_path)
                            version_info['file_path'] = file_path
                            version_info['etag'] = file_obj['etag']
                            r_c.set(redis_key(obj_id),
                                    json.dumps(version_info))
                        else:
                            download_queue.put([file_obj, file_path])
                elif event['event_type'] == 'ITEM_UPLOAD':
                    obj_id = event['source']['id']
                    obj_type = event['source']['type']
                    if obj_type == 'file':
                        if int(event['source']['path_collection']
                               ['total_count']) > 1:
                            path = '{}'.format(os.path.sep).join([
                                folder['name'] for folder in event['source']
                                ['path_collection']['entries'][1:]
                            ])
                        else:
                            path = ''
                        path = os.path.join(BOX_DIR, path)
                        if not os.path.exists(
                                path
                        ):  # just in case this is a file in a new subfolder
                            os.makedirs(path)
                        download_queue.put([
                            client.file(file_id=obj_id).get(),
                            os.path.join(path, event['source']['name'])
                        ])
                        # was_versioned = r_c.exists(redis_key(obj_id))
                        # if not was_versioned:
                        #     if int(event['source']['path_collection']['total_count']) > 1:
                        #         path = '{}'.format(os.path.sep).join([folder['name']
                        #                                                   for folder in
                        #                                                   event['source']['path_collection']['entries'][1:]])
                        #     else:
                        #         path = ''
                        #     path = os.path.join(BOX_DIR, path)
                        #     download_queue.put([client.file(file_id=obj_id).get(), os.path.join(path, event['source']['name'])])
                        #     # with open(os.path.join(path, event['source']['name']), 'w') as new_file_handler:
                        #     #     client.file(file_id=obj_id).get().download_to(new_file_handler)
                        #     #
                        #     # r_c.set(redis_key([obj_id]), json.dumps({'etag': event['source']['etag'],
                        #     #                         'fresh_download': True,
                        #     #                         'time_stamp': time.time()}))
                        # else:
                        #     pass
                elif event['event_type'] == 'ITEM_TRASH':
                    obj_id = event['source']['id']
                    obj_type = event['source']['type']
                    if obj_type == 'file':
                        if int(event['source']['path_collection']
                               ['total_count']) > 1:
                            path = '{}'.format(os.path.sep).join([
                                folder['name'] for folder in event['source']
                                ['path_collection']['entries'][1:]
                            ])
                        else:
                            path = ''
                        path = os.path.join(BOX_DIR, path)
                        file_path = os.path.join(path, event['source']['name'])
                        if os.path.exists(file_path):
                            os.unlink(file_path)
                        if r_c.exists(redis_key(obj_id)):
                            r_c.delete(redis_key(obj_id))
                elif event['event_type'] == 'ITEM_DOWNLOAD':
                    pass
        except Exception:
            print(traceback.format_exc())