Skip to content

Commit b9476e2

Browse files
committed
Copy parameter cell metadata to injected cell
1 parent e4e4ddd commit b9476e2

2 files changed

Lines changed: 18 additions & 8 deletions

File tree

papermill/parameterize.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from copy import deepcopy
12
from datetime import datetime, timezone
23
from uuid import uuid4
34

@@ -92,15 +93,21 @@ def parameterize_notebook(
9293
# Upgrade the Notebook to the latest v4 before writing into it
9394
nb = nbformat.v4.upgrade(nb)
9495

96+
param_cell_index = find_first_tagged_cell_index(nb, 'parameters')
97+
injected_cell_index = find_first_tagged_cell_index(nb, 'injected-parameters')
98+
9599
newcell = nbformat.v4.new_code_cell(source=param_content)
96-
newcell.metadata['tags'] = ['injected-parameters']
100+
if param_cell_index >= 0:
101+
newcell.metadata = deepcopy(nb.cells[param_cell_index].metadata)
102+
103+
tags = [tag for tag in newcell.metadata.get('tags', []) if tag != 'parameters']
104+
if 'injected-parameters' not in tags:
105+
tags.append('injected-parameters')
106+
newcell.metadata['tags'] = tags
97107

98108
if report_mode:
99-
newcell.metadata['jupyter'] = newcell.get('jupyter', {})
100-
newcell.metadata['jupyter']['source_hidden'] = True
109+
newcell.metadata.setdefault('jupyter', {})['source_hidden'] = True
101110

102-
param_cell_index = find_first_tagged_cell_index(nb, 'parameters')
103-
injected_cell_index = find_first_tagged_cell_index(nb, 'injected-parameters')
104111
if injected_cell_index >= 0:
105112
# Replace the injected cell with a new version
106113
before = nb.cells[:injected_cell_index]

papermill/tests/test_parameterize.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,23 @@ class TestNotebookParametrizing(unittest.TestCase):
1111
def count_nb_injected_parameter_cells(self, nb):
1212
return len([c for c in nb.cells if 'injected-parameters' in c.get('metadata', {}).get('tags', [])])
1313

14-
def test_no_tag_copying(self):
15-
# Test that injected cell does not copy other tags
14+
def test_parameter_cell_metadata_is_copied(self):
1615
test_nb = load_notebook_node(get_notebook_path("simple_execute.ipynb"))
1716
test_nb.cells[0]['metadata']['tags'].append('some tag')
17+
test_nb.cells[0]['metadata']['slideshow'] = {'slide_type': 'skip'}
1818

1919
test_nb = parameterize_notebook(test_nb, {'msg': 'Hello'})
2020

2121
cell_zero = test_nb.cells[0]
2222
self.assertTrue('some tag' in cell_zero.get('metadata').get('tags'))
2323
self.assertTrue('parameters' in cell_zero.get('metadata').get('tags'))
24+
self.assertEqual({'slide_type': 'skip'}, cell_zero.get('metadata').get('slideshow'))
2425

2526
cell_one = test_nb.cells[1]
26-
self.assertTrue('some tag' not in cell_one.get('metadata').get('tags'))
27+
self.assertTrue('some tag' in cell_one.get('metadata').get('tags'))
28+
self.assertTrue('parameters' not in cell_one.get('metadata').get('tags'))
2729
self.assertTrue('injected-parameters' in cell_one.get('metadata').get('tags'))
30+
self.assertEqual({'slide_type': 'skip'}, cell_one.get('metadata').get('slideshow'))
2831

2932
self.assertEqual(self.count_nb_injected_parameter_cells(test_nb), 1)
3033

0 commit comments

Comments
 (0)