瀏覽代碼

app_python: removed local implementation for KSR.pv sub-module

- switch to use the one from core
Daniel-Constantin Mierla 6 年之前
父節點
當前提交
07e4a02830
共有 1 個文件被更改,包括 80 次插入462 次删除
  1. 80 462
      src/modules/app_python/apy_kemi.c

+ 80 - 462
src/modules/app_python/apy_kemi.c

@@ -163,6 +163,35 @@ PyObject *sr_apy_kemi_return_str(sr_kemi_t *ket, char *sval, int slen)
 	return PyString_FromStringAndSize(sval, slen);
 }
 
+/**
+ *
+ */
+PyObject *sr_kemi_apy_return_xval(sr_kemi_t *ket, sr_kemi_xval_t *rx)
+{
+	switch(rx->vtype) {
+		case SR_KEMIP_NONE:
+			return sr_apy_kemi_return_none();
+		case SR_KEMIP_INT:
+			return sr_kemi_apy_return_int(ket, rx->v.n);
+		case SR_KEMIP_STR:
+			return sr_apy_kemi_return_str(ket, rx->v.s.s, rx->v.s.len);
+		case SR_KEMIP_BOOL:
+			if(rx->v.n!=SR_KEMI_FALSE) {
+				return sr_kemi_apy_return_true();
+			} else {
+				return sr_kemi_apy_return_false();
+			}
+		case SR_KEMIP_XVAL:
+			/* unknown content - return false */
+			return sr_kemi_apy_return_false();
+		case SR_KEMIP_NULL:
+			return sr_apy_kemi_return_none();
+		default:
+			/* unknown type - return false */
+			return sr_kemi_apy_return_false();
+	}
+}
+
 /**
  *
  */
