[PATCH] Remove py<3.4 import compatibility

Michał Górny <[email protected]>
Newsgroups gmane.linux.gentoo.portage.devel
Message-ID <[email protected]>
---
 bin/binhost-snapshot                          |  5 +--
 lib/_emerge/BinpkgFetcher.py                  |  5 +--
 lib/_emerge/BlockerCache.py                   |  6 +---
 lib/portage/cache/anydbm.py                   | 31 +++++-----------
 lib/portage/dbapi/bintree.py                  |  5 +--
 lib/portage/dbapi/porttree.py                 |  6 +---
 lib/portage/dbapi/vartree.py                  |  6 +---
 lib/portage/getbinpkg.py                      | 36 +++++--------------
 lib/portage/glsa.py                           |  5 +--
 lib/portage/package/ebuild/fetch.py           | 12 ++-----
 .../asyncio/test_policy_wrapper_recursion.py  |  8 +----
 lib/portage/tests/util/futures/test_retry.py  |  5 +--
 lib/portage/tests/util/test_socks5.py         | 11 ++----
 lib/portage/tests/util/test_xattr.py          | 14 +-------
 lib/portage/util/__init__.py                  |  5 +--
 .../util/_dyn_libs/PreservedLibsRegistry.py   |  6 +---
 lib/portage/util/_eventloop/EventLoop.py      | 10 ++----
 .../util/_eventloop/asyncio_event_loop.py     |  9 ++---
 lib/portage/util/_urlopen.py                  | 12 ++-----
 lib/portage/util/futures/_asyncio/__init__.py |  7 ++--
 lib/portage/util/futures/_asyncio/tasks.py    |  7 +---
 lib/portage/util/futures/events.py            | 12 +++----
 lib/portage/util/futures/futures.py           | 36 ++++---------------
 lib/portage/util/futures/transports.py        |  5 +--
 lib/portage/util/futures/unix_events.py       | 21 ++++-------
 25 files changed, 61 insertions(+), 224 deletions(-)

diff --git a/bin/binhost-snapshot b/bin/binhost-snapshot
index d677e7568..afab23592 100755
--- a/bin/binhost-snapshot
+++ b/bin/binhost-snapshot
@@ -8,10 +8,7 @@ import os
 import sys
 import textwrap
 
-try:
-	from urllib.parse import urlparse
-except ImportError:
-	from urlparse import urlparse
+from urllib.parse import urlparse
 
 from os import path as osp
 if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
diff --git a/lib/_emerge/BinpkgFetcher.py b/lib/_emerge/BinpkgFetcher.py
index c26c9bd6b..01c9bc1e6 100644
--- a/lib/_emerge/BinpkgFetcher.py
+++ b/lib/_emerge/BinpkgFetcher.py
@@ -6,10 +6,7 @@ import functools
 from _emerge.AsynchronousLock import AsynchronousLock
 from _emerge.CompositeTask import CompositeTask
 from _emerge.SpawnProcess import SpawnProcess
-try:
-	from urllib.parse import urlparse as urllib_parse_urlparse
-except ImportError:
-	from urlparse import urlparse as urllib_parse_urlparse
+from urllib.parse import urlparse as urllib_parse_urlparse
 import stat
 import sys
 import portage
diff --git a/lib/_emerge/BlockerCache.py b/lib/_emerge/BlockerCache.py
index d0beb46ac..5f8fb360e 100644
--- a/lib/_emerge/BlockerCache.py
+++ b/lib/_emerge/BlockerCache.py
@@ -7,11 +7,7 @@ from portage.util import writemsg
 from portage.data import secpass
 import portage
 from portage import os
