Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-hatchling for
openSUSE:Factory checked in at 2023-05-10 16:17:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-hatchling (Old)
and /work/SRC/openSUSE:Factory/.python-hatchling.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-hatchling"
Wed May 10 16:17:16 2023 rev:16 rq:1085808 version:1.15.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-hatchling/python-hatchling.changes
2023-05-03 12:56:17.491484979 +0200
+++
/work/SRC/openSUSE:Factory/.python-hatchling.new.1533/python-hatchling.changes
2023-05-10 16:17:19.574549419 +0200
@@ -1,0 +2,6 @@
+Tue May 9 19:19:08 UTC 2023 - Benoît Monin <[email protected]>
+
+- update to version 1.15.0:
+ * Add app build target
+
+-------------------------------------------------------------------
Old:
----
hatchling-1.14.1.tar.gz
New:
----
hatchling-1.15.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-hatchling.spec ++++++
--- /var/tmp/diff_new_pack.6zPftw/_old 2023-05-10 16:17:20.046552211 +0200
+++ /var/tmp/diff_new_pack.6zPftw/_new 2023-05-10 16:17:20.050552234 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-hatchling
-Version: 1.14.1
+Version: 1.15.0
Release: 0
Summary: Build backend used by Hatch
License: MIT
++++++ hatchling-1.14.1.tar.gz -> hatchling-1.15.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.14.1/PKG-INFO
new/hatchling-1.15.0/PKG-INFO
--- old/hatchling-1.14.1/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/hatchling-1.15.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: hatchling
-Version: 1.14.1
+Version: 1.15.0
Summary: Modern, extensible Python build backend
Project-URL: Homepage, https://hatch.pypa.io/latest/
Project-URL: Sponsor, https://github.com/sponsors/ofek
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.14.1/src/hatchling/__about__.py
new/hatchling-1.15.0/src/hatchling/__about__.py
--- old/hatchling-1.14.1/src/hatchling/__about__.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.15.0/src/hatchling/__about__.py 2020-02-02
01:00:00.000000000 +0100
@@ -1 +1 @@
-__version__ = '1.14.1'
+__version__ = '1.15.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.14.1/src/hatchling/bridge/app.py
new/hatchling-1.15.0/src/hatchling/bridge/app.py
--- old/hatchling-1.14.1/src/hatchling/bridge/app.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.15.0/src/hatchling/bridge/app.py 2020-02-02
01:00:00.000000000 +0100
@@ -7,6 +7,13 @@
class InvokedApplication:
+ def __init__(self) -> None:
+ self.__verbosity = int(os.environ.get('HATCH_VERBOSE', '0')) -
int(os.environ.get('HATCH_QUIET', '0'))
+
+ @property
+ def verbosity(self) -> int:
+ return self.__verbosity
+
def display(self, *args: Any, **kwargs: Any) -> None:
send_app_command('display', *args, **kwargs)
@@ -51,6 +58,13 @@
def __init__(self) -> None:
self.__verbosity = int(os.environ.get('HATCH_VERBOSE', '0')) -
int(os.environ.get('HATCH_QUIET', '0'))
+ @property
+ def verbosity(self) -> int:
+ """
+ The verbosity level of the application, with 0 as the default.
+ """
+ return self.__verbosity
+
def display(self, message: str = '', **kwargs: Any) -> None:
# Do not document
print(message)
@@ -121,6 +135,7 @@
class SafeApplication:
def __init__(self, app: InvokedApplication | Application) -> None:
self.abort = app.abort
+ self.verbosity = app.verbosity
self.display = app.display
self.display_info = app.display_info
self.display_error = app.display_error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hatchling-1.14.1/src/hatchling/builders/app.py
new/hatchling-1.15.0/src/hatchling/builders/app.py
--- old/hatchling-1.14.1/src/hatchling/builders/app.py 1970-01-01
01:00:00.000000000 +0100
+++ new/hatchling-1.15.0/src/hatchling/builders/app.py 2020-02-02
01:00:00.000000000 +0100
@@ -0,0 +1,171 @@
+from __future__ import annotations
+
+import os
+import sys
+from typing import Any, Callable
+
+from hatchling.builders.config import BuilderConfig
+from hatchling.builders.plugin.interface import BuilderInterface
+
+
+class AppBuilderConfig(BuilderConfig):
+ SUPPORTED_VERSIONS = ('3.11', '3.10', '3.9', '3.8', '3.7')
+
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
+ super().__init__(*args, **kwargs)
+
+ self.__scripts: list[str] | None = None
+ self.__python_version: str | None = None
+ self.__pyapp_version: str | None = None
+
+ @property
+ def scripts(self) -> list[str]:
+ if self.__scripts is None:
+ known_scripts = self.builder.metadata.core.scripts
+ scripts = self.target_config.get('scripts', [])
+
+ if not isinstance(scripts, list):
+ message = f'Field
`tool.hatch.build.targets.{self.plugin_name}.scripts` must be an array'
+ raise TypeError(message)
+
+ for i, script in enumerate(scripts, 1):
+ if not isinstance(script, str):
+ message = (
+ f'Script #{i} of field
`tool.hatch.build.targets.{self.plugin_name}.scripts` must be a string'
+ )
+ raise TypeError(message)
+ elif script not in known_scripts:
+ message = f'Unknown script in field
`tool.hatch.build.targets.{self.plugin_name}.scripts`: {script}'
+ raise ValueError(message)
+
+ self.__scripts = sorted(set(scripts)) if scripts else
list(known_scripts)
+
+ return self.__scripts
+
+ @property
+ def python_version(self) -> str:
+ if self.__python_version is None:
+ python_version = self.target_config.get('python-version', '')
+
+ if not isinstance(python_version, str):
+ message = f'Field
`tool.hatch.build.targets.{self.plugin_name}.python-version` must be a string'
+ raise TypeError(message)
+
+ if not python_version and 'PYAPP_DISTRIBUTION_SOURCE' not in
os.environ:
+ for supported_version in self.SUPPORTED_VERSIONS:
+ if
self.builder.metadata.core.python_constraint.contains(supported_version):
+ python_version = supported_version
+ break
+ else:
+ message = 'Field `project.requires-python` is incompatible
with the known distributions'
+ raise ValueError(message)
+
+ self.__python_version = python_version
+
+ return self.__python_version
+
+ @property
+ def pyapp_version(self) -> str:
+ if self.__pyapp_version is None:
+ pyapp_version = self.target_config.get('pyapp-version', '')
+
+ if not isinstance(pyapp_version, str):
+ message = f'Field
`tool.hatch.build.targets.{self.plugin_name}.pyapp-version` must be a string'
+ raise TypeError(message)
+
+ self.__pyapp_version = pyapp_version
+
+ return self.__pyapp_version
+
+
+class AppBuilder(BuilderInterface):
+ """
+ Build applications
+ """
+
+ PLUGIN_NAME = 'app'
+
+ def get_version_api(self) -> dict[str, Callable]:
+ return {'bootstrap': self.build_bootstrap}
+
+ def get_default_versions(self) -> list[str]:
+ return ['bootstrap']
+
+ def clean(self, directory: str, versions: list[str]) -> None:
+ import shutil
+
+ app_dir = os.path.join(directory, 'app')
+ if os.path.isdir(app_dir):
+ shutil.rmtree(app_dir)
+
+ def build_bootstrap(self, directory: str, **build_data: Any) -> str:
+ import shutil
+ import tempfile
+
+ cargo_path = os.environ.get('CARGO', '')
+ if not cargo_path:
+ if not shutil.which('cargo'):
+ message = 'Executable `cargo` could not be found on PATH'
+ raise OSError(message)
+
+ cargo_path = 'cargo'
+
+ app_dir = os.path.join(directory, 'app')
+ if not os.path.isdir(app_dir):
+ os.makedirs(app_dir)
+
+ on_windows = sys.platform == 'win32'
+ base_env = dict(os.environ)
+ base_env['PYAPP_PROJECT_NAME'] = self.metadata.name
+ base_env['PYAPP_PROJECT_VERSION'] = self.metadata.version
+
+ if self.config.python_version:
+ base_env['PYAPP_PYTHON_VERSION'] = self.config.python_version
+
+ # https://doc.rust-lang.org/cargo/reference/config.html#buildtarget
+ build_target = os.environ.get('CARGO_BUILD_TARGET', '')
+
+ with tempfile.TemporaryDirectory() as temp_dir:
+ temp_exe_path = os.path.join(temp_dir, 'bin', 'pyapp.exe' if
on_windows else 'pyapp')
+
+ install_command = [cargo_path, 'install', 'pyapp', '--force',
'--root', temp_dir]
+ if self.config.pyapp_version:
+ install_command.extend(['--version',
self.config.pyapp_version])
+
+ if self.config.scripts:
+ for script in self.config.scripts:
+ env = dict(base_env)
+ env['PYAPP_EXEC_SPEC'] = self.metadata.core.scripts[script]
+
+ self.cargo_build(install_command, cwd=temp_dir, env=env)
+
+ exe_stem = f'{script}-{build_target}' if build_target else
script
+ exe_path = os.path.join(app_dir, f'{exe_stem}.exe' if
on_windows else exe_stem)
+ shutil.move(temp_exe_path, exe_path)
+ else:
+ self.cargo_build(install_command, cwd=temp_dir, env=base_env)
+
+ exe_stem = f'{self.metadata.name}-{build_target}' if
build_target else self.metadata.name
+ exe_path = os.path.join(app_dir, f'{exe_stem}.exe' if
on_windows else exe_stem)
+ shutil.move(temp_exe_path, exe_path)
+
+ return app_dir
+
+ def cargo_build(self, *args: Any, **kwargs: Any) -> None:
+ import subprocess
+
+ if not self.app.verbosity:
+ kwargs['stdout'] = subprocess.PIPE
+ kwargs['stderr'] = subprocess.STDOUT
+
+ process = subprocess.run(*args, **kwargs)
+ if process.returncode:
+ message = f'Compilation of failed (code {process.returncode})'
+ if not self.app.verbosity:
+ message = f'{process.stdout.decode("utf-8")}\n{message}'
+
+ raise OSError(message)
+
+ @classmethod
+ def get_config_class(cls) -> type[AppBuilderConfig]:
+ return AppBuilderConfig
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hatchling-1.14.1/src/hatchling/builders/plugin/hooks.py
new/hatchling-1.15.0/src/hatchling/builders/plugin/hooks.py
--- old/hatchling-1.14.1/src/hatchling/builders/plugin/hooks.py 2020-02-02
01:00:00.000000000 +0100
+++ new/hatchling-1.15.0/src/hatchling/builders/plugin/hooks.py 2020-02-02
01:00:00.000000000 +0100
@@ -2,6 +2,7 @@
import typing
+from hatchling.builders.app import AppBuilder
from hatchling.builders.custom import CustomBuilder
from hatchling.builders.sdist import SdistBuilder
from hatchling.builders.wheel import WheelBuilder
@@ -13,4 +14,4 @@
@hookimpl
def hatch_register_builder() -> list[type[BuilderInterface]]:
- return [CustomBuilder, SdistBuilder, WheelBuilder] # type: ignore
+ return [AppBuilder, CustomBuilder, SdistBuilder, WheelBuilder] # type:
ignore