Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-setuptools-gettext for 
openSUSE:Factory checked in at 2024-01-03 12:24:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-setuptools-gettext (Old)
 and      /work/SRC/openSUSE:Factory/.python-setuptools-gettext.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-setuptools-gettext"

Wed Jan  3 12:24:38 2024 rev:3 rq:1136273 version:0.1.8

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-setuptools-gettext/python-setuptools-gettext.changes
      2023-06-12 15:26:21.691020082 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-setuptools-gettext.new.28375/python-setuptools-gettext.changes
   2024-01-03 12:24:47.307039793 +0100
@@ -1,0 +2,8 @@
+Fri Dec 29 10:28:24 UTC 2023 - Dirk Müller <[email protected]>
+
+- update to 0.1.8:
+  * **Full Changelog**: https://github.com/breezy-
+    team/setuptools-gettext/compare/v0.1.1...v0.1.7
+  * Delay adding entry points to finalize_distribution_options
+
+-------------------------------------------------------------------

Old:
----
  setuptools-gettext-0.1.1.tar.gz

New:
----
  setuptools-gettext-0.1.8.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-setuptools-gettext.spec ++++++
--- /var/tmp/diff_new_pack.JIfXQX/_old  2024-01-03 12:24:48.371078671 +0100
+++ /var/tmp/diff_new_pack.JIfXQX/_new  2024-01-03 12:24:48.375078817 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-setuptools-gettext
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,22 +18,19 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-setuptools-gettext
-Version:        0.1.1
+Version:        0.1.8
 Release:        0
 Summary:        Setuptools gettext extension plugin
 License:        GPL-2.0-or-later
 URL:            https://github.com/breezy-team/setuptools-gettext
 Source:         
https://files.pythonhosted.org/packages/source/s/setuptools-gettext/setuptools-gettext-%{version}.tar.gz
 BuildRequires:  %{python_module pip}
-BuildRequires:  %{python_module setuptools >= 46.1}
+BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-setuptools >= 46.1
 BuildArch:      noarch
-# SECTION test requirements
-BuildRequires:  %{python_module setuptools >= 46.1}
-# /SECTION
 %python_subpackages
 
 %description
@@ -56,5 +53,5 @@
 %doc README.md
 %license COPYING
 %{python_sitelib}/setuptools_gettext
-%{python_sitelib}/setuptools_gettext-%{version}*-info
+%{python_sitelib}/setuptools_gettext-%{version}.dist-info
 

++++++ setuptools-gettext-0.1.1.tar.gz -> setuptools-gettext-0.1.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-gettext-0.1.1/.github/workflows/disperse.yml 
new/setuptools-gettext-0.1.8/.github/workflows/disperse.yml
--- old/setuptools-gettext-0.1.1/.github/workflows/disperse.yml 2022-10-20 
23:41:36.000000000 +0200
+++ new/setuptools-gettext-0.1.8/.github/workflows/disperse.yml 2023-12-05 
00:26:00.000000000 +0100
@@ -11,14 +11,4 @@
 
     steps:
       - uses: actions/checkout@v2
-      - name: Set up Python
-        uses: actions/setup-python@v2
-      - name: Install dependencies
-        run: |
-          sudo apt install protobuf-compiler
-      - name: Install disperse
-        run: |
-          pip install git+https://github.com/jelmer/disperse
-      - name: Validate disperse.conf
-        run: |
-          PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python disperse validate .
+      - uses: jelmer/action-disperse-validate@v1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-gettext-0.1.1/.github/workflows/pythontest.yml 
new/setuptools-gettext-0.1.8/.github/workflows/pythontest.yml
--- old/setuptools-gettext-0.1.1/.github/workflows/pythontest.yml       
2022-10-20 23:41:36.000000000 +0200
+++ new/setuptools-gettext-0.1.8/.github/workflows/pythontest.yml       
2023-12-05 00:26:00.000000000 +0100
@@ -13,18 +13,13 @@
       matrix:
         os: [ubuntu-latest, macos-latest, windows-latest]
         python-version:
-          ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11.0-rc - 3.11", pypy3]
-        exclude:
-          - os: macos-latest
-            python-version: pypy3
-          - os: windows-latest
-            python-version: pypy3
+          ["3.7", "3.8", "3.9", "3.10", "3.11"]
       fail-fast: false
 
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v3
       - name: Set up Python ${{ matrix.python-version }}
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v4
         with:
           python-version: ${{ matrix.python-version }}
       - name: Install dependencies
@@ -36,8 +31,8 @@
         if: "matrix.os == 'ubuntu-latest'"
       - name: Style checks
         run: |
-          pip install -U flake8
-          python -m flake8
+          pip install -U ruff
+          python -m ruff check .
       - name: Typing checks
         run: |
           pip install -U mypy types-setuptools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/.gitignore 
