Added base for all iteratable objects · gitpython-developers/GitPython@f4fa1cb (original) (raw)

Original file line number Diff line number Diff line change
@@ -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 +