1.1 --- a/imip_agent.py Mon Sep 22 22:30:29 2014 +0200
1.2 +++ b/imip_agent.py Mon Sep 22 22:51:29 2014 +0200
1.3 @@ -74,41 +74,43 @@
1.4 if not d.has_key(name):
1.5 d[name] = []
1.6 if name in SECTION_TYPES:
1.7 - d[name].append((attr, get_itip_elements(value)))
1.8 + d[name].append((get_itip_elements(value), attr))
1.9 else:
1.10 - d[name].append((attr, value))
1.11 + d[name].append((value, attr))
1.12 return d
1.13
1.14 -def get_attr_value(d, name, single=True):
1.15 +def get_items(d, name, all=True):
1.16 if d.has_key(name):
1.17 values = d[name]
1.18 - if single and len(values) == 1:
1.19 + if not all and len(values) == 1:
1.20 return values[0]
1.21 else:
1.22 return values
1.23 else:
1.24 return None
1.25
1.26 +def get_item(d, name):
1.27 + return get_items(d, name, False)
1.28 +
1.29 def get_value_map(d, name):
1.30 - items = get_attr_value(d, name, False)
1.31 + items = get_items(d, name)
1.32 if items:
1.33 - return map_from_list(items)
1.34 + return dict(items)
1.35 else:
1.36 return {}
1.37
1.38 -def get_value(d, name, single=True):
1.39 +def get_values(d, name, all=True):
1.40 if d.has_key(name):
1.41 values = d[name]
1.42 - if single and len(values) == 1:
1.43 - return values[0][1]
1.44 + if not all and len(values) == 1:
1.45 + return values[0][0]
1.46 else:
1.47 - return map(lambda x: x[1], values)
1.48 + return map(lambda x: x[0], values)
1.49 else:
1.50 return None
1.51
1.52 -def map_from_list(l):
1.53 - items = map(lambda (v, a): (a, v), l)
1.54 - return dict(items)
1.55 +def get_value(d, name):
1.56 + return get_values(d, name, False)
1.57
1.58 def get_address(value):
1.59 return value.startswith("mailto:") and value[7:] or value
1.60 @@ -140,7 +142,7 @@
1.61 # Look for different kinds of sections.
1.62
1.63 for name, cls in handlers:
1.64 - for details in get_value(itip, name, False) or []:
1.65 + for details in get_values(itip, name) or []:
1.66
1.67 # Dispatch to a handler and obtain any response.
1.68
1.69 @@ -168,14 +170,20 @@
1.70 self.sequence = get_value(details, "SEQUENCE")
1.71 self.store = imip_store.FileStore()
1.72
1.73 - def get_attr_value(self, name, single=True):
1.74 - return get_attr_value(self.details, name, single)
1.75 + def get_items(self, name, all=True):
1.76 + return get_items(self.details, name, all)
1.77 +
1.78 + def get_item(self, name):
1.79 + return get_item(self.details, name)
1.80
1.81 def get_value_map(self, name):
1.82 return get_value_map(self.details, name)
1.83
1.84 - def get_value(self, name, single=True):
1.85 - return get_value(self.details, name, single)
1.86 + def get_values(self, name, all=True):
1.87 + return get_values(self.details, name, all)
1.88 +
1.89 + def get_value(self, name):
1.90 + return get_value(self.details, name)
1.91
1.92 def filter_by_recipients(self, values):
1.93 return self.recipients.intersection(map(get_address, values))
1.94 @@ -232,7 +240,7 @@
1.95 """
1.96
1.97 attendee_map = self.get_value_map("ATTENDEE")
1.98 - organiser = self.get_attr_value("ORGANIZER")
1.99 + organiser = self.get_item("ORGANIZER")
1.100
1.101 # Only provide details for recipients who are also attendees.
1.102
1.103 @@ -241,7 +249,7 @@
1.104 if not attendees and not organiser:
1.105 return
1.106
1.107 - organiser_attr, organiser = organiser
1.108 + organiser, organiser_attr = organiser
1.109
1.110 # Get the details for the attendee.
1.111
1.112 @@ -341,27 +349,40 @@
1.113 "REQUEST" : lambda handler: handler.request,
1.114 }
1.115
1.116 -if __name__ == "__main__":
1.117 - try:
1.118 - # Obtain the different kinds of recipients.
1.119 +
1.120 +def main():
1.121 +
1.122 + # Obtain the different kinds of recipients.
1.123
1.124 - original_recipients = []
1.125 - recipients = []
1.126 + original_recipients = []
1.127 + recipients = []
1.128
1.129 - l = []
1.130 + l = []
1.131
1.132 - for arg in sys.argv[1:]:
1.133 - if arg == "-o":
1.134 - l = original_recipients
1.135 - elif arg == "-r":
1.136 - l = recipients
1.137 - else:
1.138 - l.append(arg)
1.139 + for arg in sys.argv[1:]:
1.140 + if arg == "-o":
1.141 + l = original_recipients
1.142 + elif arg == "-r":
1.143 + l = recipients
1.144 + elif arg == "-d":
1.145 + pass
1.146 + else:
1.147 + l.append(arg)
1.148 +
1.149 + process(sys.stdin, original_recipients, recipients)
1.150
1.151 - process(sys.stdin, original_recipients, recipients)
1.152 - except:
1.153 - sys.exit(EX_SOFTWARE)
1.154 +if __name__ == "__main__":
1.155 + if "-d" in sys.argv[1:]:
1.156 + main()
1.157 else:
1.158 - sys.exit(0)
1.159 + try:
1.160 + main()
1.161 + except SystemExit, value:
1.162 + sys.exit(value)
1.163 + except Exception, exc:
1.164 + type, value, tb = sys.exc_info()
1.165 + print >>sys.stderr, "Exception %s at %d" % (exc, tb.tb_lineno)
1.166 + sys.exit(EX_TEMPFAIL)
1.167 + sys.exit(0)
1.168
1.169 # vim: tabstop=4 expandtab shiftwidth=4