| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 5bef7ed commit 3da47c2
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -169,6 +169,8 @@ | |||
| 169 | 169 | IndexEntry, | |
| 170 | 170 | IndexFile, | |
| 171 | 171 | StageType, | |
| 172 | + # NOTE: This tells type checkers what util resolves to. We delete it, and it is | ||
| 173 | + # really resolved by __getattr__, which warns. See below on what to use instead. | ||
| 172 | 174 | util, | |
| 173 | 175 | ) | |
| 174 | 176 | from git.util import ( # @NoMove | |
@@ -183,27 +185,6 @@ | |||
| 183 | 185 | raise ImportError("%s: %s" % (_exc.__class__.__name__, _exc)) from _exc | |
| 184 | 186 | ||
| 185 | 187 | ||
| 186 | - # NOTE: The expression `git.util` evaluates to git.index.util and `from git import util` | ||
| 187 | - # imports git.index.util, NOT git.util. It may not be feasible to change this until the | ||
| 188 | - # next major version, to avoid breaking code inadvertently relying on it. | ||
| 189 | - # | ||
| 190 | - # - If git.index.util *is* what you want, use or import from that, to avoid confusion. | ||
| 191 | - # | ||
| 192 | - # - To use the "real" git.util module, write `from git.util import ...`, or if necessary | ||
| 193 | - # access it as `sys.modules["git.util"]`. | ||
| 194 | - # | ||
| 195 | - # (This differs from other indirect-submodule imports that are unambiguously non-public | ||
| 196 | - # and subject to immediate removal. Here, the public git.util module, though different, | ||
| 197 | - # makes less discoverable that the expression `git.util` refers to a non-public | ||
| 198 | - # attribute of the git module.) | ||
| 199 | - # | ||
| 200 | - # This had come about by a wildcard import. Now that all intended imports are explicit, | ||
| 201 | - # the intuitive but potentially incompatible binding occurs due to the usual rules for | ||
| 202 | - # Python submodule bindings. So for now we delete that and let __getattr__ handle it. | ||
| 203 | - # | ||
| 204 | - del util | ||
| 205 | - | ||
| 206 | - | ||
| 207 | 188 | def _warned_import(message: str, fullname: str) -> "ModuleType": | |
| 208 | 189 | import importlib | |
| 209 | 190 | ||
@@ -242,7 +223,36 @@ def _getattr(name: str) -> Any: | |||
| 242 | 223 | raise AttributeError(f"module {__name__!r} has no attribute {name!r}") | |
| 243 | 224 | ||
| 244 | 225 | ||
| 245 | - if not TYPE_CHECKING: # Preserve static checking for undefined/misspelled attributes. | ||
| 226 | + if not TYPE_CHECKING: | ||
| 227 | + # NOTE: The expression `git.util` gives git.index.util and `from git import util` | ||
| 228 | + # imports git.index.util, NOT git.util. It may not be feasible to change this until | ||
| 229 | + # the next major version, to avoid breaking code inadvertently relying on it. | ||
| 230 | + # | ||
| 231 | + # - If git.index.util *is* what you want, use (or import from) that, to avoid | ||
| 232 | + # confusion. | ||
| 233 | + # | ||
| 234 | + # - To use the "real" git.util module, write `from git.util import ...`, or if | ||
| 235 | + # necessary access it as `sys.modules["git.util"]`. | ||
| 236 | + # | ||
| 237 | + # Note also that `import git.util` technically imports the "real" git.util... but | ||
| 238 | + # the *expression* `git.util` after doing so is still git.index.util! | ||
| 239 | + # | ||
| 240 | + # (This situation differs from that of other indirect-submodule imports that are | ||
| 241 | + # unambiguously non-public and subject to immediate removal. Here, the public | ||
| 242 | + # git.util module, though different, makes less discoverable that the expression | ||
| 243 | + # `git.util` refers to a non-public attribute of the git module.) | ||
| 244 | + # | ||
| 245 | + # This had originally come about by a wildcard import. Now that all intended imports | ||
| 246 | + # are explicit, the intuitive but potentially incompatible binding occurs due to the | ||
| 247 | + # usual rules for Python submodule bindings. So for now we replace that binding with | ||
| 248 | + # git.index.util, delete that, and let __getattr__ handle it and issue a warning. | ||
| 249 | + # | ||
| 250 | + # For the same runtime behavior, it would be enough to forgo importing util, and | ||
| 251 | + # delete util as created naturally; __getattr__ would behave the same. But type | ||
| 252 | + # checkers would not know what util refers to when accessed as an attribute of git. | ||
| 253 | + del util | ||
| 254 | + | ||
| 255 | + # This is "hidden" to preserve static checking for undefined/misspelled attributes. | ||
| 246 | 256 | __getattr__ = _getattr | |
| 247 | 257 | ||
| 248 | 258 | # { Initialize git executable path | |
| Back | FazBrowse Home | New Git URL |
0 commit comments