-
-try:
-	import cPickle as pickle
-except ImportError:
-	import pickle
+import pickle
 
 class BlockerCache(portage.cache.mappings.MutableMapping):
 	"""This caches blockers of installed packages so that dep_check does not
diff --git a/lib/portage/cache/anydbm.py b/lib/portage/cache/anydbm.py
index 121a4eaf2..c02d85b4f 100644
--- a/lib/portage/cache/anydbm.py
+++ b/lib/portage/cache/anydbm.py
@@ -4,29 +4,14 @@
 
 from __future__ import absolute_import
 
-try:
-	import anydbm as anydbm_module
-except ImportError:
-	# python 3.x
-	import dbm as anydbm_module
+import dbm
 
 try:
 	import dbm.gnu as gdbm
 except ImportError:
-	try:
-		import gdbm
-	except ImportError:
-		gdbm = None
+	gdbm = None
 
-try:
-	from dbm import whichdb
-except ImportError:
-	from whichdb import whichdb
-
-try:
-	import cPickle as pickle
-except ImportError:
-	import pickle
+import pickle
 from portage import _unicode_encode
 from portage import os
 import sys
@@ -53,15 +38,15 @@ class database(fs_template.FsBased):
 		self._db_path = os.path.join(self.location, fs_template.gen_label(self.location, self.label)+default_db)
 		self.__db = None
 		mode = "w"
-		if whichdb(self._db_path) in ("dbm.gnu", "gdbm"):
+		if dbm.whichdb(self._db_path) in ("dbm.gnu", "gdbm"):
 			# Allow multiple concurrent writers (see bug #53607).
 			mode += "u"
 		try:
 			# dbm.open() will not work with bytes in python-3.1:
 			#   TypeError: can't concat bytes to str
-			self.__db = anydbm_module.open(self._db_path,
+			self.__db = dbm.open(self._db_path,
 				mode, self._perms)
-		except anydbm_module.error:
+		except dbm.error:
 			# XXX handle this at some point
 			try:
 				self._ensure_dirs()
@@ -75,14 +60,14 @@ class database(fs_template.FsBased):
 					# dbm.open() will not work with bytes in python-3.1:
 					#   TypeError: can't concat bytes to str
 					if gdbm is None:
-						self.__db = anydbm_module.open(self._db_path,
+						self.__db = dbm.open(self._db_path,
 							"c", self._perms)
 					else:
 						# Prefer gdbm type if available, since it allows
 						# multiple concurrent writers (see bug #53607).
 						self.__db = gdbm.open(self._db_path,
 							"cu", self._perms)
-			except anydbm_module.error as e:
+			except dbm.error as e:
 				raise cache_errors.InitializationError(self.__class__, e)
 		self._ensure_access(self._db_path)
 
diff --git a/lib/portage/dbapi/bintree.py b/lib/portage/dbapi/bintree.py
index 49e17721b..f6defbc30 100644
--- a/lib/portage/dbapi/bintree.py
+++ b/lib/portage/dbapi/bintree.py
@@ -52,10 +52,7 @@ import traceback
 import warnings
 from gzip import GzipFile
 from itertools import chain
-try:
-	from urllib.parse import urlparse
-except ImportError:
-	from urlparse import urlparse
+from urllib.parse import urlparse
 
 
 class UseCachedCopyOfRemoteIndex(Exception):
diff --git a/lib/portage/dbapi/porttree.py b/lib/portage/dbapi/porttree.py
index 4916114cd..d220292a8 100644
--- a/lib/portage/dbapi/porttree.py
+++ b/lib/portage/dbapi/porttree.py
@@ -47,11 +47,7 @@ import collections
 import functools
 
 from collections import OrderedDict
-
-try:
-	from urllib.parse import urlparse
-except ImportError:
-	from urlparse import urlparse
+from urllib.parse import urlparse
 
 
 def close_portdbapi_caches():
diff --git a/lib/portage/dbapi/vartree.py b/lib/portage/dbapi/vartree.py
index 2e29b25e5..bb2dd1424 100644
--- a/lib/portage/dbapi/vartree.py
+++ b/lib/portage/dbapi/vartree.py
@@ -92,6 +92,7 @@ from itertools import chain
 import logging
 import os as _os
 import operator
+import pickle
 import platform
 import pwd
 import re
@@ -102,11 +103,6 @@ import textwrap
 import time
 import warnings
 
-try:
-	import cPickle as pickle
-except ImportError:
-	import pickle
-
 
 class vardbapi(dbapi):
 
diff --git a/lib/portage/getbinpkg.py b/lib/portage/getbinpkg.py
index f8c1dfd7c..03522689b 100644
--- a/lib/portage/getbinpkg.py
+++ b/lib/portage/getbinpkg.py
@@ -13,6 +13,7 @@ from portage import _unicode_encode
 from portage.package.ebuild.fetch import _hide_url_passwd
 from _emerge.Package import _all_metadata_keys
 
+import pickle
 import sys
 import socket
 import time
@@ -22,20 +23,8 @@ import warnings
 
 _all_errors = [NotImplementedError, ValueError, socket.error]
 
-try:
-	from html.parser import HTMLParser as html_parser_HTMLParser
-except ImportError:
-	from HTMLParser import HTMLParser as html_parser_HTMLParser
-
-try:
-	from urllib.parse import unquote as urllib_parse_unquote
-except ImportError:
-	from urllib2 import unquote as urllib_parse_unquote
-
-try:
-	import cPickle as pickle
-except ImportError:
-	import pickle
+from html.parser import HTMLParser as html_parser_HTMLParser
+from urllib.parse import unquote as urllib_parse_unquote
 
 try:
 	import ftplib
@@ -45,16 +34,10 @@ else:
 	_all_errors.extend(ftplib.all_errors)
 
 try:
-	try:
-		from http.client import HTTPConnection as http_client_HTTPConnection
-		from http.client import BadStatusLine as http_client_BadStatusLine
-		from http.client import ResponseNotReady as http_client_ResponseNotReady
-		from http.client import error as http_client_error
-	except ImportError:
-		from httplib import HTTPConnection as http_client_HTTPConnection
-		from httplib import BadStatusLine as http_client_BadStatusLine
-		from httplib import ResponseNotReady as http_client_ResponseNotReady
-		from httplib import error as http_client_error
+	from http.client import HTTPConnection as http_client_HTTPConnection
+	from http.client import BadStatusLine as http_client_BadStatusLine
+	from http.client import ResponseNotReady as http_client_ResponseNotReady
+	from http.client import error as http_client_error
 except ImportError as e:
 	sys.stderr.write(colorize("BAD", "!!! CANNOT IMPORT HTTP.CLIENT: ") + str(e) + "\n")
 else:
@@ -188,10 +171,7 @@ def create_conn(baseurl, conn=None):
 			# http.client ImportError handler (like during stage1 -> stage2
 			# builds where USE=ssl is disabled for python).
 			try:
-				try:
-					from http.client import HTTPSConnection as http_client_HTTPSConnection
-				except ImportError:
-					from httplib import HTTPSConnection as http_client_HTTPSConnection
+				from http.client import HTTPSConnection as http_client_HTTPSConnection
 			except ImportError:
 				raise NotImplementedError(
 					_("python must have ssl enabled for https support"))
diff --git a/lib/portage/glsa.py b/lib/portage/glsa.py
index 11420b46c..a6f9fc833 100644
--- a/lib/portage/glsa.py
+++ b/lib/portage/glsa.py
@@ -5,10 +5,7 @@ from __future__ import absolute_import
 
 import io
 import sys
-try:
-	from urllib.request import urlopen as urllib_request_urlopen
-except ImportError:
-	from urllib import urlopen as urllib_request_urlopen
+from urllib.request import urlopen as urllib_request_urlopen
 import codecs
 import re
 import operator
diff --git a/lib/portage/package/ebuild/fetch.py b/lib/portage/package/ebuild/fetch.py
index 9682fea89..e384af868 100644
--- a/lib/portage/package/ebuild/fetch.py
+++ b/lib/portage/package/ebuild/fetch.py
@@ -20,16 +20,8 @@ import tempfile
 import time
 
 from collections import OrderedDict
-
-try:
-	from urllib.parse import urlparse
-except ImportError:
-	from urlparse import urlparse
-
-try:
-	from urllib.parse import quote as urlquote
-except ImportError:
-	from urllib import quote as urlquote
+from urllib.parse import urlparse
+from urllib.parse import quote as urlquote
 
 import portage
 portage.proxy.lazyimport.lazyimport(globals(),
diff --git a/lib/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py b/lib/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py
index d3cd94b35..900bb5115 100644
--- a/lib/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py
+++ b/lib/portage/tests/util/futures/asyncio/test_policy_wrapper_recursion.py
@@ -1,10 +1,7 @@
 # Copyright 2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-try:
-	import asyncio
-except ImportError:
-	asyncio = None
+import asyncio
 
 from portage.tests import TestCase
 from portage.util.futures.unix_events import DefaultEventLoopPolicy
@@ -12,9 +9,6 @@ from portage.util.futures.unix_events import DefaultEventLoopPolicy
 
 class PolicyWrapperRecursionTestCase(TestCase):
 	def testPolicyWrapperRecursion(self):
-		if asyncio is None:
-			self.skipTest('asyncio is not available')
-
 		initial_policy = asyncio.get_event_loop_policy()
 		if not isinstance(initial_policy, DefaultEventLoopPolicy):
 			asyncio.set_event_loop_policy(DefaultEventLoopPolicy())
diff --git a/lib/portage/tests/util/futures/test_retry.py b/lib/portage/tests/util/futures/test_retry.py
index 94ede2e17..68c9969ac 100644
--- a/lib/portage/tests/util/futures/test_retry.py
+++ b/lib/portage/tests/util/futures/test_retry.py
@@ -1,10 +1,7 @@
 # Copyright 2018-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
-try:
-	from concurrent.futures import ThreadPoolExecutor
-except ImportError:
-	ThreadPoolExecutor = None
+from concurrent.futures import ThreadPoolExecutor
 
 try:
 	import threading
diff --git a/lib/portage/tests/util/test_socks5.py b/lib/portage/tests/util/test_socks5.py
index f7b893996..e567006ea 100644
--- a/lib/portage/tests/util/test_socks5.py
+++ b/lib/portage/tests/util/test_socks5.py
@@ -16,15 +16,8 @@ from portage.util._eventloop.global_event_loop import global_event_loop
 from portage.util import socks5
 from portage.const import PORTAGE_BIN_PATH
 
-try:
-	from http.server import BaseHTTPRequestHandler, HTTPServer
-except ImportError:
-	from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
-
-try:
-	from urllib.request import urlopen
-except ImportError:
-	from urllib import urlopen
+from http.server import BaseHTTPRequestHandler, HTTPServer
+from urllib.request import urlopen
 
 
 class _Handler(BaseHTTPRequestHandler):
diff --git a/lib/portage/tests/util/test_xattr.py b/lib/portage/tests/util/test_xattr.py
index 2e2564a6e..8e8c2a3d6 100644
--- a/lib/portage/tests/util/test_xattr.py
+++ b/lib/portage/tests/util/test_xattr.py
@@ -5,16 +5,7 @@
 
 from __future__ import print_function
 
-try:
-	# Try python-3.3 module first.
-	# pylint: disable=no-name-in-module
-	from unittest import mock
-except ImportError:
-	try:
-		# Try standalone module.
-		import mock
-	except ImportError:
-		mock = None
+from unittest import mock
 
 import subprocess
 
@@ -50,9 +41,6 @@ class SystemCommandsTest(TestCase):
 	))
 
 	def _setUp(self):
-		if mock is None:
-			self.skipTest('need mock for testing')
-
 		return _XattrSystemCommands
 
 	def _testGetBasic(self):
diff --git a/lib/portage/util/__init__.py b/lib/portage/util/__init__.py
index e390874f2..59f1518d6 100644
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@ -14,10 +14,7 @@ __all__ = ['apply_permissions', 'apply_recursive_permissions',
 from copy import deepcopy
 import errno
 import io
-try:
-	from itertools import chain, filterfalse
-except ImportError:
-	from itertools import chain, ifilterfalse as filterfalse
+from itertools import chain, filterfalse
 import logging
 import re
 import shlex
diff --git a/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
index cb38c513c..ec8fdff5d 100644
--- a/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
+++ b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
@@ -4,14 +4,10 @@
 import errno
 import json
 import logging
+import pickle
 import stat
 import sys
 
-try:
-	import cPickle as pickle
-except ImportError:
-	import pickle
-
 from portage import abssymlink
 from portage import os
 from portage import _encodings
diff --git a/lib/portage/util/_eventloop/EventLoop.py b/lib/portage/util/_eventloop/EventLoop.py
index f870190d9..7dcc7a231 100644
--- a/lib/portage/util/_eventloop/EventLoop.py
+++ b/lib/portage/util/_eventloop/EventLoop.py
@@ -14,10 +14,7 @@ import sys
 import time
 import traceback
 
-try:
-	import asyncio as _real_asyncio
-except ImportError:
-	_real_asyncio = None
+import asyncio as _real_asyncio
 
 try:
 	import fcntl
@@ -962,9 +959,8 @@ class EventLoop(object):
 				executor = ForkExecutor(loop=self)
 				self._default_executor = executor
 		future = executor.submit(func, *args)
-		if _real_asyncio is not None:
-			future = _real_asyncio.wrap_future(future,
-				loop=self._asyncio_wrapper)
+		future = _real_asyncio.wrap_future(future,
+			loop=self._asyncio_wrapper)
 		return future
 
 	def is_running(self):
diff --git a/lib/portage/util/_eventloop/asyncio_event_loop.py b/lib/portage/util/_eventloop/asyncio_event_loop.py
index ce7e06923..605e7243b 100644
--- a/lib/portage/util/_eventloop/asyncio_event_loop.py
+++ b/lib/portage/util/_eventloop/asyncio_event_loop.py
@@ -4,13 +4,8 @@
 import os
 import signal
 
-try:
-	import asyncio as _real_asyncio
-	from asyncio.events import AbstractEventLoop as _AbstractEventLoop
-except ImportError:
-	# Allow ImportModulesTestCase to succeed.
-	_real_asyncio = None
-	_AbstractEventLoop = object
+import asyncio as _real_asyncio
+from asyncio.events import AbstractEventLoop as _AbstractEventLoop
 
 import portage
 
diff --git a/lib/portage/util/_urlopen.py b/lib/portage/util/_urlopen.py
index c74fb2691..de0363533 100644
--- a/lib/portage/util/_urlopen.py
+++ b/lib/portage/util/_urlopen.py
@@ -6,15 +6,9 @@ import sys
 from datetime import datetime
 from time import mktime
 from email.utils import formatdate, parsedate
-
-try:
-	from urllib.request import urlopen as _urlopen
-	import urllib.parse as urllib_parse
-	import urllib.request as urllib_request
-except ImportError:
-	from urllib import urlopen as _urlopen
-	import urlparse as urllib_parse
-	import urllib2 as urllib_request
+from urllib.request import urlopen as _urlopen
+import urllib.parse as urllib_parse
+import urllib.request as urllib_request
 
 
 # to account for the difference between TIMESTAMP of the index' contents
diff --git a/lib/portage/util/futures/_asyncio/__init__.py b/lib/portage/util/futures/_asyncio/__init__.py
index 04034911d..73f4881be 100644
--- a/lib/portage/util/futures/_asyncio/__init__.py
+++ b/lib/portage/util/futures/_asyncio/__init__.py
@@ -23,10 +23,7 @@ __all__ = (
 import subprocess
 import sys
 
-try:
-	import asyncio as _real_asyncio
-except ImportError:
-	_real_asyncio = None
+import asyncio as _real_asyncio
 
 try:
 	import threading
@@ -159,7 +156,7 @@ def iscoroutinefunction(func):
 	"""
 	if _compat_coroutine._iscoroutinefunction(func):
 		return True
