Example #1
0
 def inner(*args, **kwargs):
     raise_on_error = True
     if "raise_on_error" in kwargs:
         raise_on_error = kwargs["raise_on_error"]
         del kwargs["raise_on_error"]
     result = add_repr_html_to_response(fn(*args, **kwargs))
     if raise_on_error and result.status_code >= 400:
         raise ResourceError(result)
     return result
Example #2
0
def handle_script_output(resp):
    if resp.status_code != 200:
        return add_repr_html_to_response(resp)
    
    result = resp.json()
    if "out" in result:
        for o in result["out"]:
            print(o[2])
    if "exception" in result:
        for e in result["exception"]["stack"]:
            print(e) 
    if "return" in result:
        return result["return"]
Example #3
0
def run_query(q):
    global host

    resp = requests.get(host + "/v1/query", data={"q": q, "format": "aos"})

    if resp.status_code != 200:
        return add_repr_html_to_response(resp)

    resp_json = resp.json()
    if len(resp_json) == 0:
        return pd.DataFrame()
    else:
        return pd.DataFrame.from_records(resp_json, index="_rowName")
Example #4
0
def handle_script_output(resp):
    if resp.status_code != 200:
        return add_repr_html_to_response(resp)

    result = resp.json()
    if "out" in result:
        for o in result["out"]:
            print(o[2])
    if "exception" in result:
        for e in result["exception"]["stack"]:
            print(e)
    if "return" in result:
        return result["return"]
Example #5
0
def run_query(q):
    global host

    resp = requests.get(host+"/v1/query", 
        params={"q": q, "format": "aos"})

    if resp.status_code != 200:
        return add_repr_html_to_response(resp)

    resp_json = resp.json()
    if len(resp_json) == 0: 
        return pd.DataFrame()
    else:
        return pd.DataFrame.from_records(resp_json, index="_rowName")
Example #6
0
 def inner(*args, **kwargs):
     result = add_repr_html_to_response(fn(*args, **kwargs))
     if result.status_code < 200 or result.status_code >= 400:
         raise ResourceError(result)
     return result
Example #7
0
def dispatcher(line, cell=None):
    global host

    if line.strip() == "":
        return print_usage_message(True)
        
    
    parts = line.strip().split(" ")

    # The line magics
    if cell is None:

        # Init
        if len(parts) == 2 and parts[0] == "init":
            if not parts[1].startswith("http"):
                raise Exception("URI must start with 'http'")
            host = parts[1].strip("/")
            print("%mldb magic initialized with host as " + host)
            return

        # py or js: put a javascript or python script from an uri
        elif (len(parts) >= 2 and parts[0] in ["py", "js"]):

            type_name = "python"
            if parts[0] == "js":
                type_name = "javascript"
            payload = {"address": parts[1]}
            if len(parts) > 2:
                payload["args"] = json.loads(" ".join(parts[2:]))
            resp = requests.post(host+"/v1/types/plugins/" + type_name + "/routes/run",
                             data=json.dumps(payload))
            return handle_script_output(resp)
        
        # doc
        elif (len(parts) == 2 and parts[0] == "doc"):
            from IPython.display import IFrame
            return IFrame(src="/v1/types/"+parts[1]+"/doc", width=900, height=500)
        
        # pyplugin
        elif (len(parts) == 3 and parts[0] == "pyplugin"):
    
            name = parts[1]
            payload = {"type":"python", "params": {"address": parts[2]}}
            requests.delete(host+"/v1/plugins/" + name)
            resp = requests.put(host+"/v1/plugins/" + name,
                             data=json.dumps(payload))
            return add_repr_html_to_response(resp)

        # perform
        elif (len(parts) == 2 and parts[0] in ["GET", "DELETE"]):

            verb, uri = parts
            if verb == "GET":
                resp = requests.get(host+uri)
            elif verb == "DELETE":
                resp = requests.delete(host+uri)
                
            return add_repr_html_to_response(resp)

        # perform 
        elif (len(parts) > 2 and parts[0] in ["GET", "PUT", "POST"]):

            verb = parts[0]
            uri = parts[1]
            payload = json.loads(" ".join(parts[2:]))
            if verb == "GET":       
                for k in payload:       
                    if isinstance(payload[k], dict):        
                        payload[k] = json.dumps(payload[k])
                resp = requests.get(host+uri, params=payload)
            elif verb == "PUT":
                resp = requests.put(host+uri, data=json.dumps(payload))
            elif verb == "POST":
                resp = requests.post(host+uri, data=json.dumps(payload))
                
            return add_repr_html_to_response(resp)

        # help
        elif len(parts) == 1 and parts[0] == "help":
            return print_usage_message()

        elif (len(parts) > 1 and parts[0] == "query"):
            return run_query(" ".join(parts[1:]))
        
        elif (len(parts) == 3 and parts[0] == "loadcsv"):
            return load_csv(parts[1], parts[2])

        # We have something else
        else:
            return print_usage_message(True)

    # The cell magics
    else:
        # py or js: put a javascript or python script from an uri
        if (len(parts) >= 1 and parts[0] in ["py", "js"]):

            type_name = "python"
            if parts[0] == "js":
                type_name = "javascript"
            payload = {"source": cell}
            if len(parts) > 1:
                payload["args"] = json.loads(" ".join(parts[1:]))
            resp = requests.post(host+"/v1/types/plugins/" + type_name + "/routes/run",
                             data=json.dumps(payload))
            
            return handle_script_output(resp)
        
        if (len(parts) == 1 and parts[0] == "query"):
            return run_query(cell.replace("\n", " ").strip())

        if (len(parts) == 2 and parts[0] == "loadcsv"):
            return load_csv(parts[1], cell)

        # perform
        elif (len(parts) == 2 and parts[0] in ["GET", "PUT", "POST"]):

            verb, uri = parts
            payload = json.loads(cell)
            if verb == "GET":
                for k in payload:
                    if isinstance(payload[k], dict):
                        payload[k] = json.dumps(payload[k])
                        
                resp = requests.get(host+uri, params=payload)
            elif verb == "PUT":
                resp = requests.put(host+uri, data=json.dumps(payload))
            elif verb == "POST":
                resp = requests.post(host+uri, data=json.dumps(payload))
                
            return add_repr_html_to_response(resp)
        # help
        elif len(parts) == 1 and parts[0] == "help":
            return print_usage_message()
            

        # We have something else
        else:
            return print_usage_message(True)
