From 3787583121375018caf1d0a25a8fb5f54a3d3354 Mon Sep 17 00:00:00 2001 From: Malcolm Smith Date: Wed, 6 Aug 2025 23:20:31 +0100 Subject: [PATCH 1/3] Add Android support --- fixtures/downloads.json | 335 +++++++++++++++++++++++++++++++ fixtures/sitetree_menus.json | 28 ++- templates/downloads/os_list.html | 5 + 3 files changed, 366 insertions(+), 2 deletions(-) diff --git a/fixtures/downloads.json b/fixtures/downloads.json index 0f9f1ce10..f49e18c5e 100644 --- a/fixtures/downloads.json +++ b/fixtures/downloads.json @@ -35,6 +35,18 @@ "slug": "source" } }, +{ + "model": "downloads.os", + "pk": 4, + "fields": { + "created": "2025-08-06T17:02:24.294Z", + "updated": "2025-08-06T17:02:24.296Z", + "creator": 1, + "last_modified_by": null, + "name": "Android", + "slug": "android" + } +}, { "model": "downloads.release", "pk": 1, @@ -7441,6 +7453,29 @@ "_content_rendered": "

Note: The release you are looking at is Python 3.7.14, a security bugfix release for the legacy 3.7 series which is now in the security fix phase of its life cycle. See the downloads page for currently supported versions of Python and for the most recent source-only security fix release for 3.7. The final bugfix release with binary installers for 3.7 was 3.7.9.

\n

Please see the Full Changelog link for more information about the contents of this release and see What\u2019s New In Python 3.7 for more information about 3.7 features.

\n
\n

Security content in this release

\n\n
\n
\n

More resources

\n\n
\n" } }, +{ + "model": "downloads.release", + "pk": 729, + "fields": { + "created": "2025-08-06T20:41:07.457Z", + "updated": "2025-08-06T20:44:16.512Z", + "creator": 1, + "last_modified_by": 1, + "name": "Python 3.14.0rc1", + "slug": "python-3140rc1", + "version": 3, + "is_latest": false, + "is_published": true, + "pre_release": true, + "show_on_download_page": true, + "release_date": "2025-08-06T20:39:16Z", + "release_page": null, + "release_notes_url": "https://docs.python.org/3.14/whatsnew/3.14.html", + "content": "[It's](https://www.youtube.com/watch?v=ydyXFUmv6S4) the first 3.14 release candidate!", + "content_markup_type": "markdown", + "_content_rendered": "

It's the first 3.14 release candidate!

" + } +}, { "model": "downloads.releasefile", "pk": 1, @@ -63032,4 +63067,304 @@ "download_button": false } } +{ + "model": "downloads.releasefile", + "pk": 3880, + "fields": { + "created": "2025-08-06T21:13:43.643Z", + "updated": "2025-08-06T21:13:43.647Z", + "creator": null, + "last_modified_by": null, + "name": "Android embeddable package (aarch64)", + "slug": "3140-rc1-Android-embeddable-package-aarch64", + "os": 4, + "release": 729, + "description": "", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-aarch64-linux-android.tar.gz", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-aarch64-linux-android.tar.gz.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-aarch64-linux-android.tar.gz.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-aarch64-linux-android.tar.gz.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "4a1b2748bf64b54b226b40f845de9e6a", + "filesize": 29099264, + "download_button": false + } +}, +{ + "model": "downloads.releasefile", + "pk": 3881, + "fields": { + "created": "2025-08-06T21:13:43.664Z", + "updated": "2025-08-06T21:13:43.667Z", + "creator": null, + "last_modified_by": null, + "name": "Windows installer (64-bit)", + "slug": "3140-rc1-Windows-installer-64-bit", + "os": 1, + "release": 729, + "description": "Recommended", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-amd64.exe", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-amd64.exe.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-amd64.exe.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-amd64.exe.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "b674030fe04f2d5c4c1385237998a10c", + "filesize": 29924384, + "download_button": true + } +}, +{ + "model": "downloads.releasefile", + "pk": 3882, + "fields": { + "created": "2025-08-06T21:13:43.678Z", + "updated": "2025-08-06T21:13:43.681Z", + "creator": null, + "last_modified_by": null, + "name": "Windows embeddable package (64-bit)", + "slug": "3140-rc1-Windows-embeddable-package-64-bit", + "os": 1, + "release": 729, + "description": "", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-amd64.zip", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-amd64.zip.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-amd64.zip.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-amd64.zip.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "58da6dd39544a56d8d387d42c3397460", + "filesize": 11972759, + "download_button": false + } +}, +{ + "model": "downloads.releasefile", + "pk": 3883, + "fields": { + "created": "2025-08-06T21:13:43.692Z", + "updated": "2025-08-06T21:13:43.695Z", + "creator": null, + "last_modified_by": null, + "name": "Windows release manifest", + "slug": "3140-rc1-Windows-release-manifest", + "os": 1, + "release": 729, + "description": "Install with 'py install 3.14'", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/windows-3.14.0rc1.json", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/windows-3.14.0rc1.json.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/windows-3.14.0rc1.json.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/windows-3.14.0rc1.json.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "3a140287b276a6d661790687b9fdd081", + "filesize": 15669, + "download_button": false + } +}, +{ + "model": "downloads.releasefile", + "pk": 3884, + "fields": { + "created": "2025-08-06T21:13:43.707Z", + "updated": "2025-08-06T21:13:43.709Z", + "creator": null, + "last_modified_by": null, + "name": "Windows installer (32-bit)", + "slug": "3140-rc1-Windows-installer-32-bit", + "os": 1, + "release": 729, + "description": "", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1.exe", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1.exe.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1.exe.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1.exe.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "bad58261535240afd04f6e98510321df", + "filesize": 28481000, + "download_button": false + } +}, +{ + "model": "downloads.releasefile", + "pk": 3885, + "fields": { + "created": "2025-08-06T21:13:43.719Z", + "updated": "2025-08-06T21:13:43.722Z", + "creator": null, + "last_modified_by": null, + "name": "macOS 64-bit universal2 installer", + "slug": "3140-rc1-macOS-64-bit-universal2-installer", + "os": 2, + "release": 729, + "description": "for macOS 10.13 and later", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "88d1bed73bde571e5cae6afaeb636331", + "filesize": 74569591, + "download_button": true + } +}, +{ + "model": "downloads.releasefile", + "pk": 3886, + "fields": { + "created": "2025-08-06T21:13:43.732Z", + "updated": "2025-08-06T21:13:43.734Z", + "creator": null, + "last_modified_by": null, + "name": "Windows installer (ARM64)", + "slug": "3140-rc1-Windows-installer-ARM64", + "os": 1, + "release": 729, + "description": "Experimental", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-arm64.exe", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-arm64.exe.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-arm64.exe.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-arm64.exe.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "19956541e2ccfea8d9c1be2843271fc9", + "filesize": 29132600, + "download_button": false + } +}, +{ + "model": "downloads.releasefile", + "pk": 3887, + "fields": { + "created": "2025-08-06T21:13:43.743Z", + "updated": "2025-08-06T21:13:43.746Z", + "creator": null, + "last_modified_by": null, + "name": "Windows embeddable package (32-bit)", + "slug": "3140-rc1-Windows-embeddable-package-32-bit", + "os": 1, + "release": 729, + "description": "", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-win32.zip", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-win32.zip.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-win32.zip.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-win32.zip.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "20c52ba256be93ef49a87f462a324723", + "filesize": 10571221, + "download_button": false + } +}, +{ + "model": "downloads.releasefile", + "pk": 3888, + "fields": { + "created": "2025-08-06T21:13:43.754Z", + "updated": "2025-08-06T21:13:43.756Z", + "creator": null, + "last_modified_by": null, + "name": "XZ compressed source tarball", + "slug": "3140-rc1-XZ-compressed-source-tarball", + "os": 3, + "release": 729, + "description": "", + "is_source": true, + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tar.xz", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tar.xz.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tar.xz.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tar.xz.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "48c4518c06dcb675c24276c56f69b9fd", + "filesize": 23661916, + "download_button": true + } +}, +{ + "model": "downloads.releasefile", + "pk": 3889, + "fields": { + "created": "2025-08-06T21:13:43.766Z", + "updated": "2025-08-06T21:13:43.768Z", + "creator": null, + "last_modified_by": null, + "name": "Windows embeddable package (ARM64)", + "slug": "3140-rc1-Windows-embeddable-package-ARM64", + "os": 1, + "release": 729, + "description": "", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-arm64.zip", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-arm64.zip.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-arm64.zip.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-embed-arm64.zip.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "709fc10a10cf3ad9633222827ca2abf5", + "filesize": 11165022, + "download_button": false + } +}, +{ + "model": "downloads.releasefile", + "pk": 3890, + "fields": { + "created": "2025-08-06T21:13:43.776Z", + "updated": "2025-08-06T21:13:43.778Z", + "creator": null, + "last_modified_by": null, + "name": "Gzipped source tarball", + "slug": "3140-rc1-Gzipped-source-tarball", + "os": 3, + "release": 729, + "description": "", + "is_source": true, + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tgz", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tgz.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tgz.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tgz.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "11fba5eb7576c1889498af3f8555ed2d", + "filesize": 30639704, + "download_button": false + } +}, +{ + "model": "downloads.releasefile", + "pk": 3891, + "fields": { + "created": "2025-08-06T21:13:43.786Z", + "updated": "2025-08-06T21:13:43.788Z", + "creator": null, + "last_modified_by": null, + "name": "Android embeddable package (x86_64)", + "slug": "3140-rc1-Android-embeddable-package-x86_64", + "os": 4, + "release": 729, + "description": "", + "is_source": false, + "url": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-x86_64-linux-android.tar.gz", + "gpg_signature_file": "", + "sigstore_signature_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-x86_64-linux-android.tar.gz.sig", + "sigstore_cert_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-x86_64-linux-android.tar.gz.crt", + "sigstore_bundle_file": "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-x86_64-linux-android.tar.gz.sigstore", + "sbom_spdx2_file": "", + "md5_sum": "3eb6b0c0c03a81c8444300c00724cac5", + "filesize": 29272204, + "download_button": false + } +} ] diff --git a/fixtures/sitetree_menus.json b/fixtures/sitetree_menus.json index f394233ee..59f387f91 100644 --- a/fixtures/sitetree_menus.json +++ b/fixtures/sitetree_menus.json @@ -507,7 +507,7 @@ "access_restricted": false, "access_perm_type": 1, "parent": 8, - "sort_order": 23, + "sort_order": 24, "access_permissions": [] } }, @@ -531,7 +531,7 @@ "access_restricted": false, "access_perm_type": 1, "parent": 8, - "sort_order": 24, + "sort_order": 25, "access_permissions": [] } }, @@ -2742,5 +2742,29 @@ "sort_order": 123, "access_permissions": [] } +}, +{ + "model": "sitetree.treeitem", + "pk": 124, + "fields": { + "title": "Android", + "hint": "", + "url": "/downloads/android/", + "urlaspattern": false, + "tree": 1, + "hidden": false, + "alias": null, + "description": "", + "inmenu": true, + "inbreadcrumbs": true, + "insitetree": true, + "access_loggedin": false, + "access_guest": false, + "access_restricted": false, + "access_perm_type": 1, + "parent": 8, + "sort_order": 23, + "access_permissions": [] + } } ] diff --git a/templates/downloads/os_list.html b/templates/downloads/os_list.html index b110e57b1..127b21a7c 100644 --- a/templates/downloads/os_list.html +++ b/templates/downloads/os_list.html @@ -35,6 +35,11 @@

