diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore index eea8f48..1966257 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ PyYAML-3.09.tar.gz /6.0b1.tar.gz /6.0.tar.gz /6.0.1.tar.gz +/6.0.2.tar.gz +/6.0.3.tar.gz diff --git a/731.patch b/731.patch deleted file mode 100644 index 4c924f4..0000000 --- a/731.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 17dc5b6cd96dcfe64fd71789c771ca9b96d260e5 Mon Sep 17 00:00:00 2001 -From: "Andrew J. Hesford" -Date: Fri, 21 Jul 2023 09:50:00 -0400 -Subject: [PATCH] Fix builds with Cython 3 - -This is a *de minimis* fix for building with Cython 3. Recent Cython<3 -releases provided `Cython.Distutils.build_ext` as an alias to -`Cython.Distutils.old_build_ext.old_build_ext`; Cython 3 drops this -alias and instead uses a wholly new `Cython.Distutils.build_ext` that -does not provide the `cython_sources` function used in `setup.py`. - -Explicitly importing `old_build_ext` preserves the existing behavior for -recent Cython<3 and uses the correct behavior for Cython 3. Should the -import fail (*e.g.*, because the version of Cython available predates -the availability of `old_build_ext`), the import falls back to just -`Cython.Distutils.build_ext`. - -Signed-off-by: Andrew J. Hesford ---- - setup.py | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/setup.py b/setup.py -index 944e7fa2..462b1e95 100644 ---- a/setup.py -+++ b/setup.py -@@ -82,7 +82,11 @@ - with_cython = True - try: - from Cython.Distutils.extension import Extension as _Extension -- from Cython.Distutils import build_ext as _build_ext -+ try: -+ from Cython.Distutils.old_build_ext import old_build_ext as _build_ext -+ except ImportError: -+ from Cython.Distutils import build_ext as _build_ext -+ - with_cython = True - except ImportError: - if with_cython: diff --git a/PyYAML.spec b/PyYAML.spec index ead210f..8cb2438 100644 --- a/PyYAML.spec +++ b/PyYAML.spec @@ -1,5 +1,5 @@ Name: PyYAML -Version: 6.0.1 +Version: 6.0.3 Release: %autorelease Summary: YAML parser and emitter for Python @@ -8,13 +8,10 @@ License: MIT URL: https://github.com/yaml/pyyaml Source: https://github.com/yaml/pyyaml/archive/%{version}.tar.gz -# Fix build with Cython 3 -# Proposed upstream but refused (upstream does not want Cython 3) -Patch: https://github.com/yaml/pyyaml/pull/731.patch - BuildRequires: gcc BuildRequires: libyaml-devel BuildRequires: python3-devel +BuildRequires: python3-pytest %global _description\ @@ -48,9 +45,6 @@ chmod a-x examples/yaml-highlight/yaml_hl.py # remove pre-generated file rm -rf ext/_yaml.c -# we have a patch for Cython 3 -sed -i 's/Cython<3.0/Cython/' pyproject.toml - %generate_buildrequires %pyproject_buildrequires @@ -66,7 +60,7 @@ sed -i 's/Cython<3.0/Cython/' pyproject.toml %check -%{py3_test_envvars} %{python3} tests/lib/test_all.py +%pytest %files -n python3-pyyaml -f %{pyproject_files} diff --git a/plan.fmf b/plan.fmf new file mode 100644 index 0000000..e6427de --- /dev/null +++ b/plan.fmf @@ -0,0 +1,4 @@ +discover: + how: fmf +execute: + how: tmt diff --git a/sources b/sources index e041a66..b7b81fd 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (6.0.1.tar.gz) = 1c74a92a4ad7d47854dc7bcb2e89b3c8e0b14fa815c7dbfbc22b24480dbba6c81e971c77ee384c494a960914b95f06edf943d7431925a5ed674a0ba830d258e0 +SHA512 (6.0.3.tar.gz) = a0da43e32d127409ad61b11dc1d733b2e9c743977b3d72c05c81fc2ab183b40bc284452b0874dbeae1a736e1cd4a34f0df641ceefd5e9df38b3e53155fc5f633 diff --git a/tests/smoke/main.fmf b/tests/smoke/main.fmf new file mode 100644 index 0000000..7d9c513 --- /dev/null +++ b/tests/smoke/main.fmf @@ -0,0 +1,5 @@ +test: ./runtest.sh +framework: beakerlib +require: + - python3-pyyaml +duration: 5m diff --git a/tests/smoke/pyyaml_dump.py b/tests/smoke/pyyaml_dump.py new file mode 100644 index 0000000..a6f4a6d --- /dev/null +++ b/tests/smoke/pyyaml_dump.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +import yaml +print(yaml.dump({'name': 'Silenthand Olleander', 'race': 'Human', 'traits': ['ONE_HAND', 'ONE_EYE']})) diff --git a/tests/smoke/pyyaml_load.py b/tests/smoke/pyyaml_load.py new file mode 100644 index 0000000..6bf48f2 --- /dev/null +++ b/tests/smoke/pyyaml_load.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python +import yaml +documents = """ +--- +name: foo +--- +name: bar +--- +name: foobar +""" + +for data in yaml.load_all(documents, Loader=yaml.SafeLoader): + print(data) diff --git a/tests/smoke/pyyaml_object.py b/tests/smoke/pyyaml_object.py new file mode 100644 index 0000000..b689c05 --- /dev/null +++ b/tests/smoke/pyyaml_object.py @@ -0,0 +1,24 @@ +import yaml +class Hero: + def __init__(self, name, hp, sp): + self.name = name + self.hp = hp + self.sp = sp + def __repr__(self): + return "%s(name=%r, hp=%r, sp=%r)" % ( + self.__class__.__name__, self.name, self.hp, self.sp) + +STRING = """ +!!python/object:__main__.Hero +name: Welthyr Syxgon +hp: 1200 +sp: 0 +""" + +try: + yaml.load(STRING, Loader=yaml.SafeLoader) + raise RuntimeError("Didn't raise exception") +except yaml.constructor.ConstructorError: + pass + +print(yaml.unsafe_load(STRING)) diff --git a/tests/smoke/pyyaml_parse.py b/tests/smoke/pyyaml_parse.py new file mode 100644 index 0000000..3850b78 --- /dev/null +++ b/tests/smoke/pyyaml_parse.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python +import yaml +document = """ + a: 1 + b: + c: 3 + d: 4 +""" +print(yaml.dump(yaml.load(document, Loader=yaml.SafeLoader))) diff --git a/tests/smoke/runtest.sh b/tests/smoke/runtest.sh new file mode 100755 index 0000000..72451ed --- /dev/null +++ b/tests/smoke/runtest.sh @@ -0,0 +1,74 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/PyYAML/Sanity/Smoke +# Description: Smoke test for this component +# Author: Stepan Sigut +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2016 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PYTHON=${PYTHON:-"python3"} + +PATTERN1="{'name': 'foo'} +{'name': 'bar'} +{'name': 'foobar'}" +PATTERN3="name: Silenthand Olleander +race: Human +traits: [ONE_HAND, ONE_EYE]" +PATTERN4="a: 1 +b: {c: 3, d: 4}" +PATTERN5="Hero(name='Welthyr Syxgon', hp=1200, sp=0)" + +set -o pipefail + +rlJournalStart + rlPhaseStartSetup + # export python's MAJOR and MINOR version + rlRun "export $($PYTHON -c \ + 'import sys; print("MAJOR={0} MINOR={1}".format(\ + sys.version_info[0],sys.version_info[1]))')" + rlPhaseEnd + + rlPhaseStartTest "Running pyyaml_load.py" + rlRun -s "$PYTHON pyyaml_load.py" + rlAssertGrep "$PATTERN1" "$rlRun_LOG" + rlPhaseEnd + + rlPhaseStartTest "Running pyyaml_dump.py" + rlRun -s "$PYTHON pyyaml_dump.py" + rlAssertGrep "$PATTERN3" "$rlRun_LOG" + rlPhaseEnd + + rlPhaseStartTest "Running pyyaml_parse.py" + rlRun -s "$PYTHON pyyaml_parse.py" + rlAssertGrep "$PATTERN4" "$rlRun_LOG" + rlPhaseEnd + + rlPhaseStartTest "Running pyyaml_object.py" + rlRun -s "$PYTHON pyyaml_object.py" + rlAssertGrep "$PATTERN5" "$rlRun_LOG" + rlPhaseEnd + +rlJournalPrintText +rlJournalEnd