See new for what 'spec' can be.
(self, spec: str)
| 678 | return obj |
| 679 | |
| 680 | def _getbyspec(self, spec: str) -> list[str]: |
| 681 | """See new for what 'spec' can be.""" |
| 682 | res = [] |
| 683 | parts = self.strpath.split(self.sep) |
| 684 | |
| 685 | args = filter(None, spec.split(",")) |
| 686 | for name in args: |
| 687 | if name == "drive": |
| 688 | res.append(parts[0]) |
| 689 | elif name == "dirname": |
| 690 | res.append(self.sep.join(parts[:-1])) |
| 691 | else: |
| 692 | basename = parts[-1] |
| 693 | if name == "basename": |
| 694 | res.append(basename) |
| 695 | else: |
| 696 | i = basename.rfind(".") |
| 697 | if i == -1: |
| 698 | purebasename, ext = basename, "" |
| 699 | else: |
| 700 | purebasename, ext = basename[:i], basename[i:] |
| 701 | if name == "purebasename": |
| 702 | res.append(purebasename) |
| 703 | elif name == "ext": |
| 704 | res.append(ext) |
| 705 | else: |
| 706 | raise ValueError(f"invalid part specification {name!r}") |
| 707 | return res |
| 708 | |
| 709 | def dirpath(self, *args, **kwargs): |
| 710 | """Return the directory path joined with any given path arguments.""" |