-	elif _real_asyncio is not None and _real_asyncio.iscoroutinefunction(func):
+	elif _real_asyncio.iscoroutinefunction(func):
 		return True
 	return False
 
diff --git a/lib/portage/util/futures/_asyncio/tasks.py b/lib/portage/util/futures/_asyncio/tasks.py
index b20765b7a..6d4e16223 100644
--- a/lib/portage/util/futures/_asyncio/tasks.py
+++ b/lib/portage/util/futures/_asyncio/tasks.py
@@ -8,12 +8,7 @@ ___all___ = (
 	'wait',
 )
 
-try:
-	from asyncio import ALL_COMPLETED, FIRST_COMPLETED, FIRST_EXCEPTION
-except ImportError:
-	ALL_COMPLETED = 'ALL_COMPLETED'
-	FIRST_COMPLETED ='FIRST_COMPLETED'
-	FIRST_EXCEPTION = 'FIRST_EXCEPTION'
+from asyncio import ALL_COMPLETED, FIRST_COMPLETED, FIRST_EXCEPTION
 
 import portage
 portage.proxy.lazyimport.lazyimport(globals(),
diff --git a/lib/portage/util/futures/events.py b/lib/portage/util/futures/events.py
index b772bc242..fb1585b32 100644
--- a/lib/portage/util/futures/events.py
+++ b/lib/portage/util/futures/events.py
@@ -9,14 +9,10 @@ __all__ = (
 import socket
 import subprocess
 
-try:
-	from asyncio.events import (
-		AbstractEventLoop as _AbstractEventLoop,
-		AbstractEventLoopPolicy as _AbstractEventLoopPolicy,
-	)
-except ImportError:
-	_AbstractEventLoop = object
-	_AbstractEventLoopPolicy = object
+from asyncio.events import (
+	AbstractEventLoop as _AbstractEventLoop,
+	AbstractEventLoopPolicy as _AbstractEventLoopPolicy,
+)
 
 
 class AbstractEventLoopPolicy(_AbstractEventLoopPolicy):
diff --git a/lib/portage/util/futures/futures.py b/lib/portage/util/futures/futures.py
index dffb9e47f..5a88f121e 100644
--- a/lib/portage/util/futures/futures.py
+++ b/lib/portage/util/futures/futures.py
@@ -12,32 +12,12 @@ __all__ = (
 	'TimeoutError',
 )
 
-try:
-	from asyncio import (
-		CancelledError,
-		Future,
-		InvalidStateError,
-		TimeoutError,
-	)
-except ImportError:
-
-	from portage.exception import PortageException
-
-	class Error(PortageException):
-		pass
-
-	class CancelledError(Error):
-		def __init__(self):
-			Error.__init__(self, "cancelled")
-
-	class TimeoutError(Error):
-		def __init__(self):
-			Error.__init__(self, "timed out")
-
-	class InvalidStateError(Error):
-		pass
-
-	Future = None
+from asyncio import (
+	CancelledError,
+	Future,
+	InvalidStateError,
+	TimeoutError,
+)
 
 import portage
 portage.proxy.lazyimport.lazyimport(globals(),
@@ -191,7 +171,3 @@ class _EventLoopFuture(object):
 		self._exception = exception
 		self._state = _FINISHED
 		self._schedule_callbacks()
-
-
-if Future is None:
-	Future = _EventLoopFuture
diff --git a/lib/portage/util/futures/transports.py b/lib/portage/util/futures/transports.py
index 60ea93073..016ecbef8 100644
--- a/lib/portage/util/futures/transports.py
+++ b/lib/portage/util/futures/transports.py
@@ -1,10 +1,7 @@
 # Copyright 2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-try:
-	from asyncio.transports import Transport as _Transport
-except ImportError:
-	_Transport = object
+from asyncio.transports import Transport as _Transport
 
 
 class _FlowControlMixin(_Transport):
diff --git a/lib/portage/util/futures/unix_events.py b/lib/portage/util/futures/unix_events.py
index 4adf021ce..6cd0848f7 100644
--- a/lib/portage/util/futures/unix_events.py
+++ b/lib/portage/util/futures/unix_events.py
@@ -6,20 +6,13 @@ __all__ = (
 	'DefaultEventLoopPolicy',
 )
 
-try:
-	import asyncio as _real_asyncio
-	from asyncio.base_subprocess import BaseSubprocessTransport as _BaseSubprocessTransport
-	from asyncio.unix_events import AbstractChildWatcher as _AbstractChildWatcher
-	from asyncio.transports import (
-		ReadTransport as _ReadTransport,
-		WriteTransport as _WriteTransport,
-	)
-except ImportError:
-	_real_asyncio = None
-	_AbstractChildWatcher = object
-	_BaseSubprocessTransport = object
-	_ReadTransport = object
-	_WriteTransport = object
+import asyncio as _real_asyncio
+from asyncio.base_subprocess import BaseSubprocessTransport as _BaseSubprocessTransport
+from asyncio.unix_events import AbstractChildWatcher as _AbstractChildWatcher
+from asyncio.transports import (
+	ReadTransport as _ReadTransport,
+	WriteTransport as _WriteTransport,
+)
 
 import errno
 import fcntl
-- 
2.27.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.