Message389538
fix _PyRun_SimpleFileObject create __main__ module and cache. Call this function multiple times, the attributes stored in the module dict will affect eachother.
create __main__ module, and cache it.
for example.
if we run fileA, call _PyRun_SimpleFileObject will create __main__ module, fileA add some attribute in __main__ module dict.
now we run fileB. call _PyRun_SimpleFileObject will load cached __main__ module. now in __main__ module dict, we can get fileA's attribute.
dir(module), We got unexpected results
```
for name in dir(module):
...
```
in unittest, if we execute test, and don't exit. (unittest main.py TestProgram), set exit=False.
```
def __init__(self, module='__main__', defaultTest=None, argv=None,
testRunner=None, testLoader=loader.defaultTestLoader,
exit=True, verbosity=1, failfast=None, catchbreak=None,
buffer=None, warnings=None, *, tb_locals=False):
```
then when unittest load tests. if we use _PyRun_SimpleFileObject to run unittest, it will Repeated load test cases
```
for name in dir(module):
obj = getattr(module, name)
if isinstance(obj, type) and issubclass(obj, case.TestCase):
tests.append(self.loadTestsFromTestCase(obj))
```
```
int
_PyRun_SimpleFileObject(FILE *fp, PyObject *filename, int closeit,
PyCompilerFlags *flags)
{
PyObject *m, *d, *v;
int set_file_name = 0, ret = -1;
m = PyImport_AddModule("__main__");
if (m == NULL)
return -1;
Py_INCREF(m);
d = PyModule_GetDict(m);
``` |
|
Date |
User |
Action |
Args |
2021-03-26 03:57:12 | JunyiXie | set | recipients:
+ JunyiXie |
2021-03-26 03:57:11 | JunyiXie | set | messageid: <1616731031.99.0.476866477615.issue43629@roundup.psfhosted.org> |
2021-03-26 03:57:11 | JunyiXie | link | issue43629 messages |
2021-03-26 03:57:11 | JunyiXie | create | |
|