From 632e328f396f0ae19b377b45d4ddf606a87aa454 Mon Sep 17 00:00:00 2001 From: feilong Date: Wed, 15 Dec 2021 22:24:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=85=B3=E9=94=AE=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1.Hello World/HelloWorld.json" | 8 +- .../1.Hello World/config.json" | 25 ++-- .../2.\347\256\200\344\273\213/Intro.json" | 8 +- .../2.\347\256\200\344\273\213/config.json" | 18 +-- .../Standard.json" | 8 +- .../config.json" | 5 +- .../4..NET\347\261\273\345\272\223/Lib.json" | 8 +- .../config.json" | 6 +- .../StandardQuery.json" | 8 +- .../config.json" | 4 +- .../HelloWorld2.json" | 8 +- .../config.json" | 4 +- .../String.json" | 8 +- .../Variable.json" | 8 +- .../config.json" | 7 +- .../Format.json" | 8 +- .../StringFormatting.json" | 8 +- .../config.json" | 4 +- .../Calc.json" | 8 +- .../config.json" | 5 +- .../Guess.json" | 8 +- .../config.json" | 4 +- .../Guard.json" | 8 +- .../Switch.json" | 8 +- .../config.json" | 4 +- .../Loop.json" | 8 +- .../config.json" | 6 +- .../Comments.json" | 8 +- .../config.json" | 5 +- .../config.json" | 4 +- .../2.MVC/config.json" | 4 +- .../config.json" | 4 +- .../config.json" | 4 +- .../config.json" | 4 +- data/tree.json | 90 +++++++++---- src/tree.py | 124 +++++++++++++++--- 36 files changed, 329 insertions(+), 130 deletions(-) diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/HelloWorld.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/HelloWorld.json" index b6525bd..53b4fca 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/HelloWorld.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/HelloWorld.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "kinfey", - "source": "HelloWorld.md" + "type": "code_options", + "author": "kinfey", + "source": "HelloWorld.md", + "exercise_id": "c14e798b0103470db0cb7324e8188149", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/config.json" index 6095e1a..6a3dade 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/config.json" @@ -1,14 +1,13 @@ { - "node_id": "", - "keywords": [ - "控制台", - "dotnet new", - "程序入口" - ], - "children": [], - "export": [ - "HelloWorld.json" - ], - "title": "Hello World" - } - \ No newline at end of file + "node_id": "csharp-a84d91fb923e4e50810024368a7b2d29", + "keywords": [ + "控制台", + "dotnet new", + "程序入口" + ], + "children": [], + "export": [ + "HelloWorld.json" + ], + "title": "Hello World" +} \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/Intro.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/Intro.json" index 749fc86..6c8ca03 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/Intro.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/Intro.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "kinfey", - "source": "Intro.md" + "type": "code_options", + "author": "kinfey", + "source": "Intro.md", + "exercise_id": "d4fd594548114266957699f12555f9aa", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/config.json" index 14c4bc1..a7f4f59 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/config.json" @@ -1,11 +1,11 @@ { - "node_id": "", - "keywords": [ - "dotnet", - ".NET", - "跨平台" - ], - "export": [ - "Intro.json" - ] + "node_id": "csharp-a8d22b1b96f648eeb579ac1e8c2623d4", + "keywords": [ + "dotnet", + ".NET", + "跨平台" + ], + "export": [ + "Intro.json" + ] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/Standard.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/Standard.json" index 7160b9c..de0de05 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/Standard.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/Standard.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Standard.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Standard.md", + "exercise_id": "1a9d1d5fa2ab49b8b50bf4369d482980", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/config.json" index 73db8cf..c070803 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/config.json" @@ -1,6 +1,9 @@ { "node_id": "csharp-8f1055780aff4ed8bc5927bac6fb562b", - "keywords": [], + "keywords": [ + ".NET Standard", + ".NET 实现" + ], "children": [], "export": [ "Standard.json" diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/Lib.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/Lib.json" index 9760b2a..557ed20 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/Lib.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/Lib.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Lib.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Lib.md", + "exercise_id": "b9f18b80f7b54cd886075df4b08adc14", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/config.json" index e4c2c9f..e5b2d50 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/config.json" @@ -1,6 +1,10 @@ { "node_id": "csharp-7029a05888534973bfa9656762e0c187", - "keywords": [], + "keywords": [ + ".NET 共享库", + ".NET 类库", + ".NET 标准库" + ], "children": [], "export": [ "Lib.json" diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/StandardQuery.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/StandardQuery.json" index b1fb887..9b41af6 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/StandardQuery.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/StandardQuery.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "StandardQuery.md" + "type": "code_options", + "author": "huanhuilong", + "source": "StandardQuery.md", + "exercise_id": "5785b9a1103b4337a966a06b9d93271c", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/config.json" index 4285e17..a91cf12 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-65d2fd88ed1e44a6a646be4f3c302e50", - "keywords": [], + "keywords": [ + ".NET Standard 版本" + ], "children": [], "export": [ "StandardQuery.json" diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/HelloWorld2.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/HelloWorld2.json" index 839fee1..1c66204 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/HelloWorld2.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/HelloWorld2.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "HelloWorld2.md" + "type": "code_options", + "author": "huanhuilong", + "source": "HelloWorld2.md", + "exercise_id": "b0997a92c85a467f8b97f99372f9964e", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/config.json" index f27d6eb..0d85700 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-8f63c0182bed428cb2c75bc1d10a6502", - "keywords": [], + "keywords": [ + "C# HelloWorld" + ], "children": [], "export": [ "HelloWorld2.json" diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/String.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/String.json" index 58af420..1bb8822 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/String.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/String.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "String.md" + "type": "code_options", + "author": "huanhuilong", + "source": "String.md", + "exercise_id": "12868f4d7570402e82e46901832c437c", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/Variable.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/Variable.json" index 0bbd560..fc8320c 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/Variable.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/Variable.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Variable.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Variable.md", + "exercise_id": "28c24ce184ca4b5bb6cae7e030b76da3", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/config.json" index 4cf5c7b..724994c 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/config.json" @@ -1,6 +1,11 @@ { "node_id": "csharp-052799fae6c2498f9ef2966925377631", - "keywords": [], + "keywords": [ + "C# 字符串", + "C# 变量", + "C# 整型", + "C# 基本类型" + ], "children": [], "export": [ "String.json", diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/Format.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/Format.json" index 8e06562..96ffb48 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/Format.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/Format.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Format.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Format.md", + "exercise_id": "fdc21db690b9421da1445d2fe8161bc5", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/StringFormatting.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/StringFormatting.json" index 05f8100..468caee 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/StringFormatting.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/StringFormatting.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "Gao996", - "source": "StringFormatting.md" + "type": "code_options", + "author": "Gao996", + "source": "StringFormatting.md", + "exercise_id": "2c3bc6d878274469acd2573b65eecf8c", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/config.json" index 01ef65b..6504f2c 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-6213732b191f434fb809de14eadee919", - "keywords": [], + "keywords": [ + "C# 字符串格式化" + ], "children": [], "export": [ "Format.json", diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/Calc.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/Calc.json" index 28c8982..6e7ae1e 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/Calc.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/Calc.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Calc.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Calc.md", + "exercise_id": "0de228ab99124ef981e2192b705e2ce2", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/config.json" index 6076071..a7e6426 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/config.json" @@ -1,6 +1,9 @@ { "node_id": "csharp-8891612a2ed349b4a04dee606c44a292", - "keywords": [], + "keywords": [ + "C# 数字运算符", + "C# 四则运算" + ], "children": [], "export": [ "Calc.json" diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/Guess.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/Guess.json" index 8a644fd..c308b21 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/Guess.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/Guess.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Guess.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Guess.md", + "exercise_id": "ac74458fcd154ab9b8de45d7f9d3e928", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/config.json" index 11d9620..84630bf 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-ecdbead6dc0f4676b048a3d3d6a31741", - "keywords": [], + "keywords": [ + ".NET 基础类库" + ], "children": [], "export": [ "Guess.json" diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/Guard.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/Guard.json" index 7c048ea..4cbfe58 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/Guard.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/Guard.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Guard.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Guard.md", + "exercise_id": "4778ac7e3bf24d5fa4d0a516e6f04c97", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/Switch.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/Switch.json" index bea6134..fa7ded5 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/Switch.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/Switch.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Swtich.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Swtich.md", + "exercise_id": "2b77eacce88e48379fdd557e381ee19a", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/config.json" index feaa8d7..f6ff27b 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-d1ae8aa6b969476db5177062e3980a2f", - "keywords": [], + "keywords": [ + "C# 分支判断" + ], "children": [], "export": [ "Guard.json", diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/Loop.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/Loop.json" index 33f1b26..3b3ea42 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/Loop.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/Loop.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Loop.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Loop.md", + "exercise_id": "026be3104cc448e1a34fa60440128374", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/config.json" index 6dc8ef9..aea6d68 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/config.json" @@ -1,6 +1,10 @@ { "node_id": "csharp-e8990ea17ca34c49b4d0c69b3272bc10", - "keywords": [], + "keywords": [ + "C# 数组", + "foreach", + "斐波那契数列" + ], "children": [], "export": [ "Loop.json" diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/Comments.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/Comments.json" index 39f11c3..6582097 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/Comments.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/Comments.json" @@ -1,5 +1,7 @@ { - "type": "code_options", - "author": "huanhuilong", - "source": "Comments.md" + "type": "code_options", + "author": "huanhuilong", + "source": "Comments.md", + "exercise_id": "c7c906d223b5424685e6133d81eeea8e", + "notebook_enable": false } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/config.json" index df59094..ee25d36 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/config.json" @@ -1,6 +1,9 @@ { "node_id": "csharp-302a68c721e44f489e00820b5898ec10", - "keywords": [], + "keywords": [ + "C# 编码规范", + "C# 注释" + ], "children": [], "export": [ "Comments.json" diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/1.Razor\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/1.Razor\345\272\224\347\224\250/config.json" index 62d34d3..c4bba3e 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/1.Razor\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/1.Razor\345\272\224\347\224\250/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-202a0f83809340d2b38e8e0d4b00b48c", - "keywords": [], + "keywords": [ + "Razor" + ], "children": [], "export": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/2.MVC/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/2.MVC/config.json" index ae5d7dd..d56fe13 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/2.MVC/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/2.MVC/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-97413a9e08fb4b55a742b45b2d61e13a", - "keywords": [], + "keywords": [ + ".NET MVC" + ], "children": [], "export": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/3.Blazor\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/3.Blazor\345\272\224\347\224\250/config.json" index e37da3c..a0d8b80 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/3.Blazor\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/3.Blazor\345\272\224\347\224\250/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-b3c0aaca71c249fa8bc4052980637613", - "keywords": [], + "keywords": [ + ".NET Blazor" + ], "children": [], "export": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/4.Web API\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/4.Web API\345\272\224\347\224\250/config.json" index a6a143e..0af483b 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/4.Web API\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/4.Web API\345\272\224\347\224\250/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-e1b867ff5a1344bd9a7e34201343711c", - "keywords": [], + "keywords": [ + ".NET Web API" + ], "children": [], "export": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/5.Minimal API \345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/5.Minimal API \345\272\224\347\224\250/config.json" index 6c36461..066c805 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/5.Minimal API \345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/5.Minimal API \345\272\224\347\224\250/config.json" @@ -1,6 +1,8 @@ { "node_id": "csharp-5ef3b2a32bc344c984bb195b42eae73c", - "keywords": [], + "keywords": [ + ".NET Minimal API" + ], "children": [], "export": [] } \ No newline at end of file diff --git a/data/tree.json b/data/tree.json index c056645..64b35de 100644 --- a/data/tree.json +++ b/data/tree.json @@ -15,7 +15,7 @@ "children": [ { "Hello World": { - "node_id": "", + "node_id": "csharp-a84d91fb923e4e50810024368a7b2d29", "keywords": [ "控制台", "dotnet new", @@ -26,7 +26,7 @@ }, { "简介": { - "node_id": "", + "node_id": "csharp-a8d22b1b96f648eeb579ac1e8c2623d4", "keywords": [ "dotnet", ".NET", @@ -38,21 +38,30 @@ { "体系结构组件": { "node_id": "csharp-8f1055780aff4ed8bc5927bac6fb562b", - "keywords": [], + "keywords": [ + ".NET Standard", + ".NET 实现" + ], "children": [] } }, { ".NET类库": { "node_id": "csharp-7029a05888534973bfa9656762e0c187", - "keywords": [], + "keywords": [ + ".NET 共享库", + ".NET 类库", + ".NET 标准库" + ], "children": [] } }, { ".NET Standard概述": { "node_id": "csharp-65d2fd88ed1e44a6a646be4f3c302e50", - "keywords": [], + "keywords": [ + ".NET Standard 版本" + ], "children": [] } } @@ -67,56 +76,79 @@ { "编写第一个C#代码": { "node_id": "csharp-8f63c0182bed428cb2c75bc1d10a6502", - "keywords": [], + "keywords": [ + "C# HelloWorld" + ], "children": [] } }, { - "使用C#中的文本值和变量值来存储和检索数据": { + "C#文本值和变量": { "node_id": "csharp-052799fae6c2498f9ef2966925377631", - "keywords": [], + "keywords": [ + "C# 字符串", + "C# 变量", + "C# 整型", + "C# 基本类型" + ], "children": [] } }, { - "在C#中执行基本字符串格式设置": { + "C#字符串格式设置": { "node_id": "csharp-6213732b191f434fb809de14eadee919", - "keywords": [], + "keywords": [ + "C# 字符串格式化" + ], "children": [] } }, { - "使用C#对数字执行基本运算操作": { + "C#数字运算操作": { "node_id": "csharp-8891612a2ed349b4a04dee606c44a292", - "keywords": [], + "keywords": [ + "C# 数字运算符", + "C# 四则运算" + ], "children": [] } }, { "使用C#从.NET类库调用方法": { "node_id": "csharp-ecdbead6dc0f4676b048a3d3d6a31741", - "keywords": [], + "keywords": [ + ".NET 基础类库" + ], "children": [] } }, { - "在 C# 中使用 if-elseif-else 语句将决策逻辑添加到代码中": { + "C# 中使用 if-elseif-else 分支判断": { "node_id": "csharp-d1ae8aa6b969476db5177062e3980a2f", - "keywords": [], + "keywords": [ + "C# 分支判断" + ], "children": [] } }, { - "使用C# 中的数组和 foreach 语句来存储和循环访问数据序列": { + "C# 数组和 foreach 语句": { "node_id": "csharp-e8990ea17ca34c49b4d0c69b3272bc10", - "keywords": [], + "keywords": [ + "C# 数组", + "foreach", + "斐波那契数列" + ], "children": [] } }, { - "使用 C# 创建具有约定、空格和注释的易读代码": { + "C# 编码规范": { "node_id": "csharp-302a68c721e44f489e00820b5898ec10", - "keywords": [], + "keywords": [ + "C# 编码规范", + "C# 注释" + ], "children": [] } } @@ -139,35 +171,45 @@ { "Razor应用": { "node_id": "csharp-202a0f83809340d2b38e8e0d4b00b48c", - "keywords": [], + "keywords": [ + "Razor" + ], "children": [] } }, { "MVC": { "node_id": "csharp-97413a9e08fb4b55a742b45b2d61e13a", - "keywords": [], + "keywords": [ + ".NET MVC" + ], "children": [] } }, { "Blazor应用": { "node_id": "csharp-b3c0aaca71c249fa8bc4052980637613", - "keywords": [], + "keywords": [ + ".NET Blazor" + ], "children": [] } }, { "Web API应用": { "node_id": "csharp-e1b867ff5a1344bd9a7e34201343711c", - "keywords": [], + "keywords": [ + ".NET Web API" + ], "children": [] } }, { "Minimal API 应用": { "node_id": "csharp-5ef3b2a32bc344c984bb195b42eae73c", - "keywords": [], + "keywords": [ + ".NET Minimal API" + ], "children": [] } } diff --git a/src/tree.py b/src/tree.py index 95e1cbc..eb6acb3 100644 --- a/src/tree.py +++ b/src/tree.py @@ -1,11 +1,11 @@ -# -*- coding: utf-8 -*- -import logging -from genericpath import exists import json +import logging import os -import uuid +import re import sys +import uuid import re +import git id_set = set() logger = logging.getLogger(__name__) @@ -14,10 +14,15 @@ handler = logging.StreamHandler(sys.stdout) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) +repo = git.Repo(".") + + +def user_name(): + return repo.config_reader().get_value("user", "name") def load_json(p): - with open(p, 'r', encoding='utf-8') as f: + with open(p, 'r') as f: return json.loads(f.read()) @@ -30,7 +35,7 @@ def dump_json(p, j, exist_ok=False, override=False): logger.error(f"{p} already exist") sys.exit(0) - with open(p, 'w+', encoding='utf-8') as f: + with open(p, 'w+', encoding="utf8") as f: f.write(json.dumps(j, indent=2, ensure_ascii=False)) @@ -92,25 +97,31 @@ class TreeWalker: for index, level in enumerate(root_node["children"]): level_title = list(level.keys())[0] level_node = list(level.values())[0] - level_path = os.path.join(self.root, f"{index+1}.{level_title}") + level_path = os.path.join(self.root, f"{index + 1}.{level_title}") self.load_chapters(level_path, level_node) for index, chapter in enumerate(level_node["children"]): chapter_title = list(chapter.keys())[0] chapter_node = list(chapter.values())[0] chapter_path = os.path.join( - level_path, f"{index+1}.{chapter_title}") + level_path, f"{index + 1}.{chapter_title}") self.load_sections(chapter_path, chapter_node) for index, section_node in enumerate(chapter_node["children"]): section_title = list(section_node.keys())[0] full_path = os.path.join( - chapter_path, f"{index}.{section_title}") + chapter_path, f"{index + 1}.{section_title}") if os.path.isdir(full_path): + self.check_section_keywords(full_path) self.ensure_exercises(full_path) tree_path = os.path.join(self.root, "tree.json") dump_json(tree_path, self.tree, exist_ok=True, override=True) return self.tree + def sort_dir_list(self, dirs): + result = [self.extract_node_env(dir) for dir in dirs] + result.sort(key=lambda item: item[0]) + return result + def load_levels(self, root_node): levels = [] for level in os.listdir(self.root): @@ -167,7 +178,7 @@ class TreeWalker: for index, [number, element] in enumerate(children): title = list(element.keys())[0] origin = os.path.join(base, f"{number}.{title}") - posted = os.path.join(base, f"{index+1}.{title}") + posted = os.path.join(base, f"{index + 1}.{title}") if origin != posted: self.logger.info(f"rename [{origin}] to [{posted}]") os.rename(origin, posted) @@ -237,15 +248,25 @@ class TreeWalker: config = load_json(config_path) flag, result = self.ensure_node_id(config) if flag: - dump_json(config_path, config, exist_ok=True, override=True) + dump_json(config_path, result, exist_ok=True, override=True) return config def ensure_node_id(self, config): - if "node_id" not in config: - config["node_id"] = self.gen_node_id() - return True, config - else: - return False, config + flag = False + if "node_id" not in config or \ + not config["node_id"].startswith(f"{self.name}-") or \ + config["node_id"] in id_set: + new_id = self.gen_node_id() + id_set.add(new_id) + config["node_id"] = new_id + flag = True + + for child in config.get("children", []): + child_node = list(child.values())[0] + f, _ = self.ensure_node_id(child_node) + flag = flag or f + + return flag, config def gen_node_id(self): return f"{self.name}-{uuid.uuid4().hex}" @@ -258,7 +279,8 @@ class TreeWalker: return int(number), title except Exception as error: self.logger.error(f"目录 [{path}] 解析失败,结构不合法,可能是缺少序号") - sys.exit(1) + # sys.exit(1) + raise error def load_chapter_node(self, full_name): config = self.ensure_chapter_config(full_name) @@ -288,9 +310,71 @@ class TreeWalker: def ensure_exercises(self, section_path): config = self.ensure_section_config(section_path) + flag = False + for e in os.listdir(section_path): + base, ext = os.path.splitext(e) + _, source = os.path.split(e) + if ext != ".md": + continue + mfile = base + ".json" + meta_path = os.path.join(section_path, mfile) + self.ensure_exercises_meta(meta_path, source) + export = config.get("export", []) + if mfile not in export and self.name != "algorithm": + export.append(mfile) + flag = True + config["export"] = export + + if flag: + dump_json(os.path.join(section_path, "config.json"), + config, True, True) + for e in config.get("export", []): full_name = os.path.join(section_path, e) exercise = load_json(full_name) - if "exercise_id" not in exercise: - exercise["exercise_id"] = uuid.uuid4().hex - dump_json(full_name, exercise) + if "exercise_id" not in exercise or exercise.get("exercise_id") in id_set: + eid = uuid.uuid4().hex + exercise["exercise_id"] = eid + dump_json(full_name, exercise, True, True) + else: + id_set.add(exercise["exercise_id"]) + + def ensure_exercises_meta(self, meta_path, source): + _, mfile = os.path.split(meta_path) + meta = None + if os.path.exists(meta_path): + with open(meta_path) as f: + content = f.read() + if content: + meta = json.loads(content) + if "exercise_id" not in meta: + meta["exercise_id"] = uuid.uuid4().hex + if "notebook_enable" not in meta: + meta["notebook_enable"] = self.default_notebook() + if "source" not in meta: + meta["source"] = source + if "author" not in meta: + meta["author"] = user_name() + if "type" not in meta: + meta["type"] = "code_options" + if meta is None: + meta = { + "type": "code_options", + "author": user_name(), + "source": source, + "notebook_enable": self.default_notebook(), + "exercise_id": uuid.uuid4().hex + } + dump_json(meta_path, meta, True, True) + + def default_notebook(self): + if self.name in ["python", "java", "c"]: + return True + else: + return False + + def check_section_keywords(self, full_path): + config = self.ensure_section_config(full_path) + if not config.get("keywords", []): + self.logger.error(f"节点 [{full_path}] 的关键字为空,请修改配置文件写入关键字") + sys.exit(1) -- GitLab