(resolved, iter_parts_lowercase, cache=_listdir_cache)
| 142 | |
| 143 | |
| 144 | def _resolve_listing(resolved, iter_parts_lowercase, cache=_listdir_cache): |
| 145 | while True: # Note: while True to make iterative and not recursive |
| 146 | try: |
| 147 | resolve_lowercase = next(iter_parts_lowercase) # must be lowercase already |
| 148 | except StopIteration: |
| 149 | return resolved |
| 150 | |
| 151 | resolved_lower = resolved.lower() |
| 152 | |
| 153 | resolved_joined = cache.get((resolved_lower, resolve_lowercase)) |
| 154 | if resolved_joined is None: |
| 155 | dir_contents = cache.get(resolved_lower) |
| 156 | if dir_contents is None: |
| 157 | dir_contents = cache[resolved_lower] = os_listdir(resolved) |
| 158 | |
| 159 | for filename in dir_contents: |
| 160 | if filename.lower() == resolve_lowercase: |
| 161 | resolved_joined = os.path.join(resolved, filename) |
| 162 | cache[(resolved_lower, resolve_lowercase)] = resolved_joined |
| 163 | break |
| 164 | else: |
| 165 | raise FileNotFoundError("Unable to find: %s in %s. Dir Contents: %s" % (resolve_lowercase, resolved, dir_contents)) |
| 166 | |
| 167 | resolved = resolved_joined |
| 168 | |
| 169 | |
| 170 | def _resolve_listing_parts(resolved, parts_in_lowercase, filename): |
no test coverage detected