Skip to content

Commit 38cdcd7

Browse files
committed
Switch back to original marker API and add arguments to methods
1 parent e735a23 commit 38cdcd7

File tree

2 files changed

+61
-42
lines changed

2 files changed

+61
-42
lines changed

astrowidgets/interface_definition.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,31 +58,43 @@ def save(self, filename):
5858

5959
# Marker-related methods
6060
@abstractmethod
61-
def start_marking(self):
61+
def start_marking(self, marker_name=None):
6262
raise NotImplementedError
6363

6464
@abstractmethod
65-
def stop_marking(self):
65+
def stop_marking(self, clear_markers=False):
6666
raise NotImplementedError
6767

6868
@abstractmethod
69-
def add_markers(self):
69+
def add_markers(self, table, x_colname='x', y_colname='y',
70+
skycoord_colname='coord', use_skycoord=False,
71+
marker_name=None):
7072
raise NotImplementedError
7173

72-
@abstractmethod
73-
def remove_all_markers(self):
74-
raise NotImplementedError
74+
# @abstractmethod
75+
# def remove_all_markers(self):
76+
# raise NotImplementedError
7577

7678
@abstractmethod
77-
def remove_markers_by_name(self, marker_name=None):
79+
def reset_markers(self):
7880
raise NotImplementedError
7981

82+
# @abstractmethod
83+
# def remove_markers_by_name(self, marker_name=None):
84+
# raise NotImplementedError
85+
8086
@abstractmethod
81-
def get_all_markers(self):
87+
def remove_markers(self, marker_name=None):
8288
raise NotImplementedError
8389

90+
# @abstractmethod
91+
# def get_all_markers(self):
92+
# raise NotImplementedError
93+
8494
@abstractmethod
85-
def get_markers_by_name(self, marker_name=None):
95+
def get_markers(self, x_colname='x', y_colname='y',
96+
skycoord_colname='coord',
97+
marker_name=None):
8698
raise NotImplementedError
8799

88100
# Methods that modify the view

astrowidgets/tests/widget_api_test.py

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def test_zoom(self):
102102
assert self.image.zoom_level == 6 # 3 x 2
103103

104104
def test_marking_operations(self):
105-
marks = self.image.get_all_markers()
105+
marks = self.image.get_markers(marker_name="all")
106106
assert marks is None
107107
assert not self.image.is_marking
108108

@@ -141,7 +141,7 @@ def test_marking_operations(self):
141141
# Regression test for GitHub Issue 97:
142142
# Marker name with no markers should give warning.
143143
with pytest.warns(UserWarning, match='is empty') as warning_lines:
144-
t = self.image.get_markers_by_name('markymark')
144+
t = self.image.get_markers(marker_name='markymark')
145145
assert t is None
146146
assert len(warning_lines) == 1
147147

@@ -150,15 +150,21 @@ def test_marking_operations(self):
150150
assert not self.image.click_drag
151151

152152
# Simulate a mouse click to add default marker name to the list.
153-
self.image._mouse_click_cb(self.image.viewer, None, 50, 50)
154-
assert self.image.get_marker_names() == [self.image._interactive_marker_set_name, 'markymark']
153+
try:
154+
self.image._mouse_click_cb(self.image.viewer, None, 50, 50)
155+
assert self.image.get_marker_names() == [self.image._interactive_marker_set_name, 'markymark']
156+
except AttributeError:
157+
pass
155158

156159
# Clear markers to not pollute other tests.
157160
self.image.stop_marking(clear_markers=True)
158161

159162
assert self.image.is_marking is False
160-
assert self.image.get_all_markers() is None
161-
assert len(self.image.get_marker_names()) == 0
163+
assert self.image.get_markers(marker_name="all") is None
164+
165+
# Hate this, should add to public API
166+
marknames = self.image._marktags
167+
assert len(marknames) == 0
162168

163169
# Make sure that click_drag is restored as expected
164170
assert self.image.click_drag
@@ -181,27 +187,32 @@ def test_add_markers(self):
181187
# Add more markers under different name.
182188
self.image.add_markers(tab, x_colname='x', y_colname='y',
183189
skycoord_colname='coord', marker_name='test2')
184-
assert self.image.get_marker_names() == ['test1', 'test2']
190+
191+
marknames = self.image._marktags
192+
assert marknames == set(['test1', 'test2'])
193+
# assert self.image.get_marker_names() == ['test1', 'test2']
185194

186195
# No guarantee markers will come back in the same order, so sort them.
187-
t1 = self.image.get_markers_by_name('test1')
196+
t1 = self.image.get_markers(marker_name='test1')
188197
# Sort before comparing
189198
t1.sort('x')
190199
tab.sort('x')
191200
assert np.all(t1['x'] == tab['x'])
192201
assert (t1['y'] == tab['y']).all()
193202

