Merge remote-tracking branch 'origin/sub_laptop_4' into sub_laptop_2

This commit is contained in:
2026-09-27 20:44:08 +09:00
52 changed files with 457 additions and 53 deletions
@@ -32,6 +32,10 @@ _BASIS_HEAD_STYLE = {
}
_NUMBER = re.compile(r"^구-(\d+)$")
_BAD_NAME = re.compile(r'[\\/:*?"<>|\x00-\x1f]|\.\.')
# 도각 없는 빈 CAD 문서의 기본 도면층 — 없으면 B07 CAD 가 못 엶("Cannot read properties
# of undefined (reading 'length')") · CAD 쪽도 없으면 새로 채우지만(2026-09-27 sub1 고침)
# 뿌리도 처음부터 채움
_BLANK_LAYER = {"id": "기본", "name": "기본", "isVisible": True, "isLocked": False}
# ponytail: 저장은 한 번에 하나(프로세스 안 잠금) · 서버를 여럿 띄우면 파일 잠금으로
_LOCK = threading.Lock()
@@ -158,7 +162,7 @@ def create_structure(column: str) -> dict[str, Any]:
"판": 1,
"열": column,
"도번": f"구-{number:02d}",
"도면": {"format": 6, "entities": []},
"도면": {"format": 6, "entities": [], "layers": [dict(_BLANK_LAYER)]},
}
atomic_write_json(path, doc)
ensure_basis(column)
@@ -45,7 +45,13 @@ function stubDoc(kind: Kind, name: string): unknown {
합계줄: [],
보기: {},
}
: { format: 6, entities: [] };
: {
format: 6,
entities: [],
// 기본 도면층 하나 — 없으면 B07 CAD 가 못 엶("Cannot read properties of
// undefined (reading 'length')", 2026-09-27 실측)
layers: [{ id: "기본", name: "기본", isVisible: true, isLocked: false }],
};
}
export interface SideOptions {
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-25",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-33",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-23",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-22",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-12",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-13",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-35",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-24",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-36",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-14",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-16",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-15",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-30",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-29",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-31",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-47",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-45",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-37",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-43",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-42",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-38",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-39",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-46",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-44",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-41",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-40",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-48",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-49",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-32",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-20",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-01",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-18",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-17",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-11",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-10",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-09",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-34",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-07",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-04",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-08",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-05",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
@@ -6,6 +6,14 @@
"도번": "구-06",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-26",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-03",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-19",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-21",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-02",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-28",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+9 -1
View File
@@ -6,6 +6,14 @@
"도번": "구-27",
"도면": {
"format": 6,
"entities": []
"entities": [],
"layers": [
{
"id": "기본",
"name": "기본",
"isVisible": true,
"isLocked": false
}
]
}
}
+4 -2
View File
@@ -35,8 +35,10 @@ def test_새로_도번_자동_409_없는_열(client):
"pp_len",
"구-01",
)
# 도각 없는 전용 화면 — 그린 만큼이 설계 영역
assert doc["도면"] == {"format": 6, "entities": []}
# 도각 없는 전용 화면 — 그린 만큼이 설계 영역 · 기본 도면층 하나(없으면 CAD 가 못 엶)
assert doc["도면"]["format"] == 6
assert doc["도면"]["entities"] == []
assert len(doc["도면"]["layers"]) == 1
# 산출근거는 구조물 문서 밖 — 같은 열 id 로 따로 한 통합문서
assert "산출근거" not in doc
assert client.get("/api/m02/templates/basis/pp_len").json()["문서"]["종류"] == "통합문서"