示例#1
0
def test_execute_pd_concat():
    """
    given an input dict of value assignments and a code snippet,
    substitute the values in, and evaluate.
    """
    input_code = "z = pd.concat([x,y],join='outer', ignore_index=True, sort=True)"
    input_vals = {
        "x": [{
            "a": 1,
            "b": 2
        }, {
            "a": 2,
            "b": 3
        }],
        "y": [{
            "b": 4,
            "c": 2
        }, {
            "b": 5,
            "c": 7
        }]
    }
    output_hash = "somehash"
    file_contents = {}
    return_targets = find_assignments(input_code)["targets"]
    result_dict = execute_code(file_contents, input_code, input_vals,
                               return_targets, output_hash)
    result = result_dict["results"]
    assert (len(result) == 1)  # only one output of function
    assert (isinstance(result['z'], bytes))
    result_df = convert_to_pandas(result['z'])
    assert (result_df.size == 12)  ## 4 rows * 3 columns
示例#2
0
def test_get_error_output():
    """
    Do something stupid (division by zero) and test that we get an error in the output
    """
    input_code='x = 1/0'
    input_vals={}
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "somehash"
    with pytest.raises(ApiException) as exc:
        result_dict = execute_code(input_code, input_vals, return_targets, output_hash)
        assert("ZeroDivisionError" in exc.message)
示例#3
0
def test_get_normal_output_in_func():
    """
    Write simple print statement inside a function and test that we get it in the output
    """
    input_code='def printy():\n print("hello funcky world")\n\nprinty()'
    input_vals={}
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "somehash"
    result_dict = execute_code(input_code, input_vals, return_targets, output_hash)
    output = result_dict["output"]
    assert(output)
    assert(isinstance(output,str))
    assert("hello funcky world" in output)
示例#4
0
def test_execute_simple_func():
    """
    import numpy, and define a trivial function in the code snippet, which is
    then used when filling a dataframe
    """
    input_code='import numpy\ndef squareroot(x):\n  return numpy.sqrt(x)\n\ndf= pd.DataFrame({\"a\":[numpy.sqrt(9),squareroot(12),13],\"b\":[14,15,16]})'
    input_vals={}
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "somehash"
    result_dict = execute_code(input_code, input_vals, return_targets, output_hash)
    result = result_dict["results"]
    assert(result)
    assert(isinstance(result,list))
示例#5
0
def test_get_normal_output():
    """
    Write simple print statement and test that we get it in the output
    """
    input_code='print("hello world")'
    input_vals={}
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "somehash"
    result_dict = execute_code(input_code, input_vals, return_targets, output_hash)
    output = result_dict["output"]
    assert(output)
    assert(isinstance(output,str))
    assert("hello world" in output)
    assert(len(result_dict["results"])==0)
示例#6
0
def test_html_output_wrong_type():
    """
    Test the addOutput functionality with a string argument
    """
    input_code = 'addOutput(42)\n'
    input_vals = {}
    file_contents = {}
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "irrelevant"
    with pytest.raises(ApiException) as exc:
        result_dict = execute_code(file_contents, input_code, input_vals,
                                   return_targets, output_hash)

        assert ('code in cell' in exc.message)
示例#7
0
def test_html_output_string():
    """
    Test the addOutput functionality with a string argument
    """
    input_code = 'addOutput("<html></html>")\n'
    input_vals = {}
    file_contents = {}
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "irrelevant"
    result_dict = execute_code(file_contents, input_code, input_vals,
                               return_targets, output_hash)

    assert ('html' in result_dict.keys())
    assert (result_dict["html"] == "<html></html>")
示例#8
0
def test_get_two_normal_outputs():
    """
    Write two simple print statement and test that we get a single output string with two lines
    """
    input_code='print("hello world")\nprint("hi again")\n'
    input_vals={}
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "somehash"
    result_dict = execute_code(input_code, input_vals, return_targets, output_hash)
    output = result_dict["output"]
    print(output)
    assert(output)
    assert(isinstance(output,str))
    assert("hello world" in output)
    assert("hi again" in output)
    assert(output.count("\n")==1)