Example #8
0
def dispatcher(line, cell=None):
    global host

    if line.strip() == "":
        return print_usage_message(True)

    parts = line.strip().split(" ")

    # The line magics
    if cell is None:

        # Init
        if len(parts) == 2 and parts[0] == "init":
            if not parts[1].startswith("http"):
                raise Exception("URI must start with 'http'")
            host = parts[1].strip("/")
            print("%mldb magic initialized with host as " + host)
            return

        # py or js: put a javascript or python script from an uri
        elif (len(parts) >= 2 and parts[0] in ["py", "js"]):

            type_name = "python"
            if parts[0] == "js":
                type_name = "javascript"
            payload = {"address": parts[1]}
            if len(parts) > 2:
                payload["args"] = json.loads(" ".join(parts[2:]))
            resp = requests.post(host + "/v1/types/plugins/" + type_name +
                                 "/routes/run",
                                 data=json.dumps(payload))
            return handle_script_output(resp)

        # doc
        elif (len(parts) == 2 and parts[0] == "doc"):
            from IPython.display import IFrame
            return IFrame(src="/v1/types/" + parts[1] + "/doc",
                          width=900,
                          height=500)

        # pyplugin
        elif (len(parts) == 3 and parts[0] == "pyplugin"):

            name = parts[1]
            payload = {"type": "python", "params": {"address": parts[2]}}
            requests.delete(host + "/v1/plugins/" + name)
            resp = requests.put(host + "/v1/plugins/" + name,
                                data=json.dumps(payload))
            return add_repr_html_to_response(resp)

        # perform
        elif (len(parts) == 2 and parts[0] in ["GET", "DELETE"]):

            verb, uri = parts
            if verb == "GET":
                resp = requests.get(host + uri)
            elif verb == "DELETE":
                resp = requests.delete(host + uri)

            return add_repr_html_to_response(resp)

        # perform
        elif (len(parts) > 2 and parts[0] in ["GET", "PUT", "POST"]):

            verb = parts[0]
            uri = parts[1]
            payload = json.loads(" ".join(parts[2:]))
            if verb == "GET":
                for k in payload:
                    if isinstance(payload[k], dict):
                        payload[k] = json.dumps(payload[k])
                resp = requests.get(host + uri, params=payload)
            elif verb == "PUT":
                resp = requests.put(host + uri, data=json.dumps(payload))
            elif verb == "POST":
                resp = requests.post(host + uri, data=json.dumps(payload))

            return add_repr_html_to_response(resp)

        # help
        elif len(parts) == 1 and parts[0] == "help":
            return print_usage_message()

        elif (len(parts) > 1 and parts[0] == "query"):
            return run_query(" ".join(parts[1:]))

        elif (len(parts) == 3 and parts[0] == "loadcsv"):
            return load_csv(parts[1], parts[2])

        # We have something else
        else:
            return print_usage_message(True)

    # The cell magics
    else:
        # py or js: put a javascript or python script from an uri
        if (len(parts) >= 1 and parts[0] in ["py", "js"]):

            type_name = "python"
            if parts[0] == "js":
                type_name = "javascript"
            payload = {"source": cell}
            if len(parts) > 1:
                payload["args"] = json.loads(" ".join(parts[1:]))
            resp = requests.post(host + "/v1/types/plugins/" + type_name +
                                 "/routes/run",
                                 data=json.dumps(payload))

            return handle_script_output(resp)

        if (len(parts) == 1 and parts[0] == "query"):
            return run_query(cell.replace("\n", " ").strip())

        if (len(parts) == 2 and parts[0] == "loadcsv"):
            return load_csv(parts[1], cell)

        # perform
        elif (len(parts) == 2 and parts[0] in ["GET", "PUT", "POST"]):

            verb, uri = parts
            payload = json.loads(cell)
            if verb == "GET":
                for k in payload:
                    if isinstance(payload[k], dict):
                        payload[k] = json.dumps(payload[k])

                resp = requests.get(host + uri, params=payload)
            elif verb == "PUT":
                resp = requests.put(host + uri, data=json.dumps(payload))
            elif verb == "POST":
                resp = requests.post(host + uri, data=json.dumps(payload))

            return add_repr_html_to_response(resp)
        # help
        elif len(parts) == 1 and parts[0] == "help":
            return print_usage_message()

        # We have something else
        else:
            return print_usage_message(True)
Example #9
0
 def inner(*args, **kwargs):
     result = add_repr_html_to_response(fn(*args, **kwargs))
     if result.status_code < 200 or result.status_code >= 400:
         raise ResourceError(result)
     return result