Skip to content

Commit

Permalink
Python 2 fix: ImportError doesn't have .name
Browse files Browse the repository at this point in the history
So just parse it manually
  • Loading branch information
patricksnape committed Dec 3, 2017
1 parent f6c9a23 commit 2aea31e
Show file tree
Hide file tree
Showing 11 changed files with 44 additions and 21 deletions.
25 changes: 24 additions & 1 deletion menpo/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,9 @@ class MenpoMissingDependencyError(ImportError):
"""
def __init__(self, package_name):
super(MenpoMissingDependencyError, self).__init__()
if isinstance(package_name, ImportError):
package_name = self._handle_importerror(package_name)

self.message = textwrap.dedent("""
You need to install the '{pname}' package in order to use this
functionality. We recommend that you use conda to achieve this -
Expand All @@ -350,10 +353,30 @@ def __init__(self, package_name):
Failing that, try installing use pip:
pip install {pname}
Note that some packages (e.g. scikit-image) may have a different
name on pypi/conda than their import (skimage) and thus the above
commands may fail.
""".format(pname=package_name))

self.missing_name = package_name

def _handle_importerror(self, error):
if hasattr(error, 'name'):
return error.name
else:
try:
# Python 2 doesn't have ModuleNotFoundError
# (so doesn't have the name attribute)
base_name = error.message.split('No module named ')[1]
# Furthermore - the default ImportError includes the full path
# so we split the name and return just the first part
# (presumably the name of the package)
return base_name.split('.')[0]
except:
# Worst case, just stringify the error
return str(error)

def __str__(self):
return self.message

Expand Down Expand Up @@ -713,7 +736,7 @@ def view_widget(self):
from menpowidgets import view_widget
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)
else:
return view_widget(self)

Expand Down
2 changes: 1 addition & 1 deletion menpo/feature/optional/vlfeat.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
try:
from cyvlfeat.sift.dsift import dsift as cyvlfeat_dsift
except ImportError as e:
raise MenpoMissingDependencyError(e.name)
raise MenpoMissingDependencyError(e)


@winitfeature
Expand Down
2 changes: 1 addition & 1 deletion menpo/image/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -850,7 +850,7 @@ def view_widget(self, figure_size=(7, 7)):
view_widget(self, figure_size=figure_size)
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)

def _view_landmarks_2d(self, channels=None, group=None,
with_labels=None, without_labels=None,
Expand Down
4 changes: 2 additions & 2 deletions menpo/landmark/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ def _view_widget_2d(self, figure_size=(7, 7)):
view_widget(self, figure_size=figure_size)
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)

def _view_widget_3d(self):
r"""
Expand All @@ -328,7 +328,7 @@ def _view_widget_3d(self):
view_widget(self)
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)

