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 .env.docker-dev.example
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ MEDIA_URL=http://localhost:4000/media/
POSTGRES_DEV_EXTRA_ARGS=-c shared_buffers=512MB -c fsync=off -c full_page_writes=off -c synchronous_commit=off -c max_locks_per_transaction=512 -c logging_collector=off -c log_statement=none -c log_duration=off -c log_min_duration_statement=-1 -c log_checkpoints=off -c log_connections=off -c log_disconnections=off -c log_lock_waits=off -c log_temp_files=-1 -c checkpoint_timeout=1h -c max_wal_size=10GB -c min_wal_size=1GB -c wal_level=minimal -c max_wal_senders=0 -c autovacuum=off -c random_page_cost=1.0 -c effective_io_concurrency=200 -c work_mem=256MB -c maintenance_work_mem=512MB


POSTGRES_IMAGE_VERSION=13
POSTGRES_IMAGE_VERSION=14

# Settings for local dev with MinIO to have local s3-like object storage
# AWS_ACCESS_KEY_ID=<REDACTED>
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ jobs:
packages: read
services:
db:
image: pgvector/pgvector:pg13
image: pgvector/pgvector:pg14
env:
POSTGRES_USER: baserow
POSTGRES_PASSWORD: baserow
Expand Down Expand Up @@ -389,7 +389,7 @@ jobs:
group: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
services:
db:
image: pgvector/pgvector:pg13
image: pgvector/pgvector:pg14
env:
POSTGRES_USER: baserow
POSTGRES_PASSWORD: baserow
Expand Down Expand Up @@ -581,7 +581,7 @@ jobs:
shard: [1, 2]
services:
db:
image: pgvector/pgvector:pg13
image: pgvector/pgvector:pg14
env:
POSTGRES_USER: baserow
POSTGRES_PASSWORD: baserow
Expand Down
6 changes: 3 additions & 3 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ backend-check-startup-python:
services:
- name: $CI_DIND_IMAGE
alias: docker
- name: pgvector/pgvector:pg13
- name: pgvector/pgvector:pg14
alias: db
variables:
DOCKER_HOST: tcp://docker:2376
Expand All @@ -205,7 +205,7 @@ backend-test-group-1:
services:
- name: $CI_DIND_IMAGE
alias: docker
- name: pgvector/pgvector:pg13
- name: pgvector/pgvector:pg14
alias: db
command:
[
Expand Down Expand Up @@ -487,7 +487,7 @@ e2e-tests-group-1:
image: mcr.microsoft.com/playwright:v1.48.2
stage: test
services:
- name: pgvector/pgvector:pg13
- name: pgvector/pgvector:pg14
alias: db
variables:
POSTGRES_USER: baserow
Expand Down
9 changes: 6 additions & 3 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
gettext \
xmlsec1

ENV DOCKER_USER=baserow_docker_user \
Expand Down Expand Up @@ -236,6 +237,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
python3.11-dev \
ca-certificates \
postgresql-client-15 \
gettext \
xmlsec1 \
curl \
graphviz \
Expand Down Expand Up @@ -275,13 +277,14 @@ USER $UID:$GID
WORKDIR /baserow/backend

# Install all dependencies
COPY --chown=$UID:$GID LICENSE /baserow/LICENSE
COPY --chown=$UID:$GID premium/LICENSE /baserow/premium/LICENSE
COPY --chown=$UID:$GID enterprise/LICENSE /baserow/enterprise/LICENSE

RUN --mount=type=cache,target=$UV_CACHE_DIR,sharing=locked,uid=$UID,gid=$GID \
--mount=type=bind,source=LICENSE,target=/baserow/LICENSE \
--mount=type=bind,source=backend/uv.lock,target=/baserow/backend/uv.lock \
--mount=type=bind,source=backend/pyproject.toml,target=/baserow/backend/pyproject.toml \
--mount=type=bind,source=premium/LICENSE,target=/baserow/premium/LICENSE \
--mount=type=bind,source=premium/backend/pyproject.toml,target=/baserow/premium/backend/pyproject.toml \
--mount=type=bind,source=enterprise/LICENSE,target=/baserow/enterprise/LICENSE \
--mount=type=bind,source=enterprise/backend/pyproject.toml,target=/baserow/enterprise/backend/pyproject.toml \
uv sync --frozen --no-install-workspace --no-install-project

Expand Down
190 changes: 95 additions & 95 deletions backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,89 +15,89 @@ dynamic = ["version"]
classifiers = []

dependencies = [
"django==5.0.14",
"django-cors-headers==4.3.1",
"djangorestframework==3.15.1",
"djangorestframework-simplejwt==5.3.1",
"psycopg2-binary==2.9.10",
"Faker==25.0.1",
"Twisted==24.11.0",
"django==5.2.10",
"django-cors-headers==4.9.0",
"djangorestframework==3.16.1",
"djangorestframework-simplejwt==5.5.1",
"psycopg2-binary==2.9.11",
"Faker==40.1.0",
"Twisted==25.5.0",
"gunicorn==23.0.0",
"uvicorn[standard]==0.34.2",
"websockets==12.0",
"uvicorn[standard]==0.40.0",
"websockets==15.0.1",
"requests==2.32.5",
"itsdangerous==2.2.0",
"Pillow==10.4.0",
"drf-spectacular==0.28.0",
"asgiref==3.8.1",
"channels[daphne]==4.0.0",
"channels-redis==4.1.0",
"celery[redis]==5.5.3",
"django-redis==5.4.0",
"django-celery-email==3.0.0",
"Pillow==12.1.0",
"drf-spectacular==0.29.0",
"asgiref==3.11.0",
"channels[daphne]==4.3.2",
"channels-redis==4.3.0",
"celery[redis]==5.6.2",
"django-redis==6.0.0",
"django-celery-email-reboot==4.2.0",
"advocate==1.0.0",
"zipp==3.19.1",
"zipp==3.23.0",
"unicodecsv==0.14.1",
"django-celery-beat==2.6.0",
"celery-redbeat==2.2.0",
"django-celery-beat==2.8.1",
"celery-redbeat==2.3.3",
"flower==2.0.1",
"service-identity==24.1.0",
"regex==2025.10.23",
"service-identity==24.2.0",
"regex==2025.11.3",
"antlr4-python3-runtime==4.9.3",
"tqdm==4.66.4",
"boto3==1.40.40",
"django-storages==1.14.3",
"django-storages[azure]==1.14.3",
"django-storages[google]==1.14.3",
"django-health-check==3.18.2",
"psutil==5.9.8",
"dj-database-url==2.1.0",
"redis==5.2.1",
"pgvector==0.4.1",
"pysaml2==7.5.0",
"validators==0.28.1",
"tqdm==4.67.1",
"boto3==1.42.21",
"django-storages==1.14.6",
"django-storages[azure]==1.14.6",
"django-storages[google]==1.14.6",
"django-health-check==3.20.8",
"psutil==7.2.1",
"dj-database-url==3.1.0",
"redis==6.4.0",
"pgvector==0.4.2",
"pysaml2==7.5.4",
"validators==0.35.0",
"requests-oauthlib==2.0.0",
"opentelemetry-api==1.37.0",
"opentelemetry-exporter-otlp-proto-http==1.37.0",
"opentelemetry-instrumentation==0.58b0",
"opentelemetry-instrumentation-django==0.58b0",
"opentelemetry-instrumentation-aiohttp-client==0.58b0",
"opentelemetry-instrumentation-asgi==0.58b0",
"opentelemetry-instrumentation-botocore==0.58b0",
"opentelemetry-instrumentation-celery==0.58b0",
"opentelemetry-instrumentation-dbapi==0.58b0",
"opentelemetry-instrumentation-grpc==0.58b0",
"opentelemetry-instrumentation-logging==0.58b0",
"opentelemetry-instrumentation-redis==0.58b0",
"opentelemetry-instrumentation-psycopg2==0.58b0",
"opentelemetry-instrumentation-psycopg==0.58b0",
"opentelemetry-instrumentation-requests==0.58b0",
"opentelemetry-instrumentation-wsgi==0.58b0",
"opentelemetry-proto==1.37.0",
"opentelemetry-sdk==1.37.0",
"opentelemetry-semantic-conventions==0.58b0",
"opentelemetry-util-http==0.58b0",
"Brotli==1.1.0",
"loguru==0.7.2",
"django-cachalot==2.6.2",
"opentelemetry-api==1.39.1",
"opentelemetry-exporter-otlp-proto-http==1.39.1",
"opentelemetry-instrumentation==0.60b1",
"opentelemetry-instrumentation-django==0.60b1",
"opentelemetry-instrumentation-aiohttp-client==0.60b1",
"opentelemetry-instrumentation-asgi==0.60b1",
"opentelemetry-instrumentation-botocore==0.60b1",
"opentelemetry-instrumentation-celery==0.60b1",
"opentelemetry-instrumentation-dbapi==0.60b1",
"opentelemetry-instrumentation-grpc==0.60b1",
"opentelemetry-instrumentation-logging==0.60b1",
"opentelemetry-instrumentation-redis==0.60b1",
"opentelemetry-instrumentation-psycopg2==0.60b1",
"opentelemetry-instrumentation-psycopg==0.60b1",
"opentelemetry-instrumentation-requests==0.60b1",
"opentelemetry-instrumentation-wsgi==0.60b1",
"opentelemetry-proto==1.39.1",
"opentelemetry-sdk==1.39.1",
"opentelemetry-semantic-conventions==0.60b1",
"opentelemetry-util-http==0.60b1",
"Brotli==1.2.0",
"loguru==0.7.3",
"django-cachalot==2.8.0",
"celery-singleton==0.3.1",
"posthog==7.0.1",
"posthog==7.4.2",
"prosemirror @ https://github.com/fellowapp/prosemirror-py/archive/refs/tags/v0.3.5.zip",
"rich==13.7.1",
"tzdata==2025.2",
"sentry-sdk==2.29.1",
"rich==14.2.0",
"tzdata==2025.3",
"sentry-sdk==2.48.0",
"typing_extensions>=4.14.1",
"ollama==0.1.9",
"ollama==0.6.1",
"langchain==0.3.27",
"langchain-openai==0.3.35",
"openai==2.2.0",
"openai==2.14.0",
"anthropic==0.75.0",
"mistralai==1.1.0",
"icalendar==5.0.12",
"jira2markdown==0.3.7",
"icalendar==6.3.2",
"jira2markdown==0.5",
"openpyxl==3.1.5",
"zipstream-ng==1.8.0",
"mcp==1.9.4",
"zipstream-ng==1.9.0",
"mcp==1.25.0",
"django-cte==1.3.3",
"genson==1.3.0",
"pyotp==2.9.0",
Expand All @@ -118,44 +118,44 @@ baserow = "baserow.manage:main"
[dependency-groups]
dev = [
"ruff>=0.8.0",
"pytest==8.2.0",
"pytest-django==4.8.0",
"pytest-env==1.1.3",
"pytest-asyncio==0.23.6",
"pytest==8.4.2",
"pytest-django==4.11.1",
"pytest-env==1.2.0",
"pytest-asyncio==1.3.0",
"pytest-ordering==0.6",
"pytest-mock==3.14.0",
"pytest-mock==3.15.1",
"pytest-icdiff==0.9",
"freezegun==1.5.0",
"responses==0.25.0",
"watchdog==4.0.0",
"argh==0.31.2",
"pyinstrument==4.6.2",
"pyfakefs==5.4.1",
"pytest-xdist==3.6.1",
"django-silk==5.1.0",
"django-extensions==3.2.3",
"snoop==0.4.3",
"freezegun==1.5.5",
"responses==0.25.8",
"watchdog==6.0.0",
"argh==0.31.3",
"pyinstrument==5.1.2",
"pyfakefs==6.0.0",
"pytest-xdist==3.8.0",
"django-silk==5.4.3",
"django-extensions==4.1",
"snoop==0.6.0",
"openapi-spec-validator==0.7.2",
"pytest-html==4.1.1",
"coverage==7.5.1",
"pytest-split==0.8.2",
"pytest-unordered==0.6.0",
"debugpy==1.8.1",
"coverage==7.13.1",
"pytest-split==0.10.0",
"pytest-unordered==0.7.0",
"debugpy==1.8.19",
"backports.cached-property==1.0.2",
"httpretty==1.1.4",
"graphviz==0.20.3",
"pytest-cov==5.0.0",
"django-stubs==1.16.0",
"django-stubs-ext==0.8.0",
"mypy==1.10.0",
"mypy-extensions==1.0.0",
"graphviz==0.21",
"pytest-cov==7.0.0",
"django-stubs==5.2.8",
"django-stubs-ext==5.2.8",
"mypy==1.19.1",
"mypy-extensions==1.1.0",
"ipython",
"fakeredis[lua]==2.23.2",
"fakeredis[lua]==2.33.0",
"pytest-retry==1.7.0",
"pytest-testmon==2.1.3",
"pytest-testmon==2.2.0",
"ipdb",
"build",
"rust-just>=1.43.1",
"rust-just>=1.46.0",
]

[tool.hatch.metadata]
Expand Down
1 change: 1 addition & 0 deletions backend/pytest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ testpaths =
tests
../premium/backend/tests
../enterprise/backend/tests
asyncio_default_fixture_loop_scope = function
markers =
field_text: All tests related to text field
field_long_text: All tests related to long text field
Expand Down
4 changes: 2 additions & 2 deletions backend/src/baserow/contrib/database/fields/field_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -2464,7 +2464,7 @@ def get_array_agg(expr):
filter=Q(
**{f"{field_name}__isnull": False, f"{field_name}__trashed": False}
),
ordering=(f"{field_name}__order", f"{field_name}__id"),
order_by=(f"{field_name}__order", f"{field_name}__id"),
)

value_query = get_array_agg(sortable_column_expr)
Expand Down Expand Up @@ -5292,7 +5292,7 @@ def get_formula_reference_to_model_field(
agg_expr = JSONBAgg(
get_select_option_extractor(db_column, model_field),
filter=Q(**{f"{db_column}__isnull": False}),
ordering=(f"{db_column}__order", f"{db_column}__id"),
order_by=(f"{db_column}__order", f"{db_column}__id"),
)
if already_in_subquery:
return Coalesce(agg_expr, Value([], output_field=JSONField()))
Expand Down
5 changes: 1 addition & 4 deletions backend/src/baserow/contrib/database/fields/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,7 @@ def contribute_to_class(self, cls, name, **kwargs):

def contribute_to_related_class(self, cls, related):
super().contribute_to_related_class(cls, related)
if (
not self.remote_field.is_hidden()
and not related.related_model._meta.swapped
):
if not self.remote_field.hidden and not related.related_model._meta.swapped:
setattr(
cls,
related.get_accessor_name(),
Expand Down
2 changes: 1 addition & 1 deletion backend/src/baserow/contrib/database/fields/registries.py
Original file line number Diff line number Diff line change
Expand Up @@ -2139,7 +2139,7 @@ def get_group_by_field_filters_and_annotations(
res=ArrayAgg(
F(f"{related_field}_id"),
filter=Q(**{f"{related_field}_id__isnull": False}),
ordering=self.get_group_by_aggregated_order(related_field),
order_by=self.get_group_by_aggregated_order(related_field),
)
)
)
Expand Down
Loading
Loading