[OpenSIPS-Users] python module - python_exec() behaviour in opensips
Ben Newlin
Ben.Newlin at genesys.com
Fri May 15 13:19:19 EST 2020
Gordon,
Are you sure the TypeError is not occurring in mod_init? It looks like you are trying to do a print on a Class definition.
Ben Newlin
From: Users <users-bounces at lists.opensips.org> on behalf of Gordon Yeong <anexiole at gmail.com>
Reply-To: OpenSIPS users mailling list <users at lists.opensips.org>
Date: Friday, May 15, 2020 at 1:54 AM
To: OpenSIPS users mailling list <users at lists.opensips.org>
Subject: [OpenSIPS-Users] python module - python_exec() behaviour in opensips
hi guys,
Using opensips 3.0 and python3 here.
I have a script which parses a number in a string (r'.*rn=\+6114(\d{2})').
Script is as follows:
---------- start ---------------
#!/usr/bin/python3
import re;
import pprint;
class test:
def get_rn():
rnRegExp = rnRegExp = re.compile(r'.*rn=\+6114(\d{2})');
doit = rnRegExp.match( str("sip:+61386947785;npdi;rn=+611411 at tipt.ns.zippi.vocus.com<mailto:611411 at tipt.ns.zippi.vocus.com>;user=phone"));
if doit:
pp = pprint.PrettyPrinter(indent=4);
return doit.group(1);
else:
return None;
result = test.get_rn();
if result is None:
print("Got no match\n");
else:
print("Result is " + result);
----------- end --------------
In my opensips setup, I have the function above looking like this:
---- start--------
from OpenSIPS import LM_ERR
import re;
import pprint;
def mod_init():
print("In mod_init, SIP MSG is : ");
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(SIPMsg);
return SIPMsg();
def __init__():
return 1;
import re;
import pprint;
class SIPMsg:
def child_init(self, rank):
return 0
def get_rn(self, msg, raw_enum_result):
try:
get_rn = re.compile(r'.*rn=\+6114(\d{2})');
rn = get_rn.match(str(raw_enum_result));
return rn.group(1);
except AttributeError:
# Invalid input string
LM_ERR(" attribute ERRor" );
return '';
except TypeError:
# Invalid input string
LM_ERR(" Type Error" );
return '';
else:
LM_ERR(" general ERRor" );
return '';
----- end ------
In my opensips config, I call the get_rn() function via python_exec() as below.
$var(rn_code)=python_exec("get_rn", $var(raw_string));
I'm facing an issue here because when I run the script by itself in a command line, it works.
No "Error: Text Type" but when my opensips run, it keeps hitting a TypeError.
I have even explicitly fed the " rn = get_rn.match(str(raw_enum_result));" with an explicit string (ie. I dont send use the value passed in from the argument BUT instead, just feed it an explicit string value) and yet the same issue occurs.
Does processing control belong directly to python3 when we call python_exec() or is there something funny going on here?
Thank you
Regards,
Gordon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20200515/0ea977fc/attachment-0001.html>
More information about the Users
mailing list