Exemple #1
0
  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)
Exemple #2
0
 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')
Exemple #4
0
 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
Exemple #5
0
    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()
Exemple #6
0
 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
Exemple #7
0
    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')
Exemple #9
0
    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 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 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')
Exemple #12
0
    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()
Exemple #13
0
  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