mirror of
https://github.com/github/codeql.git
synced 2026-04-30 19:26:02 +02:00
Python: Update tests for py/import-own-module
So I've been thinking a bit about import pkg_ok.foo1 after reading the Python references for imports of submodules https://docs.python.org/3/reference/import.html#submodules > When a submodule is loaded using any mechanism (...) a binding is placed in the parent module’s namespace to the submodule object. For example, if package spam has a submodule foo, after importing spam.foo, spam will have an attribute foo which is bound to the submodule. That does at least explain what is going on here. I feel that import pkg_ok.foo1 might be a very contrived example. In principle it should be an alert, since the module pkg_ok ends up with an import of itself, but my gut feeling is that in practice it's not a very important piece of code to give alerts for. if we really care about giving these import related alerts, we could probably add a new query for this pattern, as it's kind of surprising that it works when you're just an ordinary python programmer.
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
| imports_test.py:8:1:8:19 | Import | The module 'imports_test' imports itself. |
|
||||
| pkg_notok/__init__.py:4:1:4:16 | Import | The module 'pkg_notok' imports itself. |
|
||||
| pkg_notok/__init__.py:6:1:6:25 | Import | The module 'pkg_notok' imports itself. |
|
||||
| pkg_notok/__init__.py:7:1:7:37 | Import | The module 'pkg_notok' imports itself. |
|
||||
| pkg_ok/__init__.py:2:1:2:18 | Import | The module 'pkg_ok' imports itself. |
|
||||
| pkg_ok/__init__.py:4:1:4:23 | Import | The module 'pkg_ok' imports itself. |
|
||||
| pkg_ok/__init__.py:5:1:5:28 | Import | The module 'pkg_ok' imports itself. |
|
||||
| pkg_ok/__init__.py:7:1:7:18 | Import | The module 'pkg_ok' imports itself. |
|
||||
| pkg_ok/__init__.py:8:1:8:22 | Import | The module 'pkg_ok' imports itself. |
|
||||
| pkg_notok/__init__.py:10:1:10:20 | Import | The module 'pkg_notok' imports itself. |
|
||||
| pkg_notok/__init__.py:12:1:12:25 | Import | The module 'pkg_notok' imports itself. |
|
||||
| pkg_notok/__init__.py:13:1:13:37 | Import | The module 'pkg_notok' imports itself. |
|
||||
| pkg_ok/__init__.py:1:1:1:26 | Import | The module 'pkg_ok' imports itself. |
|
||||
| pkg_ok/__init__.py:3:1:3:23 | Import | The module 'pkg_ok' imports itself. |
|
||||
| pkg_ok/__init__.py:4:1:4:28 | Import | The module 'pkg_ok' imports itself. |
|
||||
| pkg_ok/__init__.py:6:1:6:18 | Import | The module 'pkg_ok' imports itself. |
|
||||
| pkg_ok/__init__.py:7:1:7:22 | Import | The module 'pkg_ok' imports itself. |
|
||||
|
||||
@@ -3,6 +3,12 @@ class Foo(object):
|
||||
|
||||
import pkg_notok
|
||||
|
||||
# This import is a bit tricky. It will make `bar` available in as `pkg_notok.bar` as a
|
||||
# side effect (see https://docs.python.org/3/reference/import.html#submodules), but the
|
||||
# *import* will add a binding to `pkg_notok` to the current scope -- so technically the
|
||||
# module imports itself.
|
||||
import pkg_notok.bar
|
||||
|
||||
from pkg_notok import Foo
|
||||
from pkg_notok import Foo as NotOkFoo
|
||||
from pkg_notok import * # TODO: TN
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
class Bar():
|
||||
pass
|
||||
@@ -1,5 +1,4 @@
|
||||
# This import makes `pkg_ok` available, but also `foo1` (surprising as it may be)
|
||||
import pkg_ok.foo1 # TODO: FP
|
||||
import pkg_ok.foo1 as foo1 # TODO: FP
|
||||
|
||||
from pkg_ok import foo2 # TODO: FP
|
||||
from pkg_ok.foo3 import Foo3 # TODO: FP
|
||||
|
||||
Reference in New Issue
Block a user