def test_int_value_param(): assert check.int_value_param(-1, -1, "param_name") == -1 with pytest.raises(ParameterCheckError): check.int_value_param(None, -1, "param_name") with pytest.raises(ParameterCheckError): check.int_value_param(1, 0, "param_name")
def replace_parameters(context, nb, parameters): # Uma: This is a copy-paste from papermill papermill/execute.py:104 (execute_parameters). # Typically, papermill injects the injected-parameters cell *below* the parameters cell # but we want to *replace* the parameters cell, which is what this function does. '''Assigned parameters into the appropiate place in the input notebook Args: nb (NotebookNode): Executable notebook object parameters (dict): Arbitrary keyword arguments to pass to the notebook parameters. ''' # Copy the nb object to avoid polluting the input nb = copy.deepcopy(nb) # Generate parameter content based on the kernel_name param_content = DagsterTranslator.codify(parameters) # papermill method choosed translator based on kernel_name and language, # but we just call the DagsterTranslator # translate_parameters(kernel_name, language, parameters) newcell = nbformat.v4.new_code_cell(source=param_content) newcell.metadata['tags'] = ['injected-parameters'] from papermill.execute import _find_first_tagged_cell_index param_cell_index = _find_first_tagged_cell_index(nb, 'parameters') injected_cell_index = _find_first_tagged_cell_index(nb, 'injected-parameters') if injected_cell_index >= 0: # Replace the injected cell with a new version before = nb.cells[:injected_cell_index] after = nb.cells[injected_cell_index + 1 :] check.int_value_param(param_cell_index, -1, 'param_cell_index') # We should have blown away the parameters cell if there is an injected-parameters cell elif param_cell_index >= 0: # Replace the parameter cell with the injected-parameters cell before = nb.cells[:param_cell_index] after = nb.cells[param_cell_index + 1 :] else: # Inject to the top of the notebook, presumably first cell includes dagstermill import context.log.debug( ( 'Warning notebook has no parameters cell, ' 'so first cell must import dagstermill and call dm.register_repo()' ) ) before = nb.cells[:1] after = nb.cells[1:] nb.cells = before + [newcell] + after nb.metadata.papermill['parameters'] = parameters return nb
def replace_parameters(context, nb, parameters): """Assigned parameters into the appropiate place in the input notebook Args: nb (NotebookNode): Executable notebook object parameters (dict): Arbitrary keyword arguments to pass to the notebook parameters. """ check.dict_param(parameters, "parameters") # Copy the nb object to avoid polluting the input nb = copy.deepcopy(nb) # papermill method chooses translator based on kernel_name and language, but we just call the # DagsterTranslator to generate parameter content based on the kernel_name param_content = DagsterTranslator.codify(parameters) newcell = nbformat.v4.new_code_cell(source=param_content) newcell.metadata["tags"] = ["injected-parameters"] param_cell_index = _find_first_tagged_cell_index(nb, "parameters") injected_cell_index = _find_first_tagged_cell_index(nb, "injected-parameters") if injected_cell_index >= 0: # Replace the injected cell with a new version before = nb.cells[:injected_cell_index] after = nb.cells[injected_cell_index + 1 :] check.int_value_param(param_cell_index, -1, "param_cell_index") # We should have blown away the parameters cell if there is an injected-parameters cell elif param_cell_index >= 0: # Replace the parameter cell with the injected-parameters cell before = nb.cells[:param_cell_index] after = nb.cells[param_cell_index + 1 :] else: # Inject to the top of the notebook, presumably first cell includes dagstermill import context.log.debug( ( "Executing notebook with no tagged parameters cell: injecting boilerplate in first " "cell." ) ) before = [] after = nb.cells nb.cells = before + [newcell] + after nb.metadata.papermill["parameters"] = seven.json.dumps(parameters) return nb