125 lines
4.9 KiB
Diff
125 lines
4.9 KiB
Diff
From 7e9eee69c273515129cc0ac0e425b4b2c7da9263 Mon Sep 17 00:00:00 2001
|
|
From: Maxwell G <gotmax@e.email>
|
|
Date: Thu, 28 Jul 2022 13:57:18 +0200
|
|
Subject: [PATCH 1/2] Prefer unitest.mock by using compat.mock
|
|
|
|
`mock` is a backport of the `unittest.mock` module from the stdlib, and
|
|
there's no reason to use it on newer Python versions. `mock` is deprecated
|
|
in Fedora, so I figured I'd propose this here before downstream patching
|
|
our ansible-collection-community-docker package.
|
|
---
|
|
tests/unit/plugins/inventory/test_docker_containers.py | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/tests/unit/plugins/inventory/test_docker_containers.py b/tests/unit/plugins/inventory/test_docker_containers.py
|
|
index 1c831b21..74721bfe 100644
|
|
--- a/tests/unit/plugins/inventory/test_docker_containers.py
|
|
+++ b/tests/unit/plugins/inventory/test_docker_containers.py
|
|
@@ -11,7 +11,7 @@
|
|
|
|
import pytest
|
|
|
|
-from mock import MagicMock
|
|
+from ansible_collections.community.docker.tests.unit.compat.mock import MagicMock
|
|
|
|
from ansible import constants as C
|
|
from ansible.errors import AnsibleError
|
|
|
|
From 0efaff6a01c113980a70b92e93bdadd7237a7949 Mon Sep 17 00:00:00 2001
|
|
From: Maxwell G <gotmax@e.email>
|
|
Date: Thu, 28 Jul 2022 14:15:53 +0200
|
|
Subject: [PATCH 2/2] Remove compat.mock code for older Python 3 versions
|
|
|
|
This removes compatibility for older versions of Python 3 that are no
|
|
longer supported.
|
|
---
|
|
tests/unit/compat/mock.py | 79 ---------------------------------------
|
|
1 file changed, 79 deletions(-)
|
|
|
|
diff --git a/tests/unit/compat/mock.py b/tests/unit/compat/mock.py
|
|
index f8f565dc..515b94a3 100644
|
|
--- a/tests/unit/compat/mock.py
|
|
+++ b/tests/unit/compat/mock.py
|
|
@@ -28,82 +28,3 @@
|
|
from mock import *
|
|
except ImportError:
|
|
print('You need the mock library installed on python2.x to run tests')
|
|
-
|
|
-
|
|
-# Prior to 3.4.4, mock_open cannot handle binary read_data
|
|
-if sys.version_info >= (3,) and sys.version_info < (3, 4, 4):
|
|
- file_spec = None
|
|
-
|
|
- def _iterate_read_data(read_data):
|
|
- # Helper for mock_open:
|
|
- # Retrieve lines from read_data via a generator so that separate calls to
|
|
- # readline, read, and readlines are properly interleaved
|
|
- sep = b'\n' if isinstance(read_data, bytes) else '\n'
|
|
- data_as_list = [l + sep for l in read_data.split(sep)]
|
|
-
|
|
- if data_as_list[-1] == sep:
|
|
- # If the last line ended in a newline, the list comprehension will have an
|
|
- # extra entry that's just a newline. Remove this.
|
|
- data_as_list = data_as_list[:-1]
|
|
- else:
|
|
- # If there wasn't an extra newline by itself, then the file being
|
|
- # emulated doesn't have a newline to end the last line remove the
|
|
- # newline that our naive format() added
|
|
- data_as_list[-1] = data_as_list[-1][:-1]
|
|
-
|
|
- for line in data_as_list:
|
|
- yield line
|
|
-
|
|
- def mock_open(mock=None, read_data=''):
|
|
- """
|
|
- A helper function to create a mock to replace the use of `open`. It works
|
|
- for `open` called directly or used as a context manager.
|
|
-
|
|
- The `mock` argument is the mock object to configure. If `None` (the
|
|
- default) then a `MagicMock` will be created for you, with the API limited
|
|
- to methods or attributes available on standard file handles.
|
|
-
|
|
- `read_data` is a string for the `read` methoddline`, and `readlines` of the
|
|
- file handle to return. This is an empty string by default.
|
|
- """
|
|
- def _readlines_side_effect(*args, **kwargs):
|
|
- if handle.readlines.return_value is not None:
|
|
- return handle.readlines.return_value
|
|
- return list(_data)
|
|
-
|
|
- def _read_side_effect(*args, **kwargs):
|
|
- if handle.read.return_value is not None:
|
|
- return handle.read.return_value
|
|
- return type(read_data)().join(_data)
|
|
-
|
|
- def _readline_side_effect():
|
|
- if handle.readline.return_value is not None:
|
|
- while True:
|
|
- yield handle.readline.return_value
|
|
- for line in _data:
|
|
- yield line
|
|
-
|
|
- global file_spec
|
|
- if file_spec is None:
|
|
- import _io
|
|
- file_spec = list(set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO))))
|
|
-
|
|
- if mock is None:
|
|
- mock = MagicMock(name='open', spec=open)
|
|
-
|
|
- handle = MagicMock(spec=file_spec)
|
|
- handle.__enter__.return_value = handle
|
|
-
|
|
- _data = _iterate_read_data(read_data)
|
|
-
|
|
- handle.write.return_value = None
|
|
- handle.read.return_value = None
|
|
- handle.readline.return_value = None
|
|
- handle.readlines.return_value = None
|
|
-
|
|
- handle.read.side_effect = _read_side_effect
|
|
- handle.readline.side_effect = _readline_side_effect()
|
|
- handle.readlines.side_effect = _readlines_side_effect
|
|
-
|
|
- mock.return_value = handle
|
|
- return mock
|