Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e636e62
chore(deps): bump alyf-de/po-review-action from 1.1.0 to 1.1.1
dependabot[bot] Jul 15, 2026
df601b9
chore(deps): bump actions/setup-node from 6 to 7
dependabot[bot] Jul 20, 2026
721cdcc
chore(deps): bump actions/setup-python from 6 to 7
dependabot[bot] Jul 20, 2026
969fb67
build(deps): bump esbuild from 0.28.0 to 0.28.1
dependabot[bot] Jul 22, 2026
2f53a9a
test(email): cover space and slash encoding in document email addresses
kaulith Jul 24, 2026
8c653b0
fix: improve time description handling in ControlTime
KerollesFathy Jul 24, 2026
5d9d289
fix(form): translate datetime field description before appending time…
KerollesFathy Jul 24, 2026
3445aab
fix(image-view): keep paging controls pinned while scrolling image grid
KerollesFathy Jul 25, 2026
2bd3757
fix: sync translations from crowdin (#41226)
frappe-pr-bot Jul 26, 2026
d08e5cc
build(deps): bump postcss from 8.4.31 to 8.5.12 (#41212)
dependabot[bot] Jul 26, 2026
97ffd13
build(deps): bump postcss from 8.5.12 to 8.5.18
dependabot[bot] Jul 26, 2026
4245855
Merge pull request #39934 from frappe/dependabot/npm_and_yarn/esbuild…
iamejaaz Jul 26, 2026
bdfa6f9
Merge pull request #41082 from frappe/dependabot/github_actions/actio…
iamejaaz Jul 26, 2026
1bab244
Merge pull request #41083 from frappe/dependabot/github_actions/actio…
iamejaaz Jul 26, 2026
88fa4f5
Merge pull request #40640 from frappe/dependabot/github_actions/alyf-…
iamejaaz Jul 26, 2026
03f4e89
build(deps): bump shell-quote from 1.8.1 to 1.10.0 (#41085)
dependabot[bot] Jul 26, 2026
ed015fe
Merge pull request #41233 from frappe/dependabot/npm_and_yarn/postcss…
iamejaaz Jul 26, 2026
c302602
build(deps): bump launch-editor from 2.9.0 to 2.14.1
dependabot[bot] Jul 26, 2026
a64870b
chore(deps): bump actions/cache from 4 to 6 (#40409)
dependabot[bot] Jul 26, 2026
a55627b
Merge pull request #41214 from kaulith/fix/document-email-space-encoding
iamejaaz Jul 26, 2026
75233cc
fix: constrain read-only Text Editor field height with scroll (#41118)
KerollesFathy Jul 26, 2026
cf373bc
Merge pull request #40035 from frappe/dependabot/npm_and_yarn/launch-…
iamejaaz Jul 26, 2026
672cd37
Merge pull request #41222 from KerollesFathy/fix/datetime-description…
iamejaaz Jul 26, 2026
8bbc109
Merge pull request #41230 from KerollesFathy/fix/image-view-paging-ar…
iamejaaz Jul 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build-and-commit-assets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
mkdir -p sites
echo "frappe" > sites/apps.txt

- uses: actions/setup-node@v6
- uses: actions/setup-node@v7
with:
node-version: 24
cache: yarn
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
fetch-depth: 0
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: 24
- name: Setup dependencies
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/default-js-bundle-size.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,15 @@ jobs:
fetch-depth: 0
path: apps/frappe

- uses: actions/setup-node@v6
- uses: actions/setup-node@v7
with:
node-version: 24
check-latest: true

- id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT

- uses: actions/cache@v4
- uses: actions/cache@v6
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('apps/frappe/yarn.lock') }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/generate-pot-file.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ jobs:
ref: ${{ matrix.branch }}

- name: Setup Python
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: "3.14"

- name: Setup Node
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: 24

Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/linters.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- uses: actions/checkout@v7
with:
fetch-depth: 200
- uses: actions/setup-node@v6
- uses: actions/setup-node@v7
with:
node-version: 24
check-latest: true
Expand All @@ -39,7 +39,7 @@ jobs:

steps:
- name: 'Setup Environment'
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: '3.14'
- uses: actions/checkout@v7
Expand All @@ -58,7 +58,7 @@ jobs:

steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
- uses: actions/setup-python@v7
with:
python-version: '3.14'
cache: pip
Expand All @@ -76,14 +76,14 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/setup-python@v6
- uses: actions/setup-python@v7
with:
python-version: '3.14'

- uses: actions/checkout@v7

- name: Cache pip
uses: actions/cache@v4
uses: actions/cache@v6
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml', '**/setup.py') }}
Expand All @@ -105,7 +105,7 @@ jobs:

steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
- uses: actions/setup-python@v7
with:
python-version: '3.14'
cache: pip
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/on_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ jobs:
with:
path: 'frappe'

- uses: actions/setup-node@v6
- uses: actions/setup-node@v7
with:
node-version: 24

- uses: actions/setup-python@v6
- uses: actions/setup-python@v7
with:
python-version: '3.14'
- name: Set up bench and build assets
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/review-translation-changes.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ jobs:
pull-requests: write

steps:
- uses: alyf-de/po-review-action@ffb92a299452595ca50fb1429ee98a7ebacb571e # v1.1.0
- uses: alyf-de/po-review-action@5928f84d6bc9094f9ad6e2c5780f01c0044b800e # v1.1.1
with:
hidden-po-files: eo.po
10 changes: 5 additions & 5 deletions .github/workflows/run-indinvidual-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,12 @@ jobs:
uses: actions/checkout@v7

- name: Setup Python
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: '3.14'

- name: Setup Node
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: 24
check-latest: true
Expand All @@ -86,7 +86,7 @@ jobs:
run: echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts

- name: Cache pip
uses: actions/cache@v4
uses: actions/cache@v6
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
Expand All @@ -95,7 +95,7 @@ jobs:
${{ runner.os }}-

- name: Cache node modules
uses: actions/cache@v4
uses: actions/cache@v6
env:
cache-name: cache-node-modules
with:
Expand All @@ -110,7 +110,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT

- uses: actions/cache@v4
- uses: actions/cache@v6
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/server-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ jobs:
db-root-password: ${{ env.DB_ROOT_PASSWORD }}

- name: Setup Python
uses: actions/setup-python@v6
uses: actions/setup-python@v7
with:
python-version: |
3.13
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ui-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ jobs:
git diff --exit-code yarn.lock

- name: Cache cypress binary
uses: actions/cache@v4
uses: actions/cache@v6
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress
Expand Down
4 changes: 2 additions & 2 deletions frappe/desk/form/load.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import json
import typing
from typing import Any
from urllib.parse import quote_plus
from urllib.parse import quote

import frappe
import frappe.defaults
Expand Down Expand Up @@ -451,7 +451,7 @@ def get_document_email(doctype, name):
return None

email = email.split("@")
return f"{email[0]}+{quote_plus(doctype)}={quote_plus(cstr(name))}@{email[1]}"
return f"{email[0]}+{quote(doctype, safe='')}={quote(cstr(name), safe='')}@{email[1]}"


def get_additional_timeline_content(doctype, docname):
Expand Down
21 changes: 20 additions & 1 deletion frappe/desk/form/test_load.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
# License: MIT. See LICENSE

import json
from unittest.mock import patch

import frappe
from frappe.desk.form.load import get_filtered_attachments, get_user_info_for_viewers
from frappe.core.doctype.communication.communication import parse_email
from frappe.desk.form.load import get_document_email, get_filtered_attachments, get_user_info_for_viewers
from frappe.tests import IntegrationTestCase


Expand Down Expand Up @@ -54,3 +56,20 @@ def test_get_filtered_attachments(self):
)

self.assertEqual([attachment.name for attachment in attachments], [matching_file.name])

def test_get_document_email(self):
with patch(
"frappe.email.doctype.email_account.email_account.get_automatic_email_link",
return_value="erpnext@example.com",
):
address = get_document_email("Purchase Order", "PO-26465-002")
address_with_separator_in_name = get_document_email("Purchase Order", "PO/2026/002")

self.assertEqual(address, "erpnext+Purchase%20Order=PO-26465-002@example.com")
self.assertEqual(
address_with_separator_in_name, "erpnext+Purchase%20Order=PO%2F2026%2F002@example.com"
)
self.assertEqual([("Purchase Order", "PO-26465-002")], list(parse_email([address])))
self.assertEqual(
[("Purchase Order", "PO/2026/002")], list(parse_email([address_with_separator_in_name]))
)
4 changes: 2 additions & 2 deletions frappe/locale/fa.po
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: frappe\n"
"Report-Msgid-Bugs-To: developers@frappe.io\n"
"POT-Creation-Date: 2026-07-19 10:02+0000\n"
"PO-Revision-Date: 2026-07-21 13:55\n"
"PO-Revision-Date: 2026-07-25 14:43\n"
"Last-Translator: developers@frappe.io\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
Expand Down Expand Up @@ -21210,7 +21210,7 @@ msgstr "فقط برای"
#: frappe/core/doctype/role/role.js:357
#: frappe/public/js/frappe/ui/permission_dialog.js:288
msgid "Only if Creator"
msgstr ""
msgstr "فقط اگر ایجاد کننده"

#: frappe/core/doctype/data_export/exporter.py:193
msgid "Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish."
Expand Down
Loading
Loading