def put(self, user_uid):
        '''
        Update an existing user 
        '''
        if not verifyToken(user_uid, get_jwt_identity()):
            user_ns.abort(400, 'Invalid token')

        editted_data = user_ns.payload
        editted_data['_id'] = user_uid

        user = User.find_one(user_uid)
        if user is None:
            user_ns.abort(404, 'User not found')

        user = User(user)
        user.setData(editted_data)
        
        schema = user_edit_data._schema
        schema['additionalProperties'] = False
        data = validateData(user.data, schema)
        if data['error']:
            user_ns.abort(400, data['message'])

        try:
            user.editUserData()
            return user.get(), 200, {'Location': url_for('api.users_user_item', user_uid=user.data['_id'], _external=True)}
        except:
            DatabaseError()
        user_ns.abort(500, 'Edit user error, please try again')
    def post(self, user_uid):
        """
        Post and analysis  user audio 
        """
        if not verifyToken(user_uid, get_jwt_identity()):
            audio_ns.abort(400, 'Invalid token')

        result = request.form
        file_upload_schema = file_upload_model._schema
        file_upload_schema['additionalProperties'] = False

        data = validateData(result, file_upload_schema)
        if data['error']:
            audio_ns.abort(400, data['message'])

        data = data['data'].to_dict()
        data['user_uid'] = user_uid
        if 'file_data' not in request.files:
            audio_ns.abort(
                400, 'Audio file shoule be passed for the transcription')

        file = request.files['file_data']
        _, file_extension = os.path.splitext(file.filename)

        if file_extension.lower() not in ALLOWED_EXTENSIONS:
            audio_ns.abort(400,
                           '{} is not supported format'.format(file_extension))

        user = User(User.find_one(user_uid))

        data['user_uid'] = user.data['_id']
        data['file_extension'] = file_extension

        audio = Audio(data)

        logging_info('User {} upload file {}'.format(user_uid,
                                                     audio.data['file_name']))
        try:
            audio.saveToDb(file)
        except:
            audio_ns.abort(500, 'Save file data error, plase try again')

        try:
            audio.doSomeThingWithFile()
            audio.updataAudioData()
            return audio.data, 200, {
                'Location':
                url_for('api.audio_audio_url',
                        file_name=audio.data['file_name'],
                        _external=True)
            }
        except:
            DatabaseError()
        audio_ns.abort(500, 'Save analysis audio error, plase try again')
    def get(self, user_uid=None):
        '''
        Get an user data
        '''
        if not verifyToken(user_uid, get_jwt_identity()):
            user_ns.abort(400, 'Invalid token')

        user = User({'_id': user_uid})
        user = user.get()
        if user is None:
            user_ns.abort(404, 'User not found')

        return user, 200
    def get(self, user_uid):
        """
        Get list of user's audio file 
        """
        if not verifyToken(user_uid, get_jwt_identity()):
            return audio_ns.abort(400, 'Invalid token')
            # return messageResponse('Invalid token', 400)
        hidden_data = {'file_path': 0, 'file_extension': 0}
        id = request.args.get('id')
        query = {'user_uid': user_uid}

        if id is not None:
            query['_id'] = ObjectId(id)
        print(query)
        return Audio.find(query, hidden_data), 200
    def delete(self, user_uid):
        '''
        Delete an user 
        '''
        if not verifyToken(user_uid, get_jwt_identity()):
            user_ns.abort(400, 'Invalid token')
        try:
            count = User.delete(user_uid)
        except:
            DatabaseError()
            user_ns.abort(500, 'Deleted fail, please try again')

        if count == 0:
            user_ns.abort(404, 'User was deleted')

        return {'message': 'User is deleted'}, 200
    def delete(self, user_uid):
        """
        Delete list of user's audio file
        """
        if not verifyToken(user_uid, get_jwt_identity()):
            audio_ns.abort(400, 'Invalid token')

        id = request.args.get('id')

        query = {'user_uid': user_uid}
        if id is not None:
            query['_id'] = ObjectId(id)
        print(query)
        try:
            deleted_count = Audio.delete(query)
            return {
                'message': '{} items were deleted'.format(deleted_count)
            }, 200
        except:
            DatabaseError()
        audio_ns.abort(500, 'Deleted fail, please try again')