aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/matplotlib/py3/patches/04-fix-relative-paths-web-backend.patch
blob: af93c725bff6b45f483ccebbc16defe1b9ecfa83 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
--- contrib/python/matplotlib/py3/matplotlib/backends/backend_webagg.py	(f7af9e31ba1993f2d29753345505773d8e71ca62)
+++ contrib/python/matplotlib/py3/matplotlib/backends/backend_webagg.py	(working tree)
@@ -19,6 +19,10 @@ import random
 import sys
 import signal
 import threading
+import tempfile
+import os
+
+from library.python.resource import iteritems
 
 try:
     import tornado
@@ -177,12 +181,14 @@ class WebAggApplication(tornado.web.Application):
             assert url_prefix[0] == '/' and url_prefix[-1] != '/', \
                 'url_prefix must start with a "/" and not end with one.'
 
+        self._store_resources()
+        package_resources_abspath = os.path.join(self._stored_package_path, core.FigureManagerWebAgg.get_static_file_path())
         super().__init__(
             [
                 # Static files for the CSS and JS
                 (url_prefix + r'/_static/(.*)',
                  tornado.web.StaticFileHandler,
-                 {'path': core.FigureManagerWebAgg.get_static_file_path()}),
+                 {'path': package_resources_abspath}),
 
                 # Static images for the toolbar
                 (url_prefix + r'/_images/(.*)',
@@ -210,7 +216,19 @@ class WebAggApplication(tornado.web.Application):
                 (url_prefix + r'/([0-9]+)/download.([a-z0-9.]+)',
                  self.Download),
             ],
-            template_path=core.FigureManagerWebAgg.get_static_file_path())
+            template_path=package_resources_abspath)
+
+    def _store_resources(self):
+        self._stored_package_dir = tempfile.TemporaryDirectory()
+        self._stored_package_path = self._stored_package_dir.name
+        package_path = os.path.join(*"contrib/python/matplotlib/py3/".split("/"))
+        for key, data in iteritems(prefix="resfs/file/" + package_path, strip_prefix=True):
+            path = os.path.join(self._stored_package_path, *os.path.split(package_path), *os.path.split(key))
+            dir = os.path.dirname(path)
+            if not os.path.exists(dir):
+                os.makedirs(dir)
+            with open(path, "wb") as file:
+                file.write(data)
 
     @classmethod
     def initialize(cls, url_prefix='', port=None, address=None):