Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: sitescripts/notifications/parser.py

Issue 29345242: Noissue - Adapt quotes for compliance with our coding style in sitescripts (Closed)
Patch Set: Fixed raw string Created May 30, 2016, 8:47 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 # This file is part of the Adblock Plus web scripts, 1 # This file is part of the Adblock Plus web scripts,
2 # Copyright (C) 2006-2016 Eyeo GmbH 2 # Copyright (C) 2006-2016 Eyeo GmbH
3 # 3 #
4 # Adblock Plus is free software: you can redistribute it and/or modify 4 # Adblock Plus is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License version 3 as 5 # it under the terms of the GNU General Public License version 3 as
6 # published by the Free Software Foundation. 6 # published by the Free Software Foundation.
7 # 7 #
8 # Adblock Plus is distributed in the hope that it will be useful, 8 # Adblock Plus is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
(...skipping 11 matching lines...) Expand all
22 import traceback 22 import traceback
23 from StringIO import StringIO 23 from StringIO import StringIO
24 24
25 from sitescripts.utils import get_config 25 from sitescripts.utils import get_config
26 26
27 27
28 def _parse_targetspec(value, name): 28 def _parse_targetspec(value, name):
29 target = {} 29 target = {}
30 for spec in value.split(): 30 for spec in value.split():
31 known = False 31 known = False
32 for parameter in ("extension", "application", "platform"): 32 for parameter in ('extension', 'application', 'platform'):
33 if spec.startswith(parameter + "="): 33 if spec.startswith(parameter + '='):
34 target[parameter] = spec[len(parameter + "="):] 34 target[parameter] = spec[len(parameter + '='):]
35 known = True 35 known = True
36 elif spec.startswith(parameter + "Version>="): 36 elif spec.startswith(parameter + 'Version>='):
37 target[parameter + "MinVersion"] = spec[len(parameter + "Version >="):] 37 target[parameter + 'MinVersion'] = spec[len(parameter + 'Version >='):]
38 known = True 38 known = True
39 elif spec.startswith(parameter + "Version<="): 39 elif spec.startswith(parameter + 'Version<='):
40 target[parameter + "MaxVersion"] = spec[len(parameter + "Version <="):] 40 target[parameter + 'MaxVersion'] = spec[len(parameter + 'Version <='):]
41 known = True 41 known = True
42 elif spec.startswith(parameter + "Version="): 42 elif spec.startswith(parameter + 'Version='):
43 target[parameter + "MinVersion"] = target[parameter + "MaxVersio n"] = spec[len(parameter + "Version="):] 43 target[parameter + 'MinVersion'] = target[parameter + 'MaxVersio n'] = spec[len(parameter + 'Version='):]
44 known = True 44 known = True
45 if not known: 45 if not known:
46 raise Exception("Unknown target specifier '%s' in file '%s'" % (spec , name)) 46 raise Exception("Unknown target specifier '%s' in file '%s'" % (spec , name))
47 return target 47 return target
48 48
49 49
50 def _parse_notification(data, name): 50 def _parse_notification(data, name):
51 notification = {"id": name, "severity": "information", "message": {}, "title ": {}} 51 notification = {'id': name, 'severity': 'information', 'message': {}, 'title ': {}}
52 current = notification 52 current = notification
53 53
54 for line in data: 54 for line in data:
55 if not re.search(r"\S", line): 55 if not re.search(r'\S', line):
56 continue 56 continue
57 57
58 if re.search(r"^\[.*\]$", line): 58 if re.search(r'^\[.*\]$', line):
59 current = {"title": {}, "message": {}} 59 current = {'title': {}, 'message': {}}
60 notification.setdefault("variants", []).append(current) 60 notification.setdefault('variants', []).append(current)
61 continue 61 continue
62 62
63 if line.find("=") < 0: 63 if line.find('=') < 0:
64 raise Exception("Could not process line '%s' in file '%s'" % (line.s trip(), name)) 64 raise Exception("Could not process line '%s' in file '%s'" % (line.s trip(), name))
65 65
66 key, value = map(unicode.strip, line.split("=", 1)) 66 key, value = map(unicode.strip, line.split('=', 1))
67 is_variant = current != notification 67 is_variant = current != notification
68 68
69 if key == "inactive" and not is_variant: 69 if key == 'inactive' and not is_variant:
70 current["inactive"] = value.lower() not in ("", "0", "no", "false", "off") 70 current['inactive'] = value.lower() not in ('', '0', 'no', 'false', 'off')
71 elif key == "severity": 71 elif key == 'severity':
72 if value not in ("information", "critical", "normal"): 72 if value not in ('information', 'critical', 'normal'):
73 raise Exception("Unknown severity value '%s' in file '%s'" % (va lue, name)) 73 raise Exception("Unknown severity value '%s' in file '%s'" % (va lue, name))
74 current["severity"] = value 74 current['severity'] = value
75 elif key == "links": 75 elif key == 'links':
76 current["links"] = value.split() 76 current['links'] = value.split()
77 elif key.startswith("title."): 77 elif key.startswith('title.'):
78 locale = key[len("title."):] 78 locale = key[len('title.'):]
79 current["title"][locale] = value 79 current['title'][locale] = value
80 elif key.startswith("message."): 80 elif key.startswith('message.'):
81 locale = key[len("message."):] 81 locale = key[len('message.'):]
82 current["message"][locale] = value 82 current['message'][locale] = value
83 elif key == "target": 83 elif key == 'target':
84 target = _parse_targetspec(value, name) 84 target = _parse_targetspec(value, name)
85 if "targets" in notification: 85 if 'targets' in notification:
86 current["targets"].append(target) 86 current['targets'].append(target)
87 else: 87 else:
88 current["targets"] = [target] 88 current['targets'] = [target]
89 elif key == "sample" and is_variant: 89 elif key == 'sample' and is_variant:
90 current["sample"] = float(value) 90 current['sample'] = float(value)
91 elif key in ["start", "end"]: 91 elif key in ['start', 'end']:
92 current[key] = datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M") 92 current[key] = datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M')
93 else: 93 else:
94 raise Exception("Unknown parameter '%s' in file '%s'" % (key, name)) 94 raise Exception("Unknown parameter '%s' in file '%s'" % (key, name))
95 95
96 for text_key in ("title", "message"): 96 for text_key in ('title', 'message'):
97 def has_default_locale(variant): 97 def has_default_locale(variant):
98 return "en-US" in variant[text_key] 98 return 'en-US' in variant[text_key]
99 if not has_default_locale(notification): 99 if not has_default_locale(notification):
100 variants = notification.get("variants", []) 100 variants = notification.get('variants', [])
101 if not all(map(has_default_locale, variants)): 101 if not all(map(has_default_locale, variants)):
102 raise Exception("No %s for en-US (default language) " 102 raise Exception('No %s for en-US (default language) '
103 "in file '%s'" % (text_key, name)) 103 "in file '%s'" % (text_key, name))
104 return notification 104 return notification
105 105
106 106
107 def load_notifications(): 107 def load_notifications():
108 repo = get_config().get("notifications", "repository") 108 repo = get_config().get('notifications', 'repository')
109 command = ["hg", "-R", repo, "archive", "-r", "default", "-t", "tar", 109 command = ['hg', '-R', repo, 'archive', '-r', 'default', '-t', 'tar',
110 "-p", ".", "-X", os.path.join(repo, ".hg_archival.txt"), "-"] 110 '-p', '.', '-X', os.path.join(repo, '.hg_archival.txt'), '-']
111 data = subprocess.check_output(command) 111 data = subprocess.check_output(command)
112 112
113 notifications = [] 113 notifications = []
114 with tarfile.open(mode="r:", fileobj=StringIO(data)) as archive: 114 with tarfile.open(mode='r:', fileobj=StringIO(data)) as archive:
115 for fileinfo in archive: 115 for fileinfo in archive:
116 name = fileinfo.name 116 name = fileinfo.name
117 if name.startswith("./"): 117 if name.startswith('./'):
118 name = name[2:] 118 name = name[2:]
119 119
120 if fileinfo.type == tarfile.REGTYPE: 120 if fileinfo.type == tarfile.REGTYPE:
121 data = codecs.getreader("utf8")(archive.extractfile(fileinfo)) 121 data = codecs.getreader('utf8')(archive.extractfile(fileinfo))
122 try: 122 try:
123 notification = _parse_notification(data, name) 123 notification = _parse_notification(data, name)
124 if not "inactive" in notification: 124 if not 'inactive' in notification:
125 current_time = datetime.datetime.now() 125 current_time = datetime.datetime.now()
126 start = notification.pop("start", current_time) 126 start = notification.pop('start', current_time)
127 end = notification.pop("end", current_time) 127 end = notification.pop('end', current_time)
128 if not start <= current_time <= end: 128 if not start <= current_time <= end:
129 notification["inactive"] = True 129 notification['inactive'] = True
130 notifications.append(notification) 130 notifications.append(notification)
131 except: 131 except:
132 traceback.print_exc() 132 traceback.print_exc()
133 return notifications 133 return notifications
OLDNEW

Powered by Google App Engine
This is Rietveld