Skip to content

v15.2.0 : Refactor

Latest

Choose a tag to compare

@brian-pond brian-pond released this 06 Jul 22:08

⚠️ This is a breaking release:

  1. All Task Schedule records must be written in -local- cron, instead of legacy UTC cron.
  2. Environment Variables have replaced physical config files.
  3. A bench migrate is mandatory after code upgrade.
  4. Version 1.0.0 of BTU Scheduler is -mandatory-

Key Highlights

  • New official documentation: https://btu.datahenge.com
  • Per-schedule timezone support. Each BTU Task Schedule can now carry its own timezone; new tests added.
  • Redis-based Scheduler messaging : Replaced Unix Domain Socket IPC with Redis blocking calls.
    • Web calls to Scheduler now play nice with containers and K8s.
    • Improved Web UI responsiveness.
  • Added a cron generation dialog, reduced DocFields clutter, and reorganized infrequently edited fields into tabs.
  • Dynamic IANA timezone dropdown — Task Schedule timezone selection now pulls from a live IANA timezone list.
  • One-shot double-fire prevention — Added checks to prevent a One Shot task from firing more than once.
  • Logging overhaul: Replaced print() and dprint() calls throughout with proper Python logging.

Misc

  • Improved email error handling — Failures in BTU's notification emails no longer propagate as hard errors.
  • Scheduler defaults and retroactive change log — Better default values for new Tasks; added a retroactive change log entry.
  • Remove BTU Queue; significant architectural simplification — Eliminated the BTU Queue DocType, fixed save() when the Scheduler is offline, removed the separate Email Account field, and replaced the timezone picker with an Autocomplete field.
  • Directory restructuring: Moved non-BTU utility code out of the repo into Gists to reduce scope.
  • Ruff linting integrated — Added AGENTS.md, workspace config, and Ruff; completed a first-pass cleanup of easy lint violations, unused imports, and type annotations.
  • Fully-qualified function paths enforced — TaskComponent now requires dotted module paths instead of raw function objects.
  • Advisory lock bug fix — poll_for_ready_work() was losing its SQL lock on frappe.db.commit(); switched to MariaDB/PostgreSQL advisory locks.
  • RQ Job ID saved correctly — BTU Task Log now persists the Redis Queue Job ID properly.
  • Resolved pickling failures for bound methods and Frappe Documents.
  • Email failure isolation — A failure to send a post-task email no longer fails the task itself.