Index: reviewbot/util.py |
=================================================================== |
--- reviewbot/util.py (revision 0) |
+++ reviewbot/util.py (revision 0) |
@@ -0,0 +1,68 @@ |
+# Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import email.utils |
+ |
+ |
+def lazy_property(func): |
+ """A decorator for lazy properties.""" |
+ name = '__lazy_' + func.__name__ |
+ |
+ def get_property(self, *args, **kwargs): |
+ if not hasattr(self, name): |
+ setattr(self, name, func(self, *args, **kwargs)) |
+ return getattr(self, name) |
+ |
+ return property(get_property) |
+ |
+ |
+class LazyDict(object): |
+ """A simple immutable and lazy dictionary. |
+ |
+ This looks up the actual key values on first access to the key and caches the |
+ value to speed up subsequent accesses. |
+ """ |
+ |
+ def __init__(self, lookup_fn): |
+ self.items = {} |
+ self.lookup = lookup_fn |
+ |
+ def __getitem__(self, name): |
+ if name not in self.items.keys(): |
+ self.items[name] = self.lookup(name) |
+ return self.items[name] |
+ |
+ |
+class ObjectDict(object): |
+ """Wraps a dictionary to allow value retrieval in dot notation.""" |
+ |
+ def __init__(self, data): |
+ self.data = data |
+ |
+ def __getitem__(self, name): |
+ val = self.data[name] |
+ if type(val) == dict: |
+ return ObjectDict(val) |
+ return val |
+ |
+ def __getattr__(self, name): |
+ try: |
+ return self[name] |
+ except KeyError as e: |
+ raise AttributeError(e) |
+ |
+ def __iter__(self): |
+ return self.data.iterkeys() |
+ |
+ |
+def get_emails(string): |
+ """Normalizes a string containing a list of email recepients. |
+ |
+ Takes a string in the format present in mail headers and returns a list of |
+ email addresses. For example, the input |
+ 'test@example.com, committers <committers@chromium.org> |
+ will produce this return value: |
+ [ 'test@example.com', 'committers@chromium.org' ] |
+ """ |
+ return [entry[1] for entry in email.utils.getaddresses([string])] |
Property changes on: reviewbot/util.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |