def sync_users(): """ Create a new index if a new filesystem is found and sync it. Delete the index if the filesystem has been removed. """ home_path = app.config['USER_HOME_PATH'] temp_path = app.config['USER_TEMP_PATH'] users = [(o, False) for o in os.listdir(home_path) if ( os.path.isdir(home_path + '/' + o) and not os.path.islink(home_path + '/' + o))] users += [(o, True) for o in os.listdir(temp_path) if ( os.path.isdir(temp_path + '/' + o) and not os.path.islink(temp_path + '/' + o))] new_users = set(users) - set(User.users.keys()) deleted_users = set(User.users.keys()) - set(users) for user in new_users: user_obj = User(user[0], anonymous=user[1]) service = UserDataService(user_obj) service.build_index() app.logger.info(u"Added user: {u}. Is anonymous: {isAno}" .format(u=user[0], isAno=user[1])) for user in deleted_users: service = UserDataService(User.get(user[0])) service.destroy_index() del User.users[user[0]] app.logger.info(u"Deleted user: {u}.".format(u=user[0]))
def list_all(uid): """ List data from the specified user """ user = User.get(uid) data = UserDataService(user).find_all_folders() return jsonify(data)
def destroy(uid): user = User.get(uid) if user: zfs_service = ZFSService(uid) data = zfs_service.destroy(user) if data is not True: abort(500, data['error']) return jsonify(data) abort(404, USER_ERROR_MSG.format(u=uid))
def destroy_idx(uid): """ Destroy index for the specified user. """ warnings.warn(("This function shouldn't be used, instead this application " "should automatically find the deleted filesystem and " "destroy its index."), DeprecationWarning) user = User.get(uid) if user: return jsonify(EsService().destroy_index(user.uid)) abort(404, USER_ERROR_MSG.format(u=uid))
def __handle_deleted_event(self, folder): """ Destroys the index by finding the name of the deleted filesystem :param folder: :return: """ username, isAnonymous = self.__handle_event(folder) with self.app.app_context(): user = User.get(username) user_service = UserDataService(user) user_service.destroy_index() del User.users[username]
def create(uid): """ Create new index for the specified user. :param uid: """ warnings.warn(("This function shouldn't be used, instead this application " "should automatically find the new filesystem and create " "the index for it."), DeprecationWarning) user = User.get(uid) if user: return jsonify(EsService().create_index(user.uid, overwrite=True)) abort(404, USER_ERROR_MSG.format(u=uid))
def sync_folder(uid, node_id): """ Sync the folder by comparing datastructures on both the filesystem and the ES DB. """ user = User.get(uid) if user: try: TS(folder_sync_process, user=user, node_id=node_id) except ValueError, error: app.logger.error(error) return jsonify(dict(error='job is already running')), 200 data = dict(status='job created') return jsonify(data), 201
def sync_uid(uid): """ Sync the filesystem and ES DB by scanning and comparing datastructures on both the filesystem and ES DB. """ user = User.get(uid) if user: try: TS(full_sync_process, user=user) except ValueError, error: app.logger.error(error) return jsonify(dict(error='job is already running')), 200 data = dict(status='job created') return jsonify(data), 201
def build(uid): """ Build new index for the specified user, build folders first and then later fill it with files. This function is heavy, so it executes asynchronously. """ user = User.get(uid) if user: try: TS(build_process, user=user) except ValueError, error: app.logger.error(error) return jsonify(dict(error='job is already running')), 200 data = dict(status='job created') return jsonify(data), 201
def list_all(): """list all devices""" data = UserDataService(User.get('olav')).find_all() return jsonify(data)