Params language: one language at every depth

Đã đóng
#135 0 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@SimonHeybrock đang làm issue này rồi.

Từ ngày 3/11/2026.

  • #136 của @SimonHeybrock — đã merge

Đánh giá

Issue này chưa được đánh giá.

Mô tả

With #133, a spec marks each field that a reference fills as Referenced[T]. Most rules that set a parameter apart from a field of a group existed because a reference inside a group was costly. They include: references only at a parameter or a row, flat groups, a "data value" that made a group reference-only, and "every parameter is a group". This issue makes the params language the same at every depth.

The language

A field of the params model, or of a group nested to any depth, is typed from a closed list:

int, float, str, bool, datetime, an enum, a Literal   # scalars
RunFile                                               # a file model
Specimen                                              # a group: its fields typed the same way
Annotated[A | B, Field(discriminator='kind')]         # a union of groups, tagged
Referenced[T]                                         # T a group; the framework does not look inside
X | None, list[X]                                     # X not a list, not X | None
Annotated[A | B, ...] | Referenced[C]                 # inline members and referenced members

Any other type is refused, such as a tuple, a dict, int | str, or sc.DataArray outside Referenced[T]. A group that contains itself is refused.

class Sample(BaseModel):
    run: SampleRun
    thickness: float = 1.0
    window: Window | None = None
    transmission: Referenced[Transmission]   # a reference at a field of a table row

class Params(BaseModel):
    samples: list[Sample]

How a group with a reference is validated

When A file A reference to an output
submit resolved to its identity through the validation context checked against history, at its position
run given its local path through the validation context replaced by its data through the validation context

When the request runs, the params model itself validates what the record stores, and the marker of Referenced[T] reads the data. A group that holds a reference runs its validators then; every other group is validated whole at submit.

Decisions

  • No "data value": a type outside the list is refused.
  • A parameter need not be a group. By convention it still is: a group is a tab of the form and a key of the binding. PipelineBinding requires keys= for any other parameter.
  • X | None at any depth: a choice with a "None" way in the form, files included.
  • Lists at any depth. Only a table is validated a row at a time, and only a table is limited to length constraints.
  • Table rows are distinct by their stored form only: a file by its identity, a reference by its record and output.
  • The discriminator sits on the union written inline, since a reference has no tag.
  • The term "place" goes, and ess.spec.places is folded into field_types and request_types.
Ngôn ngữ chính
Python
Star
0
Fork
1
Merge trung bình
8 giờ 48 phút
Pull request đã merge (30 ngày)
70

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của scipp/essapps

Tất cả issue của scipp/essapps

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.