Search code examples
pythonflaskroutesweb-deployment

Flask corresponding endpoints


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