View difference between Paste ID: 1SrfMmyR and CQBd1beA
SHOW: | | - or go back to the newest paste.
1
diff --git a/flumotion/component/misc/httpserver/ourmimetypes.py b/flumotion/component/misc/httpserver/ourmimetypes.py
2
index 4f67db8..7e240cd 100644
3
--- a/flumotion/component/misc/httpserver/ourmimetypes.py
4
+++ b/flumotion/component/misc/httpserver/ourmimetypes.py
5
@@ -22,6 +22,12 @@
6
 import os
7
 
8
 from twisted.web import static
9
+from twisted.internet import inotify
10
+from twisted.python import filepath
11
+
12
+from flumotion.common import log
13
+
14
+MIMETYPE_LOCATIONS = ['/etc/mime.types']
15
 
16
 
17
 class MimeTypes(object):
18
@@ -29,7 +35,7 @@ class MimeTypes(object):
19
     @staticmethod
20
     def loadMimeTypes():
21
         # Add our own mime types to the ones parsed from /etc/mime.types
22
-        d = static.loadMimeTypes()
23
+        d = static.loadMimeTypes(MIMETYPE_LOCATIONS)
24
         d['.flv'] = 'video/x-flv'
25
         d['.mp4'] = 'video/mp4'
26
         d['.webm'] = 'video/webm'
27
@@ -37,7 +43,16 @@ class MimeTypes(object):
28
 
29
     def __init__(self):
30
         self._mimetypes = self.loadMimeTypes()
31
+        self.notifier = inotify.INotify()
32
+        self.notifier.startReading()
33
+        for loc in MIMETYPE_LOCATIONS:
34
+            self.notifier.watch(filepath.FilePath(loc), mask=inotify.IN_MODIFY,
35
+                                callbacks=[self.notify])
36
 
37
     def fromPath(self, path, default=None):
38
         ext = os.path.splitext(path)[1]
39
         return self._mimetypes.get(ext.lower(), default)
40
+
41
+    def notify(self, ignored, filepath, mask):
42
+        log.debug('mimetypes', 'Mime type file changed %s' % filepath)
43
+        self._mimetypes = self.loadMimeTypes()