Flask corresponding endpoints

Issue

I have two flask endpoints deployed on a machine to get information about folders content:

@app.route('/info', methods=['GET'])
def get_info():
 
    files_number = int(request.args.get('files_number', default=5))
    directory = request.args.get('directory', default='C:\Admin')
    data = do_something(files_number, directory)
    return jsonify(data), 200 if data else 500
 
    
@app.route('/file', methods=['GET'])
def get_file(): 
    
    directory = request.args.get('directory', default='C:\Admin')
    file_path = request.args.get('file_path')
    data = send_file(file_path, attachment_filename=file_path)
    return data, 200 if data else 500

And I also have two endpoints deployed on another machine which has to get information from those two above enpoints and return exactly the same output as those above.

My question is how to write the enpoints. My attempt:

@app.route('/info2', methods=['GET'])
def get_info2():
 
    ip = request.args.get('ip')
    port = request.args.get('port')
    
    url = f'http://{ip}:{port}/info'
    
    req = requests.get(url)
    
    if req.status_code == 200:
        output = req.json()
        return output
 
    return None, 500
    
@app.route('/file2', methods=['GET'])
def get_file2(): 
 
    ip = request.args.get('ip')
    path = request.args.get('path')  
    port=5905  
    
    url = f'http://{ip}:{port}/file?path={path}'
    req = requests.get(url)
    
    if req.status_code == 200:
        output = req.json()
        return output
 
    return None, 500

The idea is that first two endpoints "talk" to the enpoints from the soceon snippet.

Solution

It should go like this:

@app.route('/info1', methods=['GET'])

def get_info1():

    ip = str(request.args.get('ip'))
    port = int(request.args.get('port'))

    url = f'http://{ip}:{port}/info

    req = requests.get(url)

    if req.status_code == 200:
        output = req.json()
        return jsonify(output)
 
    else:
        return None, 500

@app.route('/info2', methods=['GET'])

def get_(): 

    ip = str(request.args.get('ip'))
    port = int(request.args.get('port'))
    path = str(request.args.get('path'))  

    if path:
        url = f'http://{ip}:{port}/file?html_path={path}'

    req = requests.get(url)

    if req.status_code == 200:
        return redirect(url)

    else:
        return None, 500

Answered By – Sandra

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published