Sfoglia il codice sorgente

Add hook for storage changes

Unrud 9 anni fa
parent
commit
0263251ecf
3 ha cambiato i file con 17 aggiunte e 1 eliminazioni
  1. 4 0
      config
  2. 11 0
      radicale/__init__.py
  3. 2 1
      radicale/config.py

+ 4 - 0
config

@@ -112,6 +112,10 @@
 # Folder for storing local collections, created if not present
 #filesystem_folder = ~/.config/radicale/collections
 
+# Command that is run after changes to storage
+#hook =
+# Example: git add -A && (git diff --cached --quiet || git commit -m "Changes by "%(user)s)
+
 
 [logging]
 

+ 11 - 0
radicale/__init__.py

@@ -30,10 +30,12 @@ import os
 import pprint
 import base64
 import contextlib
+import shlex
 import socket
 import socketserver
 import ssl
 import threading
+import subprocess
 import wsgiref.simple_server
 import re
 import zlib
@@ -348,6 +350,15 @@ class Application:
                     status, headers, answer = function(
                         environ, read_allowed_items, write_allowed_items,
                         content, user)
+                    hook = self.configuration.get("storage", "hook")
+                    if lock_mode == "w" and hook:
+                        self.logger.debug("Running hook")
+                        folder = os.path.expanduser(
+                            self.configuration.get("storage",
+                                                   "filesystem_folder"))
+                        subprocess.check_call(
+                            hook % {"user": shlex.quote(user or "Anonymous")},
+                            shell=True, cwd=folder)
                 else:
                     status, headers, answer = NOT_ALLOWED
         else:

+ 2 - 1
radicale/config.py

@@ -60,7 +60,8 @@ INITIAL_CONFIG = {
     "storage": {
         "type": "multifilesystem",
         "filesystem_folder": os.path.expanduser(
-            "~/.config/radicale/collections")},
+            "~/.config/radicale/collections"),
+        "hook": ""},
     "logging": {
         "config": "/etc/radicale/logging",
         "debug": "False",