new/setuptools-gettext-0.1.8/.gitignore
--- old/setuptools-gettext-0.1.1/.gitignore     2022-10-20 23:41:36.000000000 
+0200
+++ new/setuptools-gettext-0.1.8/.gitignore     2023-12-05 00:26:00.000000000 
+0100
@@ -1,3 +1,5 @@
 dist
 build
 setuptools_gettext.egg-info
+*~
+__pycache__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/MANIFEST.in 
new/setuptools-gettext-0.1.8/MANIFEST.in
--- old/setuptools-gettext-0.1.1/MANIFEST.in    1970-01-01 01:00:00.000000000 
+0100
+++ new/setuptools-gettext-0.1.8/MANIFEST.in    2023-12-05 00:26:00.000000000 
+0100
@@ -0,0 +1 @@
+graft example/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/PKG-INFO 
new/setuptools-gettext-0.1.8/PKG-INFO
--- old/setuptools-gettext-0.1.1/PKG-INFO       2022-10-20 23:41:44.439694400 
+0200
+++ new/setuptools-gettext-0.1.8/PKG-INFO       2023-12-05 00:26:04.905951300 
+0100
@@ -1,14 +1,13 @@
 Metadata-Version: 2.1
 Name: setuptools-gettext
-Version: 0.1.1
+Version: 0.1.8
 Summary: Setuptools gettext extension plugin
-Home-page: https://github.com/breezy-team/setuptools-gettext
-Maintainer: Breezy Developers
-Maintainer-email: [email protected]
-License: GPLv2 or later
+Maintainer-email: Breezy Developers <[email protected]>
+Project-URL: Homepage, https://github.com/breezy-team/setuptools-gettext
+Project-URL: repository, https://github.com/breezy-team/setuptools-gettext.git
 Keywords: distutils,setuptools,gettext
 Classifier: Topic :: Software Development :: Version Control
-Classifier: License :: OSI Approved :: Apache Software License
+Classifier: License :: OSI Approved :: GNU General Public License v2 or later 
(GPLv2+)
 Classifier: Intended Audience :: Developers
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.7
@@ -18,10 +17,34 @@
 Classifier: Operating System :: POSIX
 Classifier: Operating System :: MacOS :: MacOS X
 Classifier: Operating System :: Microsoft :: Windows
-Requires-Python: >=3.6
+Requires-Python: >=3.7
 Description-Content-Type: text/markdown
 License-File: COPYING
 
 # setuptools plugin for gettext
 
 Compile .po files into .mo files.
+
+This plugin adds `build_mo`, `clean_mo` and `install_mo` subcommands for
+setup.py as well as hooking those into standard commands.
+
+## Usage
+
+By default, setuptools_gettext compiles and installs mo files when there is a
+`po` directory present that contains ``.po`` files.
+
+The .mo files are installed adjacent to your package as package data in a 
subdirectory called ``locale``.
+
+You can override these settings in ``pyproject.toml``:
+
+```toml
+[build-system]
+requires = ["setuptools", "setuptools-gettext"]
+...
+
+[tool.setuptools-gettext]
+# directory in which the .po files can be found 
+source_dir = "po"
+# directory in which the generated .mo files are placed when building
+build_dir = "breezy/locale"
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/README.md 
new/setuptools-gettext-0.1.8/README.md
--- old/setuptools-gettext-0.1.1/README.md      2022-10-20 23:41:36.000000000 
+0200
+++ new/setuptools-gettext-0.1.8/README.md      2023-12-05 00:26:00.000000000 
+0100
@@ -1,3 +1,27 @@
 # setuptools plugin for gettext
 
 Compile .po files into .mo files.
+
+This plugin adds `build_mo`, `clean_mo` and `install_mo` subcommands for
+setup.py as well as hooking those into standard commands.
+
+## Usage
+
+By default, setuptools_gettext compiles and installs mo files when there is a
+`po` directory present that contains ``.po`` files.
+
+The .mo files are installed adjacent to your package as package data in a 
subdirectory called ``locale``.
+
+You can override these settings in ``pyproject.toml``:
+
+```toml
+[build-system]
+requires = ["setuptools", "setuptools-gettext"]
+...
+
+[tool.setuptools-gettext]
+# directory in which the .po files can be found 
+source_dir = "po"
+# directory in which the generated .mo files are placed when building
+build_dir = "breezy/locale"
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/disperse.conf 
new/setuptools-gettext-0.1.8/disperse.conf
--- old/setuptools-gettext-0.1.1/disperse.conf  2022-10-20 23:41:36.000000000 
+0200
+++ new/setuptools-gettext-0.1.8/disperse.conf  2023-12-05 00:26:00.000000000 
+0100
@@ -1,7 +1,7 @@
 # See https://github.com/jelmer/disperse
 timeout_days: 5
 tag_name: "v$VERSION"
