David Mertz <david.me...@gmail.com> added the comment:

I've made the few additional changes to those in this PR.  When I work out the 
issues, I'll make a new PR.  I took out an attempt with `path_t`.  However, 
here is why I think argument clinic (or something else?!) is actually 
intercepting the attempted call:

With my temporary debugging, I have this function in `Modules/_gdbmmodule.c`:

```c
[clinic start generated code]*/

static PyObject *
dbmopen_impl(PyObject *module, PyObject *filename, const char *flags,
             int mode)
/*[clinic end generated code: output=9527750f5df90764 input=812b7d74399ceb0e]*/
{
    PyObject_Print(filename, stdout, 0);
    printf(" from _gdbmmodule.c (XXX)\n");
    /* ... rest of function ...*/
```

And I have a very simplified test script:

```python
import _gdbm
import sys
from pathlib import Path

print(sys.version)
path = '/tmp/tmp.db'

db = _gdbm.open(path, 'c')
print("Opened with string path")
db.close()

db = _gdbm.open(Path(path), 'c')
print("Opened with path-like")
db.close()
```

The output of running this is:

```
3.11.0a0 
(heads/[bpo-45133](https://bugs.python.org/issue45133)-dirty:0376feb030, Sep  8 
2021, 00:39:39) [GCC 10.3.0]
'/tmp/tmp.db' from _gdbmmodule.c (XXX)
Opened with string path
Traceback (most recent call last):
  File "/home/dmertz/tmp/pathlike-dbm.py", line 12, in <module>
    db = _gdbm.open(Path(path), 'c')
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: open() argument 1 must be str, not PosixPath
```

So before I get to the first line of the _gdbm.open() function, the TypeError 
is already occurring when passed a PosixPath.

----------
nosy: +DavidMertz
type:  -> enhancement
versions: +Python 3.11 -Python 3.9

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue40563>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to