@@ -27,6 +27,12 @@ def is_git_dir(d):
|
27 | 27 | |
28 | 28 | |
29 | 29 | class LazyMixin(object): |
| 30 | +""" |
| 31 | + Base class providing an interface to lazily retrieve attribute values upon |
| 32 | + first access. If slots are used, memory will only be reserved once the attribute |
| 33 | + is actually accessed and retrieved the first time. All future accesses will |
| 34 | + return the cached value as stored in the Instance's dict or slot. |
| 35 | + """ |
30 | 36 | __slots__ = tuple() |
31 | 37 | |
32 | 38 | def __getattr__(self, attr): |
@@ -49,3 +55,35 @@ def _set_cache_(self, attr):
|
49 | 55 | in the single attribute.""" |
50 | 56 | pass |
51 | 57 | |
| 58 | + |
| 59 | +class Iterable(object): |
| 60 | +""" |
| 61 | + Defines an interface for iterable items which is to assure a uniform |
| 62 | + way to retrieve and iterate items within the git repository |
| 63 | + """ |
| 64 | +__slots__ = tuple() |
| 65 | + |
| 66 | +@classmethod |
| 67 | +def list_items(cls, repo, *args, **kwargs): |
| 68 | +""" |
| 69 | + Find all items of this type - subclasses can specify args and kwargs differently. |
| 70 | + If no args are given, subclasses are obliged to return all items if no additional |
| 71 | + arguments arg given. |
| 72 | + |
| 73 | + Note: Favor the iter_items method as it will |
| 74 | + |
| 75 | + Returns: |
| 76 | + list(Item,...) list of item instances |
| 77 | + """ |
| 78 | +return list(cls.iter_items, repo, *args, **kwargs) |
| 79 | + |
| 80 | + |
| 81 | +@classmethod |
| 82 | +def iter_items(cls, repo, *args, **kwargs): |
| 83 | +""" |
| 84 | + For more information about the arguments, see find_all |
| 85 | + Return: |
| 86 | + iterator yielding Items |
| 87 | + """ |
| 88 | +raise NotImplementedError("To be implemented by Subclass") |
| 89 | + |