8000 bpo-34284: Null __new__ for curses.panel.panel · python/cpython@96cefbf · GitHub
[go: up one dir, main page]

Skip to content

Commit 96cefbf

Browse files
committed
bpo-34284: Null __new__ for curses.panel.panel
1 parent d018573 commit 96cefbf

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

Lib/test/test_curses.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import sys
1515
import tempfile
1616
import unittest
17+
import re
1718

1819
from test.support import requires, import_module, verbose, SaveSignals
1920

@@ -306,6 +307,21 @@ def test_getmouse(self):
306307
curses.ungetmouse(0, 0, 0, 0, curses.BUTTON1_PRESSED)
307308
m = curses.getmouse()
308309

310+
@requires_curses_func('panel')
311+
def test_panel_no_instantiation(self):
312+
cant_create_message = re.escape("cannot create '_curses_panel.panel' instances")
313+
object_message = re.escape(
314+
'object.__new__(_curses_panel.panel) is not safe, '
315+
'use _curses_panel.panel.__new__()'
316+
)
317+
318+
with self.assertRaisesRegex(TypeError, cant_create_message):
319+
curses.panel.panel()
320+
with self.assertRaisesRegex(TypeError, cant_create_message):
321+
curses.panel.panel.__new__(curses.panel.panel)
322+
with self.assertRaisesRegex(TypeError, object_message):
323+
object.__new__(curses.panel.panel)
324+
309325
@requires_curses_func('panel')
310326
def test_userptr_without_set(self):
311327
w = curses.newwin(10, 10)

Modules/_curses_panel.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,7 @@ static PyMethodDef PyCursesPanel_Methods[] = {
477477
/* -------------------------------------------------------*/
478478

479479
static PyType_Slot PyCursesPanel_Type_slots[] = {
480+
{Py_tp_new, PyType_NullNew},
480481
{Py_tp_dealloc, PyCursesPanel_Dealloc},
481482
{Py_tp_methods, PyCursesPanel_Methods},
482483
{0, 0},
@@ -640,7 +641,6 @@ PyInit__curses_panel(void)
640641
v = PyType_FromSpec(&PyCursesPanel_Type_spec);
641642
if (v == NULL)
642643
goto fail;
643-
((PyTypeObject *)v)->tp_new = NULL;
644644
_curses_panelstate(m)->PyCursesPanel_Type = v;
645645

646646
import_curses();

0 commit comments

Comments
 (0)
0