def __str__(self):
out_string = '{}: n_groups: {}'.format(type(self).__name__,
Expand Down
8 changes: 4 additions & 4 deletions menpo/model/pca.py
Original file line number Diff line number Diff line change
Expand Up @@ -834,7 +834,7 @@ def plot_eigenvalues_widget(self, figure_size=(10, 6), style='coloured'):
from menpowidgets import plot_graph
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)
plot_graph(x_axis=range(self.n_active_components),
y_axis=[self.eigenvalues], legend_entries=['Eigenvalues'],
figure_size=figure_size, style=style)
Expand Down Expand Up @@ -983,7 +983,7 @@ def plot_eigenvalues_ratio_widget(self, figure_size=(10, 6),
from menpowidgets import plot_graph
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)
plot_graph(x_axis=range(self.n_active_components),
y_axis=[self.eigenvalues_ratio()],
legend_entries=['Eigenvalues ratio'],
Expand Down Expand Up @@ -1139,7 +1139,7 @@ def plot_eigenvalues_cumulative_ratio_widget(self, figure_size=(10, 6),
from menpowidgets import plot_graph
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)
plot_graph(x_axis=range(self.n_active_components),
y_axis=[self.eigenvalues_cumulative_ratio()],
legend_entries=['Eigenvalues cumulative ratio'],
Expand Down Expand Up @@ -1446,7 +1446,7 @@ def view_widget(self, figure_size=(7, 7)):
view_widget(self, figure_size=figure_size)
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)

def __str__(self):
str_out = 'PCA Model \n' \
Expand Down
2 changes: 1 addition & 1 deletion menpo/shape/graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -2365,7 +2365,7 @@ def _view_3d(self, figure_id=None, new_figure=True, render_lines=True,
return renderer
except ImportError as e:
from menpo.visualize import Menpo3dMissingError
raise Menpo3dMissingError(e.name)
raise Menpo3dMissingError(e)


class PointUndirectedGraph(PointGraph, UndirectedGraph):
Expand Down
6 changes: 3 additions & 3 deletions menpo/shape/labelled.py
Original file line number Diff line number Diff line change
Expand Up @@ -767,7 +767,7 @@ def _view_3d(self, with_labels=None, without_labels=None, group='group',
numbers_colour=numbers_colour, numbers_size=numbers_size)
except ImportError as e:
from menpo.visualize import Menpo3dMissingError
raise Menpo3dMissingError(e.name)
raise Menpo3dMissingError(e)

@viewwrapper
def view_widget(self, ):
Expand All @@ -793,7 +793,7 @@ def _view_widget_2d(self, figure_size=(7, 7)):
view_widget(self, figure_size=figure_size)
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)

def _view_widget_3d(self):
r"""
Expand All @@ -805,7 +805,7 @@ def _view_widget_3d(self):
view_widget(self)
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)

def __str__(self):
return '{}: n_labels: {}, n_points: {}, n_edges: {}'.format(
Expand Down
2 changes: 1 addition & 1 deletion menpo/shape/mesh/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1178,4 +1178,4 @@ def _view_3d(self, figure_id=None, new_figure=True, mesh_type='wireframe',
return renderer
except ImportError as e:
from menpo.visualize import Menpo3dMissingError
raise Menpo3dMissingError(e.name)
raise Menpo3dMissingError(e)
4 changes: 2 additions & 2 deletions menpo/shape/mesh/coloured.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ def _view_3d(self, figure_id=None, new_figure=True, render_texture=True,
return renderer
except ImportError as e:
from menpo.visualize import Menpo3dMissingError
raise Menpo3dMissingError(e.name)
raise Menpo3dMissingError(e)
else:
try:
from menpo3d.visualize import TriMeshViewer3d
Expand All @@ -335,7 +335,7 @@ def _view_3d(self, figure_id=None, new_figure=True, render_texture=True,
return renderer
except ImportError as e:
from menpo.visualize import Menpo3dMissingError
raise Menpo3dMissingError(e.name)
raise Menpo3dMissingError(e)

def _view_2d(self, figure_id=None, new_figure=False, image_view=True,
render_lines=True, line_colour='r', line_style='-',
Expand Down
4 changes: 2 additions & 2 deletions menpo/shape/mesh/textured.py
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ def _view_3d(self, figure_id=None, new_figure=True, render_texture=True,
return renderer
except ImportError as e:
from menpo.visualize import Menpo3dMissingError
raise Menpo3dMissingError(e.name)
raise Menpo3dMissingError(e)
else:
try:
from menpo3d.visualize import TriMeshViewer3d
Expand All @@ -387,7 +387,7 @@ def _view_3d(self, figure_id=None, new_figure=True, render_texture=True,
return renderer
except ImportError as e:
from menpo.visualize import Menpo3dMissingError
raise Menpo3dMissingError(e.name)
raise Menpo3dMissingError(e)

def _view_2d(self, figure_id=None, new_figure=False, image_view=True,
render_lines=True, line_colour='r', line_style='-',
Expand Down
6 changes: 3 additions & 3 deletions menpo/shape/pointcloud.py
Original file line number Diff line number Diff line change
Expand Up @@ -986,7 +986,7 @@ def _view_3d(self, figure_id=None, new_figure=True, render_markers=True,
return renderer
except ImportError as e:
from menpo.visualize import Menpo3dMissingError
raise Menpo3dMissingError(e.name)
raise Menpo3dMissingError(e)

def _view_landmarks_3d(self, group=None, with_labels=None,
without_labels=None, figure_id=None,
Expand Down Expand Up @@ -1123,7 +1123,7 @@ def _view_widget_2d(self, figure_size=(7, 7)):
view_widget(self, figure_size=figure_size)
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)

def _view_widget_3d(self):
r"""
Expand All @@ -1134,7 +1134,7 @@ def _view_widget_3d(self):
view_widget(self)
except ImportError as e:
from menpo.visualize.base import MenpowidgetsMissingError
raise MenpowidgetsMissingError(e.name)
raise MenpowidgetsMissingError(e)

def _transform_self_inplace(self, transform):
self.points = transform(self.points)
Expand Down

0 comments on commit 2aea31e

Please sign in to comment.