def info_func(s): s = Seq(s) l = s.length() ac = s.count_base("A") tc = s.count_base("T") cc = s.count_base("C") gc = s.count_base("G") resp = f"""Sequence: {s} Total length: {l} A: {ac} ({round((ac/l)*100)})% C: {cc} ({round((cc/l)*100)})% T: {tc} ({round((tc/l)*100)})% G: {gc} ({round((gc/l)*100)})%""" return resp
r1 = conn.getresponse() print(f"Response received!: {r1.status} {r1.reason}\n") data1 = r1.read().decode() gene = json.loads(data1) termcolor.cprint(f"Gene: ", "yellow", end="") print(f"{namegene}") termcolor.cprint("Description: ", "yellow", end="") print(f"{gene['desc']}" ) #see esembl page for desc and seq (especial functions) sequence = gene['seq'] s = Seq(sequence) l = s.length() ac = s.count_base("A") tc = s.count_base("T") cc = s.count_base("C") gc = s.count_base("G") termcolor.cprint("Total length: ", "yellow", end="") print(l) resp = f""" A: {ac} ({round((ac / l) * 100)})% C: {cc} ({round((cc / l) * 100)})% T: {tc} ({round((tc / l) * 100)})% G: {gc} ({round((gc / l) * 100)})%""" print(resp) dictionary = s.count() listvalues = list(dictionary.values())
def do_GET(self): """This method is called whenever the client invokes the GET method in the HTTP protocol request""" # Print the request line termcolor.cprint(self.requestline, 'green') # Analize the request line req_line = self.requestline.split(' ') # Get the path. It always start with the / symbol path = req_line[1] # Read the arguments arguments = path.split('?') # Get the verb. It is the first argument verb = arguments[0] # -- Content type header # -- Both, the error and the main page are in HTML contents = Path('Error.html').read_text() error_code = 404 if verb == "/": # Open the form1.html file # Read the index from the file contents = Path('form-4.html').read_text() error_code = 200 elif verb == "/ping": contents =""" <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>PING</title> </head> <body style="background-color: lightblue;"> <h1> PING OK! </h1> <p> The SEQ 2 server is running </p> <hr> <a href="/">MAIN PAGE</a> </body> </html> """ error_code = 200 elif verb == "/get": # -- Get the argument to the right of the ? symbol pair = arguments[1] # -- Get all the pairs name = value pairs = pair.split('&') # -- Get the two elements: name and value name, value = pairs[0].split("=") n_v = int(value) seq = sequences[n_v] # -- Generate the html code contents = f""" <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>GET</title> </head> <body style="background-color: lightyellow;"> <h2>Sequence number {n_v}</h2> <p> {seq} </p> <a href="/">Main page</a> </body> </html> """ error_code = 200 elif verb == "/gene": # -- Get the argument to the right of the ? symbol pair = arguments[1] # -- Get all the pairs name = value pairs = pair.split('&') # -- Get the two elements: name and value name, gene = pairs[0].split("=") s = Seq() s1 = Seq(s.read_fasta(folder + gene + txt)) gene_info = str(s1) # -- Generate the html code contents = f""" <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>GENE</title> </head> <body style="background-color: magenta;"> <h2>Gene: {gene}</h2> <textarea readdonly rows = "20" cols = "60"> {gene_info}</textarea> <br> <a href="/">Main page</a> </body> </html> """ error_code = 200 elif verb == "/operate": # -- Get the argument to the right of the ? symbol pair = arguments[1] # -- Get all the pairs name = value pairs = pair.split('&') # -- Get the two elements: name and value name, sequence = pairs[0].split("=") name, operation = pairs[1].split("=") s = Seq(sequence) if operation == "info": l = s.length() ac = s.count_base("A") tc = s.count_base("T") cc = s.count_base("C") gc = s.count_base("G") resp = f""" <p>Total length: {l}</p> <p>A: {ac} ({round((ac / l) * 100)})%</p> <p>C: {cc} ({round((cc / l) * 100)})%</p> <p>T: {tc} ({round((tc / l) * 100)})%</p> <p>G: {gc} ({round((gc / l) * 100)})%</p>""" elif operation == "rev": resp = s.seq_reverse() else: resp = s.seq_complement() contents = f""" <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>OPERATION</title> </head> <body style="background-color: lightgreen;"> <h2>Sequence:</h2> <p> {sequence} </p> <h2> Operation: </h2> <p> {operation}</p> <h2> Result: </h2> <p> {resp} </p> <br> <a href="/">Main page</a> </body> </html> """ error_code = 200 # Generating the response message self.send_response(error_code) # -- Status line: OK! # Define the content-type header: self.send_header('Content-Type', 'text/html') self.send_header('Content-Length', len(str.encode(contents))) # The header is finished self.end_headers() # Send the response message self.wfile.write(str.encode(contents)) return