示例#9
0
def test_execute_pd_concat():
    """
    given an input dict of value assignments and a code snippet,
    substitute the values in, and evaluate.
    """
    input_code = "z = pd.concat([x,y],join='outer', ignore_index=True)"
    input_vals = {"x" : [{"a":1, "b":2},{"a":2,"b":3}],
                  "y": [{"b":4,"c": 2},{"b": 5,"c": 7}]}
    output_hash = "somehash"
    return_targets = find_assignments(input_code)["targets"]
    result_dict = execute_code(input_code, input_vals, return_targets, output_hash)
    result = result_dict["results"]
    print(result)  # result will be a list of lists of dicts
    assert(len(result) == 1) # only one output of function
    assert(len(json.loads(result[0])) == 4) # four 'rows' of dataframe
    assert(len(json.loads(result[0])[0]) == 3) # three 'columns'
示例#10
0
def test_use_function_from_file():
    """
    imagine we had a file from the datastore containing
    a function definition and an import statement - test
    we can then use these in the code cell.
    """
    input_code = 'print("Result is {}".format(myfunc(4)))'
    input_vals = {}
    file_contents = 'import numpy\ndef myfunc(inputval):\n  return numpy.sqrt(inputval)\n'
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "irrelevant"
    result_dict = execute_code(file_contents, input_code, input_vals,
                               return_targets, output_hash)
    output = result_dict["output"]
    assert (output)
    assert (isinstance(output, str))
    assert ("Result is 2" in output)
示例#11
0
def test_syntax_error_in_code():
    """
    We have a function definition in someFile.py but we have a typo in our code fragment
    """
    input_code = 'pritn(printHello("Wrattler"))\n'
    input_vals = {}

    file_contents = {
        'someFile.py':
        'def printHello(inputname):\n  return "hello {}".format(inputname)\n'
    }
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "irrelevant"
    with pytest.raises(ApiException) as exc:
        result_dict = execute_code(file_contents, input_code, input_vals,
                                   return_targets, output_hash)

        assert ('code in cell' in exc.message)
示例#12
0
def test_execute_simple_func():
    """
    import numpy, and define a trivial function in the code snippet, which is
    then used when filling a dataframe
    """
    input_code = 'import numpy\ndef squareroot(x):\n  return numpy.sqrt(x)\n\ndf= pd.DataFrame({\"a\":[numpy.sqrt(9),squareroot(16),13],\"b\":[14,15,16]})'
    input_vals = {}
    file_contents = {}
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "somehash"
    result_dict = execute_code(file_contents, input_code, input_vals,
                               return_targets, output_hash)
    result = result_dict["results"]
    assert (result)
    assert (isinstance(result, dict))
    assert ("df" in result.keys())
    pddf = convert_to_pandas(result["df"])
    assert (isinstance(pddf, pd.DataFrame))
    assert (pddf["a"][0] == 3)
    assert (pddf["a"][1] == 4)
示例#13
0
def test_syntax_error_in_file():
    """
    imagine we had a file from the datastore containing
    a function definition and an import statement, but there's a syntax error
    (e.g. 'dfe' rather than 'def') - should throw an ApiException and tell us the
    filename.
    """
    input_code = 'print("Hello world")\n'
    input_vals = {}

    file_contents = {
        'someFile.py':
        'import numpy\ndfe myfunc(inputval):\n  return numpy.sqrt(inputval)\n'
    }
    return_targets = find_assignments(input_code)["targets"]
    output_hash = "irrelevant"
    with pytest.raises(ApiException) as exc:
        result_dict = execute_code(file_contents, input_code, input_vals,
                                   return_targets, output_hash)

        assert ('someFile.py' in exc.message)