From 65e6fb7ce6e833c6a826ed390f8b474f3744298b Mon Sep 17 00:00:00 2001 From: Mars Liu Date: Fri, 12 Nov 2021 14:54:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86windows=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E7=9A=84=E9=BB=98=E8=AE=A4=E7=BC=96=E7=A0=81=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=9B=E4=B8=B4=E6=97=B6=E5=85=BC=E5=AE=B9java=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E6=A0=91=E5=9B=9B=E7=BA=A7=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config.json" | 0 .../2.\347\256\200\345\206\231/config.json" | 7 + .../2.\347\256\200\345\206\231/sam.json" | 7 + .../2.\347\256\200\345\206\231/sam.md" | 0 .../3.\347\256\200\345\206\231/config.json" | 39 ------ .../config.json" | 8 ++ .../double.json" | 7 + .../double.md" | 0 .../config.json" | 39 ------ .../config.json" | 0 .../config.json" | 0 .../config.json" | 0 data/tree.json | 128 +----------------- src/tree.py | 38 ++++-- 14 files changed, 61 insertions(+), 212 deletions(-) rename "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226/config.json" => "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/1.\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226/config.json" (100%) create mode 100644 "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/config.json" create mode 100644 "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/sam.json" rename "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/sam.md" => "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/sam.md" (100%) delete mode 100644 "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/config.json" create mode 100644 "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/config.json" create mode 100644 "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/double.json" rename "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/sam.json" => "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/double.md" (100%) delete mode 100644 "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/4.\347\234\237\345\256\236\347\232\204\344\276\213\345\255\220/config.json" rename "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/2.\345\217\215\345\272\224\345\274\217\346\265\201\344\273\245\345\217\212Flow API/config.json" => "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/1.\345\217\215\345\272\224\345\274\217\346\265\201\344\273\245\345\217\212Flow API/config.json" (100%) rename "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/3.\344\275\277\347\224\250\345\217\215\345\272\224\345\274\217\345\272\223RxJava/config.json" => "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/2.\344\275\277\347\224\250\345\217\215\345\272\224\345\274\217\345\272\223RxJava/config.json" (100%) rename "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/4.Java\345\217\215\345\260\204\346\212\200\346\234\257/config.json" => "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/3.Java\345\217\215\345\260\204\346\212\200\346\234\257/config.json" (100%) diff --git "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226/config.json" "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/1.\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226/config.json" similarity index 100% rename from "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226/config.json" rename to "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/1.\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226/config.json" diff --git "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/config.json" "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/config.json" new file mode 100644 index 0000000..cdb7ce2 --- /dev/null +++ "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/config.json" @@ -0,0 +1,7 @@ +{ + "node_id": "java-b121d453fc544e188b9ad50476c22f59", + "keywords": [], + "children": [ + ], + "export": ["sam.json"] +} \ No newline at end of file diff --git "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/sam.json" "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/sam.json" new file mode 100644 index 0000000..97372f5 --- /dev/null +++ "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/sam.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "sam.md", + "notebook_enable": true, + "exercise_id": "9f7e58ada74749099f03991776c0c350" +} \ No newline at end of file diff --git "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/sam.md" "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/sam.md" similarity index 100% rename from "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/sam.md" rename to "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/2.\347\256\200\345\206\231/sam.md" diff --git "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/config.json" "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/config.json" deleted file mode 100644 index ff510db..0000000 --- "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/config.json" +++ /dev/null @@ -1,39 +0,0 @@ -{ - "node_id": "java-b121d453fc544e188b9ad50476c22f59", - "keywords": [], - "children": [ - { - "匿名类": { - "keywords": [], - "children": [], - "node_id": "java-afe49e9037d946b2934d38fa45bfc80d", - "title": "匿名类" - } - }, - { - "第五次尝试:使用匿名类": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "第五次尝试:使用匿名类" - } - }, - { - "第六次尝试:使用Lambda表达式": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "第六次尝试:使用Lambda表达式" - } - }, - { - "第七次尝试:将List类型抽象化": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8" - } - } - ], - "export": ["sam.json"], - "title": "对付啰唆" -} \ No newline at end of file diff --git "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/config.json" "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/config.json" new file mode 100644 index 0000000..6a310a8 --- /dev/null +++ "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/config.json" @@ -0,0 +1,8 @@ +{ + "node_id": "java-db33d9c7f2004cdbbc058254fe536ace", + "keywords": [], + "children": [ + ], + "export": ["double.json"], + "title": "真实的例子" +} \ No newline at end of file diff --git "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/double.json" "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/double.json" new file mode 100644 index 0000000..b4e2450 --- /dev/null +++ "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/double.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "double.md", + "notebook_enable": true, + "exercise_id": "e6410eab038346daa724ca715e808c79" +} \ No newline at end of file diff --git "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/sam.json" "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/double.md" similarity index 100% rename from "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\347\256\200\345\206\231/sam.json" rename to "data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/3.\351\253\230\345\272\217\345\207\275\346\225\260/double.md" diff --git "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/4.\347\234\237\345\256\236\347\232\204\344\276\213\345\255\220/config.json" "b/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/4.\347\234\237\345\256\236\347\232\204\344\276\213\345\255\220/config.json" deleted file mode 100644 index a5b45cb..0000000 --- "a/data/3.Java\351\253\230\351\230\266/1.\351\200\232\350\277\207\350\241\214\344\270\272\345\217\202\346\225\260\345\214\226\344\274\240\351\200\222\344\273\243\347\240\201/4.\347\234\237\345\256\236\347\232\204\344\276\213\345\255\220/config.json" +++ /dev/null @@ -1,39 +0,0 @@ -{ - "node_id": "java-db33d9c7f2004cdbbc058254fe536ace", - "keywords": [], - "children": [ - { - "用Comparator来排序": { - "keywords": [], - "children": [], - "node_id": "java-a218b2a634d34529b4b65991e217632c", - "title": "用Comparator来排序" - } - }, - { - "用Runnable执行代码块": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "用Runnable执行代码块" - } - }, - { - "通过Callable返回结果": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "通过Callable返回结果" - } - }, - { - "GUI事件处理": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8" - } - } - ], - "export": [], - "title": "真实的例子" -} \ No newline at end of file diff --git "a/data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/2.\345\217\215\345\272\224\345\274\217\346\265\201\344\273\245\345\217\212Flow API/config.json" "b/data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/1.\345\217\215\345\272\224\345\274\217\346\265\201\344\273\245\345\217\212Flow API/config.json" similarity index 100% rename from "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/2.\345\217\215\345\272\224\345\274\217\346\265\201\344\273\245\345\217\212Flow API/config.json" rename to "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/1.\345\217\215\345\272\224\345\274\217\346\265\201\344\273\245\345\217\212Flow API/config.json" diff --git "a/data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/3.\344\275\277\347\224\250\345\217\215\345\272\224\345\274\217\345\272\223RxJava/config.json" "b/data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/2.\344\275\277\347\224\250\345\217\215\345\272\224\345\274\217\345\272\223RxJava/config.json" similarity index 100% rename from "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/3.\344\275\277\347\224\250\345\217\215\345\272\224\345\274\217\345\272\223RxJava/config.json" rename to "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/2.\344\275\277\347\224\250\345\217\215\345\272\224\345\274\217\345\272\223RxJava/config.json" diff --git "a/data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/4.Java\345\217\215\345\260\204\346\212\200\346\234\257/config.json" "b/data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/3.Java\345\217\215\345\260\204\346\212\200\346\234\257/config.json" similarity index 100% rename from "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/4.Java\345\217\215\345\260\204\346\212\200\346\234\257/config.json" rename to "data/3.Java\351\253\230\351\230\266/11.\345\217\215\345\272\224\345\274\217\347\274\226\347\250\213/3.Java\345\217\215\345\260\204\346\212\200\346\234\257/config.json" diff --git a/data/tree.json b/data/tree.json index a4bd6d6..458d87b 100644 --- a/data/tree.json +++ b/data/tree.json @@ -3976,38 +3976,6 @@ "node_id": "java-fb711fb0dfbb40db974476ea2d9faf9d", "keywords": [], "children": [ - { - "应对不断变化的需求": { - "node_id": "java-0a39f4040da04b8591f9b36f3c446789", - "keywords": [], - "children": [ - { - "初试牛刀:筛选绿苹果": { - "keywords": [], - "children": [], - "node_id": "java-e888465b1043473fbb919fd4958e3179", - "title": "初试牛刀:筛选绿苹果" - } - }, - { - "再展身手:把颜色作为参数": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "再展身手:把颜色作为参数" - } - }, - { - "第三次尝试:对你能想到的每个属性做筛选": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "第三次尝试:对你能想到的每个属性做筛选" - } - } - ] - } - }, { "行为参数化": { "node_id": "java-3a05a505cd514579a52321f0c945d577", @@ -4016,81 +3984,17 @@ } }, { - "对付啰唆": { + "简写": { "node_id": "java-b121d453fc544e188b9ad50476c22f59", "keywords": [], - "children": [ - { - "匿名类": { - "keywords": [], - "children": [], - "node_id": "java-afe49e9037d946b2934d38fa45bfc80d", - "title": "匿名类" - } - }, - { - "第五次尝试:使用匿名类": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "第五次尝试:使用匿名类" - } - }, - { - "第六次尝试:使用Lambda表达式": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "第六次尝试:使用Lambda表达式" - } - }, - { - "第七次尝试:将List类型抽象化": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8" - } - } - ] + "children": [] } }, { - "真实的例子": { + "高序函数": { "node_id": "java-db33d9c7f2004cdbbc058254fe536ace", "keywords": [], - "children": [ - { - "用Comparator来排序": { - "keywords": [], - "children": [], - "node_id": "java-a218b2a634d34529b4b65991e217632c", - "title": "用Comparator来排序" - } - }, - { - "用Runnable执行代码块": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "用Runnable执行代码块" - } - }, - { - "通过Callable返回结果": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "通过Callable返回结果" - } - }, - { - "GUI事件处理": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8" - } - } - ] + "children": [] } } ] @@ -4619,30 +4523,6 @@ "node_id": "java-0969aecf77a7416ba0fed596b2569a23", "keywords": [], "children": [ - { - "反应式宣言": { - "node_id": "java-4c450036165e492c87e35ff7fb65b286", - "keywords": [], - "children": [ - { - "应用层的反应式编程": { - "keywords": [], - "children": [], - "node_id": "java-f329984b23344a9c986045dd92ef2dec", - "title": "应用层的反应式编程" - } - }, - { - "反应式系统": { - "keywords": [], - "children": [], - "node_id": "569d5e11c4fc5de7844053d9a733c5e8", - "title": "反应式系统" - } - } - ] - } - }, { "反应式流以及Flow API": { "node_id": "java-96551e0eb6b044ff8f7fe9b5ff27fd73", diff --git a/src/tree.py b/src/tree.py index b770efc..156e547 100644 --- a/src/tree.py +++ b/src/tree.py @@ -14,6 +14,7 @@ formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) + def load_json(p): with open(p, 'r') as f: return json.loads(f.read()) @@ -28,7 +29,7 @@ def dump_json(p, j, exist_ok=False, override=False): logger.error(f"{p} already exist") sys.exit(0) - with open(p, 'w+') as f: + with open(p, 'w+', encoding="utf8") as f: f.write(json.dumps(j, indent=2, ensure_ascii=False)) @@ -94,23 +95,39 @@ 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}") + chapter_path = os.path.join(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}") + full_path = os.path.join(chapter_path, f"{index + 1}.{section_title}") if os.path.isdir(full_path): self.ensure_exercises(full_path) + # TODO 四级知识点的处理仅为 Java 技能树的临时处理而设定,未来java技能树上线前会删掉这部分代码,将四级节点 + # 合并到三级节点 + for idx, [num, sub_section_title] in self.sort_dir_list([p for p in os.listdir(full_path) + if os.path.isdir(os.path.join(full_path, p))]): + order = idx + 1 + ensure_path = os.path.join(full_path, f"{order}.{sub_section_title}") + forth_full_path = os.path.join(full_path, f"{num}.{sub_section_title}") + if ensure_path != forth_full_path: + os.rename(forth_full_path, ensure_path) + if os.path.isdir(ensure_path): + self.ensure_exercises(forth_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 +184,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) @@ -229,8 +246,8 @@ class TreeWalker: config = { "node_id": self.gen_node_id(), "keywords": [], - "children":[], - "export":[] + "children": [], + "export": [] } dump_json(config_path, config, exist_ok=True, override=True) else: @@ -258,7 +275,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) @@ -290,8 +308,8 @@ class TreeWalker: config = self.ensure_section_config(section_path) for e in config.get("export", []): full_name = os.path.join(section_path, e) + logger.info(full_name) exercise = load_json(full_name) if "exercise_id" not in exercise: exercise["exercise_id"] = uuid.uuid4().hex - dump_json(full_name, exercise) - + dump_json(full_name, exercise, exist_ok=True, override=True) -- GitLab