# AUTOGENERATED FILE! PLEASE DON'T EDIT HERE. EDIT THE SOURCE NOTEBOOKS INSTEAD
"""All tools related to the MGI database. Expected to use behind the "mgi"
module name, like this::
from k1lib.imports import *
["SOD1", "AMPK"] | mgi.batch()
"""
from k1lib import cli
from typing import List
import time
__all__ = ["batch"]
[docs]class batch(cli.BaseCli): # batch
"""Queries MGI database, convert list of genes to MGI ids""" # batch
[docs] def __init__(self, headless=True): # batch
"""
:param headless: whether to run this operation headless, or actually
display the browser""" # batch
super().__init__(); self.headless = headless # batch
[docs] def __ror__(self, it:List[str]): # batch
super().__ror__(it) # batch
import selenium; from selenium import webdriver # batch
query = "\n".join(it | cli.op().strip().all() | ~cli.filt(cli.op() == "")) # batch
options = selenium.webdriver.chrome.options.Options() # batch
if self.headless: options.add_argument("--headless") # batch
driver = selenium.webdriver.Chrome(options=options); # batch
print("\r1/4 Going to website... ", end="") # batch
driver.get("http://www.informatics.jax.org/batch") # batch
print("\r2/4 Submitting data... ", end="") # batch
driver.find_element_by_name("ids").send_keys(query) # batch
driver.find_element_by_css_selector("tr.queryControls > td > input.buttonLabel").click() # batch
markerIds = []; terms = []; names = []; features = [] # batch
print("\r3/4 Getting data... ", end="") # batch
def getStuff(classEnd:str): # batch
return [elem.get_attribute("textContent") for elem in driver.find_elements_by_css_selector(f".yui-dt-col-{classEnd} > div")] # batch
while len(markerIds) <= 1: # batch
markerIds = getStuff("markerId"); terms = getStuff("term") # batch
names = getStuff("name"); features = getStuff("feature") # batch
time.sleep(1) # batch
print("\r4/4 Data received! ") # batch
driver.close() # batch
return cli.joinColumns([markerIds, terms, features, names]) # batch