def do_GET(self): if self.path.endswith("knocknock"): self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() self.wfile.write("You are welcome!") return if self.path.find('?') != -1: self.path, self.query_string = \ self.path.split('?', 1) else: self.query_string = '' self.globals = dict(cgi.parse_qsl(self.query_string)) if self.path.endswith("layout"): self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() smiles = self.globals['smiles'] if '>>' in smiles or smiles.startswith('$RXN'): rxn = indigo.loadQueryReaction(smiles) rxn.layout() self.wfile.write("Ok.\n") self.wfile.write(rxn.rxnfile()) else: mol = indigo.loadQueryMolecule(smiles) mol.layout() self.wfile.write("Ok.\n") self.wfile.write(mol.molfile()) return if self.path.endswith("automap"): self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() smiles = self.globals['smiles'] if 'mode' in self.globals: mode = self.globals['mode'] else: mode = 'discard' rxn = indigo.loadQueryReaction(smiles) if not smiles.startswith('$RXN'): rxn.layout() rxn.automap(mode) self.wfile.write("Ok.\n") self.wfile.write(rxn.rxnfile()) return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
def test_layout(self): inp = "CCC>>CCN" r = make_request("layout", (("smiles", inp), ), False) self.assertEquals(200, r.code) status, rxnfile = r.read().split('\n', 1) self.assertEquals(status, "Ok.") self.assertEquals(rxnfile[:4], "$RXN") smiles = indigo.loadQueryReaction(rxnfile).smiles() self.assertEquals(inp, smiles)
def handle_layout(request): if request.method == 'GET' and request.GET.has_key("smiles"): moldata = request.GET["smiles"] elif request.method == 'POST' and request.POST.has_key("moldata"): moldata = request.POST["moldata"] else: raise Http404 if '>>' in moldata or moldata.startswith('$RXN'): rxn = indigo.loadQueryReaction(moldata) rxn.layout() return HttpResponse(content="Ok.\n" + rxn.rxnfile(), mimetype='text/plain') else: mol = indigo.loadQueryMolecule(moldata) mol.layout() return HttpResponse(content="Ok.\n" + mol.molfile(), mimetype='text/plain')
def load_moldata(self, is_query=False): moldata = self.fields.getfirst('moldata') if moldata.startswith('$RXN'): if is_query: md = indigo.loadQueryReaction(moldata) else: md = indigo.loadReaction(moldata) is_rxn = True else: if is_query: md = indigo.loadQueryMolecule(moldata) else: md = indigo.loadMolecule(moldata) is_rxn = False return md, is_rxn
def on_automap(self): moldata = None if self.method == 'GET' and 'smiles' in self.fields: moldata = self.fields.getfirst('smiles') elif self.is_form_request() and 'moldata' in self.fields: moldata = self.fields.getfirst('moldata') if moldata: mode = self.fields.getfirst('mode', 'discard') rxn = indigo.loadQueryReaction(moldata) if not moldata.startswith('$RXN'): rxn.layout() rxn.automap(mode) return ["Ok.\n", rxn.rxnfile()] self.notsupported()
def handle_automap(request): mode = 'discard' if request.method == 'GET' and request.GET.has_key("smiles"): rnxdata = request.GET["smiles"] if request.GET.has_key("mode"): mode = request.GET["mode"] elif request.method == 'POST' and request.POST.has_key("moldata"): rnxdata = request.POST["moldata"] if request.POST.has_key("mode"): mode = request.POST["mode"] else: raise Http404 rxn = indigo.loadQueryReaction(rnxdata) if not rnxdata.startswith('$RXN'): rxn.layout() rxn.automap(mode) return HttpResponse(content="Ok.\n" + rxn.rxnfile(), mimetype='text/plain')
def on_layout(self): moldata = None if self.method == 'GET' and 'smiles' in self.fields: moldata = self.fields.getfirst('smiles') elif self.is_form_request() and 'moldata' in self.fields: moldata = self.fields.getfirst('moldata') if moldata: if '>>' in moldata or moldata.startswith('$RXN'): rxn = indigo.loadQueryReaction(moldata) rxn.layout() return ["Ok.\n", rxn.rxnfile()] else: mol = indigo.loadQueryMolecule(moldata) mol.layout() return ["Ok.\n", mol.molfile()] self.notsupported()
def do_POST(self): ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) if ctype == 'multipart/form-data': if self.path.endswith("open"): query = cgi.parse_multipart(self.rfile, pdict) self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write("<html><body onload=\"parent.ui.loadMoleculeFromFile()\" title=\""); self.wfile.write(base64.b64encode("Ok.\n")); self.wfile.write(base64.b64encode(query['filedata'][0])); self.wfile.write("\"></body></html>"); return if self.path.endswith("save"): query = cgi.parse_multipart(self.rfile, pdict) filedata = query['filedata'][0] lines = filedata.splitlines() first = lines[0].strip() rest = "\n".join(lines[1:]) self.send_response(200) if first == "smi": self.send_header('Content-type', 'chemical/x-daylight-smiles') elif first == "mol": if rest.startswith('$RXN'): first = "rxn" self.send_header('Content-type', 'chemical/x-mdl-rxnfile') else: self.send_header('Content-type', 'chemical/x-mdl-molfile') else: self.send_header('Content-type', 'text/plain') self.send_header('Content-Length', len(rest)) self.send_header('Content-Disposition', 'attachment; filename=ketcher.' + first) self.end_headers() self.wfile.write(rest) return if self.path.endswith("layout"): length = int(self.headers['content-length']) self.globals = dict(cgi.parse_qsl(self.rfile.read(length))) self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() moldata = self.globals['moldata'] if '>>' in moldata or moldata.startswith('$RXN'): rxn = indigo.loadQueryReaction(moldata) rxn.layout() self.wfile.write("Ok.\n") self.wfile.write(rxn.rxnfile()) else: mol = indigo.loadQueryMolecule(moldata) mol.layout() self.wfile.write("Ok.\n") self.wfile.write(mol.molfile()) return if self.path.endswith("automap"): length = int(self.headers['content-length']) self.globals = dict(cgi.parse_qsl(self.rfile.read(length))) self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() moldata = self.globals['moldata'] if 'mode' in self.globals: mode = self.globals['mode'] else: mode = 'discard' rxn = indigo.loadQueryReaction(moldata) if not moldata.startswith('$RXN'): rxn.layout() rxn.automap(mode) self.wfile.write("Ok.\n") self.wfile.write(rxn.rxnfile()) return