Python Releases for {{ os.name }}

  • Latest Python 3 Release - {{ latest_python3.name }}
  • + + {% if os.slug == 'android' %} +

    Rather than using these packages directly, in most cases you should use one of the tools recommended in the Python documentation.

    + {% endif %} +

    Stable Releases

    From 4ea2bdea2df9e302425a5a67269d20cb6cdb0629 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Thu, 7 Aug 2025 10:14:41 -0500 Subject: [PATCH 2/3] Update templates/downloads/os_list.html --- templates/downloads/os_list.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/downloads/os_list.html b/templates/downloads/os_list.html index 127b21a7c..6c8d8a1b7 100644 --- a/templates/downloads/os_list.html +++ b/templates/downloads/os_list.html @@ -37,7 +37,7 @@

    Python Releases for {{ os.name }}

    {% if os.slug == 'android' %} -

    Rather than using these packages directly, in most cases you should use one of the tools recommended in the Python documentation.

    +

    Rather than using these packages directly, in most cases you should use one of the tools recommended in the Python documentation.

    {% endif %}
    From 05466732609f7185b8e251700a524500ff85b194 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Thu, 7 Aug 2025 10:17:00 -0500 Subject: [PATCH 3/3] Update templates/downloads/os_list.html --- templates/downloads/os_list.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/downloads/os_list.html b/templates/downloads/os_list.html index 6c8d8a1b7..127b21a7c 100644 --- a/templates/downloads/os_list.html +++ b/templates/downloads/os_list.html @@ -37,7 +37,7 @@

    Python Releases for {{ os.name }}

    {% if os.slug == 'android' %} -

    Rather than using these packages directly, in most cases you should use one of the tools recommended in the Python documentation.

    +

    Rather than using these packages directly, in most cases you should use one of the tools recommended in the Python documentation.

    {% endif %}