Skip to content

Commit f4fa1cb

Browse files
committed
Added base for all iteratable objects
1 parent 5eb0f2c commit f4fa1cb

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

lib/git/utils.py

+38
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ def is_git_dir(d):
2727

2828

2929
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+
"""
3036
__slots__ = tuple()
3137

3238
def __getattr__(self, attr):
@@ -49,3 +55,35 @@ def _set_cache_(self, attr):
4955
in the single attribute."""
5056
pass
5157

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+

0 commit comments

Comments
 (0)