This page isn’t working 127.0.0.1 didn’t send any data Error in Flask

1k views Asked by At

I am building a Flask webapp and it uses the OpenBabel API (chemistry toolkit) to generate some files for me. When I call this particular function it seems to work fine and generate the files in the directory that I want. However, once it gets back to Flask it crashes and Flask does not render the html template, instead redirecting me to This page isn’t working 127.0.0.1 didn’t send any data. I found that when removing the code in the function it works normally. So it's likely a problem with OpenBabel. The Openbabel function does not ouput any errors itself and seemingly even returns at the end, based on debugging.

I have tried many things from other SO answers, including changing my host to 0.0.0.0, adding threaded=True and some other solutions. All to no avail. I tried debugging it for a long time, but now I am lost because I have tried everything I know. All I could get was a SystemExit exception from Flask. Sometimes it was able to run the print statement following it, but more often it crashes immediately. I have no clue where the problem may lie. Appreciate any help I can get. A sample of the code (shortened it a bit):

@app.route("/", methods=["POST", "GET"])
def form_handler():
    if request.method == "POST":
        smiles = request.form["smiles_molecule"]
        pdb_file = request.files["pdb_molecule"]
        no_conformers = int(request.form["no_conformers"])
        scoring = request.form["score"]
        if smiles:
            pattern = re.compile('[^A-Za-z0-9]+')
            smiles_no_special_chars = re.sub(pattern, "", smiles)
            mol_path = os.path.join(app.config["MOLECULE_UPLOADS"], smiles_no_special_chars[0:10])
            if os.path.exists(mol_path):
                shutil.rmtree(mol_path)
            os.mkdir(mol_path)
            os.chdir(mol_path)
            x = conf_gen.gen_and_write_confs(smiles, no_conformers, scoring) #<- breaks down here
            print(x)
            return render_template("index.html", mole=smiles_no_special_chars[0:10])

The function that is called:

def gen_and_write_confs(molecule, no_confs, scoring):
    
    """Generate and write the conformers to PDB. Takes mol, number of conformers and
    scoring method: RCS, MECS and ECS: OBRMSDConformerScore,
    OBMinimizingEnergyConformerScore and OBEnergyConformerScore. See OpenBabel docs."""

    mole = pybel.readstring("can", molecule)
    mole.addh()
    mole.make3D()
    mole = mole.OBMol
    mole.SetChainsPerceived(True)

    cs_obj = ob.OBConformerSearch()
    cs_obj.Setup(mole, no_confs, 5, 5, 25)
    if scoring == "RCS":
        score = ob.OBRMSDConformerScore()
    elif scoring == "MECS":
        score = ob.OBMinimizingEnergyConformerScore() 
    else:
        score = ob.OBEnergyConformerScore()
    cs_obj.SetScore(score)
    cs_obj.Search()
    cs_obj.GetConformers(mole)
    mole.DeleteNonPolarHydrogens()

    return "Test"

If needed I can upload the project on Github. It does require installing a few dependencies and I am using conda for that right now, but I could make it available through pip too since OpenBabel is available in pip.

Ps: no single error message is shown after it crashes

0

There are 0 answers