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'))
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'))
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())