Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pytest-jupyter for
openSUSE:Factory checked in at 2026-03-13 21:15:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-jupyter (Old)
and /work/SRC/openSUSE:Factory/.python-pytest-jupyter.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pytest-jupyter"
Fri Mar 13 21:15:46 2026 rev:11 rq:1338426 version:0.11.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-pytest-jupyter/python-pytest-jupyter.changes
2025-05-23 14:27:40.893286827 +0200
+++
/work/SRC/openSUSE:Factory/.python-pytest-jupyter.new.8177/python-pytest-jupyter.changes
2026-03-13 21:16:03.991491540 +0100
@@ -1,0 +2,9 @@
+Mon Dec 1 21:20:45 UTC 2025 - Dirk Müller <[email protected]>
+
+- update to 0.11.0:
+ * Drop 3.8, Start testing on 3.13, 3.14 and 3.14t, update
+ * Improved doc string for jp_fetch to include how to provide
+ query parameters in GET and json data in POST #83
+ * Restore the ability to override a serverapp's HTTP port #82
+
+-------------------------------------------------------------------
Old:
----
pytest_jupyter-0.10.1.tar.gz
New:
----
pytest_jupyter-0.11.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pytest-jupyter.spec ++++++
--- /var/tmp/diff_new_pack.isp4vd/_old 2026-03-13 21:16:04.739521511 +0100
+++ /var/tmp/diff_new_pack.isp4vd/_new 2026-03-13 21:16:04.743521672 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-pytest-jupyter
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -30,7 +30,7 @@
%bcond_with ringdisabled
%{?sle15_python_module_pythons}
Name: python-pytest-jupyter%{psuffix}
-Version: 0.10.1
+Version: 0.11.0
Release: 0
Summary: A pytest plugin for testing Jupyter libraries and extensions
License: BSD-3-Clause AND MIT
++++++ pytest_jupyter-0.10.1.tar.gz -> pytest_jupyter-0.11.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_jupyter-0.10.1/PKG-INFO
new/pytest_jupyter-0.11.0/PKG-INFO
--- old/pytest_jupyter-0.10.1/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_jupyter-0.11.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.3
+Metadata-Version: 2.4
Name: pytest-jupyter
-Version: 0.10.1
+Version: 0.11.0
Summary: A pytest plugin for testing Jupyter libraries and extensions.
Project-URL: Homepage, http://jupyter.org
Project-URL: Funding, https://numfocus.org/donate
@@ -101,7 +101,7 @@
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Requires-Python: >=3.8
+Requires-Python: >=3.10
Requires-Dist: jupyter-core>=5.7
Requires-Dist: pytest>=7.0
Provides-Extra: client
@@ -164,16 +164,16 @@
by default.
*Note*: The server plugin also includes the client plugin, so you can use both
-sets of fixtures with `"pytest_jupyter.jupyter_server"`. Both the `client`
+sets of fixtures with `"pytest_jupyter.jupyter_server"`. Both the `client`
and `server` plugins also include the core fixtures.
*Note*: The client and server plugins use `pytest-tornasync` for async
-test suite running. It may not compatible with `pytest-asyncio`, meaning
-that all fixtures must be synchronous. You can use the `asyncio_loop` fixture
+test suite running. It may not compatible with `pytest-asyncio`, meaning
+that all fixtures must be synchronous. You can use the `asyncio_loop` fixture
and run `asyncio_loop.run_until_complete` against an async function in your
fixtures if needed.
-The server fixures use the echo kernel by default. To override this behavior,
+The server fixures use the echo kernel by default. To override this behavior,
override the `jp_server_config` fixture and add the following config:
```json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_jupyter-0.10.1/README.md
new/pytest_jupyter-0.11.0/README.md
--- old/pytest_jupyter-0.10.1/README.md 2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_jupyter-0.11.0/README.md 2020-02-02 01:00:00.000000000 +0100
@@ -40,16 +40,16 @@
by default.
*Note*: The server plugin also includes the client plugin, so you can use both
-sets of fixtures with `"pytest_jupyter.jupyter_server"`. Both the `client`
+sets of fixtures with `"pytest_jupyter.jupyter_server"`. Both the `client`
and `server` plugins also include the core fixtures.
*Note*: The client and server plugins use `pytest-tornasync` for async
-test suite running. It may not compatible with `pytest-asyncio`, meaning
-that all fixtures must be synchronous. You can use the `asyncio_loop` fixture
+test suite running. It may not compatible with `pytest-asyncio`, meaning
+that all fixtures must be synchronous. You can use the `asyncio_loop` fixture
and run `asyncio_loop.run_until_complete` against an async function in your
fixtures if needed.
-The server fixures use the echo kernel by default. To override this behavior,
+The server fixures use the echo kernel by default. To override this behavior,
override the `jp_server_config` fixture and add the following config:
```json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_jupyter-0.10.1/pyproject.toml
new/pytest_jupyter-0.11.0/pyproject.toml
--- old/pytest_jupyter-0.10.1/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
+++ new/pytest_jupyter-0.11.0/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
@@ -30,7 +30,7 @@
"pytest>=7.0",
"jupyter_core>=5.7"
]
-requires-python = ">=3.8"
+requires-python = ">=3.10"
[project.optional-dependencies]
@@ -100,7 +100,7 @@
detached = true
[tool.hatch.envs.lint.scripts]
build = [
- "pre-commit run --all-files ruff",
+ "pre-commit run --all-files ruff-check",
"pre-commit run --all-files ruff-format"
]
@@ -125,6 +125,7 @@
# Fail on warnings
"error",
"module:datetime.datetime.utc:DeprecationWarning",
+ "ignore:.*asyncio.DefaultEventLoopPolicy.*:DeprecationWarning"
]
[tool.coverage.report]
@@ -147,7 +148,7 @@
[tool.mypy]
files = "pytest_jupyter"
-python_version = "3.8"
+python_version = "3.10"
strict = true
enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"]
disable_error_code = ["no-untyped-def"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_jupyter-0.10.1/pytest_jupyter/_version.py
new/pytest_jupyter-0.11.0/pytest_jupyter/_version.py
--- old/pytest_jupyter-0.10.1/pytest_jupyter/_version.py 2020-02-02
01:00:00.000000000 +0100
+++ new/pytest_jupyter-0.11.0/pytest_jupyter/_version.py 2020-02-02
01:00:00.000000000 +0100
@@ -2,4 +2,4 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
-__version__ = "0.10.1"
+__version__ = "0.11.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_jupyter-0.10.1/pytest_jupyter/echo_kernel.py
new/pytest_jupyter-0.11.0/pytest_jupyter/echo_kernel.py
--- old/pytest_jupyter-0.10.1/pytest_jupyter/echo_kernel.py 2020-02-02
01:00:00.000000000 +0100
+++ new/pytest_jupyter-0.11.0/pytest_jupyter/echo_kernel.py 2020-02-02
01:00:00.000000000 +0100
@@ -1,4 +1,5 @@
"""A simple echo kernel."""
+
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
from __future__ import annotations
@@ -61,7 +62,7 @@
class EchoKernelApp(IPKernelApp):
"""An app for the echo kernel."""
- kernel_class = EchoKernel # type:ignore[assignment]
+ kernel_class = EchoKernel
if __name__ == "__main__":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest_jupyter-0.10.1/pytest_jupyter/jupyter_client.py
new/pytest_jupyter-0.11.0/pytest_jupyter/jupyter_client.py
--- old/pytest_jupyter-0.10.1/pytest_jupyter/jupyter_client.py 2020-02-02
01:00:00.000000000 +0100
+++ new/pytest_jupyter-0.11.0/pytest_jupyter/jupyter_client.py 2020-02-02
01:00:00.000000000 +0100
@@ -23,17 +23,17 @@
from pytest_jupyter.jupyter_core import * # noqa: F403
[email protected]()
[email protected]
def jp_zmq_context():
"""Get a zmq context."""
- import zmq
+ import zmq # noqa: PLC0415
ctx = zmq.asyncio.Context()
yield ctx
ctx.term()
[email protected]()
[email protected]
def jp_start_kernel(jp_environ, jp_asyncio_loop):
"""Get a function to a kernel and clean up resources when done."""
kms = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_jupyter-0.10.1/pytest_jupyter/jupyter_core.py
new/pytest_jupyter-0.11.0/pytest_jupyter/jupyter_core.py
--- old/pytest_jupyter-0.10.1/pytest_jupyter/jupyter_core.py 2020-02-02
01:00:00.000000000 +0100
+++ new/pytest_jupyter-0.11.0/pytest_jupyter/jupyter_core.py 2020-02-02
01:00:00.000000000 +0100
@@ -1,9 +1,11 @@
"""Fixtures for use with jupyter core and downstream."""
+
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
import json
import os
import sys
+import warnings
from inspect import iscoroutinefunction
from pathlib import Path
@@ -38,7 +40,13 @@
@pytest.fixture(autouse=True)
def jp_asyncio_loop():
"""Get an asyncio loop."""
- loop = ensure_event_loop(prefer_selector_loop=True)
+ with warnings.catch_warnings():
+ warnings.filterwarnings(
+ "ignore",
+ message=".*WindowsSelectorEventLoopPolicy.*",
+ category=DeprecationWarning,
+ )
+ loop = ensure_event_loop(prefer_selector_loop=True)
yield loop
loop.close()
@@ -61,79 +69,91 @@
pyfuncitem.obj(**testargs)
return True
- loop = ensure_event_loop(prefer_selector_loop=True)
+ with warnings.catch_warnings():
+ warnings.filterwarnings(
+ "ignore",
+ message=".*WindowsSelectorEventLoopPolicy.*",
+ category=DeprecationWarning,
+ )
+ loop = ensure_event_loop(prefer_selector_loop=True)
loop.run_until_complete(pyfuncitem.obj(**testargs))
return True
[email protected]()
[email protected]
def jp_home_dir(tmp_path):
"""Provides a temporary HOME directory value."""
return mkdir(tmp_path, "home")
[email protected]()
[email protected]
def jp_data_dir(tmp_path):
"""Provides a temporary Jupyter data dir directory value."""
return mkdir(tmp_path, "data")
[email protected]()
[email protected]
def jp_config_dir(tmp_path):
"""Provides a temporary Jupyter config dir directory value."""
return mkdir(tmp_path, "config")
[email protected]()
[email protected]
def jp_runtime_dir(tmp_path):
"""Provides a temporary Jupyter runtime dir directory value."""
return mkdir(tmp_path, "runtime")
[email protected]()
[email protected]
def jp_system_jupyter_path(tmp_path):
"""Provides a temporary Jupyter system path value."""
return mkdir(tmp_path, "share", "jupyter")
[email protected]()
[email protected]
def jp_env_jupyter_path(tmp_path):
"""Provides a temporary Jupyter env system path value."""
return mkdir(tmp_path, "env", "share", "jupyter")
[email protected]()
[email protected]
def jp_system_config_path(tmp_path):
"""Provides a temporary Jupyter config path value."""
return mkdir(tmp_path, "etc", "jupyter")
[email protected]()
[email protected]
def jp_env_config_path(tmp_path):
"""Provides a temporary Jupyter env config path value."""
return mkdir(tmp_path, "env", "etc", "jupyter")
[email protected]()
[email protected]
def jp_kernel_dir(jp_data_dir):
"""Get the directory for kernel specs."""
return mkdir(jp_data_dir, "kernels")
[email protected]()
[email protected]
def echo_kernel_spec(jp_kernel_dir):
"""Install a kernel spec for the echo kernel."""
test_dir = Path(jp_kernel_dir) / "echo"
test_dir.mkdir(parents=True, exist_ok=True)
- argv = [sys.executable, "-m", "pytest_jupyter.echo_kernel", "-f",
"{connection_file}"]
+ argv = [
+ sys.executable,
+ "-m",
+ "pytest_jupyter.echo_kernel",
+ "-f",
+ "{connection_file}",
+ ]
kernel_data = {"argv": argv, "display_name": "echo", "language": "echo"}
spec_file_path = Path(test_dir / "kernel.json")
spec_file_path.write_text(json.dumps(kernel_data), "utf8")
return str(test_dir)
[email protected]()
-def jp_environ( # noqa: PT004
[email protected]
+def jp_environ(
monkeypatch,
tmp_path,
jp_home_dir,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest_jupyter-0.10.1/pytest_jupyter/jupyter_server.py
new/pytest_jupyter-0.11.0/pytest_jupyter/jupyter_server.py
--- old/pytest_jupyter-0.10.1/pytest_jupyter/jupyter_server.py 2020-02-02
01:00:00.000000000 +0100
+++ new/pytest_jupyter-0.11.0/pytest_jupyter/jupyter_server.py 2020-02-02
01:00:00.000000000 +0100
@@ -1,4 +1,5 @@
"""Fixtures for use with jupyter server and downstream."""
+
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
from __future__ import annotations
@@ -54,7 +55,7 @@
from pytest_jupyter.utils import mkdir
[email protected]()
[email protected]
def jp_server_config():
"""Allows tests to setup their specific configuration values."""
if is_v2:
@@ -68,39 +69,39 @@
return Config(config)
[email protected]()
[email protected]
def jp_root_dir(tmp_path):
"""Provides a temporary Jupyter root directory value."""
return mkdir(tmp_path, "root_dir")
[email protected]()
[email protected]
def jp_template_dir(tmp_path):
"""Provides a temporary Jupyter templates directory value."""
return mkdir(tmp_path, "templates")
[email protected]()
[email protected]
def jp_argv():
"""Allows tests to setup specific argv values."""
return []
[email protected]()
[email protected]
def jp_http_port(http_server_port):
"""Returns the port value from the http_server_port fixture."""
yield http_server_port[-1]
http_server_port[0].close()
[email protected]()
-def jp_extension_environ(jp_env_config_path, monkeypatch): # noqa: PT004
[email protected]
+def jp_extension_environ(jp_env_config_path, monkeypatch):
"""Monkeypatch a Jupyter Extension's config path into each test's
environment variable"""
monkeypatch.setattr(serverextension, "ENV_CONFIG_PATH",
[str(jp_env_config_path)])
[email protected]()
-def jp_nbconvert_templates(jp_data_dir): # noqa: PT004
[email protected]
+def jp_nbconvert_templates(jp_data_dir):
"""Setups up a temporary directory consisting of the nbconvert
templates."""
# Get path to nbconvert template directory *before*
@@ -119,7 +120,7 @@
shutil.copytree(nbconvert_path, str(nbconvert_target))
[email protected]()
[email protected]
def jp_logging_stream():
"""StringIO stream intended to be used by the core
Jupyter ServerApp logger's default StreamHandler. This
@@ -135,7 +136,7 @@
return output
[email protected]()
[email protected]
def jp_configurable_serverapp(
jp_nbconvert_templates, # this fixture must precede jp_environ
jp_environ,
@@ -197,7 +198,7 @@
app = ServerApp.instance(
# Set the log level to debug for testing purposes
log_level="DEBUG",
- port=jp_http_port,
+ port=http_port,
port_retries=0,
open_browser=False,
base_url=base_url,
@@ -230,19 +231,41 @@
return _configurable_serverapp
[email protected]()
[email protected]
def jp_serverapp(jp_server_config, jp_argv, jp_configurable_serverapp):
"""Starts a Jupyter Server instance based on the established configuration
values."""
- return jp_configurable_serverapp(config=jp_server_config, argv=jp_argv)
+ with warnings.catch_warnings():
+ warnings.filterwarnings(
+ "ignore",
+ message=".*WindowsProactorEventLoopPolicy.*",
+ category=DeprecationWarning,
+ )
+ warnings.filterwarnings(
+ "ignore",
+ message=".*WindowsSelectorEventLoopPolicy.*",
+ category=DeprecationWarning,
+ )
+ warnings.filterwarnings(
+ "ignore",
+ message=".*get_event_loop_policy.*",
+ category=DeprecationWarning,
+ )
+ warnings.filterwarnings(
+ "ignore",
+ message=".*set_event_loop_policy.*",
+ category=DeprecationWarning,
+ )
+ return jp_configurable_serverapp(config=jp_server_config, argv=jp_argv)
[email protected]()
+
[email protected]
def jp_web_app(jp_serverapp):
"""app fixture is needed by pytest_tornasync plugin"""
return jp_serverapp.web_app
[email protected]()
[email protected]
def jp_auth_header(jp_serverapp):
"""Configures an authorization header using the token from the serverapp
fixture."""
if not is_v2:
@@ -250,13 +273,13 @@
return {"Authorization": f"token {jp_serverapp.identity_provider.token}"}
[email protected]()
[email protected]
def jp_base_url():
"""Returns the base url to use for the test."""
return "/a%40b/"
[email protected]()
[email protected]
def jp_fetch(jp_serverapp, http_server_client, jp_auth_header, jp_base_url):
"""Sends an (asynchronous) HTTP request to a test server.
The fixture is a factory; it can be called like
@@ -268,6 +291,25 @@
async def my_test(jp_fetch):
response = await jp_fetch("api", "spec.yaml")
...
+
+ With query parameters:
+
+ .. code-block:: python
+
+ async def my_test(jp_fetch):
+ response = await jp_fetch("api", "spec.yaml", params={"parameter":
"value"})
+ ...
+
+ A POST request with data:
+
+ .. code-block:: python
+
+ async def my_test(jp_fetch):
+ response = await jp_fetch(
+ "api", "spec.yaml", method="POST",
body=json.dumps({"parameter": "value"})
+ )
+ ...
+
"""
def client_fetch(*parts, headers=None, params=None, **kwargs):
@@ -293,7 +335,7 @@
return client_fetch
[email protected]()
[email protected]
def jp_ws_fetch(jp_serverapp, http_server_client, jp_auth_header,
jp_http_port, jp_base_url):
"""Sends a websocket request to a test server.
The fixture is a factory; it can be called like
@@ -338,7 +380,7 @@
return client_fetch
[email protected]()
[email protected]
def jp_create_notebook(jp_root_dir):
"""Creates a notebook in the test's home directory."""
@@ -361,7 +403,7 @@
@pytest.fixture(autouse=True)
-def jp_server_cleanup(jp_asyncio_loop): # noqa: PT004
+def jp_server_cleanup(jp_asyncio_loop):
"""Automatically cleans up server resources."""
yield
app: ServerApp = ServerApp.instance()
@@ -374,7 +416,7 @@
ServerApp.clear_instance()
[email protected]()
[email protected]
def send_request(jp_fetch, jp_ws_fetch):
"""Send to Jupyter Server and return response code."""
@@ -396,7 +438,7 @@
return _
[email protected]()
[email protected]
def jp_server_auth_core_resources():
"""The core auth resources for use with a server."""
modules = []
@@ -413,7 +455,7 @@
return resource_map
[email protected]()
[email protected]
def jp_server_auth_resources(jp_server_auth_core_resources):
"""The auth resources used by the server."""
return jp_server_auth_core_resources
@@ -493,7 +535,7 @@
)
[email protected]()
[email protected]
def jp_server_authorizer(jp_server_auth_resources):
"""An authorizer for the server."""
auth_klass = _Authorizer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest_jupyter-0.10.1/pytest_jupyter/pytest_tornasync.py
new/pytest_jupyter-0.11.0/pytest_jupyter/pytest_tornasync.py
--- old/pytest_jupyter-0.10.1/pytest_jupyter/pytest_tornasync.py
2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_jupyter-0.11.0/pytest_jupyter/pytest_tornasync.py
2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,7 @@
"""Vendored fork of pytest_tornasync from
-
https://github.com/eukaryote/pytest-tornasync/blob/9f1bdeec3eb5816e0183f975ca65b5f6f29fbfbb/src/pytest_tornasync/plugin.py
+https://github.com/eukaryote/pytest-tornasync/blob/9f1bdeec3eb5816e0183f975ca65b5f6f29fbfbb/src/pytest_tornasync/plugin.py
"""
+
import asyncio
from contextlib import closing
@@ -18,13 +19,13 @@
from pytest_jupyter.jupyter_core import * # noqa: F403
[email protected]()
[email protected]
def io_loop(jp_asyncio_loop):
"""Get the current tornado event loop."""
return tornado.ioloop.IOLoop.current()
[email protected]()
[email protected]
def http_server(jp_asyncio_loop, http_server_port, jp_web_app):
"""Start a tornado HTTP server that listens on all available interfaces."""
@@ -47,7 +48,7 @@
http_server_port[0].close()
[email protected]()
[email protected]
def http_server_port():
"""
Port used by `http_server`.
@@ -55,7 +56,7 @@
return tornado.testing.bind_unused_port()
[email protected]()
[email protected]
def http_server_client(http_server, jp_asyncio_loop):
"""
Create an asynchronous HTTP client that can fetch from `http_server`.
@@ -73,12 +74,12 @@
class AsyncHTTPServerClient(SimpleAsyncHTTPClient):
"""An async http server client."""
- def initialize(self, *, http_server=None):
+ def initialize(self, *, http_server=None): # type: ignore[override]
"""Initialize the client."""
super().initialize()
self._http_server = http_server
- def fetch(self, path, **kwargs):
+ def fetch(self, path, **kwargs): # type: ignore[override]
"""
Fetch `path` from test server, passing `kwargs` to the `fetch`
of the underlying `SimpleAsyncHTTPClient`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_jupyter-0.10.1/pytest_jupyter/utils.py
new/pytest_jupyter-0.11.0/pytest_jupyter/utils.py
--- old/pytest_jupyter-0.10.1/pytest_jupyter/utils.py 2020-02-02
01:00:00.000000000 +0100
+++ new/pytest_jupyter-0.11.0/pytest_jupyter/utils.py 2020-02-02
01:00:00.000000000 +0100
@@ -1,4 +1,5 @@
"""Utilities for pytest-jupyter."""
+
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
from pathlib import Path