diff --git a/drop-python2-support.patch b/drop-python2-support.patch new file mode 100644 index 0000000..9c3b264 --- /dev/null +++ b/drop-python2-support.patch @@ -0,0 +1,186 @@ +From 1d0c5673c15116625c02316b2605648b92cf18a4 Mon Sep 17 00:00:00 2001 +From: Daniel Garcia Moreno +Date: Thu, 20 Oct 2022 08:45:53 +0200 +Subject: [PATCH] Drop python2 support + +Python2 is very old and not maintained anymore, this patch removes the +python-six dependency and drop python2 support. +--- + anymarkup_core/__init__.py | 36 +++++++++++++----------------------- + requirements.txt | 1 - + setup.py | 7 +++---- + test/test_parse.py | 5 ++--- + test/test_serialize.py | 3 +-- + 5 files changed, 19 insertions(+), 33 deletions(-) + +diff --git a/anymarkup_core/__init__.py b/anymarkup_core/__init__.py +index 91f4133..21ccc78 100644 +--- a/anymarkup_core/__init__.py ++++ b/anymarkup_core/__init__.py +@@ -7,7 +7,6 @@ import os + import re + import traceback + +-import six + try: + import configobj + except ImportError: +@@ -95,7 +94,7 @@ def parse(inp, format=None, encoding='utf-8', force_types=True, interpolate=True + if hasattr(inp, 'read'): + proper_inp = inp.read() + # if proper_inp is unicode, encode it +- if isinstance(proper_inp, six.text_type): ++ if isinstance(proper_inp, str): + proper_inp = proper_inp.encode(encoding) + + # try to guess markup type +@@ -105,7 +104,7 @@ def parse(inp, format=None, encoding='utf-8', force_types=True, interpolate=True + fmt = _get_format(format, fname, proper_inp) + + # make it look like file-like bytes-yielding object +- proper_inp = six.BytesIO(proper_inp) ++ proper_inp = io.BytesIO(proper_inp) + + try: + res = _do_parse(proper_inp, fmt, encoding, force_types, interpolate) +@@ -232,22 +231,17 @@ def _do_parse(inp, fmt, encoding, force_types, interpolate): + cfg = configobj.ConfigObj(inp, encoding=encoding, interpolation=interpolate) + res = cfg.dict() + elif fmt == 'json': +- if six.PY3: +- # python 3 json only reads from unicode objects +- inp = io.TextIOWrapper(inp, encoding=encoding) +- res = json.load(inp) +- else: +- res = json.load(inp, encoding=encoding) ++ # python 3 json only reads from unicode objects ++ inp = io.TextIOWrapper(inp, encoding=encoding) ++ res = json.load(inp) + elif fmt == 'json5': +- if six.PY3: +- inp = io.TextIOWrapper(inp, encoding=encoding) ++ inp = io.TextIOWrapper(inp, encoding=encoding) + res = json5.load(inp, encoding=encoding) + elif fmt == 'toml': + if not _is_utf8(encoding): + raise AnyMarkupError('toml is always utf-8 encoded according to specification') +- if six.PY3: +- # python 3 toml prefers unicode objects +- inp = io.TextIOWrapper(inp, encoding=encoding) ++ # python 3 toml prefers unicode objects ++ inp = io.TextIOWrapper(inp, encoding=encoding) + res = toml.load(inp) + elif fmt == 'xml': + res = xmltodict.parse(inp, encoding=encoding) +@@ -336,9 +330,9 @@ def _ensure_proper_types(struct, encoding, force_types): + res = [] + for i in struct: + res.append(_ensure_proper_types(i, encoding, force_types)) +- elif isinstance(struct, six.binary_type): ++ elif isinstance(struct, bytes): + res = struct.decode(encoding) +- elif isinstance(struct, (six.text_type, type(None), type(True), six.integer_types, float)): ++ elif isinstance(struct, (str, type(None), type(True), int, float)): + res = struct + elif isinstance(struct, datetime.datetime): + # toml can parse datetime natively +@@ -347,11 +341,11 @@ def _ensure_proper_types(struct, encoding, force_types): + raise AnyMarkupError('internal error - unexpected type {0} in parsed markup'. + format(type(struct))) + +- if force_types and isinstance(res, six.text_type): ++ if force_types and isinstance(res, str): + res = _recognize_basic_types(res) + elif not (force_types or +- isinstance(res, (dict, collections.OrderedDict, list, six.text_type))): +- res = six.text_type(res) ++ isinstance(res, (dict, collections.OrderedDict, list, str))): ++ res = str(res) + + return res + +@@ -361,8 +355,6 @@ def _recognize_basic_types(s): + to a proper type and return it. + """ + tps = [int, float] +- if not six.PY3: # compat for older versions of six that don't have PY2 +- tps.append(long) + for tp in tps: + try: + return tp(s) +@@ -498,5 +490,3 @@ if yaml is not None: + yaml.SafeLoader.add_constructor(u'tag:yaml.org,2002:omap', construct_ordereddict) + yaml.SafeDumper.add_representer(collections.OrderedDict, represent_ordereddict) + yaml.SafeDumper.add_representer(str, represent_str) +- if six.PY2: +- yaml.SafeDumper.add_representer(unicode, represent_str) +diff --git a/requirements.txt b/requirements.txt +index ffe2fce..e69de29 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -1 +0,0 @@ +-six +diff --git a/setup.py b/setup.py +index e5b0be2..5391427 100644 +--- a/setup.py ++++ b/setup.py +@@ -21,9 +21,8 @@ setup( + 'License :: OSI Approved :: BSD License', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python', +- 'Programming Language :: Python :: 2.7', +- 'Programming Language :: Python :: 3.3', +- 'Programming Language :: Python :: 3.4', +- 'Programming Language :: Python :: 3.5', ++ 'Programming Language :: Python :: 3.8', ++ 'Programming Language :: Python :: 3.9', ++ 'Programming Language :: Python :: 3.10', + ] + ) +diff --git a/test/test_parse.py b/test/test_parse.py +index 3c0bf86..cddd872 100644 +--- a/test/test_parse.py ++++ b/test/test_parse.py +@@ -4,7 +4,6 @@ import io + import os + + import pytest +-import six + import toml + + from anymarkup_core import * +@@ -23,8 +22,8 @@ class TestParse(object): + elif isinstance(struct, list): + for i in struct: + self.assert_unicode(i) +- elif isinstance(struct, (six.string_types, type(None), type(True), \ +- six.integer_types, float, datetime)): ++ elif isinstance(struct, (str, type(None), type(True), \ ++ int, float, datetime)): + pass + else: + raise AssertionError('Unexpected type {0} in parsed structure'.format(type(struct))) +diff --git a/test/test_serialize.py b/test/test_serialize.py +index 8191561..9ffbeab 100644 +--- a/test/test_serialize.py ++++ b/test/test_serialize.py +@@ -3,7 +3,6 @@ import io + import os + + import pytest +-import six + + from anymarkup_core import * + +@@ -21,7 +20,7 @@ class TestSerialize(object): + fixtures = os.path.join(os.path.dirname(__file__), 'fixtures') + + def _read_decode(self, file): +- if isinstance(file, six.string_types): ++ if isinstance(file, str): + file = open(file, 'rb') + else: + file.seek(0) +-- +2.38.0 + diff --git a/python-anymarkup-core.changes b/python-anymarkup-core.changes index 1496b81..ccd07ed 100644 --- a/python-anymarkup-core.changes +++ b/python-anymarkup-core.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Thu Oct 20 06:52:24 UTC 2022 - Daniel Garcia + +- Add drop-python2-support.patch gh#bkabrda/anymarkup-core#7 +- Remove python-six dependency +- Use a more specific python_sitelib expression in %files +- Use autosetup instead of setup and patch + ------------------------------------------------------------------- Thu Jun 30 07:43:44 UTC 2022 - Daniel GarcĂ­a Moreno diff --git a/python-anymarkup-core.spec b/python-anymarkup-core.spec index 10abda0..e9b17ce 100644 --- a/python-anymarkup-core.spec +++ b/python-anymarkup-core.spec @@ -27,10 +27,11 @@ Group: Development/Languages/Python URL: https://github.com/bkabrda/anymarkup-core Source0: https://github.com/bkabrda/anymarkup-core/archive/v%{version}/anymarkup-core-%{version}.tar.gz Patch0: xml-to-dict-0.13.patch +# PATCH-FIX-UPSTREAM drop-python2-support.patch gh#bkabrda/anymarkup-core#7 +Patch1: drop-python2-support.patch BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros -Requires: python-six Suggests: python-PyYAML Suggests: python-configobj Suggests: python-json5 @@ -43,7 +44,6 @@ BuildRequires: %{python_module configobj} BuildRequires: %{python_module flexmock} BuildRequires: %{python_module json5} BuildRequires: %{python_module pytest} -BuildRequires: %{python_module six} BuildRequires: %{python_module toml} BuildRequires: %{python_module xmltodict} # /SECTION @@ -54,8 +54,7 @@ This is the core library that implements functionality of python-anymarkup. %prep -%setup -q -n anymarkup-core-%{version} -%autopatch -p1 +%autosetup -p1 -n anymarkup-core-%{version} %build %python_build @@ -70,6 +69,7 @@ python-anymarkup. %files %{python_files} %doc README.rst %license LICENSE -%{python_sitelib}/* +%{python_sitelib}/anymarkup_core +%{python_sitelib}/anymarkup_core-%{version}*-info %changelog