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
2 changes: 1 addition & 1 deletion backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ baserow = "baserow.manage:main"
[dependency-groups]
dev = [
"ruff>=0.8.0",
"pytest==8.4.2",
"pytest==9.0.3",
"pytest-django==4.12.0",
"pytest-env==1.2.0",
"pytest-asyncio==1.3.0",
Expand Down
6 changes: 1 addition & 5 deletions backend/src/baserow/config/asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,14 @@
log_env_warnings,
)
from baserow.core.mcp import get_baserow_mcp_server
from baserow.core.telemetry.telemetry import setup_logging, setup_telemetry
from baserow.core.telemetry.telemetry import setup_telemetry
from baserow.ws.routers import websocket_router

# The telemetry instrumentation library setup needs to run prior to django's setup.
setup_telemetry(add_django_instrumentation=True)

django_asgi_app = get_asgi_application()

# It is critical to setup our own logging after django has been setup and done its own
# logging setup. Otherwise Django will try to destroy and log handlers we added prior.
setup_logging()

# Check that libraries meant to be lazy-loaded haven't been imported at startup.
# This runs after Django is fully loaded, so it catches imports from all apps.
check_lazy_loaded_libraries()
Expand Down
6 changes: 5 additions & 1 deletion backend/src/baserow/config/settings/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,11 @@
TEST_ENV_VARS = {}

# Prefixes for vars that can be overridden via env vars (for DB/Redis configuration)
ALLOWED_ENV_PREFIXES = ("DATABASE_", "BASEROW_EMBEDDINGS_API_URL")
ALLOWED_ENV_PREFIXES = (
"DATABASE_",
"BASEROW_EMBEDDINGS_API_URL",
"BASEROW_BACKEND_LOG_LEVEL",
)


def getenv_for_tests(key: str, default: str = "") -> str:
Expand Down
6 changes: 1 addition & 5 deletions backend/src/baserow/config/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,13 @@
from django.core.wsgi import get_wsgi_application

from baserow.config.helpers import check_lazy_loaded_libraries, log_env_warnings
from baserow.core.telemetry.telemetry import setup_logging, setup_telemetry
from baserow.core.telemetry.telemetry import setup_telemetry

# The telemetry instrumentation library setup needs to run prior to django's setup.
setup_telemetry(add_django_instrumentation=True)

application = get_wsgi_application()

# It is critical to setup our own logging after django has been setup and done its own
# logging setup. Otherwise Django will try to destroy and log handlers we added prior.
setup_logging()

# This is only needed in asgi.py
settings.BASEROW_LAZY_LOADED_LIBRARIES.append("mcp")

Expand Down
4 changes: 4 additions & 0 deletions backend/src/baserow/core/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,10 @@ def ready(self):
if settings.SENTRY_DSN:
patch_user_model_str()

from baserow.core.telemetry.telemetry import setup_logging

setup_logging()

def _setup_health_checks(self):
from health_check.plugins import plugin_dir

Expand Down
3 changes: 1 addition & 2 deletions backend/src/baserow/core/telemetry/tasks.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from celery import Task
from celery.signals import worker_process_init

from baserow.core.telemetry.telemetry import setup_logging, setup_telemetry
from baserow.core.telemetry.telemetry import setup_telemetry
from baserow.core.telemetry.utils import otel_is_enabled

TASK_NAME_KEY = "celery.task_name"
Expand All @@ -10,7 +10,6 @@
@worker_process_init.connect
def initialize_otel(**kwargs):
setup_telemetry(add_django_instrumentation=False)
setup_logging()


class BaserowTelemetryTask(Task):
Expand Down
3 changes: 1 addition & 2 deletions backend/src/baserow/core/telemetry/telemetry.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import logging
import os
import sys

from celery import signals
Expand Down Expand Up @@ -43,7 +42,7 @@ def setup_logging():

# A slightly customized default loguru format which includes the process id.
loguru_format = (
f"<magenta>{os.getpid()}|</magenta>"
"<magenta>{process}|</magenta>"
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green>|"
"<level>{level}</level>|"
"<cyan>{name}</cyan>:"
Expand Down
8 changes: 4 additions & 4 deletions backend/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
@@ -0,0 +1,9 @@
{
"type": "bug",
"message": "Fix field drag-and-drop placeholder being offset by the group-by column width when a group by is active.",
"issue_origin": "github",
"issue_number": null,
"domain": "database",
"bullet_points": [],
"created_at": "2026-04-14"
}
3 changes: 3 additions & 0 deletions docs/testing/ai-assistant-evals.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ local test runs.
# Set your API key (Groq example — works with any pydantic-ai provider)
export GROQ_API_KEY=gsk_...

# Suppress noisy framework-level log messages (Celery task registration, etc.)
export BASEROW_BACKEND_LOG_LEVEL=WARNING

# Run all evals with the default model (groq:openai/gpt-oss-120b)
just b test ../enterprise/backend/tests/baserow_enterprise_tests/assistant/evals/ \
-m eval -v
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
import asyncio
import logging
import os
import sys

from django.conf import settings

import pytest
from loguru import logger

from baserow.config.settings.test import TEST_ENV_VARS

# Suppress DEBUG-level loguru output during evals. Baserow's cache layer logs
# every cache hit/miss at DEBUG, which floods the output when using -s. Agent
# message history is printed via print() and is captured by pytest: it appears
# in the failure report automatically without needing -s.
logger.remove()
logger.add(sys.stderr, level="WARNING")

# Expose API keys from TEST_ENV_FILE to os.environ so that LLM provider
# SDKs (which read os.getenv() at import/construction time) can find them.
# test.py already parses TEST_ENV_FILE via dotenv_values but deliberately
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,7 @@ export default {
crossSectionDraggingOffset() {
const primary = this.fields.find((f) => f.primary)
return (
this.activeGroupByWidth +
this.gridViewRowDetailsWidth +
(primary ? this.getFieldWidth(primary) : 0)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ export default {
* the correct position.
*/
start(field, event) {
event.preventDefault()
this.field = field
this.targetFieldId = field.id
this.dragging = true
Expand Down
4 changes: 2 additions & 2 deletions web-frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
},
"dependencies": {
"@nuxtjs/i18n": "10.2.4",
"@sentry/node": "10.46.0",
"@sentry/node": "10.47.0",
"@sentry/nuxt": "10.46.0",
"@sentry/vue": "10.46.0",
"@tiptap/core": "^3.13.0",
Expand Down Expand Up @@ -94,7 +94,7 @@
"jwt-decode": "^3.1.2",
"lodash.debounce": "^4.0.8",
"lowlight": "^3.3.0",
"markdown-it": "13.0.2",
"markdown-it": "14.1.1",
"markdown-it-regexp": "^0.4.0",
"markdown-it-task-lists": "^2.1.1",
"mitt": "^3.0.1",
Expand Down
Loading
Loading