Hello community, here is the log from the commit of package python-gobject for openSUSE:Factory checked in at 2020-04-23 18:28:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-gobject (Old) and /work/SRC/openSUSE:Factory/.python-gobject.new.2738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-gobject" Thu Apr 23 18:28:08 2020 rev:81 rq:795247 version:3.36.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-gobject/python-gobject.changes 2020-02-14 16:30:32.591358980 +0100 +++ /work/SRC/openSUSE:Factory/.python-gobject.new.2738/python-gobject.changes 2020-04-23 18:28:11.667830237 +0200 @@ -1,0 +2,15 @@ +Sun Mar 8 21:03:05 UTC 2020 - Bjørn Lie <[email protected]> + +- Update to version 3.36.0: + + This will be the last release supporting Python 2. + + pygobject-object: Avoid checking whether NULL is floating. + + Avoid various new glib deprecation warnings. + + Port to g_object_new_with_properties(). + + Drop Python 2 support on Windows. + + gtk overrides: Drop Menu, MenuItem for Gtk 4. + + Docs: + - Update openSUSE instructions. + - Add Gaphor to Who is Using PyGObject. + - Remove reference to a fixed bug. + +------------------------------------------------------------------- Old: ---- pygobject-3.34.0.tar.xz New: ---- pygobject-3.36.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-gobject.spec ++++++ --- /var/tmp/diff_new_pack.udK3Xk/_old 2020-04-23 18:28:13.203833179 +0200 +++ /var/tmp/diff_new_pack.udK3Xk/_new 2020-04-23 18:28:13.207833187 +0200 @@ -22,13 +22,13 @@ %global __requires_exclude_from ^%{python2_sitearch}/gi/__init__.py|%{python3_sitearch}/gi/__init__.py$ %define _name pygobject Name: python-gobject -Version: 3.34.0 +Version: 3.36.0 Release: 0 Summary: Python bindings for GObject License: LGPL-2.1-or-later Group: Development/Languages/Python URL: https://wiki.gnome.org/Projects/PyGObject/ -Source0: https://download.gnome.org/sources/pygobject/3.34/%{_name}-%{version}.tar.xz +Source0: https://download.gnome.org/sources/pygobject/3.36/%{_name}-%{version}.tar.xz BuildRequires: %{python_module cairo >= 1.11.1} BuildRequires: %{python_module cairo-devel} ++++++ pygobject-3.34.0.tar.xz -> pygobject-3.36.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/Dockerfile new/pygobject-3.36.0/.gitlab-ci/Dockerfile --- old/pygobject-3.34.0/.gitlab-ci/Dockerfile 2019-09-09 21:31:15.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/Dockerfile 2019-12-30 12:15:35.835093700 +0100 @@ -39,12 +39,12 @@ RUN curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash -RUN pyenv install pypy2.7-7.1.0 -RUN pyenv install pypy3.6-7.1.0 -RUN pyenv install --debug 2.7.16 -RUN pyenv install 3.5.7 -RUN pyenv install 3.6.8 -RUN pyenv install --debug 3.7.3 -RUN pyenv install --debug 3.8-dev +RUN pyenv install pypy2.7-7.3.0 +RUN pyenv install pypy3.6-7.3.0 +RUN pyenv install --debug 2.7.17 +RUN pyenv install 3.5.9 +RUN pyenv install 3.6.10 +RUN pyenv install --debug 3.7.6 +RUN pyenv install --debug 3.8.1 ENV PATH="/usr/lib/ccache:${PATH}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/Dockerfile.gtk4 new/pygobject-3.36.0/.gitlab-ci/Dockerfile.gtk4 --- old/pygobject-3.34.0/.gitlab-ci/Dockerfile.gtk4 2019-06-23 15:47:14.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/Dockerfile.gtk4 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -FROM registry.gitlab.gnome.org/gnome/pygobject/main:v11 - -USER root - -RUN python3 -m pip install meson==0.49.2 - -ENV DEBIAN_FRONTEND noninteractive -RUN apt-get update && apt-get install -y \ - libfribidi-dev \ - libgraphene-1.0-dev \ - libgstreamer-plugins-bad1.0-dev \ - libgtk-3-dev \ - libwayland-dev \ - libxml2-dev \ - wayland-protocols \ - && rm -rf /var/lib/apt/lists/* - -RUN git clone https://gitlab.gnome.org/GNOME/gtk.git \ - && cd gtk \ - && git checkout 833442e1e29e5 \ - && meson -Dprefix=/usr -Dbuild-tests=false -Ddemos=false -Dbuild-examples=false -Dprint-backends=none _build \ - && ninja -C _build \ - && ninja -C _build install \ - && cd .. \ - && rm -Rf gtk - -USER user -ENV PYENV_VERSION 3.7.3-debug diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/Dockerfile.old new/pygobject-3.36.0/.gitlab-ci/Dockerfile.old --- old/pygobject-3.34.0/.gitlab-ci/Dockerfile.old 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/.gitlab-ci/Dockerfile.old 2019-12-30 12:15:35.835093700 +0100 @@ -17,8 +17,8 @@ libgtk-3-0 \ libtool \ locales \ - python-dev \ - python-virtualenv \ + python3-dev \ + python3-venv \ xauth \ xvfb \ && rm -rf /var/lib/apt/lists/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/coverage-docker.sh new/pygobject-3.36.0/.gitlab-ci/coverage-docker.sh --- old/pygobject-3.34.0/.gitlab-ci/coverage-docker.sh 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/.gitlab-ci/coverage-docker.sh 2019-12-30 12:15:35.835093700 +0100 @@ -5,7 +5,8 @@ python -m pip install coverage # Make the Windows paths match our current layout -python ./.gitlab-ci/fixup-cov-paths.py coverage/.coverage* coverage/*.lcov +python ./.gitlab-ci/fixup-lcov-paths.py coverage/*.lcov +python ./.gitlab-ci/fixup-covpy-paths.py coverage/.coverage* # Remove external headers (except gi tests) for path in coverage/*.lcov; do @@ -14,7 +15,7 @@ done python -m coverage combine coverage -python -m coverage html --ignore-errors -d coverage/report-python +python -m coverage html --show-contexts --ignore-errors -d coverage/report-python genhtml --ignore-errors=source --rc lcov_branch_coverage=1 \ coverage/*.lcov -o coverage/report-c diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/fixup-cov-paths.py new/pygobject-3.36.0/.gitlab-ci/fixup-cov-paths.py --- old/pygobject-3.34.0/.gitlab-ci/fixup-cov-paths.py 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/.gitlab-ci/fixup-cov-paths.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -from __future__ import print_function - -import sys -import os -import io - - -def main(argv): - # Fix paths in coverage files to match our current source layout - # so that coverage report generators can find the source. - # Mostly needed for Windows. - paths = argv[1:] - - for path in paths: - print("cov-fixup:", path) - text = io.open(path, "r", encoding="utf-8").read() - text = text.replace("\\\\", "/") - end = text.index("/gi/") - try: - # coverage.py - start = text[:end].rindex("\"") + 1 - except ValueError: - # lcov - start = text[:end].rindex(":") + 1 - old_root = text[start:end] - new_root = os.getcwd() - if old_root != new_root: - print("replacing %r with %r" % (old_root, new_root)) - text = text.replace(old_root, new_root) - with io.open(path, "w", encoding="utf-8") as h: - h.write(text) - - -if __name__ == "__main__": - sys.exit(main(sys.argv)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/fixup-covpy-paths.py new/pygobject-3.36.0/.gitlab-ci/fixup-covpy-paths.py --- old/pygobject-3.34.0/.gitlab-ci/fixup-covpy-paths.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pygobject-3.36.0/.gitlab-ci/fixup-covpy-paths.py 2019-12-30 12:13:24.998036600 +0100 @@ -0,0 +1,17 @@ +import sys +import sqlite3 + + +def main(argv): + paths = argv[1:] + + for path in paths: + # https://github.com/nedbat/coveragepy/issues/903 + conn = sqlite3.connect(path) + conn.execute("UPDATE file set path = REPLACE(path, '\\', '/')") + conn.commit() + conn.close() + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/fixup-lcov-paths.py new/pygobject-3.36.0/.gitlab-ci/fixup-lcov-paths.py --- old/pygobject-3.34.0/.gitlab-ci/fixup-lcov-paths.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pygobject-3.36.0/.gitlab-ci/fixup-lcov-paths.py 2019-12-30 12:13:24.998036600 +0100 @@ -0,0 +1,35 @@ +from __future__ import print_function + +import sys +import os +import io + + +def main(argv): + # Fix paths in coverage files to match our current source layout + # so that coverage report generators can find the source. + # Mostly needed for Windows. + paths = argv[1:] + + for path in paths: + print("cov-fixup:", path) + text = io.open(path, "r", encoding="utf-8").read() + text = text.replace("\\\\", "/") + end = text.index("/gi/") + try: + # coverage.py + start = text[:end].rindex("\"") + 1 + except ValueError: + # lcov + start = text[:end].rindex(":") + 1 + old_root = text[start:end] + new_root = os.getcwd() + if old_root != new_root: + print("replacing %r with %r" % (old_root, new_root)) + text = text.replace(old_root, new_root) + with io.open(path, "w", encoding="utf-8") as h: + h.write(text) + + +if __name__ == "__main__": + sys.exit(main(sys.argv)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/run-docker-gtk4.sh new/pygobject-3.36.0/.gitlab-ci/run-docker-gtk4.sh --- old/pygobject-3.34.0/.gitlab-ci/run-docker-gtk4.sh 2019-06-23 15:47:14.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/run-docker-gtk4.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -#!/bin/bash - -set -e - -TAG="registry.gitlab.gnome.org/gnome/pygobject/gtk4:v4" - -sudo docker build --tag "${TAG}" --file "Dockerfile.gtk4" . -sudo docker run --rm --security-opt label=disable \ - --volume "$(pwd)/..:/home/user/app" --workdir "/home/user/app" \ - --tty --interactive "${TAG}" bash diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/run-docker-old.sh new/pygobject-3.36.0/.gitlab-ci/run-docker-old.sh --- old/pygobject-3.34.0/.gitlab-ci/run-docker-old.sh 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/.gitlab-ci/run-docker-old.sh 2019-12-30 12:15:35.835093700 +0100 @@ -2,7 +2,7 @@ set -e -TAG="registry.gitlab.gnome.org/gnome/pygobject/old:v2" +TAG="registry.gitlab.gnome.org/gnome/pygobject/old:v3" sudo docker build --build-arg HOST_USER_ID="$UID" --tag "${TAG}" \ --file "Dockerfile.old" . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/run-docker-runtime.sh new/pygobject-3.36.0/.gitlab-ci/run-docker-runtime.sh --- old/pygobject-3.34.0/.gitlab-ci/run-docker-runtime.sh 2019-06-23 15:47:14.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/run-docker-runtime.sh 2019-12-30 12:15:35.835093700 +0100 @@ -8,4 +8,4 @@ sudo docker run --privileged --rm --security-opt label=disable \ --volume "$(pwd)/..:/home/user/app" --workdir "/home/user/app" \ --tty --interactive "${TAG}" xvfb-run -a flatpak run --filesystem=host \ - --share=network --socket=x11 --command=bash org.gnome.Sdk//master + --share=network --socket=x11 --devel --command=bash org.gnome.Sdk//master diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/run-docker.sh new/pygobject-3.36.0/.gitlab-ci/run-docker.sh --- old/pygobject-3.34.0/.gitlab-ci/run-docker.sh 2019-09-09 21:31:15.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/run-docker.sh 2019-12-30 12:15:35.835093700 +0100 @@ -2,10 +2,10 @@ set -e -TAG="registry.gitlab.gnome.org/gnome/pygobject/main:v11" +TAG="registry.gitlab.gnome.org/gnome/pygobject/main:v13" sudo docker build --build-arg HOST_USER_ID="$UID" --tag "${TAG}" \ --file "Dockerfile" . -sudo docker run -e PYENV_VERSION='3.7.3-debug' --rm --security-opt label=disable \ +sudo docker run -e PYENV_VERSION='3.8.1-debug' --rm --security-opt label=disable \ --volume "$(pwd)/..:/home/user/app" --workdir "/home/user/app" \ --tty --interactive "${TAG}" bash diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/test-docker-gtk4.sh new/pygobject-3.36.0/.gitlab-ci/test-docker-gtk4.sh --- old/pygobject-3.34.0/.gitlab-ci/test-docker-gtk4.sh 2019-06-16 16:24:42.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/test-docker-gtk4.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -#!/bin/bash - -set -e - -# ccache setup -export CCACHE_BASEDIR="$(pwd)" -export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache" -COV_DIR="$(pwd)/coverage" -export COVERAGE_FILE="${COV_DIR}/.coverage.${CI_JOB_NAME}" -mkdir -p "${COV_DIR}" -mkdir -p "${CCACHE_DIR}" - -# test -python -m pip install git+https://github.com/pygobject/pycairo.git -python -m pip install pytest pytest-faulthandler coverage -g-ir-inspect Gtk --version=4.0 --print-typelibs -export TEST_GTK_VERSION=4.0 -python setup.py build_tests -xvfb-run -a python -m coverage run tests/runtests.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/test-docker-old.sh new/pygobject-3.36.0/.gitlab-ci/test-docker-old.sh --- old/pygobject-3.34.0/.gitlab-ci/test-docker-old.sh 2019-06-16 16:24:42.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/test-docker-old.sh 2020-03-08 10:10:35.942755000 +0100 @@ -2,20 +2,21 @@ set -e -python --version -virtualenv --python=python _venv +python3 --version +python3 -m venv _venv source _venv/bin/activate # ccache setup export CCACHE_BASEDIR="$(pwd)" export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache" COV_DIR="$(pwd)/coverage" -export COVERAGE_FILE="${COV_DIR}/.coverage.${CI_JOB_NAME}" +COV_KEY="${CI_JOB_NAME}" +export COVERAGE_FILE="${COV_DIR}/.coverage.${COV_KEY}" mkdir -p "${COV_DIR}" mkdir -p "${CCACHE_DIR}" # test -python -m pip install git+https://github.com/pygobject/pycairo.git -python -m pip install pytest pytest-faulthandler coverage +python -m pip install --upgrade pip +python -m pip install pycairo pytest pytest-faulthandler coverage python setup.py build_tests -xvfb-run -a python -m coverage run tests/runtests.py +xvfb-run -a python -m coverage run --context "${COV_KEY}" tests/runtests.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/test-docker.sh new/pygobject-3.36.0/.gitlab-ci/test-docker.sh --- old/pygobject-3.34.0/.gitlab-ci/test-docker.sh 2019-06-16 16:24:42.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/test-docker.sh 2020-03-08 10:10:35.942755000 +0100 @@ -11,7 +11,8 @@ export MALLOC_CHECK_=3 export MALLOC_PERTURB_=$((${RANDOM} % 255 + 1)) export G_SLICE="debug-blocks" -export COVERAGE_FILE="${COV_DIR}/.coverage.${CI_JOB_NAME}" +COV_KEY="${CI_JOB_NAME}" +export COVERAGE_FILE="${COV_DIR}/.coverage.${COV_KEY}" export CCACHE_BASEDIR="$(pwd)" export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache" @@ -21,8 +22,7 @@ mkdir -p "${CCACHE_DIR}" mkdir -p "${COV_DIR}" -python -m pip install git+https://github.com/pygobject/pycairo.git -python -m pip install flake8 pytest pytest-faulthandler coverage +python -m pip install pycairo flake8 pytest pytest-faulthandler coverage export CFLAGS="-coverage -ftest-coverage -fprofile-arcs -Werror" @@ -47,7 +47,7 @@ # BUILD & TEST AGAIN USING SETUP.PY python setup.py build_tests -xvfb-run -a python -m coverage run tests/runtests.py +xvfb-run -a python -m coverage run --context "${COV_KEY}" tests/runtests.py # COLLECT GCOV COVERAGE lcov --rc lcov_branch_coverage=1 --directory . --capture --output-file \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/test-flatpak-gtk4.sh new/pygobject-3.36.0/.gitlab-ci/test-flatpak-gtk4.sh --- old/pygobject-3.34.0/.gitlab-ci/test-flatpak-gtk4.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/pygobject-3.36.0/.gitlab-ci/test-flatpak-gtk4.sh 2019-12-30 12:15:35.835093700 +0100 @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +COV_DIR="$(pwd)/coverage" +COV_KEY="gtk4" +export COVERAGE_FILE="${COV_DIR}/.coverage.${COV_KEY}" +mkdir -p "${COV_DIR}" + +export TEST_GTK_VERSION=4.0 +python3 -m pip install --user pytest pytest-faulthandler coverage +python3 setup.py build_tests +python3 -m coverage run --context "${COV_KEY}" tests/runtests.py +chmod -R 777 "${COV_DIR}" \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/test-flatpak.sh new/pygobject-3.36.0/.gitlab-ci/test-flatpak.sh --- old/pygobject-3.34.0/.gitlab-ci/test-flatpak.sh 2019-06-23 15:47:14.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/test-flatpak.sh 2019-12-30 12:15:35.835093700 +0100 @@ -6,4 +6,4 @@ # for some reason pip3 fails the first time now.. # https://gitlab.com/freedesktop-sdk/freedesktop-sdk/issues/776 python3 -m pip install --user pytest pytest-faulthandler -python3 setup.py test -s +python3 setup.py test -s \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci/test-msys2.sh new/pygobject-3.36.0/.gitlab-ci/test-msys2.sh --- old/pygobject-3.34.0/.gitlab-ci/test-msys2.sh 2019-06-16 16:24:42.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci/test-msys2.sh 2019-12-30 12:15:35.835093700 +0100 @@ -31,9 +31,6 @@ git \ perl -# https://github.com/Alexpux/MINGW-packages/issues/4333 -pacman --noconfirm -S --needed mingw-w64-$MSYS2_ARCH-$PYTHON-pathlib2 - # ccache setup export PATH="$MSYSTEM/lib/ccache/bin:$PATH" mkdir -p _ccache @@ -52,7 +49,7 @@ export PYTHONDEVMODE=1 $PYTHON setup.py build_tests -MSYSTEM= $PYTHON -m coverage run tests/runtests.py +MSYSTEM= $PYTHON -m coverage run --context "${COV_KEY}" tests/runtests.py # FIXME: lcov doesn't support gcc9 #~ curl -O -J -L "https://github.com/linux-test-project/lcov/archive/master.tar.gz" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/.gitlab-ci.yml new/pygobject-3.36.0/.gitlab-ci.yml --- old/pygobject-3.34.0/.gitlab-ci.yml 2019-09-09 21:31:15.000000000 +0200 +++ new/pygobject-3.36.0/.gitlab-ci.yml 2020-03-08 10:10:35.942755000 +0100 @@ -1,4 +1,4 @@ -image: registry.gitlab.gnome.org/gnome/pygobject/main:v11 +image: registry.gitlab.gnome.org/gnome/pygobject/main:v13 stages: - build_and_test @@ -34,7 +34,7 @@ paths: - coverage/ variables: - PYENV_VERSION: "3.6.8" + PYENV_VERSION: "3.6.10" script: - bash -x ./.gitlab-ci/coverage-docker.sh @@ -51,20 +51,6 @@ only: - master -python2-mingw32: - variables: - PYTHON: "python2" - MSYSTEM: "MINGW32" - CHERE_INVOKING: "yes" - <<: *mingw-defaults - -python2-mingw64: - variables: - PYTHON: "python2" - MSYSTEM: "MINGW64" - CHERE_INVOKING: "yes" - <<: *mingw-defaults - python3-mingw32: variables: PYTHON: "python3" @@ -81,62 +67,67 @@ python2.7: variables: - PYENV_VERSION: "2.7.16-debug" + PYENV_VERSION: "2.7.17-debug" <<: *defaults python3.5: variables: - PYENV_VERSION: "3.5.7" + PYENV_VERSION: "3.5.9" <<: *defaults python3.6: variables: - PYENV_VERSION: "3.6.8" + PYENV_VERSION: "3.6.10" <<: *defaults python3.7: variables: - PYENV_VERSION: "3.7.3-debug" + PYENV_VERSION: "3.7.6-debug" <<: *defaults python3.8: variables: - PYENV_VERSION: "3.8-dev-debug" + PYENV_VERSION: "3.8.1-debug" <<: *defaults pypy2.7: allow_failure: true variables: - PYENV_VERSION: "pypy2.7-7.1.0" + PYENV_VERSION: "pypy2.7-7.3.0" <<: *defaults pypy3.6: allow_failure: true variables: - PYENV_VERSION: "pypy3.6-7.1.0" + PYENV_VERSION: "pypy3.6-7.3.0" <<: *defaults -xenial-i386-py2: +xenial-i386-py3: stage: build_and_test - image: registry.gitlab.gnome.org/gnome/pygobject/old:v2 + image: registry.gitlab.gnome.org/gnome/pygobject/old:v3 artifacts: paths: - coverage/ script: - bash -x ./.gitlab-ci/test-docker-old.sh -gtk4: +gnome-master: + allow_failure: true stage: build_and_test - image: registry.gitlab.gnome.org/gnome/pygobject/gtk4:v4 - artifacts: - paths: - - coverage/ + image: registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master + tags: + - flatpak script: - - bash -x ./.gitlab-ci/test-docker-gtk4.sh + - xvfb-run -a flatpak run --filesystem=host --share=network --socket=x11 --command=bash org.gnome.Sdk//master -x .gitlab-ci/test-flatpak.sh -gnome-master: +gnome-master-gtk4: allow_failure: true stage: build_and_test image: registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master + tags: + - flatpak script: - - xvfb-run -a flatpak run --filesystem=host --share=network --socket=x11 --command=bash org.gnome.Sdk//master -x .gitlab-ci/test-flatpak.sh + - xvfb-run -a flatpak run --filesystem=host --share=network --socket=x11 --command=bash org.gnome.Sdk//master -x .gitlab-ci/test-flatpak-gtk4.sh + artifacts: + paths: + - coverage/ \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/NEWS new/pygobject-3.36.0/NEWS --- old/pygobject-3.34.0/NEWS 2019-09-09 21:34:17.000000000 +0200 +++ new/pygobject-3.36.0/NEWS 2020-03-08 15:20:44.991336300 +0100 @@ -1,3 +1,20 @@ +3.36.0 - 2020-03-08 +------------------- + +This will be the last release supporting Python 2. + +* pygobject-object: Avoid checking whether NULL is floating :mr:`135` (:user:`Alexandru Băluț <aleb>`) +* Avoid various new glib deprecation warnings +* Port to g_object_new_with_properties() +* Drop Python 2 support on Windows +* gtk overrides: Drop Menu, MenuItem for Gtk 4 (:user:`Marinus Schraal <mschraal>`) +* Docs: + + * Update openSUSE instructions (:user:`sharkwouter`) + * Add Gaphor to Who is Using PyGObject (:user:`Dan Yeaw <danyeaw>`) + * Remove reference to a fixed bug (:user:`Christian Stadelmann <genodeftest>`) + + 3.34.0 - 2019-09-09 ------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/PKG-INFO new/pygobject-3.36.0/PKG-INFO --- old/pygobject-3.34.0/PKG-INFO 2019-09-09 21:37:02.000000000 +0200 +++ new/pygobject-3.36.0/PKG-INFO 2020-03-08 15:24:07.806813700 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: PyGObject -Version: 3.34.0 +Version: 3.36.0 Summary: Python bindings for GObject Introspection Home-page: https://pygobject.readthedocs.io Author: James Henstridge diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/PyGObject.egg-info/PKG-INFO new/pygobject-3.36.0/PyGObject.egg-info/PKG-INFO --- old/pygobject-3.34.0/PyGObject.egg-info/PKG-INFO 2019-09-09 21:37:02.000000000 +0200 +++ new/pygobject-3.36.0/PyGObject.egg-info/PKG-INFO 2020-03-08 15:24:07.506801400 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: PyGObject -Version: 3.34.0 +Version: 3.36.0 Summary: Python bindings for GObject Introspection Home-page: https://pygobject.readthedocs.io Author: James Henstridge diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/PyGObject.egg-info/SOURCES.txt new/pygobject-3.36.0/PyGObject.egg-info/SOURCES.txt --- old/pygobject-3.34.0/PyGObject.egg-info/SOURCES.txt 2019-09-09 21:37:02.000000000 +0200 +++ new/pygobject-3.36.0/PyGObject.egg-info/SOURCES.txt 2020-03-08 15:24:07.542802800 +0100 @@ -12,18 +12,17 @@ setup.cfg setup.py .gitlab-ci/Dockerfile -.gitlab-ci/Dockerfile.gtk4 .gitlab-ci/Dockerfile.old .gitlab-ci/README.rst .gitlab-ci/coverage-docker.sh -.gitlab-ci/fixup-cov-paths.py -.gitlab-ci/run-docker-gtk4.sh +.gitlab-ci/fixup-covpy-paths.py +.gitlab-ci/fixup-lcov-paths.py .gitlab-ci/run-docker-old.sh .gitlab-ci/run-docker-runtime.sh .gitlab-ci/run-docker.sh -.gitlab-ci/test-docker-gtk4.sh .gitlab-ci/test-docker-old.sh .gitlab-ci/test-docker.sh +.gitlab-ci/test-flatpak-gtk4.sh .gitlab-ci/test-flatpak.sh .gitlab-ci/test-msys2.sh PyGObject.egg-info/PKG-INFO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/docs/getting_started.rst new/pygobject-3.36.0/docs/getting_started.rst --- old/pygobject-3.34.0/docs/getting_started.rst 2019-06-23 15:47:14.000000000 +0200 +++ new/pygobject-3.36.0/docs/getting_started.rst 2019-12-30 12:15:35.835093700 +0100 @@ -127,7 +127,7 @@ Installing the system provided PyGObject: #) Open a terminal - #) Execute ``sudo zypper install python3-gobject gtk3`` + #) Execute ``sudo zypper install python3-gobject python3-gobject-Gdk typelib-1_0-Gtk-3_0 libgtk-3-0`` #) Change the directory to where your ``hello.py`` script can be found #) Run ``python3 hello.py`` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/docs/guide/api/basic_types.rst new/pygobject-3.36.0/docs/guide/api/basic_types.rst --- old/pygobject-3.34.0/docs/guide/api/basic_types.rst 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/docs/guide/api/basic_types.rst 2020-03-08 10:10:35.942755000 +0100 @@ -40,9 +40,6 @@ * Unix + Python 2: :obj:`str` * Unix + Python 3: :obj:`str` -On Python 3 there is currently no support for :obj:`bytes`, see `bug 746564 -<https://bugzilla.gnome.org/show_bug.cgi?id=746564>`__ for more details. - Other Types ----------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/docs/index.rst new/pygobject-3.36.0/docs/index.rst --- old/pygobject-3.34.0/docs/index.rst 2019-06-16 16:24:42.000000000 +0200 +++ new/pygobject-3.36.0/docs/index.rst 2019-12-30 12:15:35.835093700 +0100 @@ -69,6 +69,8 @@ * `Anaconda <https://fedoraproject.org/wiki/Anaconda>`__ - an installation program used by Fedora, RHEL and others * `D-Feet <https://wiki.gnome.org/action/show/Apps/DFeet>`__ - an easy to use D-Bus debugger +* `Gaphor <https://gaphor.org/>`__ - a simple modeling tool +* `Girens <https://gitlab.gnome.org/tijder/girens>`__ - a Plex client for playing movies, TV shows and music from your Plex library * `GNOME Music <https://wiki.gnome.org/Apps/Music>`__ - a music player for GNOME * `GNOME Tweak Tool <https://wiki.gnome.org/action/show/Apps/GnomeTweakTool>`__ - a tool to customize advanced GNOME 3 options * `Gramps <https://gramps-project.org/>`__ - a genealogy program diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/gi/gimodule.c new/pygobject-3.36.0/gi/gimodule.c --- old/pygobject-3.34.0/gi/gimodule.c 2019-08-18 19:46:57.000000000 +0200 +++ new/pygobject-3.36.0/gi/gimodule.c 2019-12-30 12:15:35.835093700 +0100 @@ -460,6 +460,8 @@ return pspec; } +G_GNUC_BEGIN_IGNORE_DEPRECATIONS + /** * pyg_parse_constructor_args: helper function for PyGObject constructors * @obj_type: GType of the GObject, for parameter introspection @@ -514,6 +516,8 @@ return TRUE; } +G_GNUC_END_IGNORE_DEPRECATIONS + /* Only for backwards compatibility */ static int pygobject_enable_threads(void) @@ -1001,19 +1005,53 @@ return (PyObject *) g_private_get(&pygobject_construction_wrapper); } +/** + * Like g_object_new_with_properties() but also works with older glib versions. + */ +GObject * +pygobject_object_new_with_properties(GType object_type, + guint n_properties, + const char *names[], + const GValue values[]) +{ + GObject *obj; + +#if GLIB_CHECK_VERSION(2, 54, 0) + obj = g_object_new_with_properties(object_type, n_properties, names, values); +#else + { + GParameter *parameters; + uint i; + + parameters = g_new(GParameter, n_properties); + for (i = 0; i < n_properties; i++) { + parameters[i].name = names[i]; + parameters[i].value = values[i]; + } + obj = g_object_newv(object_type, n_properties, parameters); + g_free(parameters); + } +#endif + + return obj; +} + int -pygobject_constructv(PyGObject *self, - guint n_parameters, - GParameter *parameters) +pygobject_constructv (PyGObject *self, + guint n_properties, + const char *names[], + const GValue values[]) { GObject *obj; g_assert (self->obj == NULL); pygobject_init_wrapper_set((PyObject *) self); -G_GNUC_BEGIN_IGNORE_DEPRECATIONS - obj = g_object_newv(pyg_type_from_object((PyObject *) self), - n_parameters, parameters); -G_GNUC_END_IGNORE_DEPRECATIONS + + obj = pygobject_object_new_with_properties(pyg_type_from_object((PyObject *) self), + n_properties, + names, + values); + if (g_object_is_floating (obj)) self->private_flags.flags |= PYGOBJECT_GOBJECT_WAS_FLOATING; pygobject_sink (obj); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/gi/gimodule.h new/pygobject-3.36.0/gi/gimodule.h --- old/pygobject-3.34.0/gi/gimodule.h 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/gi/gimodule.h 2019-12-30 12:15:35.835093700 +0100 @@ -4,7 +4,14 @@ #include "pygobject-internal.h" int pygobject_constructv (PyGObject *self, - guint n_parameters, - GParameter *parameters); + guint n_properties, + const char *names[], + const GValue values[]); + +GObject * +pygobject_object_new_with_properties(GType object_type, + guint n_properties, + const char *names[], + const GValue values[]); #endif /*_PYGOBJECT_GIMODULE_H_*/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/gi/overrides/Gtk.py new/pygobject-3.36.0/gi/overrides/Gtk.py --- old/pygobject-3.34.0/gi/overrides/Gtk.py 2019-06-16 16:24:42.000000000 +0200 +++ new/pygobject-3.36.0/gi/overrides/Gtk.py 2020-03-08 10:10:35.942755000 +0100 @@ -137,9 +137,10 @@ translate_coordinates = strip_boolean_result(Gtk.Widget.translate_coordinates) - def freeze_child_notify(self): - super(Widget, self).freeze_child_notify() - return _FreezeNotifyManager(self) + if Gtk._version != "4.0": + def freeze_child_notify(self): + super(Widget, self).freeze_child_notify() + return _FreezeNotifyManager(self) if Gtk._version != "4.0": def drag_dest_set_target_list(self, target_list): @@ -186,18 +187,19 @@ # alias for Python 2.x object protocol __nonzero__ = __bool__ - def child_get_property(self, child, property_name, value=None): - if value is None: - prop = self.find_child_property(property_name) - if prop is None: - raise ValueError('Class "%s" does not contain child property "%s"' % - (self, property_name)) - value = GObject.Value(prop.value_type) + if Gtk._version in ("2.0", "3.0"): - Gtk.Container.child_get_property(self, child, property_name, value) - return value.get_value() + def child_get_property(self, child, property_name, value=None): + if value is None: + prop = self.find_child_property(property_name) + if prop is None: + raise ValueError('Class "%s" does not contain child property "%s"' % + (self, property_name)) + value = GObject.Value(prop.value_type) + + Gtk.Container.child_get_property(self, child, property_name, value) + return value.get_value() - if Gtk._version in ("2.0", "3.0"): def child_get(self, child, *prop_names): """Returns a list of child property values for the given names.""" return [self.child_get_property(child, name) for name in prop_names] @@ -450,14 +452,14 @@ __all__.append('SizeGroup') -class MenuItem(Gtk.MenuItem): - __init__ = deprecated_init(Gtk.MenuItem.__init__, - arg_names=('label',), - category=PyGTKDeprecationWarning) - +if Gtk._version in ("2.0", "3.0"): + class MenuItem(Gtk.MenuItem): + __init__ = deprecated_init(Gtk.MenuItem.__init__, + arg_names=('label',), + category=PyGTKDeprecationWarning) -MenuItem = override(MenuItem) -__all__.append('MenuItem') + MenuItem = override(MenuItem) + __all__.append('MenuItem') def _get_utf8_length(string): @@ -1605,7 +1607,7 @@ TreeModelFilter = override(TreeModelFilter) __all__.append('TreeModelFilter') -if Gtk._version != '2.0': +if Gtk._version == '3.0': class Menu(Gtk.Menu): def popup(self, parent_menu_shell, parent_menu_item, func, data, button, activate_time): self.popup_for_device(None, parent_menu_shell, parent_menu_item, func, data, button, activate_time) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/gi/pygi-info.c new/pygobject-3.36.0/gi/pygi-info.c --- old/pygobject-3.34.0/gi/pygi-info.c 2019-06-23 15:47:14.000000000 +0200 +++ new/pygobject-3.36.0/gi/pygi-info.c 2019-12-30 12:15:35.839093700 +0100 @@ -2080,7 +2080,7 @@ size = g_struct_info_get_size ( (GIStructInfo *) info); g_assert (size > 0); - g_memmove ((char*) pointer + offset, value.v_pointer, size); + memmove ((char*) pointer + offset, value.v_pointer, size); g_base_info_unref (info); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/gi/pygi-type.c new/pygobject-3.36.0/gi/pygi-type.c --- old/pygobject-3.34.0/gi/pygi-type.c 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/gi/pygi-type.c 2019-12-30 12:15:35.839093700 +0100 @@ -1162,7 +1162,7 @@ GParamSpec **props; guint n_props = 0, i; gboolean has_prop = FALSE; - G_CONST_RETURN gchar *blurb=NULL; + const gchar *blurb=NULL; class = g_type_class_ref(gtype); props = g_object_class_list_properties(class, &n_props); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/gi/pygi-value.c new/pygobject-3.36.0/gi/pygi-value.c --- old/pygobject-3.34.0/gi/pygi-value.c 2019-06-16 16:24:42.000000000 +0200 +++ new/pygobject-3.36.0/gi/pygi-value.c 2019-12-30 12:15:35.839093700 +0100 @@ -30,6 +30,11 @@ #include "pygparamspec.h" +/* glib 2.62 has started to print warnings for these which can't be disabled selectively, so just copy them here */ +#define PYGI_TYPE_VALUE_ARRAY (g_value_array_get_type()) +#define PYGI_IS_PARAM_SPEC_VALUE_ARRAY(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), PYGI_TYPE_VALUE_ARRAY)) +#define PYGI_PARAM_SPEC_VALUE_ARRAY(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), g_param_spec_types[18], GParamSpecValueArray)) + GIArgument _pygi_argument_from_g_value(const GValue *value, GITypeInfo *type_info) @@ -502,7 +507,7 @@ gboolean holds_value_array; G_GNUC_BEGIN_IGNORE_DEPRECATIONS - holds_value_array = G_VALUE_HOLDS(value, G_TYPE_VALUE_ARRAY); + holds_value_array = G_VALUE_HOLDS(value, PYGI_TYPE_VALUE_ARRAY); G_GNUC_END_IGNORE_DEPRECATIONS if (obj == Py_None) @@ -718,7 +723,7 @@ gboolean holds_value_array; G_GNUC_BEGIN_IGNORE_DEPRECATIONS - holds_value_array = G_VALUE_HOLDS(value, G_TYPE_VALUE_ARRAY); + holds_value_array = G_VALUE_HOLDS(value, PYGI_TYPE_VALUE_ARRAY); G_GNUC_END_IGNORE_DEPRECATIONS if (G_VALUE_HOLDS(value, PY_TYPE_OBJECT)) { @@ -826,6 +831,7 @@ } +G_GNUC_BEGIN_IGNORE_DEPRECATIONS int pyg_param_gvalue_from_pyobject(GValue* value, PyObject* py_obj, @@ -841,14 +847,16 @@ g_value_set_uint(value, u); return 0; } - else if (G_IS_PARAM_SPEC_VALUE_ARRAY(pspec)) + else if (PYGI_IS_PARAM_SPEC_VALUE_ARRAY(pspec)) return pyg_value_array_from_pyobject(value, py_obj, - G_PARAM_SPEC_VALUE_ARRAY(pspec)); + PYGI_PARAM_SPEC_VALUE_ARRAY(pspec)); else { return pyg_value_from_pyobject(value, py_obj); } } +G_GNUC_END_IGNORE_DEPRECATIONS + PyObject* pyg_param_gvalue_as_pyobject(const GValue* gvalue, gboolean copy_boxed, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/gi/pygobject-object.c new/pygobject-3.36.0/gi/pygobject-object.c --- old/pygobject-3.34.0/gi/pygobject-object.c 2019-08-18 18:51:10.000000000 +0200 +++ new/pygobject-3.36.0/gi/pygobject-object.c 2020-03-08 10:10:35.942755000 +0100 @@ -1256,22 +1256,27 @@ PyObject_GC_Del(op); } -gboolean +static gboolean pygobject_prepare_construct_properties(GObjectClass *class, PyObject *kwargs, - guint *n_params, GParameter **params) + guint *n_properties, const char **names[], const GValue **values) { - *n_params = 0; - *params = NULL; + *n_properties = 0; + *names = NULL; + *values = NULL; if (kwargs) { Py_ssize_t pos = 0; PyObject *key; PyObject *value; + Py_ssize_t len; - *params = g_new0(GParameter, PyDict_Size(kwargs)); + len = PyDict_Size(kwargs); + *names = g_new(const char*, len); + *values = g_new0(GValue, len); while (PyDict_Next(kwargs, &pos, &key, &value)) { GParamSpec *pspec; - GParameter *param = &(*params)[*n_params]; + GValue *gvalue = &(*values)[*n_properties]; + const gchar *key_str = PYGLIB_PyUnicode_AsString(key); pspec = g_object_class_find_property(class, key_str); @@ -1281,16 +1286,16 @@ G_OBJECT_CLASS_NAME(class), key_str); return FALSE; } - g_value_init(¶m->value, G_PARAM_SPEC_VALUE_TYPE(pspec)); - if (pyg_param_gvalue_from_pyobject(¶m->value, value, pspec) < 0) { + g_value_init(gvalue, G_PARAM_SPEC_VALUE_TYPE(pspec)); + if (pyg_param_gvalue_from_pyobject(gvalue, value, pspec) < 0) { PyErr_Format(PyExc_TypeError, "could not convert value for property `%s' from %s to %s", key_str, Py_TYPE(value)->tp_name, g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec))); return FALSE; } - param->name = g_strdup(key_str); - ++(*n_params); + (*names)[*n_properties] = g_strdup(key_str); + ++(*n_properties); } } return TRUE; @@ -1302,8 +1307,9 @@ pygobject_init(PyGObject *self, PyObject *args, PyObject *kwargs) { GType object_type; - guint n_params = 0, i; - GParameter *params = NULL; + guint n_properties = 0, i; + const GValue *values = NULL; + const char **names = NULL; GObjectClass *class; /* Only do GObject creation and property setting if the GObject hasn't @@ -1337,18 +1343,20 @@ return -1; } - if (!pygobject_prepare_construct_properties (class, kwargs, &n_params, ¶ms)) + if (!pygobject_prepare_construct_properties (class, kwargs, &n_properties, &names, &values)) goto cleanup; - if (pygobject_constructv(self, n_params, params)) - PyErr_SetString(PyExc_RuntimeError, "could not create object"); + if (pygobject_constructv(self, n_properties, names, values)) + PyErr_SetString(PyExc_RuntimeError, "could not create object"); cleanup: - for (i = 0; i < n_params; i++) { - g_free((gchar *) params[i].name); - g_value_unset(¶ms[i].value); + for (i = 0; i < n_properties; i++) { + g_free(names[i]); + g_value_unset(&values[i]); } - g_free(params); + g_free(names); + g_free(values); + g_type_class_unref(class); return (self->obj) ? 0 : -1; @@ -1939,7 +1947,9 @@ if (G_VALUE_HOLDS_OBJECT (&ret)) { GObject *obj = g_value_get_object (&ret); - was_floating = g_object_is_floating (obj); + if (obj != NULL && G_IS_OBJECT(obj)) { + was_floating = g_object_is_floating (obj); + } } py_ret = pyg_value_as_pyobject(&ret, TRUE); if (!was_floating) @@ -2495,8 +2505,9 @@ GType type; GObject *obj = NULL; GObjectClass *class; - guint n_params = 0, i; - GParameter *params = NULL; + guint n_properties = 0, i; + const GValue *values = NULL; + const char **names = NULL; if (!PyArg_ParseTuple (args, "O:gobject.new", &pytype)) { return NULL; @@ -2517,22 +2528,22 @@ return NULL; } - if (!pygobject_prepare_construct_properties (class, kwargs, &n_params, ¶ms)) + if (!pygobject_prepare_construct_properties (class, kwargs, &n_properties, &names, &values)) goto cleanup; -G_GNUC_BEGIN_IGNORE_DEPRECATIONS - obj = g_object_newv(type, n_params, params); -G_GNUC_END_IGNORE_DEPRECATIONS + obj = pygobject_object_new_with_properties(type, n_properties, names, values); if (!obj) PyErr_SetString (PyExc_RuntimeError, "could not create object"); cleanup: - for (i = 0; i < n_params; i++) { - g_free((gchar *) params[i].name); - g_value_unset(¶ms[i].value); + for (i = 0; i < n_properties; i++) { + g_free(names[i]); + g_value_unset(&values[i]); } - g_free(params); + g_free(names); + g_free(values); + g_type_class_unref(class); if (obj) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/gi/pygobject-object.h new/pygobject-3.36.0/gi/pygobject-object.h --- old/pygobject-3.34.0/gi/pygobject-object.h 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/gi/pygobject-object.h 2019-12-30 12:15:35.839093700 +0100 @@ -33,10 +33,6 @@ g_object_get_qdata(obj, pygobject_instance_data_key)); } -gboolean pygobject_prepare_construct_properties (GObjectClass *class, - PyObject *kwargs, - guint *n_params, - GParameter **params); void pygobject_register_class (PyObject *dict, const gchar *type_name, GType gtype, PyTypeObject *type, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/meson.build new/pygobject-3.36.0/meson.build --- old/pygobject-3.34.0/meson.build 2019-09-09 21:33:19.000000000 +0200 +++ new/pygobject-3.36.0/meson.build 2020-03-08 15:13:57.579728400 +0100 @@ -1,5 +1,5 @@ project('pygobject', 'c', - version : '3.34.0', + version : '3.36.0', meson_version : '>= 0.46.0', default_options : [ 'warning_level=1', 'buildtype=debugoptimized']) @@ -15,6 +15,10 @@ pymod = import('python') python = pymod.find_installation(get_option('python')) +if python.language_version().version_compare('< 3.0') and host_machine.system() == 'windows' + error('Python 2 on Windows no longer supported since 3.35. Use Python 3 instead.') +endif + python_dep = python.dependency() glib_version_req = '>= 2.48.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/setup.cfg new/pygobject-3.36.0/setup.cfg --- old/pygobject-3.34.0/setup.cfg 2019-09-09 21:37:02.000000000 +0200 +++ new/pygobject-3.36.0/setup.cfg 2020-03-08 15:24:07.806813700 +0100 @@ -4,6 +4,7 @@ [coverage:run] branch = True +relative_files = True include = gi/* tests/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/setup.py new/pygobject-3.36.0/setup.py --- old/pygobject-3.34.0/setup.py 2019-09-09 21:33:30.000000000 +0200 +++ new/pygobject-3.36.0/setup.py 2020-03-08 15:14:07.383750000 +0100 @@ -41,7 +41,7 @@ from distutils.spawn import find_executable -PYGOBJECT_VERSION = "3.34.0" +PYGOBJECT_VERSION = "3.36.0" GLIB_VERSION_REQUIRED = "2.48.0" GI_VERSION_REQUIRED = "1.46.0" PYCAIRO_VERSION_REQUIRED = "1.11.1" @@ -1111,6 +1111,9 @@ add_ext_compiler_flags(gi_cairo_ext, compiler) def run(self): + if os.name == "nt" and sys.version_info[0] == 2: + raise SystemExit("Python 2 on Windows no longer supported since 3.35. Use Python 3 instead.") + self._write_config_h() self._setup_extensions() du_build_ext.run(self) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/subprojects/pycairo.wrap new/pygobject-3.36.0/subprojects/pycairo.wrap --- old/pygobject-3.34.0/subprojects/pycairo.wrap 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/subprojects/pycairo.wrap 2020-03-08 10:10:35.942755000 +0100 @@ -1,4 +1,4 @@ [wrap-git] directory=pycairo url=https://github.com/pygobject/pycairo.git -revision=master +revision=pycairo-1.18 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/tests/__init__.py new/pygobject-3.36.0/tests/__init__.py --- old/pygobject-3.34.0/tests/__init__.py 2019-06-16 16:24:42.000000000 +0200 +++ new/pygobject-3.36.0/tests/__init__.py 2019-12-30 12:15:35.839093700 +0100 @@ -89,6 +89,9 @@ os.environ['GSETTINGS_SCHEMA_DIR'] = tests_builddir os.environ['G_FILENAME_ENCODING'] = 'UTF-8' + # Avoid accessibility dbus warnings + os.environ['NO_AT_BRIDGE'] = '1' + # Force the default theme so broken themes don't affect the tests os.environ['GTK_THEME'] = 'Adwaita' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/tests/regressextra.c new/pygobject-3.36.0/tests/regressextra.c --- old/pygobject-3.34.0/tests/regressextra.c 2019-08-18 18:51:10.000000000 +0200 +++ new/pygobject-3.36.0/tests/regressextra.c 2020-03-08 10:10:35.942755000 +0100 @@ -343,6 +343,7 @@ { SIGNAL_0, ACTION_SIGNAL, + ACTION2_SIGNAL, LAST_SIGNAL }; @@ -356,6 +357,12 @@ return ret; } +static RegressTestAction * +regress_test_action_do_action2 (RegressTestAction *self) +{ + return NULL; +} + static void regress_test_action_init (RegressTestAction *self) { @@ -375,4 +382,17 @@ G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_CALLBACK (regress_test_action_do_action), NULL, NULL, NULL, regress_test_action_get_type (), 0); + + /** + * RegressTestAction::action2: + * + * Another action signal. + * + * Returns: (transfer full): another #RegressTestAction + */ + regress_test_action_signals[ACTION2_SIGNAL] = + g_signal_new_class_handler ("action2", + G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_CALLBACK (regress_test_action_do_action2), NULL, NULL, + NULL, regress_test_action_get_type (), 0); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/tests/test_gtk_template.py new/pygobject-3.36.0/tests/test_gtk_template.py --- old/pygobject-3.34.0/tests/test_gtk_template.py 2019-06-16 16:24:42.000000000 +0200 +++ new/pygobject-3.36.0/tests/test_gtk_template.py 2019-12-30 12:15:35.839093700 +0100 @@ -190,18 +190,17 @@ assert w.goodbye_button.props.label == "Goodbye World" assert w.callback_hello == [] - w._hello_button.clicked() + w._hello_button.emit("clicked") assert w.callback_hello == [(w,)] assert w.callback_hello_after == [(w,)] assert w.callback_goodbye == [] - w.goodbye_button.clicked() + w.goodbye_button.emit("clicked") assert w.callback_goodbye == [(w.goodbye_button,)] assert w.callback_goodbye_after == [(w.goodbye_button,)] def test_duplicate_handler(): - type_name = new_gtype_name() xml = """\ @@ -209,7 +208,7 @@ <template class="{0}" parent="GtkBox"> <child> <object class="GtkButton" id="hello_button"> - <signal name="clicked" handler="hello_button_clicked"> + <signal name="clicked" handler="hello_button_clicked" /> </object> </child> </template> @@ -300,7 +299,6 @@ def test_handler_swapped_not_supported(): - type_name = new_gtype_name() xml = """\ @@ -332,7 +330,6 @@ def test_handler_class_staticmethod(): - type_name = new_gtype_name() xml = """\ @@ -368,13 +365,13 @@ signal_args_static.append(args) foo = Foo() - foo.hello_button.clicked() + foo.hello_button.emit("clicked") assert signal_args_class == [(Foo, foo.hello_button)] assert signal_args_static == [(foo.hello_button,)] [email protected](Gtk._version == "4.0", reason="errors out first with gtk4") def test_check_decorated_class(): - NonWidget = type("Foo", (object,), {}) with pytest.raises(TypeError, match=".*on Widgets.*"): Gtk.Template.from_string("")(NonWidget) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/tests/test_overrides_gtk.py new/pygobject-3.36.0/tests/test_overrides_gtk.py --- old/pygobject-3.34.0/tests/test_overrides_gtk.py 2019-06-23 15:30:51.000000000 +0200 +++ new/pygobject-3.36.0/tests/test_overrides_gtk.py 2020-03-08 10:10:32.174702400 +0100 @@ -56,7 +56,7 @@ toplevel = widget else: if Gtk._version == "4.0": - toplevel = widget.get_parent_surface() + toplevel = widget.get_parent() else: toplevel = widget.get_parent_window() @@ -79,6 +79,7 @@ @unittest.skipUnless(Gtk, 'Gtk not available') [email protected](Gtk_version == "4.0", "not in gtk4") def test_freeze_child_notif(): events = [] @@ -90,10 +91,7 @@ c = Gtk.Button() c.connect("child-notify", on_notify) c.freeze_child_notify() - if GTK4: - b.pack_start(c) - else: - b.pack_start(c, True, True, 0) + b.pack_start(c, True, True, 0) b.child_set_property(c, "pack-type", Gtk.PackType.END) b.child_set_property(c, "pack-type", Gtk.PackType.START) c.thaw_child_notify() @@ -895,7 +893,10 @@ else: win.size_allocate(rect) self.assertTrue(win._alloc_called) - self.assertIsInstance(win._alloc_value, Gdk.Rectangle) + if GTK4: + self.assertIsInstance(win._alloc_value, int) + else: + self.assertIsInstance(win._alloc_value, Gdk.Rectangle) self.assertTrue(win._alloc_error is None, win._alloc_error) @unittest.expectedFailure # https://bugzilla.gnome.org/show_bug.cgi?id=735693 @@ -2699,11 +2700,12 @@ result = box.child_get_property(child, 'padding') self.assertEqual(result, 42) + @unittest.skipIf(Gtk_version == "4.0", "not in gtk4") def test_child_get_property_error(self): box = Gtk.Box() child = Gtk.Button() if Gtk_version == "4.0": - box.pack_start(child) + box.add(child) else: box.pack_start(child, expand=False, fill=True, padding=42) with self.assertRaises(ValueError): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/tests/test_signal.py new/pygobject-3.36.0/tests/test_signal.py --- old/pygobject-3.34.0/tests/test_signal.py 2019-08-18 18:51:10.000000000 +0200 +++ new/pygobject-3.36.0/tests/test_signal.py 2020-03-08 10:10:35.942755000 +0100 @@ -1247,6 +1247,8 @@ obj = Regress.TestAction() other_obj = obj.emit('action') self.assertEqual(other_obj.__grefcount__, 1) + other_obj2 = obj.emit('action2') + self.assertIsNone(other_obj2) class TestIntrospectedSignalsIssue158(unittest.TestCase): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pygobject-3.34.0/tests/testhelpermodule.c new/pygobject-3.36.0/tests/testhelpermodule.c --- old/pygobject-3.34.0/tests/testhelpermodule.c 2019-01-20 10:52:42.000000000 +0100 +++ new/pygobject-3.36.0/tests/testhelpermodule.c 2019-12-30 12:15:35.843093600 +0100 @@ -513,6 +513,8 @@ Py_RETURN_NONE; } +#define PYGI_TYPE_VALUE_ARRAY (g_value_array_get_type()) + static PyObject * _wrap_test_value_array(PyObject *self, PyObject *args) { @@ -523,7 +525,7 @@ return NULL; G_GNUC_BEGIN_IGNORE_DEPRECATIONS - g_value_init(value, G_TYPE_VALUE_ARRAY); + g_value_init(value, PYGI_TYPE_VALUE_ARRAY); G_GNUC_END_IGNORE_DEPRECATIONS if (pyg_value_from_pyobject(value, obj)) { @@ -550,9 +552,9 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS if (pyg_boxed_check(obj, G_TYPE_VALUE) && - G_VALUE_HOLDS(pyg_boxed_get(obj, GValue), G_TYPE_VALUE_ARRAY)) { + G_VALUE_HOLDS(pyg_boxed_get(obj, GValue), PYGI_TYPE_VALUE_ARRAY)) { arr = g_value_get_boxed(pyg_boxed_get(obj, GValue)); - } else if (pyg_boxed_check(obj, G_TYPE_VALUE_ARRAY)) { + } else if (pyg_boxed_check(obj, PYGI_TYPE_VALUE_ARRAY)) { arr = pyg_boxed_get(obj, GValueArray); } else { PyErr_SetString(PyExc_TypeError, "First argument is not GValueArray"); @@ -655,6 +657,7 @@ return py_list; } +G_GNUC_BEGIN_IGNORE_DEPRECATIONS static PyObject * _wrap_test_parse_constructor_args (PyObject *self, PyObject *args) @@ -676,6 +679,8 @@ return PYGLIB_PyLong_FromLong (nparams); } +G_GNUC_END_IGNORE_DEPRECATIONS + static PyObject * _wrap_test_to_unichar_conv (PyObject * self, PyObject *args) {
