diff options
author | Jelmer Vernooij <jelmer@jelmer.uk> | 2016-07-24 14:02:32 +0000 |
---|---|---|
committer | Jelmer Vernooij <jelmer@jelmer.uk> | 2016-07-24 14:02:32 +0000 |
commit | 9c5a327da6b41437b9ae9f5751a035e28c9d2bd7 (patch) | |
tree | b5cdbae6fbc7d0ce2ee5685593eba08eb90b7fb2 /subvertpy | |
parent | 8705f6df461e5964994be3086b514844f29f56fd (diff) |
Remove some more uses of PyString.
Diffstat (limited to 'subvertpy')
-rw-r--r-- | subvertpy/_ra.c | 48 | ||||
-rw-r--r-- | subvertpy/repos.c | 8 | ||||
-rw-r--r-- | subvertpy/tests/test_repos.py | 2 | ||||
-rw-r--r-- | subvertpy/util.c | 43 |
4 files changed, 57 insertions, 44 deletions
diff --git a/subvertpy/_ra.c b/subvertpy/_ra.c index 917bfee6..75ecb2c1 100644 --- a/subvertpy/_ra.c +++ b/subvertpy/_ra.c @@ -519,8 +519,14 @@ static svn_error_t *py_open_tmp_file(apr_file_t **fp, void *callback, CB_CHECK_PYRETVAL(ret); - if (PyString_Check(ret)) { - char* fname = PyString_AsString(ret); + if (PyUnicode_Check(ret)) { + PyObject *orig_ret = ret; + ret = PyUnicode_AsUTF8String(ret); + Py_DECREF(orig_ret); + } + + if (PyBytes_Check(ret)) { + char* fname = PyBytes_AsString(ret); status = apr_file_open(fp, fname, APR_CREATE | APR_READ | APR_WRITE, APR_OS_DEFAULT, pool); if (status) { @@ -1525,7 +1531,7 @@ static PyObject *ra_get_dir(PyObject *self, PyObject *args, PyObject *kwargs) pykey = Py_None; Py_INCREF(pykey); } else { - pykey = PyString_FromString((char *)key); + pykey = PyUnicode_FromString((char *)key); } if (PyDict_SetItem(py_dirents, pykey, item) != 0) { Py_DECREF(item); @@ -1741,7 +1747,17 @@ static PyObject *ra_unlock(PyObject *self, PyObject *args) PyErr_SetString(PyExc_TypeError, "token not bytes"); goto fail_dict; } - apr_hash_set(hash_path_tokens, PyBytes_AsString(k), PyBytes_Size(k), (char *)PyString_AsString(v)); + if (PyUnicode_Check(v)) { + v = PyUnicode_AsUTF8String(v); + } else { + Py_INCREF(v); + } + if (!PyBytes_Check(v)) { + PyErr_SetString(PyExc_TypeError, "path not bytestring or unicode string"); + goto fail_dict; + } + + apr_hash_set(hash_path_tokens, PyBytes_AsString(k), PyBytes_Size(k), (char *)PyBytes_AsString(v)); } RUN_RA_WITH_POOL(temp_pool, ra, svn_ra_unlock(ra->ra, hash_path_tokens, break_lock, py_lock_func, lock_func, temp_pool)); @@ -2979,32 +2995,20 @@ static PyObject *get_ssl_server_trust_prompt_provider(PyObject *self, PyObject * static svn_error_t *py_ssl_client_cert_pw_prompt(svn_auth_cred_ssl_client_cert_pw_t **cred, void *baton, const char *realm, svn_boolean_t may_save, apr_pool_t *pool) { - PyObject *fn = (PyObject *)baton, *ret, *py_may_save, *py_password; + PyObject *fn = (PyObject *)baton, *ret, *py_password; PyGILState_STATE state = PyGILState_Ensure(); ret = PyObject_CallFunction(fn, "sb", realm, may_save); CB_CHECK_PYRETVAL(ret); - if (!PyTuple_Check(ret)) { - PyErr_SetString(PyExc_TypeError, "expected tuple with client cert pw credentials"); + if (!PyArg_ParseTuple(ret, "Ob", &py_password, &may_save)) { goto fail; } - if (PyTuple_Size(ret) != 2) { - PyErr_SetString(PyExc_TypeError, "expected tuple of size 2"); - goto fail; - } - py_may_save = PyTuple_GetItem(ret, 1); - if (!PyBool_Check(py_may_save)) { - PyErr_SetString(PyExc_TypeError, "may_save should be boolean"); - goto fail; - } - py_password = PyTuple_GetItem(ret, 0); - if (!PyString_Check(py_password)) { - PyErr_SetString(PyExc_TypeError, "password should be string"); - goto fail; - } *cred = apr_pcalloc(pool, sizeof(**cred)); (*cred)->password = py_object_to_svn_string(py_password, pool); - (*cred)->may_save = (py_may_save == Py_True); + if ((*cred)->password == NULL) { + goto fail; + } + (*cred)->may_save = may_save; Py_DECREF(ret); PyGILState_Release(state); return NULL; diff --git a/subvertpy/repos.c b/subvertpy/repos.c index f281465c..eb40d756 100644 --- a/subvertpy/repos.c +++ b/subvertpy/repos.c @@ -165,7 +165,7 @@ static PyObject *fs_get_uuid(PyObject *self) if (temp_pool == NULL) return NULL; RUN_SVN_WITH_POOL(temp_pool, svn_fs_get_uuid(fsobj->fs, &uuid, temp_pool)); - ret = PyString_FromString(uuid); + ret = PyUnicode_FromString(uuid); apr_pool_destroy(temp_pool); return ret; @@ -607,7 +607,7 @@ static PyObject *py_string_from_svn_node_id(const svn_fs_id_t *id) apr_pool_destroy(temp_pool); return NULL; } - return PyString_FromStringAndSize(str->data, str->len); + return PyBytes_FromStringAndSize(str->data, str->len); } #if ONLY_BEFORE_SVN(1, 6) @@ -812,7 +812,7 @@ static PyObject *fs_root_file_checksum(FileSystemRootObject *self, PyObject *arg ret = Py_None; Py_INCREF(ret); } else { - ret = PyString_FromString(cstr); + ret = PyUnicode_FromString(cstr); } #else if (kind > 0) { @@ -823,7 +823,7 @@ static PyObject *fs_root_file_checksum(FileSystemRootObject *self, PyObject *arg RUN_SVN_WITH_POOL(temp_pool, svn_fs_file_md5_checksum(checksum, self->root, path, temp_pool)); - ret = PyString_FromStringAndSize((char *)checksum, APR_MD5_DIGESTSIZE); + ret = PyBytes_FromStringAndSize((char *)checksum, APR_MD5_DIGESTSIZE); #endif apr_pool_destroy(temp_pool); return ret; diff --git a/subvertpy/tests/test_repos.py b/subvertpy/tests/test_repos.py index f77c5eb0..21a0f4f1 100644 --- a/subvertpy/tests/test_repos.py +++ b/subvertpy/tests/test_repos.py @@ -62,7 +62,7 @@ class TestRepository(TestCaseInTempDir): def test_uuid(self): repos.create(os.path.join(self.test_dir, "foo")) - self.assertIsInstance(repos.Repository("foo").fs().get_uuid(), str) + self.assertEqual(36, len(repos.Repository("foo").fs().get_uuid())) def test_youngest_rev(self): repos.create(os.path.join(self.test_dir, "foo")) diff --git a/subvertpy/util.c b/subvertpy/util.c index 7ba20b55..9203a9e2 100644 --- a/subvertpy/util.c +++ b/subvertpy/util.c @@ -402,7 +402,7 @@ PyObject *prop_hash_to_dict(apr_hash_t *props) py_val = Py_None; Py_INCREF(py_val); } else { - py_val = PyString_FromStringAndSize(val->data, val->len); + py_val = PyBytes_FromStringAndSize(val->data, val->len); } if (py_val == NULL) { goto fail_item; @@ -453,22 +453,31 @@ apr_hash_t *prop_dict_to_hash(apr_pool_t *pool, PyObject *py_props) } while (PyDict_Next(py_props, &idx, &k, &v)) { + if (PyUnicode_Check(k)) { + k = PyUnicode_AsUTF8String(k); + } else { + Py_INCREF(k); + } - if (!PyString_Check(k)) { + if (!PyBytes_Check(k)) { PyErr_SetString(PyExc_TypeError, - "property name should be string"); + "property name should be unicode or byte string"); + Py_DECREF(k); return NULL; } - if (!PyString_Check(v)) { + + if (!PyBytes_Check(v)) { PyErr_SetString(PyExc_TypeError, - "property value should be string"); + "property value should be byte string"); + Py_DECREF(k); return NULL; } - val_string = svn_string_ncreate(PyString_AsString(v), - PyString_Size(v), pool); - apr_hash_set(hash_props, PyString_AsString(k), - PyString_Size(k), val_string); + val_string = svn_string_ncreate(PyBytes_AsString(v), + PyBytes_Size(v), pool); + apr_hash_set(hash_props, PyBytes_AsString(k), + PyBytes_Size(k), val_string); + Py_DECREF(k); } return hash_props; @@ -593,22 +602,22 @@ PyObject **py_changed_paths, PyObject **revprops) goto fail_dict; } if (message != NULL) { - obj = PyString_FromString(message); + obj = PyBytes_FromString(message); PyDict_SetItemString(*revprops, SVN_PROP_REVISION_LOG, obj); Py_DECREF(obj); } if (author != NULL) { - obj = PyString_FromString(author); + obj = PyBytes_FromString(author); PyDict_SetItemString(*revprops, SVN_PROP_REVISION_AUTHOR, obj); Py_DECREF(obj); } if (date != NULL) { - obj = PyString_FromString(date); + obj = PyBytes_FromString(date); PyDict_SetItemString(*revprops, SVN_PROP_REVISION_DATE, obj); Py_DECREF(obj); } return true; - + fail_dict: Py_DECREF(*py_changed_paths); fail: @@ -838,7 +847,7 @@ PyObject *py_dirent(const svn_dirent_t *dirent, int dirent_fields) } if (dirent_fields & SVN_DIRENT_LAST_AUTHOR) { if (dirent->last_author != NULL) { - obj = PyString_FromString(dirent->last_author); + obj = PyBytes_FromString(dirent->last_author); } else { obj = Py_None; Py_INCREF(obj); @@ -948,7 +957,7 @@ static PyObject *stream_read_full(StreamObject *self, PyObject *args) return NULL; if (self->closed) { - return PyString_FromString(""); + return PyBytes_FromString(""); } temp_pool = Pool(NULL); @@ -968,7 +977,7 @@ static PyObject *stream_read_full(StreamObject *self, PyObject *args) #else RUN_SVN_WITH_POOL(temp_pool, svn_stream_read(self->stream, buffer, &size)); #endif - ret = PyString_FromStringAndSize(buffer, size); + ret = PyBytes_FromStringAndSize(buffer, size); apr_pool_destroy(temp_pool); return ret; } else { @@ -979,7 +988,7 @@ static PyObject *stream_read_full(StreamObject *self, PyObject *args) temp_pool, temp_pool)); self->closed = TRUE; - ret = PyString_FromStringAndSize(result->data, result->len); + ret = PyBytes_FromStringAndSize(result->data, result->len); apr_pool_destroy(temp_pool); return ret; #else |