Browse Source

improve handling of external resources

Thomas B 3 months ago
parent
commit
6876576976
3 changed files with 65 additions and 35 deletions
  1. 28
    7
      input/blog/2024/2024_05_05_auto_project_docs.md
  2. 4
    1
      input/projects/auto_brightness.md
  3. 33
    27
      macros.py

+ 28
- 7
input/blog/2024/2024_05_05_auto_project_docs.md View File

@@ -96,7 +96,10 @@ function copyEvent(id) {
96 96
 
97 97
 <pre id="generatedocs" class="sh_sh">
98 98
 <!--%
99
-include_url("https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/docs/generate_docs.sh")
99
+include_url(
100
+    "https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/docs/generate_docs.sh",
101
+    "https://github.com/xythobuz/lars/raw/314bf218ca5e958d6ffa825d92d702cb5431abf6/docs/generate_docs.sh"
102
+)
100 103
 %-->
101 104
 </pre>
102 105
 
@@ -109,7 +112,10 @@ Add the `.github/workflows/docs.yml` script:
109 112
 
110 113
 <pre id="docsyml" class="sh_yaml">
111 114
 <!--%
112
-include_url("https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/.github/workflows/docs.yml")
115
+include_url(
116
+    "https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/.github/workflows/docs.yml",
117
+    "https://github.com/xythobuz/lars/raw/314bf218ca5e958d6ffa825d92d702cb5431abf6/.github/workflows/docs.yml"
118
+)
113 119
 %-->
114 120
 </pre>
115 121
 
@@ -130,7 +136,10 @@ If you want to visualize 3D print files, do the same with `3dprint/generate_stls
130 136
 
131 137
 <pre id="generatestls" class="sh_sh">
132 138
 <!--%
133
-include_url("https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/3dprint/generate_stls.sh")
139
+include_url(
140
+    "https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/3dprint/generate_stls.sh",
141
+    "https://github.com/xythobuz/lars/raw/314bf218ca5e958d6ffa825d92d702cb5431abf6/3dprint/generate_stls.sh"
142
+)
134 143
 %-->
135 144
 </pre>
136 145
 
@@ -139,7 +148,10 @@ include_url("https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6
139 148
 
140 149
 <pre id="scadyml" class="sh_yaml">
141 150
 <!--%
142
-include_url("https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/.github/workflows/scad.yml")
151
+include_url(
152
+    "https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/.github/workflows/scad.yml",
153
+    "https://github.com/xythobuz/lars/raw/314bf218ca5e958d6ffa825d92d702cb5431abf6/.github/workflows/scad.yml"
154
+)
143 155
 %-->
144 156
 </pre>
145 157
 
@@ -158,7 +170,10 @@ If you want to generate gerber files from PCBs, do something similar with `pcb/g
158 170
 
159 171
 <pre id="generatefab" class="sh_sh">
160 172
 <!--%
161
-include_url("https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/pcb2/generate_fab.sh")
173
+include_url(
174
+    "https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/pcb2/generate_fab.sh",
175
+    "https://github.com/xythobuz/lars/raw/314bf218ca5e958d6ffa825d92d702cb5431abf6/pcb2/generate_fab.sh"
176
+)
162 177
 %-->
163 178
 </pre>
164 179
 
@@ -167,7 +182,10 @@ include_url("https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6
167 182
 
168 183
 <pre id="kicadyml" class="sh_yaml">
169 184
 <!--%
170
-include_url("https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/.github/workflows/kicad.yml")
185
+include_url(
186
+    "https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/.github/workflows/kicad.yml",
187
+    "https://github.com/xythobuz/lars/raw/314bf218ca5e958d6ffa825d92d702cb5431abf6/.github/workflows/kicad.yml"
188
+)
171 189
 %-->
172 190
 </pre>
173 191
 
@@ -180,7 +198,10 @@ If you want to visualize KiCad schematics and PCBs in 2D and 3D, add `pcb/genera
180 198
 
181 199
 <pre id="generateplot" class="sh_sh">
182 200
 <!--%
183
-include_url("https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/pcb2/generate_plot.sh")
201
+include_url(
202
+    "https://git.xythobuz.de/thomas/drumkit/raw/commit/314bf218ca5e958d6ffa825d92d702cb5431abf6/pcb2/generate_plot.sh",
203
+    "https://github.com/xythobuz/lars/raw/314bf218ca5e958d6ffa825d92d702cb5431abf6/pcb2/generate_plot.sh"
204
+)
184 205
 %-->
185 206
 </pre>
186 207
 

+ 4
- 1
input/projects/auto_brightness.md View File

@@ -149,7 +149,10 @@ To alleviate this a bit I'm now using a [KWin script](https://develop.kde.org/do
149 149
 
150 150
 <pre class="sh_javascript">
151 151
 <!--%
152
-include_url("https://git.xythobuz.de/thomas/AutoBrightness/raw/branch/main/client/kwin_check.js")
152
+include_url(
153
+    "https://git.xythobuz.de/thomas/AutoBrightness/raw/branch/main/client/kwin_check.js",
154
+    "https://github.com/xythobuz/AutoBrightness/raw/refs/heads/main/client/kwin_check.js"
155
+)
153 156
 %-->
154 157
 </pre>
155 158
 

+ 33
- 27
macros.py View File

@@ -510,32 +510,46 @@ def print_cnsl_error(s, url):
510 510
     sys.stderr.write("\n")
511 511
 
512 512
 def http_request(url):
513
-    sys.stderr.write('sub    : fetching %s\n' % url)
514
-
515 513
     if PY3:
516
-        try:
517
-            response = urllib.request.urlopen(url, timeout = 10)
518
-        except HTTPError as error:
519
-            print_cnsl_error("HTTPError: '%s'" % error, url)
520
-            return ""
521
-        except URLError as error:
522
-            print_cnsl_error("URLError: '%s'" % error, url)
523
-            return ""
514
+        response = urllib.request.urlopen(url, timeout = 5)
524 515
     else:
525
-        try:
526
-            response = urllib.urlopen(url)
527
-        except IOError as error:
528
-            print_cnsl_error("HTTPError: '%s'" % error, url)
529
-            return ""
516
+        response = urllib.urlopen(url)
530 517
 
531 518
     if response.getcode() != 200:
532
-        print_cnsl_error("invalid response code: " + str(response.getcode()), url)
533
-        return ""
519
+        raise RuntimeError("invalid response code: " + str(response.getcode()))
520
+
521
+    data = response.read().decode("utf-8")
522
+    return data
523
+
524
+def include_url(url, fallback = None):
525
+    sys.stderr.write('sub    : fetching page "%s"\n' % url)
526
+
527
+    if fallback == None:
528
+        print_cnsl_error("include_url() without fallback option", url)
529
+
530
+    try:
531
+        data = http_request(url)
532
+    except Exception as e:
533
+        if fallback != None:
534
+            sys.stderr.write('sub    : fetching fallback page "%s"\n' % url)
535
+            try:
536
+                data = http_request(fallback)
537
+            except Exception as e:
538
+                print_cnsl_error(str(e), fallback)
539
+                return
540
+        else:
541
+            print_cnsl_error(str(e), url)
542
+            return
543
+
544
+    if PY3:
545
+        encoded = html.escape(data)
534 546
     else:
535
-        data = response.read().decode("utf-8")
536
-        return data
547
+        encoded = cgi.escape(data)
548
+
549
+    print(encoded, end="")
537 550
 
538 551
 def restRequest(url):
552
+    sys.stderr.write('sub    : fetching REST "%s"\n' % url)
539 553
     data = json.loads(http_request(url))
540 554
     return data
541 555
 
@@ -583,14 +597,6 @@ def printLatestRelease(user, repo):
583 597
         print("<li><a href=\"" + a["browser_download_url"] + "\">" + a["name"] + "</a>" + ss)
584 598
     print("</ul></div>")
585 599
 
586
-def include_url(url):
587
-    data = http_request(url)
588
-    if PY3:
589
-        encoded = html.escape(data)
590
-    else:
591
-        encoded = cgi.escape(data)
592
-    print(encoded, end="")
593
-
594 600
 # -----------------------------------------------------------------------------
595 601
 # preconvert hooks
596 602
 # -----------------------------------------------------------------------------

Loading…
Cancel
Save