Index: subversion/bindings/swig/svn_ra.i =================================================================== --- subversion/bindings/swig/svn_ra.i (revision 19602) +++ subversion/bindings/swig/svn_ra.i (working copy) @@ -25,6 +25,7 @@ #endif %include typemaps.i +%include constraints.i %include svn_global.swg %import apr.swg @@ -40,6 +41,8 @@ %ignore svn_ra_dav_init; %ignore svn_ra_serf_init; +%apply Pointer NONNULL { svn_ra_callbacks2_t *callbacks }; + /* ----------------------------------------------------------------------- %apply-ing of typemaps defined elsewhere */ @@ -120,6 +123,11 @@ svn_swig_rb_setup_ra_callbacks(&$1, &$2, $input, _global_pool); } +%typemap(python, in) (svn_ra_callbacks2_t *callbacks, + void *callback_baton) { + svn_swig_py_setup_ra_callbacks(&$1, &$2, $input, _global_pool); +} + %typemap(perl5, in) apr_hash_t *config { $1 = svn_swig_pl_objs_to_hash_by_name ($input, "svn_config_t *", _global_pool); Index: subversion/bindings/swig/python/tests/ra.py =================================================================== --- subversion/bindings/swig/python/tests/ra.py (revision 19602) +++ subversion/bindings/swig/python/tests/ra.py (working copy) @@ -20,8 +20,10 @@ self.repos = repos.open(REPOS_PATH) self.fs = repos.fs(self.repos) - self.ra_ctx = ra.open2(self.repos_url, None, None, None) + callbacks = ra.callbacks2_t() + self.ra_ctx = ra.open2(self.repos_url, callbacks, None, None) + def test_get_repos_root(self): root = ra.get_repos_root(self.ra_ctx) self.assertEqual(root,self.repos_url) Index: subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c =================================================================== --- subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (revision 19602) +++ subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (working copy) @@ -2142,3 +2142,19 @@ *cred = creds; return err; } + +void +svn_swig_py_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks, + void **baton, + PyObject *py_callbacks, + apr_pool_t *pool) +{ + svn_error_t *err = svn_ra_create_callbacks(callbacks, pool); + + if (err) { + svn_swig_py_svn_exception(err); + return; + } + + *baton = py_callbacks; +} Index: subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h =================================================================== --- subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (revision 19602) +++ subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (working copy) @@ -310,6 +310,13 @@ svn_boolean_t may_save, apr_pool_t *pool); +SVN_SWIG_SWIGUTIL_EXPORT +void +svn_swig_py_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks, + void **baton, + PyObject *py_callbacks, + apr_pool_t *pool); + #ifdef __cplusplus } #endif /* __cplusplus */