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