(self, kw)
| 68 | return str(self.path).endswith(arg) |
| 69 | |
| 70 | def _evaluate(self, kw): |
| 71 | from .._code.source import getrawcode |
| 72 | |
| 73 | for name, value in kw.items(): |
| 74 | invert = False |
| 75 | meth = None |
| 76 | try: |
| 77 | meth = getattr(self, name) |
| 78 | except AttributeError: |
| 79 | if name[:3] == class="st">"not": |
| 80 | invert = True |
| 81 | try: |
| 82 | meth = getattr(self, name[3:]) |
| 83 | except AttributeError: |
| 84 | pass |
| 85 | if meth is None: |
| 86 | raise TypeError(fclass="st">"no {name!r} checker available for {self.path!r}") |
| 87 | try: |
| 88 | if getrawcode(meth).co_argcount > 1: |
| 89 | if (not meth(value)) ^ invert: |
| 90 | return False |
| 91 | else: |
| 92 | if bool(value) ^ bool(meth()) ^ invert: |
| 93 | return False |
| 94 | except (error.ENOENT, error.ENOTDIR, error.EBUSY): |
| 95 | class="cm"># EBUSY feels not entirely correct, |
| 96 | class="cm"># but its kind of necessary since ENOMEDIUM |
| 97 | class="cm"># is not accessible in python |
| 98 | for name in self._depend_on_existence: |
| 99 | if name in kw: |
| 100 | if kw.get(name): |
| 101 | return False |
| 102 | name = class="st">"not" + name |
| 103 | if name in kw: |
| 104 | if not kw.get(name): |
| 105 | return False |
| 106 | return True |
| 107 | |
| 108 | _statcache: Stat |
| 109 |
no test coverage detected