From 9c564755b8ed82c77232d5dda25aa7147d55f13d Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Sun, 19 Jan 2003 22:59:52 +0000 Subject: [PATCH] Added a convenience routine pathname() which accepts either a string, unicode, FSSpec or FSRef object and returns an 8-bit pathname (utf8 encoded). --- Mac/Modules/file/_Filemodule.c | 25 ++++++++++++++++++++++--- 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 0e288893557..5d3901fbe73 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 4f279630244..b7df7eb2e7f 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)