diff --git a/README.rst b/README.rst index d003d42..6a7eba5 100644 --- a/README.rst +++ b/README.rst @@ -54,6 +54,17 @@ simply by adding a parameter named `sftpserver` to your test function: As can be seen from this example `sftpserver` serves content directly from python objects instead of files. +It is also possible to use the package without `pytest`: + +.. code-block:: python + + from pytest_sftpserver.core import SFTPServerContextDecorator + + @SFTPServerContextDecorator + def test_sftp_fetch(sftpserver): + with sftpserver.serve_content({'a_dir': {'somefile.txt': "File content"}}): + assert get_sftp_file(sftpserver.host, sftpserver.port, "user", + "pw", "/a_dir/somefile.txt") == "File content" Installation ============ diff --git a/pytest_sftpserver/core.py b/pytest_sftpserver/core.py new file mode 100644 index 0000000..b00b7c4 --- /dev/null +++ b/pytest_sftpserver/core.py @@ -0,0 +1,19 @@ +from pytest_sftpserver.sftp.server import SFTPServer + + +class SFTPServerContextDecorator(object): + def __enter__(self): + self.server = SFTPServer() + self.server.start() + return self.server + + def __exit__(self, *args, **kwargs): + if self.server.is_alive(): + self.server.shutdown() + + def __call__(self, func): + def wrapper(*args, **kwargs): + with self: + kwargs['sftpserver'] = self.server + return func(*args, **kwargs) + return wrapper diff --git a/pytest_sftpserver/plugin.py b/pytest_sftpserver/plugin.py index 0f35246..09b79c2 100644 --- a/pytest_sftpserver/plugin.py +++ b/pytest_sftpserver/plugin.py @@ -5,15 +5,10 @@ import pytest -from pytest_sftpserver.sftp.server import SFTPServer +from pytest_sftpserver.core import SFTPServerContextDecorator @pytest.yield_fixture(scope="session") def sftpserver(request): - server = SFTPServer() - server.start() - - yield server - - if server.is_alive(): - server.shutdown() + with SFTPServerContextDecorator() as server: + yield server