저장된 Report 이어서 편집하기
용도
px.Report.open(...)은 이미 저장된 Report revision을 Python에서 이어서 편집할 때 사용합니다. 열 때 확인한 revision과 generation이 draft의 기준이 되며, report.save()는 이 기준이 여전히 현재 상태인지 확인한 뒤 새 revision을 만듭니다.
Report Workbench에서 보이는 것
Project Home에서 Report를 열어 편집을 시작하는 작업과 같습니다. Python과 Workbench는 같은 ReportDocument에 typed command를 적용하며, 먼저 저장된 변경을 자동으로 덮어쓰지 않습니다.
문법
px.Report.open(
report_key,
*,
workspace=...,
project=...,
revision=None,
)예제
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].code는 PX_GENERATION_STALE이고 params에 actualGeneration과 expectedGeneration이 들어 있습니다. 이 거부를 받으면 현재 revision을 다시 열어 변경을 재적용합니다. 첫 저장인데 head가 이미 있으면 PX_HEAD_ALREADY_EXISTS, base로 지정한 revision이 더 이상 head가 아니면 PX_BASE_REF_MISMATCH를 같은 방식으로 받습니다.
매개변수
| 이름 | 설명 |
|---|---|
report_key | 선택한 Project에서 Report를 계속 찾는 stable key |
workspace | Report가 속한 Workspace stable key 또는 exact Workspace ref |
project | Report와 권한 범위를 명확히 하는 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를 덮어쓰지 않습니다.