Provide an iterator object.
(self)
| 2959 | return member |
| 2960 | |
| 2961 | def __iter__(self): |
| 2962 | """Provide an iterator object. |
| 2963 | """ |
| 2964 | if self._loaded: |
| 2965 | yield from self.members |
| 2966 | return |
| 2967 | |
| 2968 | # Yield items using TarFile's next() method. |
| 2969 | # When all members have been read, set TarFile as _loaded. |
| 2970 | index = 0 |
| 2971 | # Fix for SF #1100429: Under rare circumstances it can |
| 2972 | # happen that getmembers() is called during iteration, |
| 2973 | # which will have already exhausted the next() method. |
| 2974 | if self.firstmember is not None: |
| 2975 | tarinfo = self.next() |
| 2976 | index += 1 |
| 2977 | yield tarinfo |
| 2978 | |
| 2979 | while True: |
| 2980 | if index < len(self.members): |
| 2981 | tarinfo = self.members[index] |
| 2982 | elif not self._loaded: |
| 2983 | tarinfo = self.next() |
| 2984 | if not tarinfo: |
| 2985 | self._loaded = True |
| 2986 | return |
| 2987 | else: |
| 2988 | return |
| 2989 | index += 1 |
| 2990 | yield tarinfo |
| 2991 | |
| 2992 | def _dbg(self, level, msg): |
| 2993 | """Write debugging output to sys.stderr. |