Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 1 addition & 2 deletions .github/workflows/test-mqtt-broker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ jobs:

strategy:
matrix:
python-version: ['3.11', '3.12']
# python-version: ['3.11']
python-version: ['3.11', '3.12', '3.13']

steps:
- name: Checkout code
Expand Down
79 changes: 79 additions & 0 deletions docs/release-notes/2026.10.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Release 2026.10.0

## Portal

- Add a Markdown preview tab to the log entry editor.
- Add the ability to maximize the log entry editor.
- Add an All Logbooks page for viewing and filtering log documents across every logbook type.
- Add a default owner group setting for each logbook type. New log documents inherit the configured owner group.
- Improve logbook selection and document lists with hierarchy-aware names and filtering.
- Prevent creating log documents from top-level logbook groupings.
- Apply stricter attachment type handling and provide browsers with safer display and download instructions.

## API

- Add endpoints to create log entry replies.
- Add endpoints to delete log entries, attachments, document sections, and log documents.
- Add an endpoint for fetching the logbook type hierarchy.
- Exclude top-level logbook groupings from the list of types valid for new documents.
- Add authentication endpoints for login, logout, and token verification.
- Include attachment IDs in log entry responses to support attachment removal.

## BELY CLI and TUI

The new BELY CLI and terminal interface are available from PyPI:

```bash
pip install bely-cli
```

- Add the `bely-cli` command-line client for creating, browsing, and deleting log documents; adding, updating, deleting, and replying to log entries; and listing, uploading, and deleting attachments.
- Add a Textual terminal interface with support for:
- Browsing and filtering logbooks, documents, entries, replies, and attachments, with rendered Markdown previews and collapsible reply threads.
- Creating and deleting documents and managing entries and replies, with additional confirmation for destructive actions.
- Browsing, previewing, uploading, and deleting attachments, with directory filtering and upload progress feedback.
- Detecting Markdown images and optionally displaying them inline in supported terminals.
- Editing entries in an external editor.
- Navigating to previous and next entries.
- Logging in and out using the same cached authentication as the CLI.
- Editing configuration and retaining theme selection.
- Add shell completion with cached suggestions for identifiers and other dynamic values.
- Add conventional command aliases such as `ls`, `show`, and `update`.
- Add cached authentication with login, logout, token verification, and configurable cache expiration.
- Add shared and user-specific configuration with environment variable overrides.
- Add text, JSON, and YAML output formats for command-line use and automation.
- Add external editor support and the ability to read entry text from standard input.
- Add commands for showing document and entry details, with file and standard-output options.

## MCP Integration

- Add a read-only Model Context Protocol (MCP) endpoint for AI clients.
- Add MCP tools to:
- Search BELY.
- List and fetch log documents and entries.
- List logbook types and systems.
- List users and user groups.

## Performance and Compatibility

- Improve search performance on MariaDB 10.5 by avoiding an inefficient join plan. Server testing reduced affected searches from approximately 255 seconds to less than one second.
- Update Python components to Python 3.13.
- Update stored password hashing to PBKDF2-HMAC-SHA512 while retaining compatibility with existing passwords.
- Add lazy imports to the Python API client to improve command startup time.

## Packaging and Development

- Add PyPI and conda packaging for `bely-api`, `bely-cli`, and `bely-mqtt-framework`.
- Add unified tooling for preparing BELY releases and publishing Python packages.
- Add automated Java portal and BELY CLI tests to GitHub Actions.

## Bug Fixes

- Fix logbook filtering and previous/next navigation when viewing all documents.
- Fix blank screens when returning from or leaving a full-screen entry in the TUI.
- Fix hidden filters in TUI logbook and document selection screens.
- Fix selection indicators when choosing multiple systems in the TUI.
- Fix external editor changes not being detected when updating an entry.
- Fix TUI scrolling so the selected entry retains its position and newly selected entries start at the top.
- Fix authentication errors when a username does not exist.
- Fix searches containing double quotation marks.
2 changes: 1 addition & 1 deletion etc/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2026.10.0.dev0
2026.10.0
2 changes: 1 addition & 1 deletion src/java/LogrPortal/src/java/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ prettyPrint: true
cacheTTL: 0
openAPI:
info:
version: '2026.10.0.dev0'
version: '2026.10.0'
title: BELY API
description: 'The API that provides access to BELY data.'
contact:
Expand Down
2 changes: 1 addition & 1 deletion tools/developer_tools/bely-cli/conda-recipe/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% set name = "bely-cli" %}
{% set version = "2026.10.0.dev0" %}
{% set version = "2026.10.0" %}

