Commit graph

55494 commits

Author SHA1 Message Date
Shrihari Mahabal
07dd2fd9dc fix: prevent persistence of virtual single doctypes 2026-04-21 19:04:11 +05:30
Abdeali Chharchhoda
a0240a3d18 chore: minor fix 2026-04-21 18:33:46 +05:30
Kerolles Fathy
9f5b45167d
Merge pull request #38766 from frappe/revert-38249-fix/serial-no-style-on-report
Revert "fix(report): enhance the visibility of serial-no at first column"
2026-04-21 14:52:07 +02:00
Abdeali Chharchhoda
0ed3651767 test: add test for delete_custom_fields function 2026-04-21 18:21:00 +05:30
Abdeali Chharchhoda
eb8e683c26 feat: add delete_custom_fields function to remove custom fields from doctypes 2026-04-21 18:20:16 +05:30
Kerolles Fathy
56dbad7715
Revert "fix(report): enhance the visibility of serial-no at first column (#38…"
This reverts commit 8509c79877.
2026-04-21 14:45:04 +02:00
Soham Kulkarni
e516f716bf
Merge pull request #38764 from sokumon/remove-icon-close
fix: replace icon-close with icon-x
2026-04-21 17:36:05 +05:30
sokumon
32aaaa7abe fix: replace icon-close with icon-x 2026-04-21 17:01:39 +05:30
sokumon
a8ca40b444 fix(dialog): add a flag to include default value 2026-04-21 16:58:54 +05:30
MochaMind
7d49a515b0
chore: update POT file (#38714) 2026-04-21 16:22:39 +05:30
Ejaaz Khan
19eb07ffc4
Merge pull request #38752 from iamejaaz/bum-datatable
chore: update datatble to 1.20.1
2026-04-21 12:47:50 +05:30
Ejaaz Khan
48f48b6207 chore: update datatble to 1.20.1 2026-04-21 12:31:27 +05:30
Aarol D'Souza
4358f5bd44
Merge pull request #38740 from AarDG10/fix-backup
fix(response): harden download_backup
2026-04-21 12:11:08 +05:30
Ejaaz Khan
486d56934b
Merge pull request #38741 from KerollesFathy/fix-hide-permissions-tab
fix(doctype): show Permissions tab only when doctype is not a child table
2026-04-21 06:59:48 +05:30
barredterra
38e140df22 fix(tests): skip uninstalled doctypes in test record dependency walk
The test runner walks link-field dependencies recursively to pre-generate
test records via `get_missing_records_doctypes`. If any DocType in the
transitive link graph belonged to an app not installed on the test site,
the walk crashed with `DoesNotExistError`, aborting the entire suite
before a single test ran.

Treat such link targets as dead-end leaves instead:

- `get_modules` now returns `(None, None)` when the DocType row does not
  exist, instead of falling through into `load_doctype_module` which
  raises.
- `get_missing_records_doctypes` checks for `module is None`, logs a
  warning naming the parent DocType that linked to it, and returns
  without descending further.

This restores the ability to run downstream test suites that link
(directly or transitively) to optional/uninstalled apps without forcing
every CI environment to know the full transitive link graph.

Fixes #38747
2026-04-21 01:49:08 +02:00
Raffael Meyer
166bb914c1
fix: set autocomplete attribute for password fields in user and setup wizard forms (#38744) 2026-04-20 23:09:49 +00:00
sokumon
e33097fd35 fix(dialog): send default value in dialog 2026-04-21 02:48:53 +05:30
sokumon
249adb0680 fix: spacing between group by label 2026-04-21 01:13:13 +05:30
KerollesFathy
5c7d28a826 fix(doctype): show Permissions tab only when doctype is not a child table 2026-04-20 14:16:10 +00:00
AarDG10
0c660477ee fix(response): harden download_backup
Made use of util `check_path_safety` to ensure sandboxing.
2026-04-20 18:58:21 +05:30
AarDG10
7c9ce26469 feat(utils): add util to ensure sandboxing
This util can be used in places where sandboxing is needed.
2026-04-20 18:49:42 +05:30
Soham Kulkarni
ec3922e903
Merge pull request #38738 from sokumon/sidebar-history 2026-04-20 18:10:32 +05:30
sokumon
f083bdcb48 fix: add a check if sidebar_item_map exists 2026-04-20 18:02:20 +05:30
Soham Kulkarni
c8e0a89b1c
Merge pull request #38353 from sokumon/sidebar-history 2026-04-20 17:28:30 +05:30
Abdeali Chharchhodawala
3796860c92
fix: simplify total row calculation logic in query report (#38677) 2026-04-20 10:38:34 +00:00
Soham Kulkarni
57a94ca566
Merge pull request #38726 from sokumon/default-workspace 2026-04-20 14:28:25 +05:30
Ejaaz Khan
9ead794803
Merge pull request #38730 from Nihantra-Patel/fix-report-letterhead-validation
fix: skip report letter head validation when no letter head is set
2026-04-20 12:54:01 +05:30
Nihantra C. Patel
0cefdf0f8d
fix: formatting 2026-04-20 12:44:34 +05:30
Nihantra C. Patel
c36dc287b4
fix: skip report letter head validation when no letter head is set 2026-04-20 12:36:44 +05:30
Ejaaz Khan
58ef5aded0
Merge pull request #38724 from AarDG10/fix-bulk-paste
fix(table): fix bulk paste in child tables
2026-04-20 11:14:30 +05:30
sokumon
7a73a23e4a fix: remove dead code regarding default workspace 2026-04-20 02:23:14 +05:30
sokumon
767099268a fix: consider default workspace after login 2026-04-20 01:29:22 +05:30
AarDG10
a5118dcb9d fix(table): fix bulk paste in child tables 2026-04-19 22:10:42 +05:30
Hussain Nagaria
465aa38cba
Merge pull request #38608 from kaulith/fix/workspace-sidebar-empty-module-visibility 2026-04-19 19:39:35 +05:30
Hussain Nagaria
f1755daab9
Merge pull request #38536 from kaulith/fix/webform-hidden-mandatory-validation 2026-04-19 17:02:40 +05:30
Kaushal Shriwas
87b0824031 fix: skip hidden and mandatory check when allow_incomplete is set 2026-04-19 16:49:38 +05:30
MochaMind
343d55a4a7
fix: sync translations from crowdin (#38710)
* fix: French translations

* fix: Spanish translations

* fix: Arabic translations

* fix: Czech translations

* fix: Danish translations

* fix: Italian translations

* fix: Dutch translations

* fix: Polish translations

* fix: Portuguese translations

* fix: Slovenian translations

* fix: Turkish translations

* fix: Vietnamese translations

* fix: Portuguese, Brazilian translations

* fix: Indonesian translations

* fix: Persian translations

* fix: Burmese translations

* fix: Norwegian Bokmal translations
2026-04-19 01:26:25 +02:00
Ejaaz Khan
843e396b44
Merge pull request #38466 from kaulith/fix/role-profile-not-visible-in-user-list-view
fix: sync role_profile_name for user list view display
2026-04-18 23:50:11 +05:30
Ejaaz Khan
6ebe8e2b8d
Merge pull request #38658 from kaulith/feat/sidebar-notification-unread-count
feat: show unread notification count in sidebar
2026-04-18 23:49:09 +05:30
Ejaaz Khan
c6ae260f0d
Merge pull request #38708 from KerollesFathy/fix-allow-clearing-link-fields
fix(link): Allow clearing link fields
2026-04-18 23:44:47 +05:30
KerollesFathy
f84190685f fix(link): ensure clear button state is a boolean value 2026-04-18 14:33:56 +00:00
Kaushal Shriwas
4976b4554d chore: merge develop into feat/sidebar-notification-unread-count 2026-04-18 20:01:40 +05:30
Saqib Ansari
75bae453ac
fix(prepared_report): handle missing attachments in get_prepared_data method (#38449) 2026-04-18 19:28:41 +05:30
Kerolles Fathy
63b8d78075
Merge pull request #38703 from UmakanthKaspa/fix/link-clear-icon-align
fix: Align × and right arrow icons in link field
2026-04-18 15:49:08 +02:00
Saqib Ansari
d618a88f01 feat: derive concurrency limit from gunicorn master's cmdline
Co-authored-by: Copilot <copilot@github.com>
2026-04-18 15:37:14 +05:30
Saqib Ansari
4eafb38f98 test: rewrite concurrent_limit tests to test through public interface 2026-04-18 14:58:47 +05:30
Saqib Ansari
033d49b488 fix: add TTL to capacity key so pool self-heals after worker crash
If a gunicorn worker is killed (SIGKILL, OOM) while holding a token, the
token is never returned to the pool. With no TTL on the capacity key,
`setnx` would never fire again, so the pool shrinks permanently — with
`limit=3` you silently end up at `limit=2`, then `limit=1`, etc.

Set a 1-hour TTL (`_CAPACITY_KEY_TTL`) on the capacity key via the
`NX EX` form of SET in the Lua init script. When the key expires the next
request re-initializes the pool to full capacity, so the semaphore is
self-healing without manual Redis key deletion.
2026-04-18 14:26:17 +05:30
Saqib Ansari
8589f26ce9 fix: atomically initialize token pool via Lua script in _ensure_tokens
Replace the `setnx` + pipeline pair with a Lua script evaluated in a
single round-trip. The prior approach had a race window: between the
`SET NX` succeeding and the `MULTI/EXEC` pipeline running, a concurrent
worker could BLPOP from the list just before `DEL` wiped it — losing
tokens permanently. A process crash in that window left the capacity flag
set but the token list empty, breaking the semaphore with no recovery path.

The Lua script makes the check-and-initialize atomic: Redis executes it as
a single unit with no interleaving, so the race window is closed.
2026-04-18 14:25:30 +05:30
Saqib Ansari
e8c7eb946b refactor: rewrite concurrent_limit to use LIST + BLPOP semaphore
Replace the INCRBY-based polling loop with a proper token pool backed by
a Redis LIST. BLPOP blocks until a token is available instead of sleeping
and retrying, which is more efficient and avoids the check-then-act race
of the old counter approach.

Other fixes bundled in:
- Add `blpop` and `setnx` wrappers to `RedisWrapper` so all key prefixing
  goes through `make_key` consistently
- Cache `_default_limit()` result with `@redis_cache(shared=True)` to
  avoid importing `multiprocessing` on every request
- Fix `limit=0` edge case: use `is not None` guard instead of falsy check
- Guard `_release()` against pushing the `"fallback"` token back into the
  pool when Redis was unavailable during acquire
2026-04-18 14:21:33 +05:30
UmakanthKaspa
b1d7d480fd fix: align × and → icons in link field 2026-04-18 07:57:14 +00:00