Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-mocket for openSUSE:Factory checked in at 2021-01-26 14:44:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-mocket (Old) and /work/SRC/openSUSE:Factory/.python-mocket.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-mocket" Tue Jan 26 14:44:20 2021 rev:10 rq:866084 version:3.9.39 Changes: -------- --- /work/SRC/openSUSE:Factory/python-mocket/python-mocket.changes 2021-01-15 19:44:20.217849859 +0100 +++ /work/SRC/openSUSE:Factory/.python-mocket.new.28504/python-mocket.changes 2021-01-26 14:44:20.999218095 +0100 @@ -1,0 +2,18 @@ +Fri Jan 15 16:56:37 UTC 2021 - Sebastian Wagner <sebix+novell....@sebix.at> + +- update to version 3.9.39: + - Use MocketSocket as context manager (#141) + * Adding support for using a `socket` as a context manager as requested by #139. + * Closing real socket. + * Bump version. +- update to version 3.9.38: + - Update __init__.py +- update to version 3.9.37: + - Fix for external decorators (#138) +- update to version 3.9.36: + - New mocket method for checking if all entries have been served (#137) + * Mocket method for checking if all entries have been served at least once. + - Yet another refactor (#135) + - Refactor. (#136) + +------------------------------------------------------------------- Old: ---- mocket-3.9.35.tar.gz New: ---- mocket-3.9.39.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-mocket.spec ++++++ --- /var/tmp/diff_new_pack.SvTqlr/_old 2021-01-26 14:44:21.643219092 +0100 +++ /var/tmp/diff_new_pack.SvTqlr/_new 2021-01-26 14:44:21.647219099 +0100 @@ -26,7 +26,7 @@ %bcond_with test %endif Name: python-mocket%{psuffix} -Version: 3.9.35 +Version: 3.9.39 Release: 0 Summary: Python socket mock framework License: BSD-3-Clause ++++++ mocket-3.9.35.tar.gz -> mocket-3.9.39.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mocket-3.9.35/PKG-INFO new/mocket-3.9.39/PKG-INFO --- old/mocket-3.9.35/PKG-INFO 2021-01-02 15:20:32.112968000 +0100 +++ new/mocket-3.9.39/PKG-INFO 2021-01-15 17:23:26.652558300 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: mocket -Version: 3.9.35 +Version: 3.9.39 Summary: Socket Mock Framework - for all kinds of socket animals, web-clients included - with gevent/asyncio/SSL support Home-page: https://github.com/mindflayer/python-mocket Author: Giorgio Salluzzo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mocket-3.9.35/mocket/__init__.py new/mocket-3.9.39/mocket/__init__.py --- old/mocket-3.9.35/mocket/__init__.py 2021-01-02 15:19:24.000000000 +0100 +++ new/mocket-3.9.39/mocket/__init__.py 2021-01-15 17:23:19.000000000 +0100 @@ -1,10 +1,5 @@ -try: - # Py2 - from mocket import Mocket, MocketEntry, Mocketizer, mocketize -except ImportError: - # Py3 - from mocket.mocket import Mocket, MocketEntry, Mocketizer, mocketize +from mocket.mocket import Mocket, MocketEntry, Mocketizer, mocketize __all__ = ("mocketize", "Mocket", "MocketEntry", "Mocketizer") -__version__ = "3.9.35" +__version__ = "3.9.39" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mocket-3.9.35/mocket/compat.py new/mocket-3.9.39/mocket/compat.py --- old/mocket-3.9.35/mocket/compat.py 2021-01-02 15:19:24.000000000 +0100 +++ new/mocket-3.9.39/mocket/compat.py 2021-01-03 17:46:22.000000000 +0100 @@ -2,28 +2,20 @@ import os import shlex -encoding = os.getenv("MOCKET_ENCODING", "utf-8") +ENCODING = os.getenv("MOCKET_ENCODING", "utf-8") text_type = str byte_type = bytes basestring = (str,) -FileNotFoundError = FileNotFoundError -BlockingIOError = BlockingIOError -try: - from json.decoder import JSONDecodeError -except ImportError: - JSONDecodeError = ValueError - - -def encode_to_bytes(s, encoding=encoding): +def encode_to_bytes(s, encoding=ENCODING): if isinstance(s, text_type): s = s.encode(encoding) return byte_type(s) -def decode_from_bytes(s, encoding=encoding): +def decode_from_bytes(s, encoding=ENCODING): if isinstance(s, byte_type): s = codecs.decode(s, encoding, "ignore") return text_type(s) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mocket-3.9.35/mocket/mocket.py new/mocket-3.9.39/mocket/mocket.py --- old/mocket-3.9.35/mocket/mocket.py 2021-01-02 15:19:24.000000000 +0100 +++ new/mocket-3.9.39/mocket/mocket.py 2021-01-15 17:23:19.000000000 +0100 @@ -3,28 +3,21 @@ import errno import hashlib import io +import itertools import json import os import select import socket import ssl from datetime import datetime, timedelta +from json.decoder import JSONDecodeError import decorator import urllib3 from urllib3.util.ssl_ import ssl_wrap_socket as urllib3_ssl_wrap_socket from urllib3.util.ssl_ import wrap_socket as urllib3_wrap_socket -from .compat import ( - BlockingIOError, - FileNotFoundError, - JSONDecodeError, - basestring, - byte_type, - decode_from_bytes, - encode_to_bytes, - text_type, -) +from .compat import basestring, byte_type, decode_from_bytes, encode_to_bytes, text_type from .utils import SSL_PROTOCOL, MocketSocketCore, hexdump, hexload, wrap_ssl_socket xxh32 = None @@ -140,7 +133,6 @@ self, family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0, *args, **kwargs ): self.true_socket = true_socket(family, type, proto) - self._connected = False self._buflen = 65536 self._entry = None self.family = int(family) @@ -167,6 +159,12 @@ self.__class__.__name__, self.family, self.type, self.proto ) + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.close() + @property def fd(self): if self._fd is None: @@ -385,6 +383,8 @@ return len(data) def close(self): + if self.true_socket and not self.true_socket._closed: + self.true_socket.close() self._fd = None def __getattr__(self, name): @@ -519,6 +519,13 @@ def get_truesocket_recording_dir(cls): return cls._truesocket_recording_dir + @classmethod + def assert_fail_if_entries_not_served(cls): + """ Mocket checks that all entries have been served at least once. """ + assert all( + entry._served for entry in itertools.chain(*cls._entries.values()) + ), "Some Mocket entries have not been served" + class MocketEntry(object): class Response(byte_type): @@ -528,8 +535,11 @@ request_cls = str response_cls = Response + responses = None + _served = None def __init__(self, location, responses): + self._served = False self.location = location self.response_index = 0 @@ -538,7 +548,7 @@ ): responses = [responses] - lresponses = [] + self.responses = [] for r in responses: if isinstance(r, BaseException): pass @@ -546,11 +556,10 @@ if isinstance(r, text_type): r = encode_to_bytes(r) r = self.response_cls(r) - lresponses.append(r) + self.responses.append(r) else: if not responses: - lresponses = [self.response_cls(encode_to_bytes(""))] - self.responses = lresponses + self.responses = [self.response_cls(encode_to_bytes(""))] def can_handle(self, data): return True @@ -564,6 +573,8 @@ if self.response_index < len(self.responses) - 1: self.response_index += 1 + self._served = True + if isinstance(response, BaseException): raise response @@ -595,8 +606,8 @@ if callable(method): method() - @staticmethod - def wrap(test=None, truesocket_recording_dir=None): + @classmethod + def wrap(cls, test=None, truesocket_recording_dir=None): def wrapper(t, *args, **kw): instance = args[0] if args else None namespace = None @@ -608,7 +619,7 @@ t.__name__, ) ) - with Mocketizer( + with cls( instance, namespace=namespace, truesocket_recording_dir=truesocket_recording_dir, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mocket-3.9.35/mocket.egg-info/PKG-INFO new/mocket-3.9.39/mocket.egg-info/PKG-INFO --- old/mocket-3.9.35/mocket.egg-info/PKG-INFO 2021-01-02 15:20:31.000000000 +0100 +++ new/mocket-3.9.39/mocket.egg-info/PKG-INFO 2021-01-15 17:23:26.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: mocket -Version: 3.9.35 +Version: 3.9.39 Summary: Socket Mock Framework - for all kinds of socket animals, web-clients included - with gevent/asyncio/SSL support Home-page: https://github.com/mindflayer/python-mocket Author: Giorgio Salluzzo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mocket-3.9.35/tests/main/test_http.py new/mocket-3.9.39/tests/main/test_http.py --- old/mocket-3.9.35/tests/main/test_http.py 2020-11-09 11:49:45.000000000 +0100 +++ new/mocket-3.9.39/tests/main/test_http.py 2021-01-11 15:59:07.000000000 +0100 @@ -363,3 +363,22 @@ # Proof that worked. self.assertEqual(Mocket.last_request().body, '{"hello": "world"}') + + @mocketize + def test_fail_because_entry_not_served(self): + url = "http://github.com/fluidicon.png" + Entry.single_register(Entry.GET, url) + Entry.single_register(Entry.GET, "http://github.com/fluidicon.jpg") + requests.get(url) + with self.assertRaises(AssertionError): + Mocket.assert_fail_if_entries_not_served() + + @mocketize + def test_does_not_fail_because_all_entries_are_served(self): + url = "http://github.com/fluidicon.png" + second_url = "http://github.com/fluidicon.jpg" + Entry.single_register(Entry.GET, url) + Entry.single_register(Entry.GET, second_url) + requests.get(url) + requests.get(second_url) + Mocket.assert_fail_if_entries_not_served() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mocket-3.9.35/tests/main/test_mocket.py new/mocket-3.9.39/tests/main/test_mocket.py --- old/mocket-3.9.35/tests/main/test_mocket.py 2020-11-09 11:49:45.000000000 +0100 +++ new/mocket-3.9.39/tests/main/test_mocket.py 2021-01-15 17:23:19.000000000 +0100 @@ -127,6 +127,16 @@ self.assertEqual(fp.read().strip(), encode_to_bytes("Show me.")) self.assertEqual(len(Mocket._requests), 1) + def test_socket_as_context_manager(self): + addr = ("localhost", 80) + Mocket.register(MocketEntry(addr, ["Show me.\r\n"])) + with Mocketizer(): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as _so: + _so.connect(addr) + _so.sendall(encode_to_bytes("Whatever...")) + data = _so.recv(4096) + self.assertEqual(data, encode_to_bytes("Show me.\r\n")) + class MocketizeTestCase(TestCase): def mocketize_setup(self):