aboutsummaryrefslogtreecommitdiffhomepage
path: root/examples/data/scripts/per-site-settings.py
diff options
context:
space:
mode:
authorGravatar Ben Boeckel <MathStuf@gmail.com>2010-10-20 23:26:17 -0400
committerGravatar Ben Boeckel <MathStuf@gmail.com>2010-10-20 23:26:17 -0400
commitda84cb594d4698849d298a86b86292acd091d651 (patch)
tree3701fe816fdf6c2f82c6b0ee438c704f6adb94a1 /examples/data/scripts/per-site-settings.py
parent75002a7e7a648fcf01827186ef5e53122be998ab (diff)
Use a hierarchical configuration file
Diffstat (limited to 'examples/data/scripts/per-site-settings.py')
-rwxr-xr-xexamples/data/scripts/per-site-settings.py49
1 files changed, 45 insertions, 4 deletions
diff --git a/examples/data/scripts/per-site-settings.py b/examples/data/scripts/per-site-settings.py
index ca95ab2..998a265 100755
--- a/examples/data/scripts/per-site-settings.py
+++ b/examples/data/scripts/per-site-settings.py
@@ -27,13 +27,54 @@ import tempfile
import urlparse
import sys
+
+def match_url(url, patt):
+ return url.endswith(patt) or re.match(patt, url)
+
+
+def match_path(path, patt):
+ return path.startswith(patt) or re.match(patt, path)
+
+
def grep_url(url, path, fin):
entries = []
+ cur_indent = 0
+ passing = [False, False]
+ # 0 == url
+ # 1 == path
+ # 2 == command
+ state = 0
for line in fin:
- parts = line.split('\t', 2)
- if (url.endswith(parts[0]) or re.match(parts[0], url)) and \
- (path.startswith(parts[1]) or re.match(parts[1], path)):
- entries.append(parts[2])
+ raw = line.lstrip()
+ indent = len(line) - len(raw)
+ if not indent:
+ # Reset state
+ passing = [False, False]
+ state = 0
+ cur_indent = 0
+ else:
+ # previous level
+ if indent < cur_indent:
+ if state == 1:
+ passing[0] = False
+ elif state == 2:
+ passing[1] = False
+ state -= 1
+ # next level
+ if cur_indent < indent:
+ state += 1
+
+ # parse the line
+ if state == 0:
+ if not passing[0] and match_url(url, raw):
+ passing[0] = True
+ elif state == 1 and passing[0]:
+ if not passing[1] and match_path(path, raw):
+ passing[1] = True
+ elif state == 2 and passing[1]:
+ entries.append(raw)
+ cur_indent = indent
+
return entries
def write_to_socket(commands, sockpath):