@@ -175,6 +204,7 @@ PyObject *sr_apy_kemi_exec_func_ex(sr_kemi_t *ket, PyObject *self,
 	sr_kemi_val_t vps[SR_KEMI_PARAMS_MAX];
 	sr_apy_env_t *env_P;
 	sip_msg_t *lmsg = NULL;
+	sr_kemi_xval_t *xret;
 
 	env_P = sr_apy_env_get();
 
@@ -198,8 +228,13 @@ PyObject *sr_apy_kemi_exec_func_ex(sr_kemi_t *ket, PyObject *self,
 	fname = ket->fname;
 
 	if(ket->ptypes[0]==SR_KEMIP_NONE) {
-		ret = ((sr_kemi_fm_f)(ket->func))(lmsg);
-		return sr_kemi_apy_return_int(ket, ret);
+		if(ket->rtype==SR_KEMIP_XVAL) {
+			xret = ((sr_kemi_xfm_f)(ket->func))(lmsg);
+			return sr_kemi_apy_return_xval(ket, xret);
+		} else {
+			ret = ((sr_kemi_fm_f)(ket->func))(lmsg);
+			return sr_kemi_apy_return_int(ket, ret);
+		}
 	}
 
 	memset(vps, 0, SR_KEMI_PARAMS_MAX*sizeof(sr_kemi_val_t));
@@ -1146,11 +1181,21 @@ PyObject *sr_apy_kemi_exec_func_ex(sr_kemi_t *ket, PyObject *self,
 	switch(i) {
 		case 1:
 			if(ket->ptypes[0]==SR_KEMIP_INT) {
-				ret = ((sr_kemi_fmn_f)(ket->func))(lmsg, vps[0].n);
-				return sr_kemi_apy_return_int(ket, ret);
+				if(ket->rtype==SR_KEMIP_XVAL) {
+					xret = ((sr_kemi_xfmn_f)(ket->func))(lmsg, vps[0].n);
+					return sr_kemi_apy_return_xval(ket, xret);
+				} else {
+					ret = ((sr_kemi_fmn_f)(ket->func))(lmsg, vps[0].n);
+					return sr_kemi_apy_return_int(ket, ret);
+				}
 			} else if(ket->ptypes[0]==SR_KEMIP_STR) {
-				ret = ((sr_kemi_fms_f)(ket->func))(lmsg, &vps[0].s);
-				return sr_kemi_apy_return_int(ket, ret);
+				if(ket->rtype==SR_KEMIP_XVAL) {
+					xret = ((sr_kemi_xfms_f)(ket->func))(lmsg, &vps[0].s);
+					return sr_kemi_apy_return_xval(ket, xret);
+				} else {
+					ret = ((sr_kemi_fms_f)(ket->func))(lmsg, &vps[0].s);
+					return sr_kemi_apy_return_int(ket, ret);
+				}
 			} else {
 				LM_ERR("invalid parameters for: %.*s\n",
 						fname.len, fname.s);
@@ -1160,11 +1205,21 @@ PyObject *sr_apy_kemi_exec_func_ex(sr_kemi_t *ket, PyObject *self,
 		case 2:
 			if(ket->ptypes[0]==SR_KEMIP_INT) {
 				if(ket->ptypes[1]==SR_KEMIP_INT) {
-					ret = ((sr_kemi_fmnn_f)(ket->func))(lmsg, vps[0].n, vps[1].n);
-					return sr_kemi_apy_return_int(ket, ret);
+					if(ket->rtype==SR_KEMIP_XVAL) {
+						xret = ((sr_kemi_xfmnn_f)(ket->func))(lmsg, vps[0].n, vps[1].n);
+						return sr_kemi_apy_return_xval(ket, xret);
+					} else {
+						ret = ((sr_kemi_fmnn_f)(ket->func))(lmsg, vps[0].n, vps[1].n);
+						return sr_kemi_apy_return_int(ket, ret);
+					}
 				} else if(ket->ptypes[1]==SR_KEMIP_STR) {
-					ret = ((sr_kemi_fmns_f)(ket->func))(lmsg, vps[0].n, &vps[1].s);
-					return sr_kemi_apy_return_int(ket, ret);
+					if(ket->rtype==SR_KEMIP_XVAL) {
+						xret = ((sr_kemi_xfmns_f)(ket->func))(lmsg, vps[0].n, &vps[1].s);
+						return sr_kemi_apy_return_xval(ket, xret);
+					} else {
+						ret = ((sr_kemi_fmns_f)(ket->func))(lmsg, vps[0].n, &vps[1].s);
+						return sr_kemi_apy_return_int(ket, ret);
+					}
 				} else {
 					LM_ERR("invalid parameters for: %.*s\n",
 							fname.len, fname.s);
@@ -1172,11 +1227,21 @@ PyObject *sr_apy_kemi_exec_func_ex(sr_kemi_t *ket, PyObject *self,
 				}
 			} else if(ket->ptypes[0]==SR_KEMIP_STR) {
 				if(ket->ptypes[1]==SR_KEMIP_INT) {
-					ret = ((sr_kemi_fmsn_f)(ket->func))(lmsg, &vps[0].s, vps[1].n);
-					return sr_kemi_apy_return_int(ket, ret);
+					if(ket->rtype==SR_KEMIP_XVAL) {
+						xret = ((sr_kemi_xfmsn_f)(ket->func))(lmsg, &vps[0].s, vps[1].n);
+						return sr_kemi_apy_return_xval(ket, xret);
+					} else {
+						ret = ((sr_kemi_fmsn_f)(ket->func))(lmsg, &vps[0].s, vps[1].n);
+						return sr_kemi_apy_return_int(ket, ret);
+					}
 				} else if(ket->ptypes[1]==SR_KEMIP_STR) {
-					ret = ((sr_kemi_fmss_f)(ket->func))(lmsg, &vps[0].s, &vps[1].s);
-					return sr_kemi_apy_return_int(ket, ret);
+					if(ket->rtype==SR_KEMIP_XVAL) {
+						xret = ((sr_kemi_xfmss_f)(ket->func))(lmsg, &vps[0].s, &vps[1].s);
+						return sr_kemi_apy_return_xval(ket, xret);
+					} else {
+						ret = ((sr_kemi_fmss_f)(ket->func))(lmsg, &vps[0].s, &vps[1].s);
+						return sr_kemi_apy_return_int(ket, ret);
+					}
 				} else {
 					LM_ERR("invalid parameters for: %.*s\n",
 							fname.len, fname.s);
@@ -1773,442 +1838,6 @@ PyObject *sr_apy_kemi_return_none_mode(int rmode)
 	}
 }
 
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_get_mode(PyObject *self, PyObject *args,
-		char *pfmt, int rmode)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	int pl;
-	sr_apy_env_t *env_P;
-	sip_msg_t *lmsg = NULL;
-
-	env_P = sr_apy_env_get();
-
-	if(env_P==NULL) {
-		LM_ERR("invalid Python environment attributes\n");
-		return sr_apy_kemi_return_none_mode(rmode);
-	}
-	if(env_P->msg==NULL) {
-		lmsg = faked_msg_next();
-	} else {
-		lmsg = env_P->msg;
-	}
-
-	if(!PyArg_ParseTuple(args, pfmt, &pvn.s)) {
-		LM_ERR("unable to retrieve str param\n");
-		return sr_apy_kemi_return_none_mode(rmode);
-	}
-
-	if(pvn.s==NULL || lmsg==NULL) {
-		LM_ERR("invalid context attributes\n");
-		return sr_apy_kemi_return_none_mode(rmode);
-	}
-
-	pvn.len = strlen(pvn.s);
-	LM_DBG("pv get: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return sr_apy_kemi_return_none_mode(rmode);
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return sr_apy_kemi_return_none_mode(rmode);
-	}
-	memset(&val, 0, sizeof(pv_value_t));
-	if(pv_get_spec_value(lmsg, pvs, &val) != 0)
-	{
-		LM_ERR("unable to get pv value for [%s]\n", pvn.s);
-		return sr_apy_kemi_return_none_mode(rmode);
-	}
-	if(val.flags&PV_VAL_NULL) {
-		return sr_apy_kemi_return_none_mode(rmode);
-	}
-	if(val.flags&PV_TYPE_INT) {
-		return sr_kemi_apy_return_int(NULL, val.ri);
-	}
-	return sr_apy_kemi_return_str(NULL, val.rs.s, val.rs.len);
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_get(PyObject *self, PyObject *args)
-{
-	return sr_apy_kemi_f_pv_get_mode(self, args, "s:pv.get", 0);
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_getw(PyObject *self, PyObject *args)
-{
-	return sr_apy_kemi_f_pv_get_mode(self, args, "s:pv.getw", 1);
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_gete(PyObject *self, PyObject *args)
-{
-	return sr_apy_kemi_f_pv_get_mode(self, args, "s:pv.gete", 2);
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_pv_push_valx(int rmode, int xival, str *xsval)
-{
-	if(rmode==1) {
-		return sr_kemi_apy_return_int(NULL, xival);
-	} else {
-		return sr_apy_kemi_return_str(NULL, xsval->s, xsval->len);
-	}
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_get_valx(PyObject *self, PyObject *args,
-	int rmode)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	int pl;
-	sr_apy_env_t *env_P;
-	sip_msg_t *lmsg = NULL;
-	int xival = 0;
-	str xsval = str_init("");
-
-	env_P = sr_apy_env_get();
-
-	if(env_P==NULL) {
-		LM_ERR("invalid Python environment attributes\n");
-		return sr_apy_kemi_return_none_mode(rmode);
-	}
-	if(env_P->msg==NULL) {
-		lmsg = faked_msg_next();
-	} else {
-		lmsg = env_P->msg;
-	}
-
-	memset(&val, 0, sizeof(pv_value_t));
-	if(rmode==1) {
-		if(!PyArg_ParseTuple(args, "si:pv.getvn", &pvn.s, &xival)) {
-			LM_ERR("unable to retrieve str-int params\n");
-			return sr_apy_kemi_return_none_mode(rmode);
-		}
-	} else {
-		if(!PyArg_ParseTuple(args, "ss:pv.getvs", &pvn.s, &xival)) {
-			LM_ERR("unable to retrieve str-int params\n");
-			return sr_apy_kemi_return_none_mode(rmode);
-		}
-	}
-
-	if(pvn.s==NULL || lmsg==NULL) {
-		LM_ERR("invalid context attributes\n");
-		return sr_apy_kemi_pv_push_valx(rmode, xival, &xsval);
-	}
-	val.flags |= PV_TYPE_INT|PV_VAL_INT;
-	pvn.len = strlen(pvn.s);
-
-	LM_DBG("pv set: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return sr_apy_kemi_pv_push_valx(rmode, xival, &xsval);
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return sr_apy_kemi_pv_push_valx(rmode, xival, &xsval);
-	}
-	memset(&val, 0, sizeof(pv_value_t));
-	if(pv_get_spec_value(lmsg, pvs, &val) != 0) {
-		LM_ERR("unable to get pv value for [%s]\n", pvn.s);
-		return sr_apy_kemi_pv_push_valx(rmode, xival, &xsval);
-	}
-	if(val.flags&PV_VAL_NULL) {
-		return sr_apy_kemi_pv_push_valx(rmode, xival, &xsval);
-	}
-	if(val.flags&PV_TYPE_INT) {
-		return sr_kemi_apy_return_int(NULL, val.ri);
-	}
-	return sr_apy_kemi_return_str(NULL, val.rs.s, val.rs.len);
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_getvs(PyObject *self, PyObject *args)
-{
-	return sr_apy_kemi_f_pv_get_valx(self, args, 0);
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_getvn(PyObject *self, PyObject *args)
-{
-	return sr_apy_kemi_f_pv_get_valx(self, args, 1);
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_seti(PyObject *self, PyObject *args)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	int pl;
-	sr_apy_env_t *env_P;
-	sip_msg_t *lmsg = NULL;
-
-	env_P = sr_apy_env_get();
-
-	if(env_P==NULL) {
-		LM_ERR("invalid Python environment attributes\n");
-		return sr_kemi_apy_return_false();
-	}
-	if(env_P->msg==NULL) {
-		lmsg = faked_msg_next();
-	} else {
-		lmsg = env_P->msg;
-	}
-
-	memset(&val, 0, sizeof(pv_value_t));
-	if(!PyArg_ParseTuple(args, "si:pv.seti", &pvn.s, &val.ri)) {
-		LM_ERR("unable to retrieve str-int params\n");
-		return sr_kemi_apy_return_false();
-	}
-
-	if(pvn.s==NULL || lmsg==NULL) {
-		LM_ERR("invalid context attributes\n");
-		return sr_kemi_apy_return_false();
-	}
-	val.flags |= PV_TYPE_INT|PV_VAL_INT;
-	pvn.len = strlen(pvn.s);
-
-	LM_DBG("pv set: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return sr_kemi_apy_return_false();
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return sr_kemi_apy_return_false();
-	}
-	if(pv_set_spec_value(lmsg, pvs, 0, &val)<0)
-	{
-		LM_ERR("unable to set pv [%s]\n", pvn.s);
-		return sr_kemi_apy_return_false();
-	}
-	return sr_kemi_apy_return_true();
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_sets(PyObject *self, PyObject *args)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	int pl;
-	sr_apy_env_t *env_P;
-	sip_msg_t *lmsg = NULL;
-
-	env_P = sr_apy_env_get();
-
-	if(env_P==NULL) {
-		LM_ERR("invalid Python environment attributes\n");
-		return sr_kemi_apy_return_false();
-	}
-	if(env_P->msg==NULL) {
-		lmsg = faked_msg_next();
-	} else {
-		lmsg = env_P->msg;
-	}
-
-	memset(&val, 0, sizeof(pv_value_t));
-	if(!PyArg_ParseTuple(args, "ss:pv.sets", &pvn.s, &val.rs.s)) {
-		LM_ERR("unable to retrieve str-int params\n");
-		return sr_kemi_apy_return_false();
-	}
-
-	if(pvn.s==NULL || val.rs.s==NULL || lmsg==NULL) {
-		LM_ERR("invalid context attributes\n");
-		return sr_kemi_apy_return_false();
-	}
-
-	val.rs.len = strlen(val.rs.s);
-	val.flags |= PV_VAL_STR;
-
-	pvn.len = strlen(pvn.s);
-	LM_DBG("pv set: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return sr_kemi_apy_return_false();
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return sr_kemi_apy_return_false();
-	}
-	if(pv_set_spec_value(lmsg, pvs, 0, &val)<0) {
-		LM_ERR("unable to set pv [%s]\n", pvn.s);
-		return sr_kemi_apy_return_false();
-	}
-
-	return sr_kemi_apy_return_true();
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_unset(PyObject *self, PyObject *args)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	int pl;
-	sr_apy_env_t *env_P;
-	sip_msg_t *lmsg = NULL;
-
-	env_P = sr_apy_env_get();
-
-	if(env_P==NULL) {
-		LM_ERR("invalid Python environment attributes\n");
-		return sr_kemi_apy_return_false();
-	}
-	if(env_P->msg==NULL) {
-		lmsg = faked_msg_next();
-	} else {
-		lmsg = env_P->msg;
-	}
-
-	if(!PyArg_ParseTuple(args, "s:pv.unset", &pvn.s)) {
-		LM_ERR("unable to retrieve str param\n");
-		return sr_kemi_apy_return_false();
-	}
-
-	if(pvn.s==NULL || lmsg==NULL) {
-		LM_ERR("invalid context attributes\n");
-		return sr_kemi_apy_return_false();
-	}
-
-	pvn.len = strlen(pvn.s);
-	LM_DBG("pv unset: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return sr_kemi_apy_return_false();
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return sr_kemi_apy_return_false();
-	}
-	memset(&val, 0, sizeof(pv_value_t));
-	val.flags |= PV_VAL_NULL;
-	if(pv_set_spec_value(lmsg, pvs, 0, &val)<0) {
-		LM_ERR("unable to unset pv [%s]\n", pvn.s);
-		return sr_kemi_apy_return_false();
-	}
-
-	return sr_kemi_apy_return_true();
-}
-
-/**
- *
- */
-static PyObject *sr_apy_kemi_f_pv_is_null(PyObject *self, PyObject *args)
-{
-	str pvn;
-	pv_spec_t *pvs;
-	pv_value_t val;
-	int pl;
-	sr_apy_env_t *env_P;
-	sip_msg_t *lmsg = NULL;
-
-	env_P = sr_apy_env_get();
-
-	if(env_P==NULL) {
-		LM_ERR("invalid Python environment attributes\n");
-		return sr_kemi_apy_return_false();
-	}
-	if(env_P->msg==NULL) {
-		lmsg = faked_msg_next();
-	} else {
-		lmsg = env_P->msg;
-	}
-
-	if(!PyArg_ParseTuple(args, "s:pv.unset", &pvn.s)) {
-		LM_ERR("unable to retrieve str param\n");
-		return sr_kemi_apy_return_false();
-	}
-
-	if(pvn.s==NULL || lmsg==NULL) {
-		LM_ERR("invalid context attributes\n");
-		return sr_kemi_apy_return_false();
-	}
-
-	pvn.len = strlen(pvn.s);
-	LM_DBG("pv is null test: %s\n", pvn.s);
-	pl = pv_locate_name(&pvn);
-	if(pl != pvn.len) {
-		LM_ERR("invalid pv [%s] (%d/%d)\n", pvn.s, pl, pvn.len);
-		return sr_kemi_apy_return_false();
-	}
-	pvs = pv_cache_get(&pvn);
-	if(pvs==NULL) {
-		LM_ERR("cannot get pv spec for [%s]\n", pvn.s);
-		return sr_kemi_apy_return_true();
-	}
-	memset(&val, 0, sizeof(pv_value_t));
-	if(pv_get_spec_value(lmsg, pvs, &val) != 0) {
-		LM_NOTICE("unable to get pv value for [%s]\n", pvn.s);
-		return sr_kemi_apy_return_true();
-	}
-	if(val.flags&PV_VAL_NULL) {
-		return sr_kemi_apy_return_true();
-	} else {
-		return sr_kemi_apy_return_false();
-	}
-}
-
-static PyMethodDef _sr_apy_kemi_pv_Methods[] = {
-	{"get",		sr_apy_kemi_f_pv_get,		METH_VARARGS,
-		NAME " - pv get value"},
-	{"getw",	sr_apy_kemi_f_pv_getw,		METH_VARARGS,
-		NAME " - pv get value or <<null>>"},
-	{"getvs",	sr_apy_kemi_f_pv_getvs,		METH_VARARGS,
-		NAME " - pv get value of pv or str val param"},
-	{"getvn",	sr_apy_kemi_f_pv_getvn,		METH_VARARGS,
-		NAME " - pv get value of pv or int val param"},
-	{"gete",	sr_apy_kemi_f_pv_gete,		METH_VARARGS,
-		NAME " - pv get value or empty string"},
-	{"seti",	sr_apy_kemi_f_pv_seti,		METH_VARARGS,
-		NAME " - pv set int value"},
-	{"sets",	sr_apy_kemi_f_pv_sets,		METH_VARARGS,
-		NAME " - pv set str value"},
-	{"unset",	sr_apy_kemi_f_pv_unset,		METH_VARARGS,
-		NAME " - pv uset value (assign $null)"},
-	{"is_null",	sr_apy_kemi_f_pv_is_null,	METH_VARARGS,
-		NAME " - pv test if it is $null"},
-
-	{NULL, 		NULL, 			0, 		NULL}
-};
 
 /**
  *
@@ -2289,13 +1918,6 @@ int sr_apy_init_ksr(void)
 
 	m = 0;
 
-	/* special sub-modules - pv.get() can return int or string */
-	_sr_apy_ksr_modules_list[m] = Py_InitModule("KSR.pv",
-			_sr_apy_kemi_pv_Methods);
-	PyDict_SetItemString(_sr_apy_ksr_module_dict,
-			"pv", _sr_apy_ksr_modules_list[m]);
-	Py_INCREF(_sr_apy_ksr_modules_list[m]);
-	m++;
 	/* special sub-modules - x.modf() can have variable number of params */
 	_sr_apy_ksr_modules_list[m] = Py_InitModule("KSR.x",
 			_sr_apy_kemi_x_Methods);
@@ -2306,10 +1928,6 @@ int sr_apy_init_ksr(void)
 
 	if(emods_size>1) {
 		for(k=1; k<emods_size; k++) {
-			if(emods[k].kexp == sr_kemi_exports_get_pv()) {
-				LM_DBG("skip registering the core KSR.pv module\n");
-				continue;
-			}
 			n++;
 			_sr_crt_KSRMethods = _sr_KSRMethods + n;
 			snprintf(mname, 128, "KSR.%s", emods[k].kexp[0].mname.s);
@@ -2487,4 +2105,4 @@ int app_python_init_rpc(void)
 		return -1;
 	}
 	return 0;
-}
+}