Provide an iterator object.
(self)
| 2984 | return member |
| 2985 | |
| 2986 | def __iter__(self): |
| 2987 | """Provide an iterator object. |
| 2988 | """ |
| 2989 | if self._loaded: |
| 2990 | yield from self.members |
| 2991 | return |
| 2992 | |
| 2993 | # Yield items using TarFile's next() method. |
| 2994 | # When all members have been read, set TarFile as _loaded. |
| 2995 | index = 0 |
| 2996 | # Fix for SF #1100429: Under rare circumstances it can |
| 2997 | # happen that getmembers() is called during iteration, |
| 2998 | # which will have already exhausted the next() method. |
| 2999 | if self.firstmember is not None: |
| 3000 | tarinfo = self.next() |
| 3001 | index += 1 |
| 3002 | yield tarinfo |
| 3003 | |
| 3004 | while True: |
| 3005 | if index < len(self.members): |
| 3006 | tarinfo = self.members[index] |
| 3007 | elif not self._loaded: |
| 3008 | tarinfo = self.next() |
| 3009 | if not tarinfo: |
| 3010 | self._loaded = True |
| 3011 | return |
| 3012 | else: |
| 3013 | return |
| 3014 | index += 1 |
| 3015 | yield tarinfo |
| 3016 | |
| 3017 | def _dbg(self, level, msg): |
| 3018 | """Write debugging output to sys.stderr. |