diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2003-01-19 22:59:52 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2003-01-19 22:59:52 (GMT) |
commit | 9c564755b8ed82c77232d5dda25aa7147d55f13d (patch) | |
tree | 5089daa7c5ddda080755d459ab7c5c635cd6990f /Mac/Modules | |
parent | 2cf08ab4c2ef9743b35e61414c978555e2c6815d (diff) | |
download | cpython-9c564755b8ed82c77232d5dda25aa7147d55f13d.zip cpython-9c564755b8ed82c77232d5dda25aa7147d55f13d.tar.gz cpython-9c564755b8ed82c77232d5dda25aa7147d55f13d.tar.bz2 |
Added a convenience routine pathname() which accepts either a string, unicode,
FSSpec or FSRef object and returns an 8-bit pathname (utf8 encoded).
Diffstat (limited to 'Mac/Modules')
-rw-r--r-- | Mac/Modules/file/_Filemodule.c | 25 | ||||
-rw-r--r-- | Mac/Modules/file/filesupport.py | 15 |
2 files changed, 37 insertions, 3 deletions
diff --git a/Mac/Modules/file/_Filemodule.c b/Mac/Modules/file/_Filemodule.c index 0e28889..5d3901f 100644 --- a/Mac/Modules/file/_Filemodule.c +++ b/Mac/Modules/file/_Filemodule.c @@ -14,9 +14,9 @@ /* Macro to test whether a weak-loaded CFM function exists */ #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\ - PyErr_SetString(PyExc_NotImplementedError, \ - "Not available in this shared library/OS version"); \ - return NULL; \ + PyErr_SetString(PyExc_NotImplementedError, \ + "Not available in this shared library/OS version"); \ + return NULL; \ }} while(0) @@ -2999,6 +2999,23 @@ static PyObject *File_FSUpdateAlias(PyObject *_self, PyObject *_args) return _res; } +static PyObject *File_pathname(PyObject *_self, PyObject *_args) +{ + PyObject *_res = NULL; + + PyObject *obj; + + if (!PyArg_ParseTuple(_args, "O", &obj)) + return NULL; + if (PyString_Check(obj)) + return obj; + if (PyUnicode_Check(obj)) + return PyUnicode_AsEncodedString(obj, "utf8", "strict"); + _res = PyObject_CallMethod(obj, "as_pathname", NULL); + return _res; + +} + static PyMethodDef File_methods[] = { {"UnmountVol", (PyCFunction)File_UnmountVol, 1, PyDoc_STR("(Str63 volName, short vRefNum) -> None")}, @@ -3100,6 +3117,8 @@ static PyMethodDef File_methods[] = { PyDoc_STR("(Boolean resolveAliasChains) -> (FSRef theRef, Boolean targetIsFolder, Boolean wasAliased)")}, {"FSUpdateAlias", (PyCFunction)File_FSUpdateAlias, 1, PyDoc_STR("(FSRef fromFile, FSRef target, AliasHandle alias) -> (Boolean wasChanged)")}, + {"pathname", (PyCFunction)File_pathname, 1, + PyDoc_STR("(str|unicode|FSSpec|FSref) -> pathname")}, {NULL, NULL, 0} }; diff --git a/Mac/Modules/file/filesupport.py b/Mac/Modules/file/filesupport.py index 4f27963..b7df7eb 100644 --- a/Mac/Modules/file/filesupport.py +++ b/Mac/Modules/file/filesupport.py @@ -844,6 +844,21 @@ f = ManualGenerator("as_tuple", FSSpec_as_tuple_body) f.docstring = lambda: "() -> (vRefNum, dirID, name)" fsspec_methods.append(f) +pathname_body = """ +PyObject *obj; + +if (!PyArg_ParseTuple(_args, "O", &obj)) + return NULL; +if (PyString_Check(obj)) + return obj; +if (PyUnicode_Check(obj)) + return PyUnicode_AsEncodedString(obj, "utf8", "strict"); +_res = PyObject_CallMethod(obj, "as_pathname", NULL); +return _res; +""" +f = ManualGenerator("pathname", pathname_body) +f.docstring = lambda: "(str|unicode|FSSpec|FSref) -> pathname" +functions.append(f) # add the populated lists to the generator groups # (in a different wordl the scan program would generate this) |