diff --git a/README.md b/README.md index ee584d8..059bcf1 100644 --- a/README.md +++ b/README.md @@ -161,8 +161,7 @@ def print_server_stats(stats): class StaticHandler(BaseHandler): def __init__(self, server_addr, peer, path, options, root, stats_callback): self._root = root - BaseHandler.__init__( - self, server_addr, peer, path, options, stats_callback) + super().__init__(server_addr, peer, path, options, stats_callback) def get_response_data(self): return FileResponseData(os.path.join(self._root, self._path)) @@ -172,8 +171,7 @@ class StaticServer(BaseServer): handler_stats_callback, server_stats_callback=None): self._root = root self._handler_stats_callback = handler_stats_callback - BaseServer.__init__( - self, address, port, retries, timeout, server_stats_callback) + super().__init__(address, port, retries, timeout, server_stats_callback) def get_handler(self, server_addr, peer, path, options): return StaticHandler( diff --git a/examples/server.py b/examples/server.py index 9dc6758..7cd2757 100644 --- a/examples/server.py +++ b/examples/server.py @@ -61,9 +61,7 @@ def print_server_stats(stats): class StaticHandler(BaseHandler): def __init__(self, server_addr, peer, path, options, root, stats_callback): self._root = root - super(self.__class__, self).__init__( - server_addr, peer, path, options, stats_callback - ) + super().__init__(server_addr, peer, path, options, stats_callback) def get_response_data(self): return FileResponseData(os.path.join(self._root, self._path)) @@ -82,9 +80,7 @@ def __init__( ): self._root = root self._handler_stats_callback = handler_stats_callback - super(self.__class__, self).__init__( - address, port, retries, timeout, server_stats_callback - ) + super().__init__(address, port, retries, timeout, server_stats_callback) def get_handler(self, server_addr, peer, path, options): return StaticHandler( diff --git a/fbtftp/__init__.py b/fbtftp/__init__.py index 7c8b872..7e4cf67 100644 --- a/fbtftp/__init__.py +++ b/fbtftp/__init__.py @@ -9,4 +9,4 @@ from .base_handler import BaseHandler, ResponseData, SessionStats from .base_server import BaseServer -__all__ = [BaseHandler, BaseServer, ResponseData, SessionStats] +__all__ = ['BaseHandler', 'BaseServer', 'ResponseData', 'SessionStats'] diff --git a/fbtftp/base_handler.py b/fbtftp/base_handler.py index 94d3886..bb967cb 100644 --- a/fbtftp/base_handler.py +++ b/fbtftp/base_handler.py @@ -19,8 +19,8 @@ from .netascii import NetasciiReader -class ResponseData(object): - """A base class reprenting a file-like object""" +class ResponseData: + """A base class representing a file-like object""" def read(self, n): raise NotImplementedError() @@ -52,7 +52,7 @@ def close(self): pass -class SessionStats(object): +class SessionStats: """ SessionStats represents a digest of what happened during a session. Data inside the object gets populated at the end of a session. @@ -149,7 +149,7 @@ def __init__(self, server_addr, peer, path, options, stats_callback): self._listener = socket.socket(family, socket.SOCK_DGRAM) self._listener.bind((str(server_addr[0]), 0)) - multiprocessing.Process.__init__(self) + super().__init__() def _on_close(self): """ diff --git a/fbtftp/base_server.py b/fbtftp/base_server.py index bcdbdad..6897286 100644 --- a/fbtftp/base_server.py +++ b/fbtftp/base_server.py @@ -6,11 +6,6 @@ # LICENSE file in the root directory of this source tree. An additional grant # of patent rights can be found in the PATENTS file in the same directory. -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - import collections import logging import select @@ -23,7 +18,7 @@ from . import constants -class ServerStats(object): +class ServerStats: def __init__(self, server_addr=None, interval=None): """ `ServerStats` represents a digest of what happened during the server's @@ -156,7 +151,7 @@ def duration(self): return time.time() - self.start_time -class BaseServer(object): +class BaseServer: def __init__( self, address, @@ -296,7 +291,7 @@ def on_new_data(self): data, peer = self._listener.recvfrom(constants.DEFAULT_BLKSIZE) code = struct.unpack('!H', data[:2])[0] if code != constants.OPCODE_RRQ: - logging.warn( + logging.warning( 'unexpected TFTP opcode %d, expected %d' % (code, constants.OPCODE_RRQ) ) diff --git a/fbtftp/netascii.py b/fbtftp/netascii.py index ca083b7..65175f3 100644 --- a/fbtftp/netascii.py +++ b/fbtftp/netascii.py @@ -9,7 +9,7 @@ import io -class NetasciiReader(object): +class NetasciiReader: """ NetasciiReader encodes data coming from a reader into NetASCII. diff --git a/setup.py b/setup.py index 8ff027f..43b395e 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,3 @@ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from codecs import open from os import path from setuptools import setup, find_packages from setuptools.command.test import test as TestCommand diff --git a/tests/base_handler_test.py b/tests/base_handler_test.py index 6f5ac35..17caa5b 100644 --- a/tests/base_handler_test.py +++ b/tests/base_handler_test.py @@ -16,7 +16,7 @@ from fbtftp import constants -class MockSocketListener(object): +class MockSocketListener: def __init__(self, network_queue, peer): self._network_queue = network_queue self._peer = peer @@ -36,9 +36,7 @@ def __init__( network_queue=[] ): self.response = StringResponseData("foo") - super(self.__class__, self).__init__( - server_addr, peer, path, options, stats_callback - ) + super().__init__(server_addr, peer, path, options, stats_callback) self._listener = MockSocketListener(network_queue, peer) self._listener.sendto = Mock() self._listener.close = Mock() @@ -362,7 +360,7 @@ def testHandleTimeout(self): self.assertTrue(self.handler._should_stop) def testNextBlock(self): - class MockResponse(object): + class MockResponse: def __init__(self, dataiter): self._dataiter = dataiter diff --git a/tests/base_server_test.py b/tests/base_server_test.py index a440cb8..b7fd616 100644 --- a/tests/base_server_test.py +++ b/tests/base_server_test.py @@ -15,7 +15,7 @@ SELECT_EPOLLIN = 1 -class MockSocketListener(object): +class MockSocketListener: def __init__(self, network_queue): self._network_queue = network_queue @@ -39,9 +39,8 @@ def __init__( self, address, port, retries, timeout, root, stats_callback, stats_interval, network_queue ): - super(self.__class__, self).__init__( - address, port, retries, timeout, stats_callback, - stats_interval + super().__init__( + address, port, retries, timeout, stats_callback, stats_interval ) self._root = root # mock the network diff --git a/tests/integration_test.py b/tests/integration_test.py index 9224774..f43694e 100644 --- a/tests/integration_test.py +++ b/tests/integration_test.py @@ -36,9 +36,7 @@ def close(self): class StaticHandler(BaseHandler): def __init__(self, server_addr, peer, path, options, root, stats_callback): self._root = root - super(self.__class__, self).__init__( - server_addr, peer, path, options, stats_callback - ) + super().__init__(server_addr, peer, path, options, stats_callback) def get_response_data(self): return FileResponseData(os.path.join(self._root, self._path)) @@ -48,7 +46,7 @@ class StaticServer(BaseServer): def __init__(self, address, port, retries, timeout, root, stats_callback): self._root = root self._stats_callback = stats_callback - super(self.__class__, self).__init__(address, port, retries, timeout) + super().__init__(address, port, retries, timeout) def get_handler(self, server_addr, peer, path, options): return StaticHandler( @@ -79,16 +77,14 @@ def busyboxClient(filename, blksize=1400, port=1069): return (stdout, stderr, p.returncode) +@unittest.skipUnless( + find_executable('busybox'), + 'busybox binary not present, install it if you want to run ' + 'integration tests' +) class integrationTest(unittest.TestCase): def setUp(self): logging.getLogger().setLevel(logging.DEBUG) - # search for busybox on PATH, if not present we skip this integration - # test. - if not find_executable('busybox'): - self.skipTest( - 'busybox binary not present, install it if you want to run ' - 'integration tests' - ) self.tmpdirname = tempfile.TemporaryDirectory() logging.info("Created temporary directory %s" % self.tmpdirname) diff --git a/tests/malformed_request_test.py b/tests/malformed_request_test.py index 5e3446e..195c32c 100644 --- a/tests/malformed_request_test.py +++ b/tests/malformed_request_test.py @@ -32,7 +32,7 @@ ) -class MockSocketListener(object): +class MockSocketListener: def __init__(self, network_queue): self._network_queue = network_queue @@ -50,7 +50,7 @@ def __init__( self, address, port, retries, timeout, root, stats_callback, network_queue ): - super(self.__class__, self).__init__(address, port, retries, timeout) + super().__init__(address, port, retries, timeout) self._root = root # mock the network self._listener = MockSocketListener(network_queue)