Index: reviewbot/util.py |
=================================================================== |
--- reviewbot/util.py (revision 221173) |
+++ reviewbot/util.py (working copy) |
@@ -1,95 +0,0 @@ |
-# 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 collections |
-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(collections.Mapping): |
- """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] |
- |
- def __iter__(self): |
- return self.items.iterkeys() |
- |
- def __len__(self): |
- return len(self.items) |
- |
- def __repr__(self): |
- return repr(self.items) |
- |
- |
-class ObjectDict(collections.Mapping): |
- """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] |
- return ObjectDict.wrap(val) |
- |
- def __getattr__(self, name): |
- try: |
- return self[name] |
- except KeyError as e: |
- raise AttributeError(e) |
- |
- def __iter__(self): |
- return self.__data.iterkeys() |
- |
- def __len__(self): |
- return len(self.__data) |
- |
- def __repr__(self): |
- return repr(self.__data) |
- |
- @staticmethod |
- def wrap(val): |
- if isinstance(val, dict): |
- return ObjectDict(val) |
- return val |
- |
- |
-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])] |
- |
- |
-def canonicalize_email(address): |
- """Takes an email address and returns its canonicalized form.""" |
- emails = get_emails(address) |
- assert len(emails) == 1 |
- return emails[0] |