bpo-41780: Fix __dir__ of types.GenericAlias (GH-22262)
Automerge-Triggered-By: @gvanrossum
This commit is contained in:
parent
ac0333e1e1
commit
2e87774df1
|
@ -287,6 +287,11 @@ class BaseTest(unittest.TestCase):
|
|||
self.assertEqual(a.__args__, (list[T], tuple[T, ...]))
|
||||
self.assertEqual(a.__parameters__, (T,))
|
||||
|
||||
def test_dir(self):
|
||||
dir_of_gen_alias = set(dir(list[int]))
|
||||
self.assertTrue(dir_of_gen_alias.issuperset(dir(list)))
|
||||
for generic_alias_property in ("__origin__", "__args__", "__parameters__"):
|
||||
self.assertIn(generic_alias_property, dir_of_gen_alias)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix :meth:`__dir__` of :class:`types.GenericAlias`. Patch by Batuhan
|
||||
Taskaya.
|
|
@ -487,11 +487,50 @@ ga_reduce(PyObject *self, PyObject *Py_UNUSED(ignored))
|
|||
alias->origin, alias->args);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
ga_dir(PyObject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
gaobject *alias = (gaobject *)self;
|
||||
PyObject *dir = PyObject_Dir(alias->origin);
|
||||
if (dir == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PyObject *dir_entry = NULL;
|
||||
for (const char * const *p = attr_exceptions; ; p++) {
|
||||
if (*p == NULL) {
|
||||
break;
|
||||
}
|
||||
else {
|
||||
dir_entry = PyUnicode_FromString(*p);
|
||||
if (dir_entry == NULL) {
|
||||
goto error;
|
||||
}
|
||||
int contains = PySequence_Contains(dir, dir_entry);
|
||||
if (contains < 0) {
|
||||
goto error;
|
||||
}
|
||||
if (contains == 0 && PyList_Append(dir, dir_entry) < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
Py_CLEAR(dir_entry);
|
||||
}
|
||||
}
|
||||
return dir;
|
||||
|
||||
error:
|
||||
Py_DECREF(dir);
|
||||
Py_XDECREF(dir_entry);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static PyMethodDef ga_methods[] = {
|
||||
{"__mro_entries__", ga_mro_entries, METH_O},
|
||||
{"__instancecheck__", ga_instancecheck, METH_O},
|
||||
{"__subclasscheck__", ga_subclasscheck, METH_O},
|
||||
{"__reduce__", ga_reduce, METH_NOARGS},
|
||||
{"__dir__", ga_dir, METH_NOARGS},
|
||||
{0}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue