Chromium Code Reviews| Index: reviewbot/util.py |
| =================================================================== |
| --- reviewbot/util.py (revision 0) |
| +++ reviewbot/util.py (revision 0) |
| @@ -0,0 +1,52 @@ |
| +# 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): |
| + def __init__(self, lookup): |
| + self.items = {} |
| + self.lookup = lookup |
|
agable
2013/08/02 16:35:35
nit: self.lookup = lookup_fn
Mattias Nissler (ping if slow)
2013/08/05 09:08:51
Done.
|
| + |
| + def __getitem__(self, name): |
| + if name not in self.items.keys(): |
| + self.items[name] = self.lookup(name) |
| + return self.items[name] |
| + |
| + |
| +class ObjectDict(object): |
| + 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): |
| + return [entry[1] for entry in email.utils.getaddresses([string])] |
| Property changes on: reviewbot/util.py |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |