Source code for jupyterlab_celltests.shared
# import pytest
import re
FUNCTION_REGEX = r'def (.*?):'
CLASS_REGEX = r'class (.*?):'
[docs]def extract_celltests(notebook):
return [c['metadata'].get('tests', []) for c in notebook.cells]
[docs]def extract_extrametadata(notebook, override=None):
base = notebook.metadata.get('celltests', {})
override = override or {}
base['cell_count'] = 0
base['cell_tested'] = []
base['test_count'] = 0
base['cell_lines'] = []
base['lines'] = 0
base['functions'] = 0
base['classes'] = 0
foo_regex = re.compile(FUNCTION_REGEX)
class_regex = re.compile(CLASS_REGEX)
for c in notebook.cells:
base['cell_lines'].append(0)
base['cell_tested'].append(False)
base['cell_count'] += 1
for line in c['source'].split('\n'):
base['lines'] += 1
base['cell_lines'][-1] += 1
if re.search(foo_regex, line):
base['functions'] += 1
if re.search(class_regex, line):
base['classes'] += 1
for t in c['metadata'].get('tests', []):
if t.strip().startswith('%cell'):
base['test_count'] += 1
base['cell_tested'][-1] = True
break
# in case you want to override notebook settings
if override:
base.update(override)
return base
[docs]def get_coverage(notebook):
meta = extract_extrametadata(notebook)
return meta['cell_tested']/meta['cell_count']*100