diff --git a/python-stone.changes b/python-stone.changes index b8c21cd..6fde269 100644 --- a/python-stone.changes +++ b/python-stone.changes @@ -1,4 +1,4 @@ ------------------------------------------------------------------- -Tue May 13 03:17:53 UTC 2025 - Steve Kowalik +Tue May 6 13:58:31 UTC 2025 - Markéta Machová -- Initial release of 3.3.9. +- Initial version (v3.3.9), needed by python-dropbox diff --git a/python-stone.spec b/python-stone.spec index 9ed2856..8bddfc4 100644 --- a/python-stone.spec +++ b/python-stone.spec @@ -23,25 +23,24 @@ Summary: Stone is an interface description language (IDL) for APIs License: MIT URL: https://github.com/dropbox/stone Source: https://github.com/dropbox/stone/archive/refs/tags/v%{version}.tar.gz#/stone-%{version}.tar.gz +# PATCH-FIX-UPSTREAM https://github.com/dropbox/stone/pull/318 remove dependency on six +Patch: remove-six.patch +BuildRequires: python-rpm-macros BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} -BuildRequires: python-rpm-macros # SECTION test requirements BuildRequires: %{python_module Jinja2 >= 3.0.3} BuildRequires: %{python_module packaging >= 21.0} BuildRequires: %{python_module ply >= 3.4} BuildRequires: %{python_module pytest} -BuildRequires: %{python_module six >= 1.12.0} -BuildRequires: %{python_module testsuite} # /SECTION BuildRequires: fdupes Requires: python-Jinja2 >= 3.0.3 Requires: python-packaging >= 21.0 Requires: python-ply >= 3.4 -Requires: python-six >= 1.12.0 Requires(post): update-alternatives -Requires(postun): update-alternatives +Requires(postun):update-alternatives BuildArch: noarch %python_subpackages @@ -60,6 +59,7 @@ Stone is an interface description language (IDL) for APIs. %python_expand %fdupes %{buildroot}%{$python_sitelib} %check +export PYTHONPATH=. %pytest %post diff --git a/remove-six.patch b/remove-six.patch new file mode 100644 index 0000000..4c93a76 --- /dev/null +++ b/remove-six.patch @@ -0,0 +1,218 @@ +From a58e5b61c0460a54aaddc04fb8b32cf7c6948048 Mon Sep 17 00:00:00 2001 +From: Alexandre Detiste +Date: Thu, 25 Jan 2024 00:11:05 +0100 +Subject: [PATCH] remove dependency on six + +--- + .github/workflows/CI.yaml | 2 +- + README.rst | 4 +- + requirements.txt | 1 - + stone/backends/obj_c_types.py | 4 +- + .../backends/python_rsrc/stone_serializers.py | 46 ++----------------- + .../backends/python_rsrc/stone_validators.py | 9 ---- + stone/backends/swift_types.py | 4 +- + test/test_python_gen.py | 4 +- + 8 files changed, 9 insertions(+), 65 deletions(-) + +Index: stone-3.3.9/README.rst +=================================================================== +--- stone-3.3.9.orig/README.rst ++++ stone-3.3.9/README.rst +@@ -32,10 +32,10 @@ Alternative + ----------- + + If you choose not to install ``stone`` using the method above, you will need +-to ensure that you have the Python packages ``ply`` and ``six``, which can be ++to ensure that you have the Python package ``ply``, which can be + installed through ``pip``:: + +- $ pip install "ply>=3.4" "six>=1.3.0" "typing>=3.5.2" ++ $ pip install "ply>=3.4" "typing>=3.5.2" + + If the ``stone`` package is in your PYTHONPATH, you can replace ``stone`` + with ``python -m stone.cli`` as follows:: +Index: stone-3.3.9/requirements.txt +=================================================================== +--- stone-3.3.9.orig/requirements.txt ++++ stone-3.3.9/requirements.txt +@@ -1,4 +1,3 @@ + ply>= 3.4 +-six>= 1.12.0 + packaging>=21.0 + Jinja2>= 3.0.3 +Index: stone-3.3.9/stone/backends/obj_c_types.py +=================================================================== +--- stone-3.3.9.orig/stone/backends/obj_c_types.py ++++ stone-3.3.9/stone/backends/obj_c_types.py +@@ -2,8 +2,6 @@ import json + import os + import shutil + +-import six +- + from stone.backends.obj_c import ( + base_file_comment, + comment_prefix, +@@ -915,7 +913,7 @@ class ObjCTypesBackend(ObjCBaseBackend): + if data_type.min_length else 'nil'), + ('maxLength', '@({})'.format(data_type.max_length) + if data_type.max_length else 'nil'), +- ('pattern', '@"{}"'.format(six.ensure_str(pattern)) ++ ('pattern', '@"{}"'.format(str(pattern)) + if pattern else 'nil'), + ])) + +Index: stone-3.3.9/stone/backends/python_rsrc/stone_serializers.py +=================================================================== +--- stone-3.3.9.orig/stone/backends/python_rsrc/stone_serializers.py ++++ stone-3.3.9/stone/backends/python_rsrc/stone_serializers.py +@@ -20,8 +20,6 @@ import json + import re + import time + +-import six +- + from stone.backends.python_rsrc import ( + stone_base as bb, + stone_validators as bv, +@@ -658,7 +656,7 @@ class PythonPrimitiveToStoneDecoder: + else: + raise bv.ValidationError("expected string or object, got %s" % + bv.generic_type_name(obj)) +- return data_type.definition(six.ensure_str(tag), val) ++ return data_type.definition(str(tag), val) + + def decode_union_dict(self, data_type, obj): + if '.tag' not in obj: +@@ -785,7 +783,7 @@ class PythonPrimitiveToStoneDecoder: + else: + raise bv.ValidationError("expected string or object, got %s" % + bv.generic_type_name(obj)) +- return data_type.definition(six.ensure_str(tag), val) ++ return data_type.definition(str(tag), val) + + def decode_struct_tree(self, data_type, obj): + """ +@@ -1003,45 +1001,7 @@ def _findall(text, substr): + # Every 28 years the calendar repeats, except through century leap years + # where it's 6 years. But only if you're using the Gregorian calendar. ;) + def _strftime(dt, fmt): +- try: +- return dt.strftime(fmt) +- except ValueError: +- if not six.PY2 or dt.year > 1900: +- raise +- +- if _ILLEGAL_S.search(fmt): +- raise TypeError("This strftime implementation does not handle %s") +- +- year = dt.year +- +- # For every non-leap year century, advance by 6 years to get into the +- # 28-year repeat cycle +- delta = 2000 - year +- off = 6 * (delta // 100 + delta // 400) +- year = year + off +- +- # Move to around the year 2000 +- year = year + ((2000 - year) // 28) * 28 +- timetuple = dt.timetuple() +- s1 = time.strftime(fmt, (year,) + timetuple[1:]) +- sites1 = _findall(s1, str(year)) +- +- s2 = time.strftime(fmt, (year + 28,) + timetuple[1:]) +- sites2 = _findall(s2, str(year + 28)) +- +- sites = [] +- +- for site in sites1: +- if site in sites2: +- sites.append(site) +- +- s = s1 +- syear = '%4d' % (dt.year,) +- +- for site in sites: +- s = s[:site] + syear + s[site + 4:] +- +- return s ++ return dt.strftime(fmt) + + + try: +Index: stone-3.3.9/stone/backends/python_rsrc/stone_validators.py +=================================================================== +--- stone-3.3.9.orig/stone/backends/python_rsrc/stone_validators.py ++++ stone-3.3.9/stone/backends/python_rsrc/stone_validators.py +@@ -14,8 +14,6 @@ import numbers + import re + from abc import ABCMeta, abstractmethod + +-import six +- + _MYPY = False + if _MYPY: + import typing # noqa: F401 # pylint: disable=import-error,unused-import,useless-suppression +@@ -328,18 +326,11 @@ class String(Primitive): + def validate(self, val): + """ + A unicode string of the correct length and pattern will pass validation. +- In PY2, we enforce that a str type must be valid utf-8, and a unicode +- string will be returned. + """ + if not isinstance(val, str): + raise ValidationError("'%s' expected to be a string, got %s" + % (get_value_string(val), generic_type_name(val))) +- if not six.PY3 and isinstance(val, str): +- try: +- val = val.decode('utf-8') +- except UnicodeDecodeError: +- raise ValidationError("'%s' was not valid utf-8") +- ++ + if self.max_length is not None and len(val) > self.max_length: + raise ValidationError("'%s' must be at most %d characters, got %d" + % (get_value_string(val), self.max_length, len(val))) +Index: stone-3.3.9/stone/backends/swift_types.py +=================================================================== +--- stone-3.3.9.orig/stone/backends/swift_types.py ++++ stone-3.3.9/stone/backends/swift_types.py +@@ -2,7 +2,6 @@ import json + import os + import shutil + +-import six + import jinja2 + import textwrap + +@@ -304,7 +303,7 @@ class SwiftTypesBackend(SwiftBaseBackend + self._func_args([ + ("minLength", data_type.min_length), + ("maxLength", data_type.max_length), +- ("pattern", '"{}"'.format(six.ensure_str(pat)) if pat else None), ++ ("pattern", '"{}"'.format(str(pat)) if pat else None), + ]) + ) + else: +Index: stone-3.3.9/test/test_python_gen.py +=================================================================== +--- stone-3.3.9.orig/test/test_python_gen.py ++++ stone-3.3.9/test/test_python_gen.py +@@ -10,8 +10,6 @@ import subprocess + import sys + import unittest + +-import six +- + import stone.backends.python_rsrc.stone_base as bb + import stone.backends.python_rsrc.stone_serializers as ss + import stone.backends.python_rsrc.stone_validators as bv +@@ -655,7 +653,7 @@ class TestDropInModules(unittest.TestCas + pass + + assert bv.type_name_with_module(Foo) == "test.test_python_gen.Foo" +- assert bv.type_name_with_module(int) == "builtins.int" if six.PY3 else "__builtin__.int" ++ assert bv.type_name_with_module(int) == "builtins.int" + + + test_spec = """\