본문으로 건너뛰기

저장된 Report 이어서 편집하기

용도

px.Report.open(...)은 이미 저장된 Report revision을 Python에서 이어서 편집할 때 사용합니다. 열 때 확인한 revision과 generation이 draft의 기준이 되며, report.save()는 이 기준이 여전히 현재 상태인지 확인한 뒤 새 revision을 만듭니다.

Report Workbench에서 보이는 것

Project Home에서 Report를 열어 편집을 시작하는 작업과 같습니다. Python과 Workbench는 같은 ReportDocument에 typed command를 적용하며, 먼저 저장된 변경을 자동으로 덮어쓰지 않습니다.

문법

python
px.Report.open(
    report_key,
    *,
    workspace=...,
    project=...,
    revision=None,
)

예제

python
from pipelinexlab import px


with px.Report.open(
    "girder_report",
    workspace="engineering",
    project="bridge_project",
    revision="sha256:report-revision-digest",
) as report:
    summary = report.section("check_summary")
    summary.text("review_note", "Checked against the governing load case.")

    new_revision = report.save()

revision을 생략하면 open 요청 시점의 current revision을 정확히 resolve해 base로 고정합니다. 이후 다른 사용자가 먼저 저장하면 report.save()가 이름 있는 거부를 냅니다. 거부의 diagnostics[0].codePX_GENERATION_STALE이고 paramsactualGenerationexpectedGeneration이 들어 있습니다. 이 거부를 받으면 현재 revision을 다시 열어 변경을 재적용합니다. 첫 저장인데 head가 이미 있으면 PX_HEAD_ALREADY_EXISTS, base로 지정한 revision이 더 이상 head가 아니면 PX_BASE_REF_MISMATCH를 같은 방식으로 받습니다.

매개변수

이름설명
report_key선택한 Project에서 Report를 계속 찾는 stable key
workspaceReport가 속한 Workspace stable key 또는 exact Workspace ref
projectReport와 권한 범위를 명확히 하는 Project key 또는 exact Project ref
revision편집 기준으로 고정할 exact revision. 생략하면 open 시점의 current revision을 고정

반환

기준 revision과 generation을 기억하는 Report draft를 반환합니다. 이 draft가 제공하는 section, value, table, connection handle은 새 객체를 만드는 경우와 같은 typed command를 사용합니다.

규칙

  • px.Report.open(...)이 만든 Client session은 이 Report가 소유합니다. with 블록으로 열거나, 편집을 마치면 report.close()를 호출합니다. report.close()는 여러 번 불러도 안전합니다.
  • open이 refusal로 끝나면 session은 그 자리에서 닫힙니다.
  • 이미 연 Client가 있으면 client.open_report(...)을 사용합니다. 그 Report는 Client를 빌려 쓰므로 report.close()가 Client를 닫지 않습니다.
  • label이나 최근 연 파일로 Report를 추측하지 않습니다.
  • open은 revision을 만들지 않으며 report.save()가 새 revision을 만듭니다.
  • key 변경, block 삭제와 mapping 변경은 저장 전 impact validation을 거칩니다.
  • 충돌 시 전체 Python 파일을 다시 실행해 현재 Report를 덮어쓰지 않습니다.

다음 단계