[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-11-10 Thread Terry J. Reedy

Changes by Terry J. Reedy :


--
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-11-10 Thread Terry J. Reedy

Terry J. Reedy added the comment:

Import is only needed for the warning issued when someone using IDLE 2.x puts a 
non-ascii character into code being edited and tries to save without adding an 
encoding declaration.  
https://stackoverflow.com/questions/40523932/idle-2-7-11-12-nameerror-global-name-toplevel-is-not-defined

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-11-10 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 137c7b92360e by Terry Jan Reedy in branch '2.7':
Issue #25507: Add back import needed for 2.x encoding warning box.
https://hg.python.org/cpython/rev/137c7b92360e

--
status: pending -> open

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-16 Thread Terry J. Reedy

Terry J. Reedy added the comment:

I am thinking about addin a test.

--
status: closed -> pending

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-16 Thread Terry J. Reedy

Terry J. Reedy added the comment:

PS: the test suite run without error on my Win10, 32bit build.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-16 Thread Terry J. Reedy

Terry J. Reedy added the comment:

I decided to fix this issue for both 3.5 and 3.6 by deleting the submodules 
both from tkinter and sys.modules (as discussed in #27515).
I used a new version of tkimports.py to check the result of user imports after 
the patch.  When this file loaded into IDLE and run with F5, the dir listing 
for each submodule, after previous import and deletion in run startup, is the 
same as when the file is run with " tkimports".

I opened #27534 to continue run import reduction.  I consider 93d325c64104 and 
run_autocomplete.diff to be part of that issue.

--
resolution:  -> fixed
stage: needs patch -> resolved
status: open -> closed
Added file: http://bugs.python.org/file43761/tkimports.py

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-15 Thread Terry J. Reedy

Terry J. Reedy added the comment:

run_autocomplete.diff is a preliminary patch for moving the completion list 
function into run.py and reversing the imports.  However, the assert in 
test_autocomplete, line 103 newly fails because the call to open_completions in 
autocomplete_event (line 85) returns None.  The None comes from l. 155.
comp_lists = self.fetch_completions(comp_what, mode)
if not comp_lists[0]:
return None
I do not yet know why moving the one function causes the completion lists for 
re to be blank. I am going to shelve this approach and return to deletion.

--
keywords: +patch
Added file: http://bugs.python.org/file43742/run_autocomplete.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-15 Thread Terry J. Reedy

Terry J. Reedy added the comment:

In #27515, Nick Coughlin said that 'del a.b', would work if sys.modules('a.b') 
is also deleted -- unless a.b objects to being reloaded.  This seems not a 
problem for the current 8 tkinter submodules.  The attached tkimports.py runs 
without error.

I am not going to patch 2.7, which does not have the bug, just for the import 
reduction.  The last patch could be applied to 3.5 since it does not remove 
anything from PyShell.  Putting the three warning functions in a class and 
making the warning global a class attribute (a future issue) would be a 
different matter.

--
versions:  -Python 2.7
Added file: http://bugs.python.org/file43736/tkimports.py

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-15 Thread Terry J. Reedy

Terry J. Reedy added the comment:

First step.  Patch moves 4 objects from pyshell to run and reverses run 
importing pyshell to pyshell importing run.  This initially failed because run 
imports stackbrowser and the stackbrowser import of something from pyshell 
failed.  Since the import is only needed for htest, I just moved it into the 
htest code.  Removing 'import pyshell' from run avoids 'import 
tkinter.messagebox' in pyshell.  It also reduces len(sys.modules) in the user 
process by 37 from 193 to 156.

--
assignee:  -> terry.reedy
stage: test needed -> needs patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-15 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 93d325c64104 by Terry Jan Reedy in branch 'default':
Issue #25507: Move 4 objects from pyshell to run and switch inports.
https://hg.python.org/cpython/rev/93d325c64104

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-14 Thread Terry J. Reedy

Terry J. Reedy added the comment:

The SO question and that brought the problem to my attention was in June 2015. 
https://stackoverflow.com/questions/30877112/tkinter-code-using-font-module-cant-run-from-command-line.
  The message I just unlinked had the wrong url.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-14 Thread Terry J. Reedy

Changes by Terry J. Reedy :


--
Removed message: http://bugs.python.org/msg259039

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-09 Thread Terry J. Reedy

Terry J. Reedy added the comment:

https://stackoverflow.com/questions/38276691/tkinter-nameerror-only-when-running-script-from-shell
  same problem with filedialog.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-07-07 Thread Terry J. Reedy

Terry J. Reedy added the comment:

According to 
https://stackoverflow.com/questions/38249755/tkinter-not-working-in-cmd-working-in-idle,
 this code

from tkinter import filedialog
root = Tk()

ran in 3.4.3.  After the patch for 3.5.1 (and 3.4.4, 2.7.11) it raises 
NameError in 3.5.2.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-02-25 Thread Terry J. Reedy

Terry J. Reedy added the comment:

'import tkinter; tkinter.messagebox' should also fail, but currently work in 
IDLE.  See 
https://stackoverflow.com/questions/35619027/sub-import-issues-with-tkinter-messagebox,
 and my answer there.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-01-27 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 34ca24fa1b4a by Terry Jan Reedy in branch '2.7':
Issue #25507: revert incorrect movement of idleConf import in a37ea1d56e98.
https://hg.python.org/cpython/rev/34ca24fa1b4a

New changeset 86105a109830 by Terry Jan Reedy in branch '3.5':
Issue #25507: revert incorrect movement of idleConf import in c548ad75160c.
https://hg.python.org/cpython/rev/86105a109830

--
nosy: +python-dev

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-01-27 Thread Terry J. Reedy

Changes by Terry J. Reedy :


--
versions:  -Python 3.4

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-01-27 Thread Terry J. Reedy

Terry J. Reedy added the comment:

Ouch.  Moving the idleConf import was a blunder.  It disabled printing in 
2.7.11, 3.4.4, and 3.5.1.  When I revert, I will also augment the htest to test 
the printing and save-as functions.  Still have to remember to run it though.

This sort of functional test is not the main intended use of htests.  When 
refactoring for this issue, automated tests should be added, with mocks used to 
avoid consequential actions that cannot be part of a buildbot test.  For 
print_window, '''pipe = os.popen(command, "r")''' 
(https://hg.python.org/cpython/file/tip/Lib/idlelib/IOBinding.py#l463) should 
be replaced by '''pipe = runcommand(command)''' and 'def runcommand(command): 
return os.pipe(command, 'r')''' (with subprocess used instead?) added at module 
level.  Then runcommand can be replaced by a mock when testing, and the value 
of the passed command checked.

--
nosy:  -python-dev

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2016-01-27 Thread Terry J. Reedy

Terry J. Reedy added the comment:

Problem was reported here 
https://stackoverflow.com/questions/35021370/i-cant-print-from-python-idle-in-windows-10

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2015-10-30 Thread Roundup Robot

Roundup Robot added the comment:

New changeset a37ea1d56e98 by Terry Jan Reedy in branch '2.7':
Issue #25507: move test-specific imports to test function (idlelib.IOBinding).
https://hg.python.org/cpython/rev/a37ea1d56e98

New changeset 38b6b7253ba1 by Terry Jan Reedy in branch '3.4':
Issue #25507: move test-specific imports to test function (idlelib.IOBinding).
https://hg.python.org/cpython/rev/38b6b7253ba1

--
nosy: +python-dev

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2015-10-29 Thread Mark Roseman

Mark Roseman added the comment:

This (restructuring/refactoring to minimize the subprocess imports) does 
definitely sound like the right approach. There will be other benefits to 
breaking up PyShell a bit too..

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2015-10-29 Thread Terry J. Reedy

New submission from Terry J. Reedy:

In python, 'import tkinter; tkinter.font' fails with AttributeError.  In IDLE, 
it does not, which is a bug,  This lead to a Stackoverflow question 'Why does 
my code run in IDLE but not with Python'?

The issue is that importing modules in a package has the side-effect of adding 
the module name to the package namespace.  IDLE's user process runs 
idlelib/run.py.  While *run* does not import tkinter submodules, it imports 
other modules that do, and the net effect is to add colorchooser, commondialog, 
dialog, filedialog, font, messagebox, and simpledialog to the tkinter 
namespace, linked to the corresponding module objects.  None are needed in 
normal operation.

My first thought was to refactor so that the additions, which run does not 
need, are not added.  My second thought seemed simpler.  Delete them (in 
run.py) after the imports.  But it turns out that after deleting a submodule 
attribute re-import does not work right; the name addition only happens when a 
module is created, not when found in the sys.modules cache.

>>> import tkinter; import tkinter.font  # imagine this in run.py
>>> tkinter.font

>>> del tkinter.font  # and this in run also, after all imports
>>> import tkinter.font  # imagine this in user code
>>> tkinter.font  # and then this
Traceback (most recent call last):  # it does not work as it should
  File "", line 1, in 
AttributeError: module 'tkinter' has no attribute 'font'

Scratch that idea, and return to refactoring.  An obvious culprit in run.py is 
the import of PyShell.  This leads to the import of nearly all of idlelib.  
However, there are only 4 shared objects actually used, and I believe they 
could just as well be defined in run (or even in rpc.py or something) and 
imported from run into PyShell.  Then the PyShell import could be deleted.  I 
still need to look at the other imports.

On startup, user sys.modules also has about 50 other (non-idlelib) stdlib 
modules not imported by python itself.  Not importing PyShell in the 2nd 
process should reduce this number and speed up IDLE startup, which takes 
several seconds, first time after boot up, on Windows.  It would be good to 
only import into the user process what is actually needed.

(Initially importing into the idle process only what is needed to start would 
also be good, but a separate issue.)

In 2.7, Tkinter is not a package, so I do not believe it is directly affected 
by this issue.  On the other hand, it also imports too much.  So backporting 
changes to keep things mostly synchronized should benefit 2.7 startup time also.

--
messages: 253671
nosy: markroseman, terry.reedy
priority: normal
severity: normal
stage: needs patch
status: open
title: IDLE: user code 'import tkinter; tkinter.font' should fail
type: behavior
versions: Python 2.7, Python 3.4, Python 3.5, Python 3.6

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2015-10-29 Thread Terry J. Reedy

Terry J. Reedy added the comment:

#8231 will benefit if indirect imports of configHandler and idleConf into the 
user process can be eliminated.  I do not currently believe it is needed.  Not 
importing PyShell will go part way.

AutoComplete imports idleConf to get the popup delay. run imports AutoComplete 
to access fetch_completions -- in particular, the part after 'else', after the 
logic to determine which process the code is in and if in the idle process, 
whether to fetch in the idle process (-n) or user process.  Fetch_completions 
is a function and not properly a method -- it only uses self to access 
get_entity.  Get_entity is a two line function the also should not be a method. 
 It is only called at the one place and the only reason to not put in inline 
would be for testing.  The code after 'else' could be made a function in a 
separate module and the AutoComplete import eliminated.

CallTip does not import idleConf, nor does CallTipWindow or HyperParser or 
PyParse.

--
components: +IDLE

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2015-10-29 Thread Terry J. Reedy

Terry J. Reedy added the comment:

The subprocess command is built in PyShell.ModifiedInterpreter method 
build_subprocess_arglist (l.404). It imports run and calls run.main(args).

The test for this issue would be to import run and check that sys.modules does 
not contain configHandler and that tkinter does not contain any of its possible 
submodules.

--
stage: needs patch -> test needed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25507] IDLE: user code 'import tkinter; tkinter.font' should fail

2015-10-29 Thread Terry J. Reedy

Terry J. Reedy added the comment:

To continue: CallTips.Calltips has a similar here-or-there logic that decides 
where to execute the actual get-calltip-logic.  In this case,  get_entity and 
get_argspec are already functions rather than methods (I changed get_entity 
from method to function in 02b4c62ce393.) The functions could be moved into a 
different module with the completions function.

RemoteDebugger imports Debugger which imports WindowList, ScrolledList, and 
macosxSupport, all without idleConf imports.

RemoteObjectBrowser import rpc, both without idleConf.  run also imports rpc.

StackViewer imports TreeWidget and ObjectBrowser, which are not issues.  It 
also imports PyShell for PyShellFileList, which would be an issue, except that 
this is only for the htest function _stack_viewer.  I will move the 
test-specific import into the function, as is my current policy.

IOBinding is imported for IOBinding.encoding. The code that calculates this 
could be put anywhere.  This is fortunate because IOBinding imports idleConf 
and three tkinter modules.

Conclusion: moving about 2-300 lines of code (about 6 objects) from PyShell, 
AutoComplete, and IOBinding into run (currently about 400 lines) would 
eliminate idleConf from the user process.  I did not check tkinter imports for 
all the above, but it might also fix the tkinter namespace problem.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com