Provide an iterator object.
(self)
| 2724 | return member |
| 2725 | |
| 2726 | def __iter__(self): |
| 2727 | """Provide an iterator object. |
| 2728 | """ |
| 2729 | if self._loaded: |
| 2730 | yield from self.members |
| 2731 | return |
| 2732 | |
| 2733 | # Yield items using TarFile's next() method. |
| 2734 | # When all members have been read, set TarFile as _loaded. |
| 2735 | index = 0 |
| 2736 | # Fix for SF #1100429: Under rare circumstances it can |
| 2737 | # happen that getmembers() is called during iteration, |
| 2738 | # which will have already exhausted the next() method. |
| 2739 | if self.firstmember is not None: |
| 2740 | tarinfo = self.next() |
| 2741 | index += 1 |
| 2742 | yield tarinfo |
| 2743 | |
| 2744 | while True: |
| 2745 | if index < len(self.members): |
| 2746 | tarinfo = self.members[index] |
| 2747 | elif not self._loaded: |
| 2748 | tarinfo = self.next() |
| 2749 | if not tarinfo: |
| 2750 | self._loaded = True |
| 2751 | return |
| 2752 | else: |
| 2753 | return |
| 2754 | index += 1 |
| 2755 | yield tarinfo |
| 2756 | |
| 2757 | def _dbg(self, level, msg): |
| 2758 | """Write debugging output to sys.stderr. |