(self, key, user)
| 77 | |
| 78 | @contextlib.contextmanager |
| 79 | def usage(self, key, user): |
| 80 | def _preiter(first, iterable): |
| 81 | yield first |
| 82 | for item in iterable: |
| 83 | yield item |
| 84 | |
| 85 | em = {} |
| 86 | em['keyid'] = key.fingerprint.keyid |
| 87 | em['flags'] = ', '.join(flag.name for flag in self.flags) |
| 88 | |
| 89 | if len(self.flags): |
| 90 | for _key in _preiter(key, key.subkeys.values()): |
| 91 | if self.flags & set(_key._get_key_flags(user)): |
| 92 | break |
| 93 | |
| 94 | else: # pragma: no cover |
| 95 | warning = "Key {keyid:s} does not have the required usage flag {flags:s}".format(**em) |
| 96 | if key._require_usage_flags: |
| 97 | raise PGPError(warning) |
| 98 | else: |
| 99 | logging.warning(warning) |
| 100 | |
| 101 | else: |
| 102 | _key = key |
| 103 | |
| 104 | if _key is not key: |
| 105 | em['subkeyid'] = _key.fingerprint.keyid |
| 106 | logging.debug("Key {keyid:s} does not have the required usage flag {flags:s}; using subkey {subkeyid:s}" |
| 107 | "".format(**em)) # TODO: consider adding stacklevel=4 when we only support Python >= 3.8 |
| 108 | |
| 109 | yield _key |
| 110 | |
| 111 | def check_attributes(self, key): |
| 112 | for attr, expected in self.conditions.items(): |
no test coverage detected