package:
name: "{{ name|lower }}"
Expand Down
4 changes: 2 additions & 2 deletions tools/developer_tools/bely-cli/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "bely-cli"
version = "2026.10.0.dev1"
version = "2026.10.0"
description = "Command-line interface for the BELY electronic logbook"
readme = "README.md"
requires-python = ">=3.10"
Expand All @@ -13,7 +13,7 @@ maintainers = [{ name = "Dariusz Jarosz", email = "djarosz@aps.anl.gov" }]
dependencies = [
"click>=8.1.0",
"PyYAML>=6.0.0",
"bely-api==2026.10.0.dev0",
"bely-api==2026.10.0",
"textual>=0.86.0",
"rich>=13.7.0",
]
Expand Down
2 changes: 1 addition & 1 deletion tools/developer_tools/bely-cli/src/bely_cli/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "2026.10.0.dev0"
__version__ = "2026.10.0"
4 changes: 2 additions & 2 deletions tools/developer_tools/bely-cli/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% set name = "bely-mqtt-message-broker" %}
{% set version = "2026.3.1" %}
{% set version = "2026.10.0" %}

package:
name: "{{ name|lower }}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,7 @@ def send_with_headers(
# Fall back to regular Apprise if not an email notification
apobj = apprise.Apprise()
apobj.add(self.apprise_url)
result = apobj.notify(body=body, title=title)
return bool(result)
return bool(apobj.notify(body=body, title=title))

# If we have headers, inject them into the email instance
if headers:
Expand All @@ -86,8 +85,7 @@ def send_with_headers(
setattr(email_instance, "headers", {}) # type: ignore[attr-defined]

# Send the notification using the email instance
result = email_instance.send(body=body, title=title)
return bool(result)
return bool(email_instance.send(body=body, title=title))

except Exception as e:
print(f"Error sending email with headers: {e}")
Expand Down
9 changes: 6 additions & 3 deletions tools/developer_tools/bely-mqtt-message-broker/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "bely-mqtt-framework"
version = "2026.3.1"
version = "2026.10.0"
description = "Pluggable Python framework for handling BELY MQTT events"
readme = "README.md"
requires-python = ">=3.10"
Expand Down Expand Up @@ -49,8 +49,8 @@ dev = [
"pytest>=7.0.0",
"pytest-cov>=4.0.0",
"pytest-asyncio>=0.21.0",
"black>=23.0.0",
"ruff>=0.1.0",
"black==26.1.0",
"ruff==0.15.1",
"mypy>=1.0.0",
"types-paho-mqtt>=1.6.0",
"types-PyYAML>=6.0.0",
Expand All @@ -70,6 +70,9 @@ target-version = ['py310']
line-length = 100
target-version = "py310"

[tool.ruff.lint]
select = ["E4", "E7", "E9", "F"]

[tool.mypy]
python_version = "3.10"
warn_return_any = true
Expand Down
2 changes: 1 addition & 1 deletion tools/developer_tools/bely-mqtt-message-broker/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

setup(
name="bely-mqtt-framework",
version="2026.3.dev0",
version="2026.10.0",
description="Pluggable Python framework for handling BELY MQTT events",
long_description=open("README.md").read(),
long_description_content_type="text/markdown",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from bely_mqtt.mqtt_client import BelyMQTTClient
from bely_mqtt.plugin import MQTTHandler, PluginManager

__version__ = "2026.3.1"
__version__ = "2026.10.0"

__all__ = [
"BelyMQTTClient",
Expand Down
Loading
Loading