| 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
|
|
|
|
|