Skip to content

Commit

Permalink
Fix deletion of egg assets in Windows. Ensure PYTHONPATH references M…
Browse files Browse the repository at this point in the history
…ODULE_DIR.
  • Loading branch information
ntoll committed Mar 21, 2019
1 parent e20976f commit 3393a2c
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 3 deletions.
2 changes: 1 addition & 1 deletion mu/interface/dialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ def remove_package(self):
with open(record) as f:
files = f.readlines()
for row in files:
to_delete = os.path.join(info, row)
to_delete = os.path.join(info, row.strip())
try:
os.remove(to_delete)
except Exception as ex:
Expand Down
10 changes: 9 additions & 1 deletion mu/modes/python3.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import sys
import os
import logging
from mu.logic import MODULE_DIR
from mu.modes.base import BaseMode
from mu.modes.api import PYTHON3_APIS, SHARED_APIS, PI_APIS
from mu.resources import load_icon
Expand Down Expand Up @@ -65,7 +66,14 @@ def start_kernel(self):
# Ensure the expected paths are in PYTHONPATH of the subprocess so the
# kernel and Mu-installed third party applications can be found.
if 'PYTHONPATH' not in os.environ:
os.environ['PYTHONPATH'] = os.pathsep.join(sys.path)
paths = sys.path + [MODULE_DIR, ]
os.environ['PYTHONPATH'] = os.pathsep.join(paths)
if MODULE_DIR not in os.environ['PYTHONPATH']:
# This is needed on Windows to ensure user installed third party
# packages are available in the REPL.
new_path = os.pathsep.join([os.environ['PYTHONPATH'], MODULE_DIR])
os.environ['PYTHONPATH'] = new_path
logger.info("REPL PYTHONPATH: {}".format(os.environ['PYTHONPATH']))
self.repl_kernel_manager = QtKernelManager()
self.repl_kernel_manager.start_kernel()
self.repl_kernel_client = self.repl_kernel_manager.client()
Expand Down
38 changes: 37 additions & 1 deletion tests/modes/test_python3.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import os
from mu.modes.python3 import PythonMode, KernelRunner
from mu.modes.api import PYTHON3_APIS, SHARED_APIS, PI_APIS
from mu.logic import MODULE_DIR
from unittest import mock


Expand Down Expand Up @@ -35,7 +36,42 @@ def test_kernel_runner_start_kernel():
kr.start_kernel()
mock_os.chdir.assert_called_once_with('/a/path/to/mu_code')
assert mock_os.environ['name'] == 'value'
assert mock_os.environ['PYTHONPATH'] == os.pathsep.join(sys.path)
expected_paths = sys.path + [MODULE_DIR, ]
assert mock_os.environ['PYTHONPATH'] == os.pathsep.join(expected_paths)
assert kr.repl_kernel_manager == mock_kernel_manager
mock_kernel_manager_class.assert_called_once_with()
mock_kernel_manager.start_kernel.assert_called_once_with()
assert kr.repl_kernel_client == mock_client
kr.kernel_started.emit.assert_called_once_with(mock_kernel_manager,
mock_client)


def test_kernel_runner_start_kernel_pythonpath_exists():
"""
Ensure that MODULE_DIR is added to the existing PYTHONPATH
"""
mock_kernel_manager = mock.MagicMock()
mock_client = mock.MagicMock()
mock_kernel_manager.client.return_value = mock_client
envars = [['name', 'value'], ]
kr = KernelRunner(cwd='/a/path/to/mu_code', envars=envars)
kr.kernel_started = mock.MagicMock()
mock_os = mock.MagicMock()
mock_os.environ = {'PYTHONPATH': 'foo'}
mock_os.pathsep = os.pathsep
mock_os.path.dirname.return_value = ('/Applications/mu-editor.app'
'/Contents/Resources/app/mu')
mock_kernel_manager_class = mock.MagicMock()
mock_kernel_manager_class.return_value = mock_kernel_manager
with mock.patch('mu.modes.python3.os', mock_os), \
mock.patch('mu.modes.python3.QtKernelManager',
mock_kernel_manager_class), \
mock.patch('sys.platform', 'darwin'):
kr.start_kernel()
mock_os.chdir.assert_called_once_with('/a/path/to/mu_code')
assert mock_os.environ['name'] == 'value'
expected_paths = ['foo', ] + [MODULE_DIR, ]
assert mock_os.environ['PYTHONPATH'] == os.pathsep.join(expected_paths)
assert kr.repl_kernel_manager == mock_kernel_manager
mock_kernel_manager_class.assert_called_once_with()
mock_kernel_manager.start_kernel.assert_called_once_with()
Expand Down

0 comments on commit 3393a2c

Please sign in to comment.