diff --git a/.github/workflows/_base-migration.yml b/.github/workflows/_base-migration.yml index 43c9310a6f..defaabd7b4 100644 --- a/.github/workflows/_base-migration.yml +++ b/.github/workflows/_base-migration.yml @@ -74,7 +74,7 @@ jobs: source ${GITHUB_WORKSPACE}/env/bin/activate echo "Updating to version ${version:-$head_ref}" - + # Fetch and checkout branches for app in ${GITHUB_WORKSPACE}/apps/*/; do app_name=$(basename "$app") diff --git a/.github/workflows/_base-server-tests.yml b/.github/workflows/_base-server-tests.yml index 3142e3ef91..3afdb3c808 100644 --- a/.github/workflows/_base-server-tests.yml +++ b/.github/workflows/_base-server-tests.yml @@ -9,7 +9,7 @@ on: python-version: required: false type: string - default: '3.12' + default: '3.13' node-version: required: false type: number diff --git a/.github/workflows/_base-type-check.yml b/.github/workflows/_base-type-check.yml index 775de211ec..3e446adfb6 100644 --- a/.github/workflows/_base-type-check.yml +++ b/.github/workflows/_base-type-check.yml @@ -5,7 +5,7 @@ on: python-version: required: false type: string - default: '3.12.6' + default: '3.13.0' jobs: typecheck: diff --git a/.github/workflows/_base-ui-tests.yml b/.github/workflows/_base-ui-tests.yml index 3ba8abe006..dafb58e81a 100644 --- a/.github/workflows/_base-ui-tests.yml +++ b/.github/workflows/_base-ui-tests.yml @@ -9,7 +9,7 @@ on: python-version: required: false type: string - default: '3.12' + default: '3.13' node-version: required: false type: number diff --git a/.github/workflows/generate-pot-file.yml b/.github/workflows/generate-pot-file.yml index 3d366d08ba..b02e521d61 100644 --- a/.github/workflows/generate-pot-file.yml +++ b/.github/workflows/generate-pot-file.yml @@ -25,7 +25,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: "3.12" + python-version: "3.13" - name: Run script to update POT file run: | diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index faa028f01f..ec476f30e6 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -41,7 +41,7 @@ jobs: - name: 'Setup Environment' uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: '3.13' - uses: actions/checkout@v4 - name: Validate Docs @@ -60,7 +60,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.13' cache: pip - name: Download Semgrep rules @@ -78,7 +78,7 @@ jobs: steps: - uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.13' - uses: actions/checkout@v4 @@ -106,6 +106,6 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.13' cache: pip - uses: pre-commit/action@v3.0.1 diff --git a/.github/workflows/on_release.yml b/.github/workflows/on_release.yml index fe12a5de71..5f31a77eaa 100644 --- a/.github/workflows/on_release.yml +++ b/.github/workflows/on_release.yml @@ -26,7 +26,7 @@ jobs: - uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.13' - name: Set up bench and build assets run: | npm install -g yarn diff --git a/.github/workflows/publish-assets-develop.yml b/.github/workflows/publish-assets-develop.yml index 0a8e54deb6..e3c7cd3e5c 100644 --- a/.github/workflows/publish-assets-develop.yml +++ b/.github/workflows/publish-assets-develop.yml @@ -19,7 +19,7 @@ jobs: node-version: 20 - uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: '3.13' - name: Set up bench and build assets run: | npm install -g yarn diff --git a/.github/workflows/run-indinvidual-tests.yml b/.github/workflows/run-indinvidual-tests.yml index b6f8ddf60b..af0a3c45d3 100644 --- a/.github/workflows/run-indinvidual-tests.yml +++ b/.github/workflows/run-indinvidual-tests.yml @@ -74,7 +74,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: '3.13' - name: Setup Node uses: actions/setup-node@v4 diff --git a/frappe/deprecation_dumpster.py b/frappe/deprecation_dumpster.py index c9dc23c4fe..5ede7aef91 100644 --- a/frappe/deprecation_dumpster.py +++ b/frappe/deprecation_dumpster.py @@ -15,6 +15,7 @@ Remember, deprecated doesn't mean useless - it just means these functions are en Enjoy your stay in the Deprecation Dumpster, where every function gets a second chance to shine (or at least, to not break everything). """ +import functools import inspect import os import re @@ -117,7 +118,6 @@ try: # since python 3.13, PEP 702 from warnings import deprecated as _deprecated except ImportError: - import functools import warnings from collections.abc import Callable from typing import Optional, TypeVar, Union, overload diff --git a/frappe/types/docref.py b/frappe/types/docref.py index 02b8dd23fe..09adc2b779 100644 --- a/frappe/types/docref.py +++ b/frappe/types/docref.py @@ -1,3 +1,5 @@ +from typing import Union + from typing_extensions import override @@ -13,11 +15,15 @@ class DocRef: return self.name @override - def __hash__(self) -> int: - if self.name: - return hash(self.doctype + self.name) - else: - raise ValueError("Only named documents can be hashed; maybe the document is unsaved.") + def __hash__(self: Union[type, "DocRef"]) -> int: + if isinstance(self, DocRef): + if self.name: + return hash(self.doctype + self.name) + else: + raise TypeError( + f"Only named documents can be hashed; maybe the document ({self.doctype}) is unsaved." + ) + raise TypeError("Only document instances can be hashed.") @override def __str__(self) -> str: diff --git a/pyproject.toml b/pyproject.toml index a1abc28f02..dcacda8bc4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ authors = [ { name = "Frappe Technologies Pvt Ltd", email = "developers@frappe.io"} ] description = "Metadata driven, full-stack low code web framework" -requires-python = ">=3.10,<3.13" +requires-python = ">=3.10,<3.14" readme = "README.md" dynamic = ["version"] dependencies = [ @@ -24,7 +24,7 @@ dependencies = [ "PyPika==0.48.9", "PyQRCode~=1.2.1", "PyYAML~=6.0.1", - "RestrictedPython~=7.0", + "RestrictedPython~=7.4", "WeasyPrint==59.0", "pydyf==0.10.0", "Werkzeug~=3.0.1", @@ -54,7 +54,7 @@ dependencies = [ "psutil~=5.9.5", "psycopg2-binary~=2.9.1", "pyOpenSSL~=24.2.1", - "pydantic~=2.7.0", + "pydantic~=2.10.2", "pyotp~=2.8.0", "python-dateutil~=2.8.2", "pytz==2023.3", @@ -75,7 +75,7 @@ dependencies = [ "traceback-with-variables~=2.0.4", "typing_extensions>=4.6.1,<5", "tomli~=2.0.1", - "uuid-utils~=0.6.1", + "uuid-utils~=0.10.0", "xlrd~=2.0.1", "zxcvbn~=4.4.28", "markdownify~=0.11.6",