-verify_command: "flake8"
+verify_command: "ruff check ."
 update_version {
   path: "setuptools_gettext/__init__.py"
   match: "^__version__ = \((.*)\)$"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/example/.gitignore 
new/setuptools-gettext-0.1.8/example/.gitignore
--- old/setuptools-gettext-0.1.1/example/.gitignore     1970-01-01 
01:00:00.000000000 +0100
+++ new/setuptools-gettext-0.1.8/example/.gitignore     2023-12-05 
00:26:00.000000000 +0100
@@ -0,0 +1,2 @@
+hallowereld.egg-info
+hallowereld/locale
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/example/README.md 
new/setuptools-gettext-0.1.8/example/README.md
--- old/setuptools-gettext-0.1.1/example/README.md      1970-01-01 
01:00:00.000000000 +0100
+++ new/setuptools-gettext-0.1.8/example/README.md      2023-12-05 
00:26:00.000000000 +0100
@@ -0,0 +1,11 @@
+This directory contains an example project that uses ``setuptools_gettext``.
+
+Note that while it uses the standard Python ``gettext`` module to access 
translations,
+``setuptools_gettext`` will also happily work with other gettext-compatible
+packages.
+
+The pot file can be updated by running ``./setup.py update-pot`` in the current
+directory.
+
+A new translation file can be created by
+running ``msginit -l $LANG -o po/$LANG.po po/hallowereld.pot``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-gettext-0.1.1/example/hallowereld/__init__.py 
new/setuptools-gettext-0.1.8/example/hallowereld/__init__.py
--- old/setuptools-gettext-0.1.1/example/hallowereld/__init__.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/setuptools-gettext-0.1.8/example/hallowereld/__init__.py        
2023-12-05 00:26:00.000000000 +0100
@@ -0,0 +1,33 @@
+"""A simple example of a Python package with translations."""
+
+# Use the "_" shorthand for gettext
+from gettext import gettext as _
+
+
+def hallo() -> str:
+    return _("Hello World!")
+
+
+def load_translations():
+    import gettext
+    import os
+
+    if os.path.exists('setup.py'):
+        # We are running from source, so we need to install the translations
+        locale_dir = os.path.join(os.path.dirname(__file__), "locale")
+    else:
+        # Otherwise, we assume the translations are installed in the relevant
+        # system directory that shares our prefix
+
+        # Note that we can't just use sys.prefix, since while Python might be
+        # installed in /usr, our package (and thus the translations) might be
+        # in /usr/local
+        locale_dir = os.path.join(
+            os.path.dirname(__file__),
+            "..", "..", "..", "..", "share", "locale")
+    gettext.bindtextdomain("hallowereld", localedir=locale_dir)
+    print("Loading translations from", locale_dir)
+
+    # Set the default domain, so we can use gettext (or _()) instead of
+    # dgettext
+    gettext.textdomain("hallowereld")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-gettext-0.1.1/example/hallowereld/__main__.py 
new/setuptools-gettext-0.1.8/example/hallowereld/__main__.py
--- old/setuptools-gettext-0.1.1/example/hallowereld/__main__.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/setuptools-gettext-0.1.8/example/hallowereld/__main__.py        
2023-12-05 00:26:00.000000000 +0100
@@ -0,0 +1,5 @@
+from . import hallo, load_translations
+
+load_translations()
+
+print(hallo())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/example/po/hallowereld.pot 
new/setuptools-gettext-0.1.8/example/po/hallowereld.pot
--- old/setuptools-gettext-0.1.1/example/po/hallowereld.pot     1970-01-01 
01:00:00.000000000 +0100
+++ new/setuptools-gettext-0.1.8/example/po/hallowereld.pot     2023-12-05 
00:26:00.000000000 +0100
@@ -0,0 +1,22 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the hallowereld package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: hallowereld\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-04 14:57+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <[email protected]>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: hallowereld/__init__.py:6
+msgid "Hello World!"
+msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/example/po/nl.po 
new/setuptools-gettext-0.1.8/example/po/nl.po
--- old/setuptools-gettext-0.1.1/example/po/nl.po       1970-01-01 
01:00:00.000000000 +0100
+++ new/setuptools-gettext-0.1.8/example/po/nl.po       2023-12-05 
00:26:00.000000000 +0100
@@ -0,0 +1,22 @@
+# Dutch translations for hallowereld package.
+# Copyright (C) 2023 THE hallowereld'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the hallowereld package.
+# Jelmer Vernooij <[email protected]>, 2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: hallowereld\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-04 14:57+0000\n"
+"PO-Revision-Date: 2023-12-04 14:58+0000\n"
+"Last-Translator: Jelmer Vernooij <[email protected]>\n"
+"Language-Team: Dutch <[email protected]>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ASCII\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: hallowereld/__init__.py:6
+msgid "Hello World!"
+msgstr "Hallo Wereld!"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/example/pyproject.toml 
new/setuptools-gettext-0.1.8/example/pyproject.toml
--- old/setuptools-gettext-0.1.1/example/pyproject.toml 1970-01-01 
01:00:00.000000000 +0100
+++ new/setuptools-gettext-0.1.8/example/pyproject.toml 2023-12-05 
00:26:00.000000000 +0100
@@ -0,0 +1,15 @@
+[build-system]
+requires = ["setuptools", "setuptools-gettext"]
+
+[project]
+name = "hallowereld"
+version = "0.1.0"
+
+[tool.setuptools]
+packages = ["hallowereld"]
+
+[tool.setuptools-gettext]
+source_dir = "po"
+# Set the build directory, to make it easier to find the compiled catalogs
+# in the source tree.
+build_dir = "hallowereld/locale"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/example/setup.py 
new/setuptools-gettext-0.1.8/example/setup.py
--- old/setuptools-gettext-0.1.1/example/setup.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/setuptools-gettext-0.1.8/example/setup.py       2023-12-05 
00:26:00.000000000 +0100
@@ -0,0 +1,5 @@
+#!/usr/bin/python3
+
+from setuptools import setup
+
+setup()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/pyproject.toml 
new/setuptools-gettext-0.1.8/pyproject.toml
--- old/setuptools-gettext-0.1.1/pyproject.toml 1970-01-01 01:00:00.000000000 
+0100
+++ new/setuptools-gettext-0.1.8/pyproject.toml 2023-12-05 00:26:00.000000000 
+0100
@@ -0,0 +1,77 @@
+[build-system]
+requires = ["setuptools>=61.0"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "setuptools-gettext"
+maintainers = [{name = "Breezy Developers", email = 
"[email protected]"}]
+description = "Setuptools gettext extension plugin"
+keywords = ["distutils", "setuptools", "gettext"]
+classifiers = [
+    "Topic :: Software Development :: Version Control",
+    "License :: OSI Approved :: GNU General Public License v2 or later 
(GPLv2+)",
+    "Intended Audience :: Developers",
+    "Programming Language :: Python :: 3",
+    "Programming Language :: Python :: 3.7",
+    "Programming Language :: Python :: 3.8",
+    "Programming Language :: Python :: 3.9",
+    "Programming Language :: Python :: 3.10",
+    "Operating System :: POSIX",
+    "Operating System :: MacOS :: MacOS X",
+    "Operating System :: Microsoft :: Windows",
+]
+requires-python = ">=3.7"
+dependencies = ["setuptools>=60.8", 'tomli>=1.2.1; python_version<"3.11"']
+dynamic = ["version"]
+
+[project.readme]
+file = "README.md"
+content-type = "text/markdown"
+
+[project.urls]
+Homepage = "https://github.com/breezy-team/setuptools-gettext";
+repository = "https://github.com/breezy-team/setuptools-gettext.git";
+
+[project.entry-points."distutils.commands"]
+build_mo = "setuptools_gettext:build_mo"
+clean_mo = "setuptools_gettext:clean_mo"
+install_mo = "setuptools_gettext:install_mo"
+update_pot = "setuptools_gettext:update_pot"
+
+[project.entry-points."setuptools.finalize_distribution_options"]
+setuptools_gettext = "setuptools_gettext:pyprojecttoml_config"
+
+[tool.setuptools]
+packages = ["setuptools_gettext"]
+zip-safe = true
+include-package-data = false
+
+[tool.setuptools.dynamic]
+version = {attr = "setuptools_gettext.__version__"}
+
+[tool.mypy]
+ignore_missing_imports = true
+
+[tool.ruff]
+select = [
+    "ANN",
+    "D",
+    "E",
+    "F",
+    "I",
+    "UP",
+]
+target-version = "py37"
+line-length = 79
+ignore = [
+    "ANN001",
+    "ANN101",
+    "ANN201",
+    "D100",
+    "D101",
+    "D102",
+    "D103",
+]
+
+[tool.ruff.pydocstyle]
+convention = "google"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/setup.cfg 
new/setuptools-gettext-0.1.8/setup.cfg
--- old/setuptools-gettext-0.1.1/setup.cfg      2022-10-20 23:41:44.439694400 
+0200
+++ new/setuptools-gettext-0.1.8/setup.cfg      2023-12-05 00:26:04.905951300 
+0100
@@ -1,44 +1,3 @@
-[metadata]
-name = setuptools-gettext
-version = attr:setuptools_gettext.__version__
-maintainer = Breezy Developers
-maintainer_email = [email protected]
-license = GPLv2 or later
-description = Setuptools gettext extension plugin
-keywords = distutils, setuptools, gettext
-url = https://github.com/breezy-team/setuptools-gettext
-long_description = file:README.md
-long_description_content_type = text/markdown
-classifiers = 
-       Topic :: Software Development :: Version Control
-       License :: OSI Approved :: Apache Software License
-       Intended Audience :: Developers
-       Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.7
-       Programming Language :: Python :: 3.8
-       Programming Language :: Python :: 3.9
-       Programming Language :: Python :: 3.10
-       Operating System :: POSIX
-       Operating System :: MacOS :: MacOS X
-       Operating System :: Microsoft :: Windows
-
-[options]
-packages = setuptools_gettext
-zip_safe = True
-install_requires = setuptools>=46.1
-setup_requires = setuptools>=46.1
-python_requires = >=3.6
-
-[options.entry_points]
-distutils.commands = 
-       build_mo = setuptools_gettext:build_mo
-
-[mypy]
-ignore_missing_imports = True
-
-[flake8]
-exclude = build
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-gettext-0.1.1/setup.py 
new/setuptools-gettext-0.1.8/setup.py
--- old/setuptools-gettext-0.1.1/setup.py       2022-10-20 23:41:36.000000000 
+0200
+++ new/setuptools-gettext-0.1.8/setup.py       2023-12-05 00:26:00.000000000 
+0100
@@ -1,4 +1,5 @@
 #!/usr/bin/python3
 
 from setuptools import setup
+
 setup()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-gettext-0.1.1/setuptools_gettext/__init__.py 
new/setuptools-gettext-0.1.8/setuptools_gettext/__init__.py
--- old/setuptools-gettext-0.1.1/setuptools_gettext/__init__.py 2022-10-20 
23:41:38.000000000 +0200
+++ new/setuptools-gettext-0.1.8/setuptools_gettext/__init__.py 2023-12-05 
00:26:02.000000000 +0100
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
 #
 # Copyright (C) 2007, 2009, 2011 Canonical Ltd.
-# Copyright (C) 2022 Breezy Developers
+# Copyright (C) 2022-2023 Jelmer Vernooij <[email protected]>
 #
 # 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
@@ -19,21 +18,38 @@
 
 # This code is from bzr-explorer and modified for bzr.
 
-"""build_mo command for setup.py"""
+"""build_mo command for setup.py."""
 
-from distutils import log
-from distutils.core import Command
-from distutils.dep_util import newer
-from distutils.spawn import find_executable
+import logging
 import os
 import re
+import sys
+from typing import List, Optional, Tuple
 
+from setuptools import Command
+from setuptools.dist import Distribution
 
-__version__ = (0, 1, 1)
+__version__ = (0, 1, 8)
+DEFAULT_SOURCE_DIR = 'po'
+DEFAULT_BUILD_DIR = 'locale'
+
+
+def lang_from_dir(source_dir: os.PathLike) -> List[str]:
+    re_po = re.compile(r'^([a-zA-Z_]+)\.po$')
+    lang = []
+    for i in os.listdir(source_dir):
+        mo = re_po.match(i)
+        if mo:
+            lang.append(mo.group(1))
+    return lang
+
+
+def parse_lang(lang: str) -> List[str]:
+    return [i.strip() for i in lang.split(',') if i.strip()]
 
 
 class build_mo(Command):
-    """Subcommand of build command: build_mo"""
+    """Subcommand of build command: build_mo."""
 
     description = 'compile po files to mo files'
 
@@ -43,7 +59,6 @@
     #   - help string.
     user_options = [('build-dir=', 'd', 'Directory to build locale files'),
                     ('output-base=', 'o', 'mo-files base name'),
-                    ('source-dir=', None, 'Directory with sources po files'),
                     ('force', 'f', 'Force creation of mo files'),
                     ('lang=', None, 'Comma-separated list of languages '
                                     'to process'),
@@ -54,45 +69,50 @@
     def initialize_options(self):
         self.build_dir = None
         self.output_base = None
-        self.source_dir = None
         self.force = None
         self.lang = None
+        self.outfiles = []
 
     def finalize_options(self):
         self.set_undefined_options('build', ('force', 'force'))
         self.prj_name = self.distribution.get_name()
-        if self.build_dir is None:
-            self.build_dir = 'breezy/locale'
         if not self.output_base:
             self.output_base = self.prj_name or 'messages'
-        if self.source_dir is None:
-            self.source_dir = 'po'
+        self.source_dir = self.distribution.gettext_source_dir
+        if self.build_dir is None:
+            self.build_dir = (
+                getattr(self.distribution, 'gettext_build_dir', None)
+                or DEFAULT_BUILD_DIR)
         if self.lang is None:
-            re_po = re.compile(r'^([a-zA-Z_]+)\.po$')
-            self.lang = []
-            for i in os.listdir(self.source_dir):
-                mo = re_po.match(i)
-                if mo:
-                    self.lang.append(mo.group(1))
+            self.lang = lang_from_dir(self.source_dir)
         else:
-            self.lang = [i.strip() for i in self.lang.split(',') if i.strip()]
+            self.lang = parse_lang(self.lang)
+
+    def get_inputs(self):
+        inputs = []
+        for lang in self.lang:
+            po = os.path.join(self.source_dir, lang + '.po')
+            if not os.path.isfile(po):
+                po = os.path.join(self.source_dir, lang + '.po')
+            inputs.append(po)
+        return inputs
 
     def run(self):
-        """Run msgfmt for each language"""
+        """Run msgfmt for each language."""
         if not self.lang:
             return
 
         if find_executable('msgfmt') is None:
-            log.warn("GNU gettext msgfmt utility not found!")
-            log.warn("Skip compiling po files.")
+            logging.warn("GNU gettext msgfmt utility not found!")
+            logging.warn("Skip compiling po files.")
             return
 
         if 'en' in self.lang:
             if find_executable('msginit') is None:
-                log.warn("GNU gettext msginit utility not found!")
-                log.warn("Skip creating English PO file.")
+                logging.warn("GNU gettext msginit utility not found!")
+                logging.warn("Skip creating English PO file.")
             else:
-                log.info('Creating English PO file...')
+                logging.info('Creating English PO file...')
                 pot = (self.prj_name or 'messages') + '.pot'
                 en_po = 'en.po'
                 self.spawn(['msginit',
@@ -107,12 +127,232 @@
             basename += '.mo'
 
         for lang in self.lang:
-            po = os.path.join('po', lang + '.po')
+            po = os.path.join(self.source_dir, lang + '.po')
             if not os.path.isfile(po):
-                po = os.path.join('po', lang + '.po')
+                po = os.path.join(self.source_dir, lang + '.po')
             dir_ = os.path.join(self.build_dir, lang, 'LC_MESSAGES')
             self.mkpath(dir_)
             mo = os.path.join(dir_, basename)
             if self.force or newer(po, mo):
-                log.info('Compile: %s -> %s' % (po, mo))
+                logging.info(f'Compile: {po} -> {mo}')
                 self.spawn(['msgfmt', '-o', mo, po])
+                self.outfiles.append(mo)
+
+    def get_outputs(self):
+        return self.outfiles
+
+
+class clean_mo(Command):
+    description = 'clean .mo files'
+
+    user_options = [('build-dir=', 'd', 'Directory to build locale files')]
+
+    def initialize_options(self):
+        self.build_dir = None
+
+    def finalize_options(self):
+        if self.build_dir is None:
+            self.build_dir = (
+                getattr(self.distribution, 'gettext_build_dir', None)
+                or DEFAULT_BUILD_DIR)
+
+    def run(self):
+        if not os.path.isdir(self.build_dir):
+            return
+        for root, dirs, files in os.walk(self.build_dir):
+            for file_ in files:
+                if file_.endswith('.mo'):
+                    os.unlink(os.path.join(root, file_))
+
+
+class install_mo(Command):
+
+    description: str = "install .mo files"
+
+    user_options = [
+        (
+            'install-dir=',
+            'd',
+            "base directory for installing data files "
+            "(default: installation base dir)",
+        ),
+        ('root=', None,
+         "install everything relative to this alternate root directory"),
+        ('force', 'f', "force installation (overwrite existing files)"),
+    ]
+
+    boolean_options: List[str] = ['force']
+    build_dir: Optional[str]
+    install_dir: Optional[str]
+    root: Optional[str]
+
+    def initialize_options(self) -> None:
+        self.install_dir = None
+        self.outfiles: List[str] = []
+        self.root = None
+        self.force = 0
+        self.build_dir = None
+
+    def finalize_options(self) -> None:
+        self.set_undefined_options(
+            'install',
+            ('install_data', 'install_dir'),
+            ('root', 'root'),
+            ('force', 'force'),
+        )
+        if self.build_dir is None:
+            self.build_dir = (
+                self.distribution.gettext_build_dir)  # type: ignore
+
+    def run(self) -> None:
+        assert self.install_dir is not None
+        assert self.build_dir is not None
+        self.mkpath(self.install_dir)
+        import glob
+        for filepath in glob.glob(self.build_dir + "/*/LC_MESSAGES/*.mo"):
+            langfile = filepath[len(self.build_dir.rstrip('/')+'/'):]
+            targetpath = os.path.join(
+                self.install_dir,
+                os.path.dirname(os.path.join("share/locale", langfile)))
+            if self.root is not None:
+                targetpath = change_root(self.root, targetpath)
+            self.mkpath(targetpath)
+            (out, _) = self.copy_file(filepath, targetpath)
+            self.outfiles.append(out)
+
+    def get_inputs(self):
+        import glob
+        return glob.glob(self.build_dir + "/*/LC_MESSAGES/*.mo")
+
+    def get_outputs(self):
+        return self.outfiles
+
+
+class update_pot(Command):
+
+    description: str = "update the .pot file"
+
+    user_options: List[Tuple[str, str, str]] = []
+
+    def initialize_options(self) -> None:
+        pass
+
+    def finalize_options(self) -> None:
+        pass
+
+    def run(self) -> None:
+        # TODO(jelmer): Support pygettext3 as well
+        xgettext = find_executable('xgettext')
+        if xgettext is None:
+            logging.error("GNU gettext xgettext utility not found!")
+            return
+        args = [xgettext]
+        args.extend([
+            "--package-name", self.distribution.get_name(),
+            "--from-code", "UTF-8",
+            "--sort-by-file",
+            "--add-comments=i18n:",
+            "-d", self.distribution.get_name(),
+            "-p", self.distribution.gettext_source_dir,  # type: ignore
+            "-o", f"{self.distribution.get_name()}.pot",
+            ])
+
+        input_files = []
+        for root, _dirs, files in os.walk('.'):
+            for file_ in files:
+                if file_.endswith('.py'):
+                    input_files.append(os.path.join(root, file_))
+        args.extend(input_files)
+
+        pot_path = os.path.join(
+            self.distribution.gettext_source_dir, 
self.distribution.get_name())  # type: ignore
+        if os.path.exists(pot_path):
+            args.append("--join")
+        if self.distribution.get_contact():
+            args += ["--msgid-bugs-address", self.distribution.get_contact()]
+
+        self.spawn(args)
+
+
+def has_gettext(_c) -> bool:
+    return os.path.isdir(DEFAULT_SOURCE_DIR)
+
+
+def pyprojecttoml_config(dist: Distribution) -> None:
+    build = dist.get_command_class("build")
+    build.sub_commands.append(('build_mo', has_gettext))
+    clean = dist.get_command_class("clean")
+    clean.sub_commands.append(('clean_mo', has_gettext))
+    install = dist.get_command_class("install")
+    install.sub_commands.append(('install_mo', has_gettext))
+
+    if sys.version_info[:2] >= (3, 11):
+        from tomllib import load as toml_load
+    else:
+        from tomli import load as toml_load
+    try:
+        with open("pyproject.toml", "rb") as f:
+            cfg = toml_load(f).get("tool", {}).get("setuptools-gettext")
+    except FileNotFoundError:
+        load_pyproject_config(dist, {})
+    else:
+        if cfg:
+            load_pyproject_config(dist, cfg)
+        else:
+            load_pyproject_config(dist, {})
+
+
+def load_pyproject_config(dist: Distribution, cfg) -> None:
+    dist.gettext_source_dir = (  # type: ignore
+        cfg.get("source_dir") or DEFAULT_SOURCE_DIR)
+    dist.gettext_build_dir = (  # type: ignore
+        cfg.get("build_dir") or DEFAULT_BUILD_DIR)
+
+
+def find_executable(executable):
+    _, ext = os.path.splitext(executable)
+    if sys.platform == 'win32' and ext != '.exe':
+        executable = executable + '.exe'
+
+    if os.path.isfile(executable):
+        return executable
+
+    path = os.environ.get('PATH', os.defpath)
+
+    # PATH='' doesn't match, whereas PATH=':' looks in the current directory
+    if not path:
+        return None
+
+    paths = path.split(os.pathsep)
+    for p in paths:
+        f = os.path.join(p, executable)
+        if os.path.isfile(f):
+            return f
+    return None
+
+
+def newer(source, target) -> bool:
+    if not os.path.exists(target):
+        return True
+
+    from stat import ST_MTIME
+
+    mtime1 = os.stat(source)[ST_MTIME]
+    mtime2 = os.stat(target)[ST_MTIME]
+
+    return mtime1 > mtime2
+
+
+def change_root(new_root, pathname):
+    if os.name == 'posix':
+        if not os.path.isabs(pathname):
+            return os.path.join(new_root, pathname)
+        else:
+            return os.path.join(new_root, pathname[1:])
+    elif os.name == 'nt':
+        (drive, path) = os.path.splitdrive(pathname)
+        if path[0] == '\\':
+            path = path[1:]
+        return os.path.join(new_root, path)
+    else:
+        raise AssertionError("Unsupported OS: %s" % os.name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-gettext-0.1.1/setuptools_gettext.egg-info/PKG-INFO 
new/setuptools-gettext-0.1.8/setuptools_gettext.egg-info/PKG-INFO
--- old/setuptools-gettext-0.1.1/setuptools_gettext.egg-info/PKG-INFO   
2022-10-20 23:41:44.000000000 +0200
+++ new/setuptools-gettext-0.1.8/setuptools_gettext.egg-info/PKG-INFO   
2023-12-05 00:26:04.000000000 +0100
@@ -1,14 +1,13 @@
 Metadata-Version: 2.1
 Name: setuptools-gettext
-Version: 0.1.1
+Version: 0.1.8
 Summary: Setuptools gettext extension plugin
-Home-page: https://github.com/breezy-team/setuptools-gettext
-Maintainer: Breezy Developers
-Maintainer-email: [email protected]
-License: GPLv2 or later
+Maintainer-email: Breezy Developers <[email protected]>
+Project-URL: Homepage, https://github.com/breezy-team/setuptools-gettext
+Project-URL: repository, https://github.com/breezy-team/setuptools-gettext.git
 Keywords: distutils,setuptools,gettext
 Classifier: Topic :: Software Development :: Version Control
-Classifier: License :: OSI Approved :: Apache Software License
+Classifier: License :: OSI Approved :: GNU General Public License v2 or later 
(GPLv2+)
 Classifier: Intended Audience :: Developers
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.7
@@ -18,10 +17,34 @@
 Classifier: Operating System :: POSIX
 Classifier: Operating System :: MacOS :: MacOS X
 Classifier: Operating System :: Microsoft :: Windows
-Requires-Python: >=3.6
+Requires-Python: >=3.7
 Description-Content-Type: text/markdown
 License-File: COPYING
 
 # setuptools plugin for gettext
 
 Compile .po files into .mo files.
+
+This plugin adds `build_mo`, `clean_mo` and `install_mo` subcommands for
+setup.py as well as hooking those into standard commands.
+
+## Usage
+
+By default, setuptools_gettext compiles and installs mo files when there is a
+`po` directory present that contains ``.po`` files.
+
+The .mo files are installed adjacent to your package as package data in a 
subdirectory called ``locale``.
+
+You can override these settings in ``pyproject.toml``:
+
+```toml
+[build-system]
+requires = ["setuptools", "setuptools-gettext"]
+...
+
+[tool.setuptools-gettext]
+# directory in which the .po files can be found 
+source_dir = "po"
+# directory in which the generated .mo files are placed when building
+build_dir = "breezy/locale"
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-gettext-0.1.1/setuptools_gettext.egg-info/SOURCES.txt 
new/setuptools-gettext-0.1.8/setuptools_gettext.egg-info/SOURCES.txt
--- old/setuptools-gettext-0.1.1/setuptools_gettext.egg-info/SOURCES.txt        
2022-10-20 23:41:44.000000000 +0200
+++ new/setuptools-gettext-0.1.8/setuptools_gettext.egg-info/SOURCES.txt        
2023-12-05 00:26:04.000000000 +0100
@@ -1,11 +1,20 @@
 .gitignore
 COPYING
+MANIFEST.in
 README.md
 disperse.conf
-setup.cfg
+pyproject.toml
 setup.py
 .github/workflows/disperse.yml
 .github/workflows/pythontest.yml
+example/.gitignore
+example/README.md
+example/pyproject.toml
+example/setup.py
+example/hallowereld/__init__.py
+example/hallowereld/__main__.py
+example/po/hallowereld.pot
+example/po/nl.po
 setuptools_gettext/__init__.py
 setuptools_gettext.egg-info/PKG-INFO
 setuptools_gettext.egg-info/SOURCES.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-gettext-0.1.1/setuptools_gettext.egg-info/entry_points.txt 
new/setuptools-gettext-0.1.8/setuptools_gettext.egg-info/entry_points.txt
--- old/setuptools-gettext-0.1.1/setuptools_gettext.egg-info/entry_points.txt   
2022-10-20 23:41:44.000000000 +0200
+++ new/setuptools-gettext-0.1.8/setuptools_gettext.egg-info/entry_points.txt   
2023-12-05 00:26:04.000000000 +0100
@@ -1,2 +1,8 @@
 [distutils.commands]
 build_mo = setuptools_gettext:build_mo
+clean_mo = setuptools_gettext:clean_mo
+install_mo = setuptools_gettext:install_mo
+update_pot = setuptools_gettext:update_pot
+
+[setuptools.finalize_distribution_options]
+setuptools_gettext = setuptools_gettext:pyprojecttoml_config
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-gettext-0.1.1/setuptools_gettext.egg-info/requires.txt 
new/setuptools-gettext-0.1.8/setuptools_gettext.egg-info/requires.txt
--- old/setuptools-gettext-0.1.1/setuptools_gettext.egg-info/requires.txt       
2022-10-20 23:41:44.000000000 +0200
+++ new/setuptools-gettext-0.1.8/setuptools_gettext.egg-info/requires.txt       
2023-12-05 00:26:04.000000000 +0100
@@ -1 +1,4 @@
-setuptools>=46.1
+setuptools>=60.8
+
+[:python_version < "3.11"]
+tomli>=1.2.1

Reply via email to