194203
# That should have given us two copies of the input table
195-
t2 = self.image.get_all_markers()
204+
t2 = self.image.get_markers(marker_name="all")
196205
expected = vstack([tab, tab], join_type='exact')
197206
# Sort before comparing
198207
t2.sort(['x', 'y'])
199208
expected.sort(['x', 'y'])
200209
assert (t2['x'] == expected['x']).all()
201210
assert (t2['y'] == expected['y']).all()
202211

203-
self.image.remove_markers_by_name('test1')
204-
assert self.image.get_marker_names() == ['test2']
212+
self.image.remove_markers(marker_name='test1')
213+
marknames = self.image._marktags
214+
assert marknames == set(['test2'])
215+
# assert self.image.get_marker_names() == ['test2']
205216

206217
# Ensure unable to mark with reserved name
207218
for name in self.image.RESERVED_MARKER_SET_NAMES:
@@ -215,24 +226,28 @@ def test_add_markers(self):
215226
skycoord_colname='coord')
216227
# Don't care about the order of the marker names so use set instead of
217228
# list.
218-
assert (set(self.image.get_marker_names()) ==
229+
marknames = self.image._marktags
230+
assert (set(marknames) ==
219231
set(['test2', self.image._default_mark_tag_name]))
232+
# assert (set(self.image.get_marker_names()) ==
233+
# set(['test2', self.image._default_mark_tag_name]))
220234

221235
# Clear markers to not pollute other tests.
222-
self.image.remove_all_markers()
223-
assert len(self.image.get_marker_names()) == 0
224-
assert self.image.get_all_markers() is None
236+
self.image.reset_markers()
237+
marknames = self.image._marktags
238+
assert len(marknames) == 0
239+
assert self.image.get_markers(marker_name="all") is None
225240
with pytest.warns(UserWarning, match='is empty'):
226-
assert self.image.get_markers_by_name(self.image._default_mark_tag_name) is None
241+
assert self.image.get_markers(marker_name=self.image._default_mark_tag_name) is None
227242

228243
with pytest.raises(ValueError, match="No markers named 'test1'"):
229-
self.image.get_markers_by_name('test1')
244+
self.image.get_markers(marker_name='test1')
230245
with pytest.raises(ValueError, match="No markers named 'test2'"):
231-
self.image.get_markers_by_name('test2')
246+
self.image.get_markers(marker_name='test2')
232247

233248
def test_remove_markers(self):
234249
with pytest.raises(ValueError, match='arf'):
235-
self.image.remove_markers_by_name('arf')
250+
self.image.remove_markers(marker_name='arf')
236251

237252
def test_adding_markers_as_world(self, data, wcs):
238253
ndd = NDData(data=data, wcs=wcs)
@@ -273,7 +288,7 @@ def test_cuts(self, data):
273288
with pytest.raises(ValueError, match='must be one of'):
274289
self.image.cuts = 'not a valid value'
275290

276-
with pytest.raises(ValueError, match=r'must be given as \(low, high\)'):
291+
with pytest.raises(ValueError, match='must have length 2'):
277292
self.image.cuts = (1, 10, 100)
278293

279294
assert 'histogram' in self.image.autocut_options
@@ -312,9 +327,9 @@ def test_click_drag(self):
312327
assert not self.image.click_center
313328

314329
# If is_marking is true then trying to enable click_drag should fail
315-
self.image._is_marking = True
316330
self.image.click_drag = False
317-
with pytest.raises(ValueError, match='[Ii]nteractive marking'):
331+
self.image._is_marking = True
332+
with pytest.raises(ValueError, match=r'([Ii]nteractive marking)|(while in marking mode)'):
318333
self.image.click_drag = True
319334
self.image._is_marking = False
320335

@@ -333,7 +348,7 @@ def test_click_center(self):
333348
# If is_marking is true then trying to enable click_center should fail
334349
self.image._is_marking = True
335350
self.image.click_center = False
336-
with pytest.raises(ValueError, match='[Ii]nteractive marking'):
351+
with pytest.raises(ValueError, match=r'([Ii]nteractive marking)|(while in marking mode)'):
337352
self.image.click_center = True
338353
self.image._is_marking = False
339354

@@ -343,14 +358,6 @@ def test_scroll_pan(self):
343358
self.image.scroll_pan = value
344359
assert self.image.scroll_pan is value
345360

346-
def test_save(self, tmpdir):
347-
with pytest.raises(ValueError, match='not supported'):
348-
self.image.save(str(tmpdir.join('woot.jpg')))
349-
350-
filename = str(tmpdir.join('woot.png'))
361+
def test_save(self, tmp_path):
362+
filename = tmp_path / 'woot.png'
351363
self.image.save(filename)
352-
353-
with pytest.raises(ValueError, match='exists'):
354-
self.image.save(filename)
355-
356-
self.image.save(filename, overwrite=True)

0 commit comments

Comments
 (0)