(pattern_parts, flavour)
| 279 | # |
| 280 | |
| 281 | def _make_selector(pattern_parts, flavour): |
| 282 | pat = pattern_parts[0] |
| 283 | child_parts = pattern_parts[1:] |
| 284 | if not pat: |
| 285 | return _TerminatingSelector() |
| 286 | if pat == '**': |
| 287 | cls = _RecursiveWildcardSelector |
| 288 | elif '**' in pat: |
| 289 | raise ValueError("Invalid pattern: '**' can only be an entire path component") |
| 290 | elif _is_wildcard_pattern(pat): |
| 291 | cls = _WildcardSelector |
| 292 | else: |
| 293 | cls = _PreciseSelector |
| 294 | return cls(pat, child_parts, flavour) |
| 295 | |
| 296 | if hasattr(functools, "lru_cache"): |
| 297 | _make_selector = functools.lru_cache()(_make_selector) |
no test coverage detected