(root)/
Python-3.12.0/
PC/
layout/
support/
nuspec.py
       1  """
       2  Provides .props file.
       3  """
       4  
       5  import os
       6  import sys
       7  
       8  from .constants import *
       9  
      10  __all__ = ["get_nuspec_layout"]
      11  
      12  PYTHON_NUSPEC_NAME = "python.nuspec"
      13  
      14  NUSPEC_DATA = {
      15      "PYTHON_TAG": VER_DOT,
      16      "PYTHON_VERSION": os.getenv("PYTHON_NUSPEC_VERSION"),
      17      "FILELIST": r'    <file src="**\*" exclude="python.png" target="tools" />',
      18      "GIT": sys._git,
      19  }
      20  
      21  NUSPEC_PLATFORM_DATA = dict(
      22      _keys=("PYTHON_BITNESS", "PACKAGENAME", "PACKAGETITLE"),
      23      win32=("32-bit", "pythonx86", "Python (32-bit)"),
      24      amd64=("64-bit", "python", "Python"),
      25      arm32=("ARM", "pythonarm", "Python (ARM)"),
      26      arm64=("ARM64", "pythonarm64", "Python (ARM64)"),
      27  )
      28  
      29  if not NUSPEC_DATA["PYTHON_VERSION"]:
      30      NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}{}{}".format(
      31          VER_DOT, VER_MICRO, "-" if VER_SUFFIX else "", VER_SUFFIX
      32      )
      33  
      34  FILELIST_WITH_PROPS = r"""    <file src="**\*" exclude="python.png;python.props" target="tools" />
      35      <file src="python.props" target="build\native" />"""
      36  
      37  NUSPEC_TEMPLATE = r"""<?xml version="1.0"?>
      38  <package>
      39    <metadata>
      40      <id>{PACKAGENAME}</id>
      41      <title>{PACKAGETITLE}</title>
      42      <version>{PYTHON_VERSION}</version>
      43      <authors>Python Software Foundation</authors>
      44      <license type="file">tools\LICENSE.txt</license>
      45      <projectUrl>https://www.python.org/</projectUrl>
      46      <description>Installs {PYTHON_BITNESS} Python for use in build scenarios.</description>
      47      <icon>images\python.png</icon>
      48      <iconUrl>https://www.python.org/static/favicon.ico</iconUrl>
      49      <tags>python</tags>
      50      <repository type="git" url="https://github.com/Python/CPython.git" commit="{GIT[2]}" />
      51    </metadata>
      52    <files>
      53      <file src="python.png" target="images" />
      54  {FILELIST}
      55    </files>
      56  </package>
      57  """
      58  
      59  
      60  def _get_nuspec_data_overrides(ns):
      61      for k, v in zip(NUSPEC_PLATFORM_DATA["_keys"], NUSPEC_PLATFORM_DATA[ns.arch]):
      62          ev = os.getenv("PYTHON_NUSPEC_" + k)
      63          if ev:
      64              yield k, ev
      65          yield k, v
      66  
      67  
      68  def get_nuspec_layout(ns):
      69      if ns.include_all or ns.include_nuspec:
      70          data = dict(NUSPEC_DATA)
      71          for k, v in _get_nuspec_data_overrides(ns):
      72              if not data.get(k):
      73                  data[k] = v
      74          if ns.include_all or ns.include_props:
      75              data["FILELIST"] = FILELIST_WITH_PROPS
      76          nuspec = NUSPEC_TEMPLATE.format_map(data)
      77          yield "python.nuspec", ("python.nuspec", nuspec.encode("utf-8"))
      78          yield "python.png", ns.source / "PC" / "icons" / "logox128.png"