diff --git a/2.3.1.tar.gz b/2.3.1.tar.gz deleted file mode 100644 index a58ad73..0000000 --- a/2.3.1.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bb9b8b07a080652254ef01891cc1c8e506a35f5b21214ef7073a55fa10ecdfd6 -size 91141 diff --git a/3.0.1.tar.gz b/3.0.1.tar.gz new file mode 100644 index 0000000..635e88b --- /dev/null +++ b/3.0.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dff1dfe7e7cc16428053dd2cd9895623e97f733ce1ec0a9c1c21557821146cb3 +size 93611 diff --git a/python-IMAPClient-no-python2.patch b/python-IMAPClient-no-python2.patch deleted file mode 100644 index 942fea4..0000000 --- a/python-IMAPClient-no-python2.patch +++ /dev/null @@ -1,1336 +0,0 @@ -Index: imapclient-2.3.1/.github/workflows/main.yml -=================================================================== ---- imapclient-2.3.1.orig/.github/workflows/main.yml -+++ imapclient-2.3.1/.github/workflows/main.yml -@@ -15,14 +15,12 @@ jobs: - fail-fast: false - matrix: - python-version: -- - "2.7" - - "3.4" - - "3.5" - - "3.6" - - "3.7" - - "3.8" - - "3.9" -- - "pypy2" - - "pypy3" - steps: - - uses: actions/checkout@v2 -Index: imapclient-2.3.1/doc/src/concepts.rst -=================================================================== ---- imapclient-2.3.1.orig/doc/src/concepts.rst -+++ imapclient-2.3.1/doc/src/concepts.rst -@@ -102,13 +102,6 @@ When constructing a custom context it is - the default context, created by the ``ssl`` module, and modify it to - suit your needs. - --.. warning:: -- -- Users of Python 2.7.0 - 2.7.8 can use TLS but cannot configure -- the settings via an ``ssl.SSLContext``. These Python versions are -- also not capable of proper certification verification. It is highly -- encouraged to upgrade to a more recent version of Python. -- - The following example shows how to to disable certification - verification and certificate host name checks if required. - -Index: imapclient-2.3.1/doc/src/index.rst -=================================================================== ---- imapclient-2.3.1.orig/doc/src/index.rst -+++ imapclient-2.3.1/doc/src/index.rst -@@ -30,7 +30,7 @@ explains IMAP in detail. Other RFCs also - to the base protocol. These are referred to in the documentation below - where relevant. - --Python versions 2.7 and 3.4 through 3.9 are officially supported. -+Python versions 3.4 through 3.9 are officially supported. - - Getting Started - --------------- -Index: imapclient-2.3.1/imapclient/__init__.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/__init__.py -+++ imapclient-2.3.1/imapclient/__init__.py -@@ -5,8 +5,6 @@ - # version_info provides the version number in programmer friendly way. - # The 4th part will be either alpha, beta or final. - --from __future__ import unicode_literals -- - from .imapclient import * - from .response_parser import * - from .tls import * -Index: imapclient-2.3.1/imapclient/config.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/config.py -+++ imapclient-2.3.1/imapclient/config.py -@@ -2,16 +2,13 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - import json - from os import environ, path - import ssl - --from six import iteritems --from six.moves.configparser import SafeConfigParser, NoOptionError --from six.moves.urllib.request import urlopen --from six.moves.urllib.parse import urlencode -+import configparser -+import urllib.parse -+import urllib.request - - import imapclient - -@@ -45,7 +42,7 @@ def parse_config_file(filename): - Used by livetest.py and interact.py - """ - -- parser = SafeConfigParser(get_string_config_defaults()) -+ parser = configparser.SafeConfigParser(get_string_config_defaults()) - with open(filename, "r") as fh: - parser.readfp(fh) - -@@ -62,7 +59,7 @@ def parse_config_file(filename): - - def get_string_config_defaults(): - out = {} -- for k, v in iteritems(get_config_defaults()): -+ for k, v in get_config_defaults().items(): - if v is True: - v = "true" - elif v is False: -@@ -80,7 +77,7 @@ def _read_config_section(parser, section - def get_allowing_none(name, typefunc): - try: - v = parser.get(section, name) -- except NoOptionError: -+ except configparser.NoOptionError: - return None - if not v: - return None -@@ -133,7 +130,8 @@ def refresh_oauth2_token(hostname, clien - refresh_token=refresh_token.encode("ascii"), - grant_type=b"refresh_token", - ) -- response = urlopen(url, urlencode(post).encode("ascii")).read() -+ response = urllib.request.urlopen( -+ url, urllib.parse.urlencode(post).encode("ascii")).read() - return json.loads(response.decode("ascii"))["access_token"] - - -Index: imapclient-2.3.1/imapclient/datetime_util.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/datetime_util.py -+++ imapclient-2.3.1/imapclient/datetime_util.py -@@ -2,8 +2,6 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - import re - from datetime import datetime - from email.utils import parsedate_tz -Index: imapclient-2.3.1/imapclient/fixed_offset.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/fixed_offset.py -+++ imapclient-2.3.1/imapclient/fixed_offset.py -@@ -2,8 +2,6 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - import time - from datetime import tzinfo, timedelta - -Index: imapclient-2.3.1/imapclient/imap_utf7.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/imap_utf7.py -+++ imapclient-2.3.1/imapclient/imap_utf7.py -@@ -6,10 +6,8 @@ - # base64 encoding context), which is & in this modified UTF-7 convention, - # since + is considered as mainly used in mailbox names. - # Other variations and examples can be found in the RFC 3501, section 5.1.3. --from __future__ import unicode_literals - - import binascii --from six import binary_type, text_type, byte2int, iterbytes, unichr - - - def encode(s): -@@ -18,7 +16,7 @@ def encode(s): - Input is unicode; output is bytes (Python 3) or str (Python 2). If - non-unicode input is provided, the input is returned unchanged. - """ -- if not isinstance(s, text_type): -+ if not isinstance(s, str): - return s - - res = bytearray() -@@ -56,8 +54,8 @@ def encode(s): - return bytes(res) - - --AMPERSAND_ORD = byte2int(b"&") --DASH_ORD = byte2int(b"-") -+AMPERSAND_ORD = ord("&") -+DASH_ORD = ord("-") - - - def decode(s): -@@ -67,13 +65,13 @@ def decode(s): - unicode. If non-bytes/str input is provided, the input is returned - unchanged. - """ -- if not isinstance(s, binary_type): -+ if not isinstance(s, bytes): - return s - - res = [] - # Store base64 substring that will be decoded once stepping on end shift character - b64_buffer = bytearray() -- for c in iterbytes(s): -+ for c in s: - # Shift character without anything in buffer -> starts storing base64 substring - if c == AMPERSAND_ORD and not b64_buffer: - b64_buffer.append(c) -@@ -90,7 +88,7 @@ def decode(s): - b64_buffer.append(c) - # No buffer initialized yet, should be an ASCII printable char - else: -- res.append(unichr(c)) -+ res.append(chr(c)) - - # Decode the remaining buffer if any - if b64_buffer: -Index: imapclient-2.3.1/imapclient/imapclient.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/imapclient.py -+++ imapclient-2.3.1/imapclient/imapclient.py -@@ -2,8 +2,6 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - import functools - import imaplib - import itertools -@@ -17,8 +15,6 @@ from datetime import datetime, date - from operator import itemgetter - from logging import LoggerAdapter, getLogger - --from six import moves, iteritems, text_type, integer_types, PY3, binary_type, iterbytes -- - from . import exceptions - from . import imap4 - from . import response_lexer -@@ -28,8 +24,6 @@ from .imap_utf7 import encode as encode_ - from .response_parser import parse_response, parse_message_list, parse_fetch_response - from .util import to_bytes, to_unicode, assert_imap_protocol, chunk - --xrange = moves.xrange -- - try: - from select import poll - -@@ -38,9 +32,6 @@ except: - # Fallback to select() on systems that don't support poll() - POLL_SUPPORT = False - --if PY3: -- long = int # long is just int in python3 -- - - logger = getLogger(__name__) - -@@ -744,11 +735,11 @@ class IMAPClient(object): - ret = [] - parsed = parse_response(folder_data) - for flags, delim, name in chunk(parsed, size=3): -- if isinstance(name, (int, long)): -+ if isinstance(name, int): - # Some IMAP implementations return integer folder names - # with quotes. These get parsed to ints so convert them - # back to strings. -- name = text_type(name) -+ name = str(name) - elif self.folder_encode: - name = decode_utf7(name) - -@@ -838,7 +829,7 @@ class IMAPClient(object): - if key == b"PERMANENTFLAGS": - out[key] = tuple(match.group("data").split()) - -- for key, value in iteritems(untagged): -+ for key, value in untagged.items(): - key = key.upper() - if key in (b"OK", b"PERMANENTFLAGS"): - continue # already handled above -@@ -1190,7 +1181,7 @@ class IMAPClient(object): - ] - args.extend(_normalise_search_criteria(criteria, charset)) - ids = self._raw_command_untagged(b"SORT", args, unpack=True) -- return [long(i) for i in ids.split()] -+ return [int(i) for i in ids.split()] - - def thread(self, algorithm="REFERENCES", criteria="ALL", charset="UTF-8"): - """Return a list of messages threads from the currently -@@ -1276,7 +1267,7 @@ class IMAPClient(object): - response = self.fetch(messages, [b"X-GM-LABELS"]) - response = self._filter_fetch_dict(response, b"X-GM-LABELS") - return { -- msg: utf7_decode_sequence(labels) for msg, labels in iteritems(response) -+ msg: utf7_decode_sequence(labels) for msg, labels in response.items() - } - - def add_gmail_labels(self, messages, labels, silent=False): -@@ -1405,10 +1396,7 @@ class IMAPClient(object): - """ - if msg_time: - time_val = '"%s"' % datetime_to_INTERNALDATE(msg_time) -- if PY3: -- time_val = to_unicode(time_val) -- else: -- time_val = to_bytes(time_val) -+ time_val = to_unicode(time_val) - else: - time_val = None - return self._command_and_check( -@@ -1528,7 +1516,7 @@ class IMAPClient(object): - data = self._command_and_check("getacl", self._normalise_folder(folder)) - parts = list(response_lexer.TokenSource(data)) - parts = parts[1:] # First item is folder name -- return [(parts[i], parts[i + 1]) for i in xrange(0, len(parts), 2)] -+ return [(parts[i], parts[i + 1]) for i in range(0, len(parts), 2)] - - @require_capability("ACL") - def setacl(self, folder, who, what): -@@ -1730,8 +1718,7 @@ class IMAPClient(object): - assert not kwargs, "unexpected keyword args: " + ", ".join(kwargs) - - if uid and self.use_uid: -- if PY3: -- command = to_unicode(command) # imaplib must die -+ command = to_unicode(command) # imaplib must die - typ, data = self._imap.uid(command, *args) - else: - meth = getattr(self._imap, to_unicode(command)) -@@ -1749,7 +1736,7 @@ class IMAPClient(object): - cmd, messages, self._normalise_labels(labels), b"X-GM-LABELS", silent=silent - ) - return ( -- {msg: utf7_decode_sequence(labels) for msg, labels in iteritems(response)} -+ {msg: utf7_decode_sequence(labels) for msg, labels in response.items()} - if response - else None - ) -@@ -1772,17 +1759,17 @@ class IMAPClient(object): - return self._filter_fetch_dict(parse_fetch_response(data), fetch_key) - - def _filter_fetch_dict(self, fetch_dict, key): -- return dict((msgid, data[key]) for msgid, data in iteritems(fetch_dict)) -+ return dict((msgid, data[key]) for msgid, data in fetch_dict.items()) - - def _normalise_folder(self, folder_name): -- if isinstance(folder_name, binary_type): -+ if isinstance(folder_name, bytes): - folder_name = folder_name.decode("ascii") - if self.folder_encode: - folder_name = encode_utf7(folder_name) - return _quote(folder_name) - - def _normalise_labels(self, labels): -- if isinstance(labels, (text_type, binary_type)): -+ if isinstance(labels, (str, bytes)): - labels = (labels,) - return [_quote(encode_utf7(l)) for l in labels] - -@@ -1796,7 +1783,7 @@ class IMAPClient(object): - - - def _quote(arg): -- if isinstance(arg, text_type): -+ if isinstance(arg, str): - arg = arg.replace("\\", "\\\\") - arg = arg.replace('"', '\\"') - q = '"' -@@ -1813,7 +1800,7 @@ def _normalise_search_criteria(criteria, - if not charset: - charset = "us-ascii" - -- if isinstance(criteria, (text_type, binary_type)): -+ if isinstance(criteria, (str, bytes)): - return [to_bytes(criteria, charset)] - - out = [] -@@ -1834,7 +1821,7 @@ def _normalise_search_criteria(criteria, - - - def _normalise_sort_criteria(criteria, charset=None): -- if isinstance(criteria, (text_type, binary_type)): -+ if isinstance(criteria, (str, bytes)): - criteria = [criteria] - return b"(" + b" ".join(to_bytes(item).upper() for item in criteria) + b")" - -@@ -1845,7 +1832,7 @@ class _literal(bytes): - pass - - --class _quoted(binary_type): -+class _quoted(bytes): - """ - This class holds a quoted bytes value which provides access to the - unquoted value via the *original* attribute. -@@ -1892,7 +1879,7 @@ def _join_and_paren(items): - - - def _normalise_text_list(items): -- if isinstance(items, (text_type, binary_type)): -+ if isinstance(items, (str, bytes)): - items = (items,) - return (to_unicode(c) for c in items) - -@@ -1901,14 +1888,14 @@ def join_message_ids(messages): - """Convert a sequence of messages ids or a single integer message id - into an id byte string for use with IMAP commands - """ -- if isinstance(messages, (text_type, binary_type, integer_types)): -+ if isinstance(messages, (str, bytes, int)): - messages = (to_bytes(messages),) - return b",".join(_maybe_int_to_bytes(m) for m in messages) - - - def _maybe_int_to_bytes(val): -- if isinstance(val, integer_types): -- return str(val).encode("us-ascii") if PY3 else str(val) -+ if isinstance(val, int): -+ return str(val).encode("us-ascii") - return to_bytes(val) - - -@@ -1943,7 +1930,7 @@ def as_triplets(items): - - - def _is8bit(data): -- return isinstance(data, _literal) or any(b > 127 for b in iterbytes(data)) -+ return isinstance(data, _literal) or any(b > 127 for b in data) - - - def _iter_with_last(items): -@@ -1964,7 +1951,7 @@ class _dict_bytes_normaliser(object): - self._d = d - - def iteritems(self): -- for key, value in iteritems(self._d): -+ for key, value in self._d.items(): - yield to_bytes(key), value - - # For Python 3 compatibility. -@@ -1998,7 +1985,7 @@ class _dict_bytes_normaliser(object): - - def _gen_keys(self, k): - yield k -- if isinstance(k, binary_type): -+ if isinstance(k, bytes): - yield to_unicode(k) - else: - yield to_bytes(k) -@@ -2037,7 +2024,7 @@ class IMAPlibLoggerAdapter(LoggerAdapter - def process(self, msg, kwargs): - # msg is usually unicode but see #367. Convert bytes to - # unicode if required. -- if isinstance(msg, binary_type): -+ if isinstance(msg, bytes): - msg = msg.decode("ascii", "ignore") - - for command in ("LOGIN", "AUTHENTICATE"): -Index: imapclient-2.3.1/imapclient/interact.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/interact.py -+++ imapclient-2.3.1/imapclient/interact.py -@@ -4,14 +4,9 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- -- - from getpass import getpass - from optparse import OptionParser - --from six import iteritems -- - from .config import parse_config_file, create_client_from_config, get_config_defaults - - -@@ -93,7 +88,7 @@ def command_line(): - # Scan through options, filling in defaults and prompting when - # a compulsory option wasn't provided. - compulsory_opts = ("host", "username", "password") -- for name, default_value in iteritems(get_config_defaults()): -+ for name, default_value in get_config_defaults().items(): - value = getattr(opts, name, default_value) - if name in compulsory_opts and value is None: - value = getpass(name + ": ") -Index: imapclient-2.3.1/imapclient/response_lexer.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/response_lexer.py -+++ imapclient-2.3.1/imapclient/response_lexer.py -@@ -9,19 +9,15 @@ Although Lexer does all the work, TokenS - external callers. - """ - --from __future__ import unicode_literals -- --import six -- - from .util import assert_imap_protocol - - __all__ = ["TokenSource"] - - CTRL_CHARS = frozenset(c for c in range(32)) - ALL_CHARS = frozenset(c for c in range(256)) --SPECIALS = frozenset(c for c in six.iterbytes(b' ()%"[')) -+SPECIALS = frozenset(c for c in b' ()%"[') - NON_SPECIALS = ALL_CHARS - SPECIALS - CTRL_CHARS --WHITESPACE = frozenset(c for c in six.iterbytes(b" \t\r\n")) -+WHITESPACE = frozenset(c for c in b" \t\r\n") - - BACKSLASH = ord("\\") - OPEN_SQUARE = ord("[") -@@ -146,7 +142,7 @@ class LiteralHandlingIter: - self.literal = None - - def __iter__(self): -- return PushableIterator(six.iterbytes(self.src_text)) -+ return PushableIterator(self.src_text) - - - class PushableIterator(object): -Index: imapclient-2.3.1/imapclient/response_parser.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/response_parser.py -+++ imapclient-2.3.1/imapclient/response_parser.py -@@ -11,21 +11,15 @@ Initially inspired by http://effbot.org/ - - # TODO more exact error reporting - --from __future__ import unicode_literals -- - import re - import sys - from collections import defaultdict - --import six -- - from .datetime_util import parse_to_datetime - from .response_lexer import TokenSource - from .response_types import BodyData, Envelope, Address, SearchIds - from .exceptions import ProtocolError - --xrange = six.moves.xrange -- - __all__ = ["parse_response", "parse_message_list"] - - -@@ -60,7 +54,7 @@ def parse_message_list(data): - if not data: - return SearchIds() - -- if six.PY3 and isinstance(data, six.binary_type): -+ if isinstance(data, bytes): - data = data.decode("ascii") - - m = _msg_id_pattern.match(data) -@@ -133,7 +127,7 @@ def parse_fetch_response(text, normalise - # always return the sequence of the message, so it is available - # even if we return keyed by UID. - msg_data = {b"SEQ": seq} -- for i in xrange(0, len(msg_response), 2): -+ for i in range(0, len(msg_response), 2): - word = msg_response[i].upper() - value = msg_response[i + 1] - -Index: imapclient-2.3.1/imapclient/response_types.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/response_types.py -+++ imapclient-2.3.1/imapclient/response_types.py -@@ -2,13 +2,9 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - from collections import namedtuple - from email.utils import formataddr - --import six -- - from .util import to_unicode - - -@@ -120,7 +116,7 @@ class BodyData(tuple): - if isinstance(response[0], tuple): - # Multipart, find where the message part tuples stop - for i, part in enumerate(response): -- if isinstance(part, six.binary_type): -+ if isinstance(part, bytes): - break - return cls(([cls.create(part) for part in response[:i]],) + response[i:]) - else: -Index: imapclient-2.3.1/imapclient/testable_imapclient.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/testable_imapclient.py -+++ imapclient-2.3.1/imapclient/testable_imapclient.py -@@ -2,8 +2,6 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - from .imapclient import IMAPClient - - try: -Index: imapclient-2.3.1/imapclient/util.py -=================================================================== ---- imapclient-2.3.1.orig/imapclient/util.py -+++ imapclient-2.3.1/imapclient/util.py -@@ -2,11 +2,7 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- --import six - import logging --from six import binary_type, text_type - - from . import exceptions - -@@ -14,7 +10,7 @@ logger = logging.getLogger(__name__) - - - def to_unicode(s): -- if isinstance(s, binary_type): -+ if isinstance(s, bytes): - try: - return s.decode("ascii") - except UnicodeDecodeError: -@@ -28,7 +24,7 @@ def to_unicode(s): - - - def to_bytes(s, charset="ascii"): -- if isinstance(s, text_type): -+ if isinstance(s, str): - return s.encode(charset) - return s - -@@ -42,5 +38,5 @@ def assert_imap_protocol(condition, mess - - - def chunk(lst, size): -- for i in six.moves.range(0, len(lst), size): -+ for i in range(0, len(lst), size): - yield lst[i : i + size] -Index: imapclient-2.3.1/interact.py -=================================================================== ---- imapclient-2.3.1.orig/interact.py -+++ imapclient-2.3.1/interact.py -@@ -4,8 +4,6 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - from imapclient.interact import main - - main() -Index: imapclient-2.3.1/livetest.py -=================================================================== ---- imapclient-2.3.1.orig/livetest.py -+++ imapclient-2.3.1/livetest.py -@@ -5,8 +5,6 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import print_function, unicode_literals -- - import copy - import imp - import os -@@ -19,8 +17,6 @@ import time - from datetime import datetime - from email.utils import make_msgid - --from six import binary_type, text_type, PY3, iteritems -- - from imapclient.config import parse_config_file, create_client_from_config - from imapclient.exceptions import IMAPClientError - from imapclient.fixed_offset import FixedOffset -@@ -170,7 +166,7 @@ class _TestBase(unittest.TestCase): - self.client.expunge() - - def add_prefix_to_folder(self, folder): -- if isinstance(folder, binary_type): -+ if isinstance(folder, bytes): - return ( - self.base_folder.encode("ascii") - + self.folder_delimiter.encode("ascii") -@@ -219,7 +215,7 @@ class TestGeneral(_TestBase): - - def test_alternates(self): - # Check alternate connection/login configurations. -- for name, conf in iteritems(self.conf.alternates): -+ for name, conf in self.conf.alternates.items(): - try: - client = create_client_from_config(conf) - client.logout() -@@ -446,13 +442,13 @@ class TestGeneral(_TestBase): - for folder in folders: - self.client.create_folder(folder) - -- if isinstance(folder, binary_type): -+ if isinstance(folder, bytes): - new_folder = folder + b"x" - else: - new_folder = folder + "x" - - resp = self.client.rename_folder(folder, new_folder) -- self.assertIsInstance(resp, binary_type) -+ self.assertIsInstance(resp, bytes) - self.assertTrue(len(resp) > 0) - - self.assertFalse(self.client.folder_exists(folder)) -@@ -510,7 +506,7 @@ class TestGeneral(_TestBase): - finally: - text, more_responses = self.client.idle_done() - self.assertIn((1, b"EXISTS"), responses) -- self.assertTrue(isinstance(text, binary_type)) -+ self.assertTrue(isinstance(text, bytes)) - self.assertGreater(len(text), 0) - self.assertTrue(isinstance(more_responses, list)) - -@@ -529,7 +525,7 @@ class TestGeneral(_TestBase): - return - - self.assertIn((2, b"EXISTS"), responses) -- self.assertTrue(isinstance(text, binary_type)) -+ self.assertTrue(isinstance(text, bytes)) - self.assertGreater(len(text), 0) - - def test_noop(self): -@@ -537,7 +533,7 @@ class TestGeneral(_TestBase): - - # Initially there should be no responses - text, resps = self.client.noop() -- self.assertTrue(isinstance(text, binary_type)) -+ self.assertTrue(isinstance(text, bytes)) - self.assertGreater(len(text), 0) - self.assertEqual(resps, []) - -@@ -549,7 +545,7 @@ class TestGeneral(_TestBase): - - # Check for this addition in the NOOP data - msg, resps = self.client.noop() -- self.assertTrue(isinstance(text, binary_type)) -+ self.assertTrue(isinstance(text, bytes)) - self.assertGreater(len(text), 0) - self.assertTrue(isinstance(resps, list)) - self.assertIn((1, b"EXISTS"), resps) -@@ -614,7 +610,7 @@ def createUidTestClass(conf, use_uid): - resp = self.client.append( - self.base_folder, in_message, ("abc", "def"), msg_time - ) -- self.assertIsInstance(resp, binary_type) -+ self.assertIsInstance(resp, bytes) - - # Retrieve the just added message and check that all looks well - self.assertEqual(self.client.select_folder(self.base_folder)[b"EXISTS"], 1) -@@ -1068,7 +1064,7 @@ def createUidTestClass(conf, use_uid): - - # Test empty mailbox - text, resps = self.client.expunge() -- self.assertTrue(isinstance(text, binary_type)) -+ self.assertTrue(isinstance(text, bytes)) - self.assertGreater(len(text), 0) - # Some servers return nothing while others (e.g. Exchange) return (0, 'EXISTS') - self.assertIn(resps, ([], [(0, b"EXISTS")])) -@@ -1078,7 +1074,7 @@ def createUidTestClass(conf, use_uid): - - msg, resps = self.client.expunge() - -- self.assertTrue(isinstance(text, binary_type)) -+ self.assertTrue(isinstance(text, bytes)) - self.assertGreater(len(text), 0) - self.assertTrue(isinstance(resps, list)) - if not self.is_gmail(): -@@ -1138,7 +1134,7 @@ def quiet_logout(client): - - - def maybe_lower(val): -- if isinstance(val, (text_type, binary_type)): -+ if isinstance(val, (str, bytes)): - return val.lower() - return val - -@@ -1197,8 +1193,6 @@ def main(): - if name is None: - name = klass.__name__ - else: -- if not PY3: -- name = name.encode("ascii") - klass.__name__ = name - setattr(live_test_mod, name, klass) - -Index: imapclient-2.3.1/setup.py -=================================================================== ---- imapclient-2.3.1.orig/setup.py -+++ imapclient-2.3.1/setup.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python -+#!/usr/bin/env python3 - - # Copyright (c) 2017, Menno Smits - # Released subject to the New BSD License -@@ -9,17 +9,11 @@ from os import path - - from setuptools import setup - --MAJ_MIN_MIC = sys.version_info[:3] --IS_PY3 = MAJ_MIN_MIC >= (3, 0, 0) -- - # Read version info - here = path.dirname(__file__) - version_file = path.join(here, "imapclient", "version.py") - info = {} --if IS_PY3: -- exec(open(version_file).read(), {}, info) --else: -- execfile(version_file, {}, info) -+exec(open(version_file).read(), {}, info) - - desc = """\ - IMAPClient is an easy-to-use, Pythonic and complete IMAP client library. -@@ -33,14 +27,12 @@ Features: - * Convenience methods are provided for commonly used functionality. - * Exceptions are raised when errors occur. - --Python versions 2.7 and 3.4 through 3.9 are officially supported. -+Python versions 3.4 through 3.9 are officially supported. - - IMAPClient includes comprehensive units tests and automated - functional tests that can be run against a live IMAP server. - """ - --main_deps = ["six"] --test_deps = ['mock>=1.3.0; python_version < "3.4"'] - doc_deps = ["sphinx"] - - setup( -@@ -57,10 +49,9 @@ setup( - download_url="http://menno.io/projects/IMAPClient/IMAPClient-%s.zip" % info["version"], - packages=["imapclient"], - package_data=dict(imapclient=["examples/*.py"]), -- install_requires=main_deps, -- tests_require=test_deps, -- extras_require={"test": test_deps, "doc": doc_deps}, -+ extras_require={"doc": doc_deps}, - long_description=desc, -+ python_requires=">=3.4.0", - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", -Index: imapclient-2.3.1/tests/imapclient_test.py -=================================================================== ---- imapclient-2.3.1.orig/tests/imapclient_test.py -+++ imapclient-2.3.1/tests/imapclient_test.py -@@ -1,5 +1,5 @@ - from imapclient.testable_imapclient import TestableIMAPClient as IMAPClient --from .util import unittest -+import unittest - - - class IMAPClientTest(unittest.TestCase): -Index: imapclient-2.3.1/tests/test_auth.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_auth.py -+++ imapclient-2.3.1/tests/test_auth.py -@@ -2,8 +2,6 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - from imapclient import IMAPClient - from imapclient.exceptions import LoginError - from .imapclient_test import IMAPClientTest -Index: imapclient-2.3.1/tests/test_datetime_util.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_datetime_util.py -+++ imapclient-2.3.1/tests/test_datetime_util.py -@@ -2,9 +2,9 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - from datetime import datetime, date -+import unittest -+from unittest.mock import patch - - - from imapclient.datetime_util import ( -@@ -14,7 +14,6 @@ from imapclient.datetime_util import ( - parse_to_datetime, - ) - from imapclient.fixed_offset import FixedOffset --from .util import unittest, patch - - - class TestParsing(unittest.TestCase): -Index: imapclient-2.3.1/tests/test_enable.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_enable.py -+++ imapclient-2.3.1/tests/test_enable.py -@@ -2,13 +2,11 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- -+from unittest.mock import Mock - - from imapclient import IMAPClient - from imapclient.exceptions import IllegalStateError - from .imapclient_test import IMAPClientTest --from .util import Mock - - - class TestEnable(IMAPClientTest): -Index: imapclient-2.3.1/tests/test_fixed_offset.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_fixed_offset.py -+++ imapclient-2.3.1/tests/test_fixed_offset.py -@@ -2,12 +2,11 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - from datetime import timedelta -+import unittest -+from unittest.mock import Mock, patch, DEFAULT - - from imapclient.fixed_offset import FixedOffset --from .util import unittest, Mock, patch, DEFAULT - - - class TestFixedOffset(unittest.TestCase): -Index: imapclient-2.3.1/tests/test_folder_status.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_folder_status.py -+++ imapclient-2.3.1/tests/test_folder_status.py -@@ -2,10 +2,9 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -+from unittest.mock import Mock - - from .imapclient_test import IMAPClientTest --from .util import Mock - - - class TestFolderStatus(IMAPClientTest): -Index: imapclient-2.3.1/tests/test_imap_utf7.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_imap_utf7.py -+++ imapclient-2.3.1/tests/test_imap_utf7.py -@@ -2,12 +2,9 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- --from six import text_type, binary_type, int2byte, unichr -+import unittest - - from imapclient.imap_utf7 import decode, encode --from tests.util import unittest - - - class IMAP4UTF7TestCase(unittest.TestCase): -@@ -30,13 +27,13 @@ class IMAP4UTF7TestCase(unittest.TestCas - def test_encode(self): - for (input, output) in self.tests: - encoded = encode(input) -- self.assertIsInstance(encoded, binary_type) -+ self.assertIsInstance(encoded, bytes) - self.assertEqual(encoded, output) - - def test_decode(self): - for (input, output) in self.tests: - decoded = decode(output) -- self.assertIsInstance(decoded, text_type) -+ self.assertIsInstance(decoded, str) - self.assertEqual(input, decoded) - - def test_printable_singletons(self): -@@ -46,8 +43,8 @@ class IMAP4UTF7TestCase(unittest.TestCas - """ - # All printables represent themselves - for o in list(range(0x20, 0x26)) + list(range(0x27, 0x7F)): -- self.assertEqual(int2byte(o), encode(unichr(o))) -- self.assertEqual(unichr(o), decode(int2byte(o))) -+ self.assertEqual(bytes((o,)), encode(chr(o))) -+ self.assertEqual(chr(o), decode(bytes((o,)))) - self.assertEqual(encode("&"), b"&-") - self.assertEqual(encode("&"), b"&-") - self.assertEqual(decode(b"&-"), "&") -Index: imapclient-2.3.1/tests/test_imapclient.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_imapclient.py -+++ imapclient-2.3.1/tests/test_imapclient.py -@@ -2,16 +2,15 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- -+import io - import itertools - import socket - import sys - import warnings - from datetime import datetime - import logging -+from unittest.mock import patch, sentinel, Mock - --import six - from select import POLLIN - - from imapclient.exceptions import CapabilityError, IMAPClientError, ProtocolError -@@ -27,7 +26,6 @@ from imapclient.fixed_offset import Fixe - from imapclient.testable_imapclient import TestableIMAPClient as IMAPClient - - from .imapclient_test import IMAPClientTest --from .util import patch, sentinel, Mock - - - class TestListFolders(IMAPClientTest): -@@ -738,7 +736,7 @@ class TestDebugLogging(IMAPClientTest): - # prevent basicConfig from being executed - for handler in logging.root.handlers[:]: - logging.root.removeHandler(handler) -- log_stream = six.StringIO() -+ log_stream = io.StringIO() - logging.basicConfig(stream=log_stream, level=logging.DEBUG) - - self.client._imap._mesg("two") -@@ -750,23 +748,16 @@ class TestDebugLogging(IMAPClientTest): - logger_mock.getEffectiveLevel.return_value = logging.DEBUG - - adapter = IMAPlibLoggerAdapter(logger_mock, dict()) -- if six.PY3: -- adapter.info("""> b'ICHH1 LOGIN foo@bar.org "secret"'""") -- if sys.version_info >= (3, 6, 4): -- # LoggerAdapter in Python 3.6.4+ calls logger.log() -- logger_mock.log.assert_called_once_with( -- logging.INFO, "> b'ICHH1 LOGIN **REDACTED**", extra={} -- ) -- else: -- # LoggerAdapter in Python 3.4 to 3.6 calls logger._log() -- logger_mock._log.assert_called_once_with( -- logging.INFO, "> b'ICHH1 LOGIN **REDACTED**", (), extra={} -- ) -+ adapter.info("""> b'ICHH1 LOGIN foo@bar.org "secret"'""") -+ if sys.version_info >= (3, 6, 4): -+ # LoggerAdapter in Python 3.6.4+ calls logger.log() -+ logger_mock.log.assert_called_once_with( -+ logging.INFO, "> b'ICHH1 LOGIN **REDACTED**", extra={} -+ ) - else: -- # LoggerAdapter in Python 2.7 calls logger.info() -- adapter.info('> ICHH1 LOGIN foo@bar.org "secret"') -- logger_mock.info.assert_called_once_with( -- "> ICHH1 LOGIN **REDACTED**", extra={} -+ # LoggerAdapter in Python 3.4 to 3.6 calls logger._log() -+ logger_mock._log.assert_called_once_with( -+ logging.INFO, "> b'ICHH1 LOGIN **REDACTED**", (), extra={} - ) - - -Index: imapclient-2.3.1/tests/test_init.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_init.py -+++ imapclient-2.3.1/tests/test_init.py -@@ -2,8 +2,10 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - -+import unittest -+from unittest.mock import patch, sentinel, Mock -+ - from imapclient.imapclient import IMAPClient, SocketTimeout --from .util import unittest, patch, sentinel, Mock - - - class TestInit(unittest.TestCase): -Index: imapclient-2.3.1/tests/test_response_lexer.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_response_lexer.py -+++ imapclient-2.3.1/tests/test_response_lexer.py -@@ -2,12 +2,9 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- --from six import next -+import unittest - - from imapclient.response_lexer import TokenSource --from tests.util import unittest - - - class TestTokenSource(unittest.TestCase): -Index: imapclient-2.3.1/tests/test_response_parser.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_response_parser.py -+++ imapclient-2.3.1/tests/test_response_parser.py -@@ -6,9 +6,9 @@ - Unit tests for the FetchTokeniser and FetchParser classes - """ - --from __future__ import unicode_literals -- -+import unittest - from datetime import datetime -+from unittest.mock import patch - - from imapclient.datetime_util import datetime_to_native - from imapclient.fixed_offset import FixedOffset -@@ -19,8 +19,6 @@ from imapclient.response_parser import ( - ) - from imapclient.response_types import Envelope, Address - from imapclient.exceptions import ProtocolError --from tests.util import unittest --from .util import patch - - # TODO: test invalid dates and times - -Index: imapclient-2.3.1/tests/test_search.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_search.py -+++ imapclient-2.3.1/tests/test_search.py -@@ -2,16 +2,14 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- - from datetime import date, datetime -+from unittest.mock import Mock - - import imaplib - - from imapclient.exceptions import InvalidCriteriaError - from imapclient.imapclient import _quoted - from .imapclient_test import IMAPClientTest --from .util import Mock - - - class TestSearchBase(IMAPClientTest): -Index: imapclient-2.3.1/tests/test_sort.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_sort.py -+++ imapclient-2.3.1/tests/test_sort.py -@@ -2,12 +2,11 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -+from unittest.mock import Mock - - from imapclient.exceptions import CapabilityError - - from .imapclient_test import IMAPClientTest --from .util import Mock - - - class TestSort(IMAPClientTest): -Index: imapclient-2.3.1/tests/test_starttls.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_starttls.py -+++ imapclient-2.3.1/tests/test_starttls.py -@@ -2,13 +2,12 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -+from unittest.mock import Mock, patch, sentinel - - from imapclient.imapclient import IMAPClient - from imapclient.exceptions import IMAPClientError - - from .imapclient_test import IMAPClientTest --from .util import Mock, patch, sentinel - - - class TestStarttls(IMAPClientTest): -Index: imapclient-2.3.1/tests/test_store.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_store.py -+++ imapclient-2.3.1/tests/test_store.py -@@ -3,19 +3,16 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -- --import six -+from unittest.mock import patch, sentinel, Mock - - from imapclient.imapclient import DELETED, SEEN, ANSWERED, FLAGGED, DRAFT, RECENT - from .imapclient_test import IMAPClientTest --from .util import patch, sentinel, Mock - - - class TestFlagsConsts(IMAPClientTest): - def test_flags_are_bytes(self): - for flag in DELETED, SEEN, ANSWERED, FLAGGED, DRAFT, RECENT: -- if not isinstance(flag, six.binary_type): -+ if not isinstance(flag, bytes): - self.fail("%r flag is not bytes" % flag) - - -Index: imapclient-2.3.1/tests/test_thread.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_thread.py -+++ imapclient-2.3.1/tests/test_thread.py -@@ -2,12 +2,11 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -+from unittest.mock import Mock - - from imapclient.exceptions import CapabilityError - - from .imapclient_test import IMAPClientTest --from .util import Mock - - - class TestThread(IMAPClientTest): -Index: imapclient-2.3.1/tests/test_util_functions.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_util_functions.py -+++ imapclient-2.3.1/tests/test_util_functions.py -@@ -2,7 +2,7 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -+import unittest - - from imapclient.exceptions import InvalidCriteriaError, ProtocolError - from imapclient.imapclient import ( -@@ -15,7 +15,6 @@ from imapclient.imapclient import ( - _parse_untagged_response, - ) - from imapclient.util import assert_imap_protocol --from tests.util import unittest - - - class Test_normalise_text_list(unittest.TestCase): -Index: imapclient-2.3.1/tests/test_version.py -=================================================================== ---- imapclient-2.3.1.orig/tests/test_version.py -+++ imapclient-2.3.1/tests/test_version.py -@@ -2,10 +2,9 @@ - # Released subject to the New BSD License - # Please see http://en.wikipedia.org/wiki/BSD_licenses - --from __future__ import unicode_literals -+import unittest - - from imapclient.version import _imapclient_version_string --from .util import unittest - - - class TestVersionString(unittest.TestCase): -Index: imapclient-2.3.1/tests/util.py -=================================================================== ---- imapclient-2.3.1.orig/tests/util.py -+++ /dev/null -@@ -1,41 +0,0 @@ --# Copyright (c) 2014, Menno Smits --# Released subject to the New BSD License --# Please see http://en.wikipedia.org/wiki/BSD_licenses -- --from __future__ import unicode_literals -- --try: -- from unittest.mock import Mock, patch, sentinel, DEFAULT --except ImportError: -- from mock import Mock, patch, sentinel, DEFAULT -- -- --def find_unittest2(): -- import unittest -- -- if hasattr(unittest, "skip") and hasattr(unittest, "loader"): -- return unittest # unittest from stdlib is unittest2, use that -- try: -- import unittest2 # try for a separately installed unittest2 package -- except ImportError: -- raise ImportError( -- "unittest2 not installed and unittest in standard library is not unittest2" -- ) -- else: -- return unittest2 -- -- --unittest = find_unittest2() -- -- --def patch_TestCase(): -- TestCase = unittest.TestCase -- # Older versions of unittest2 don't have -- # TestCase.assertRaisesRegex and newer version raises warnings -- # when you use assertRaisesRegexp. This helps deal with the -- # mismatch. -- if not hasattr(TestCase, "assertRaisesRegex"): -- TestCase.assertRaisesRegex = TestCase.assertRaisesRegexp -- -- --patch_TestCase() -Index: imapclient-2.3.1/tox.ini -=================================================================== ---- imapclient-2.3.1.orig/tox.ini -+++ imapclient-2.3.1/tox.ini -@@ -1,17 +1,10 @@ - [tox] --envlist=py27,py34,py35,py36,py37,py38,py39 -+envlist=py34,py35,py36,py37,py38,py39 - requires=sphinx - - [testenv] - commands=python -m unittest - --[testenv:py27] --setenv= -- VIRTUALENV_PIP=19.0.1 -- VIRTUALENV_SETUPTOOLS=43.0.0 --deps=mock --commands=python -m unittest discover -- - [testenv:py34] - setenv= - VIRTUALENV_PIP=19.0.1 diff --git a/python-IMAPClient.changes b/python-IMAPClient.changes index 9d9b7c2..f453e48 100644 --- a/python-IMAPClient.changes +++ b/python-IMAPClient.changes @@ -1,3 +1,28 @@ +------------------------------------------------------------------- +Sat Jan 6 20:21:57 UTC 2024 - Dirk Müller + +- update to 3.0.1: + * Fix missing test files +- update to 3.0.0: + * Remove support for Python 2 + * Default contexts should use SERVER_AUTH not CLIENT_AUTH + * New function `uid_expunge`, which requires the capability + UIDPLUS. + * fix: broken `get()` & `getboolean()` + * Remove configparser deprecation warnings + * chore: convert from `optparse` to `argparse` + * Fix typos in docs' index file + * Update documentation links + * Remove usage of deprecated imp module + * Update actions to current versions + * Fix license in setup.py + * Add use of the `isort` linter + * Initial framework for adding type-hints and added type-hints + to `version.py` + * Bump flake8 from 4.0.1 to 6.1.0 + * Bump black from 22.3.0 to 23.7.0 +- drop python-IMAPClient-no-python2.patch (upstream) + ------------------------------------------------------------------- Mon Nov 7 10:45:39 UTC 2022 - pgajdos@suse.com @@ -39,8 +64,8 @@ Thu Aug 26 11:12:06 UTC 2021 - John Paul Adrian Glaubitz = 20.5} +BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: python-rpm-macros BuildArch: noarch @@ -51,14 +51,13 @@ functional tests that can be run against a live IMAP server. %prep %setup -q -n imapclient-%{version} -%patch0 -p1 %build sed -i 's:#!::' imapclient/interact.py -%python_build +%pyproject_wheel %install -%python_install +%pyproject_install %python_expand %fdupes %{buildroot}%{$python_sitelib} %check @@ -68,7 +67,7 @@ sed -i 's:#!::' imapclient/interact.py %files %{python_files} %doc README.rst %license COPYING -%{python_sitelib}/IMAPClient-*-info +%{python_sitelib}/IMAPClient-%{version}.dist-info %{python_sitelib}/imapclient %changelog