hello Tomi, yeah , when i test, I 1) put #!/usr/bin/python3 in the script, or 2) run "python3" for the interactive session
yes, just read the https://github.com/OpenSIPS/opensips/blob/master/modules/python/Makefile and yeah, it's an ugly hack to have the system run python3 when python is referred to. I had considered removing python 2.7 to which, after searching, it was not a good idea for it would break the system. I will keep researching :) thank you again, Tomi :) Regards, Gordon Yeong On Sun, 17 May 2020 at 16:38, Tomi Hakkarainen <tpai...@gmail.com> wrote: > Hi, > > just another guess it uses version it had while installing opensips and > was executed with python keyword. > > this came based on this > https://github.com/OpenSIPS/opensips/blob/master/modules/python/Makefile > > not sure you could point it to use other python version with environment > variables but is one option to search. > > do you run the tests on the box with python3 prefix or python? > > maybe it would be as easy as try to point the system run python3 when you > run .py scripts with python keyword. > > Really hope you get what I mean :) > > based on this #!/usr/bin/python3 > your system find/run python3 with python3 not when running python > > Tomi > > On 17. May 2020, at 8.53, Gordon Yeong <anexi...@gmail.com> wrote: > > > very interesting. > I looked at the code in handler.py and adjusted my python class. > > I ran opensips (master branch) and found 2 issues: > > 1) python3 is not being run. How do i specify to opensips to use python 3? > > May 17 15:45:46 [21373] Just done the enum query...The ru value is ( > sip:service@192.168.136.133:5060) > Calling get_rn... > May 17 15:45:46 [21373] ERROR:python:python_handle_exception: > python_exec("get_rn"): Unhandled exception in the Python code: > May 17 15:45:46 [21373] ERROR:python:python_handle_exception: Traceback > (most recent call last): > May 17 15:45:46 [21373] ERROR:python:python_handle_exception: File > "/home/gordon/opensips_proxy_source/modules/python/dumbat.py", line 61, in > get_rn > return re.match('.*rn\=\+6114([\d]{2}).*', str(raw_enum_result) > ).group(1); > May 17 15:45:46 [21373] ERROR:python:python_handle_exception: File > "/usr/lib64/python2.7/re.py", line 137, in match <---- python2.7 not 3 > May 17 15:45:46 [21373] ERROR:python:python_handle_exception: TypeError: > an integer is required > May 17 15:45:46 [21373] AFTER EXTRACTION (get_rn)............ The value of > the rn code is [-1] > May 17 15:45:46 [21373] incoming reply > > > > 2) the type error seems to be coming from re.py . I will trace more later > but we need to make my opensips use python 3. > > > So, how do I specify python3 to be used in my opensips? > > > Regards, > Gordon Yeong > > > On Sat, 16 May 2020 at 21:09, Gordon Yeong <anexi...@gmail.com> wrote: > >> Tomi >> >> I will try it on monday. Let u know. Thank you, stay safw and have a good >> weekend :) >> >> On Sat, 16 May 2020, 8:08 pm Tomi Hakkarainen, <tpai...@gmail.com> wrote: >> >>> Hi, >>> My second guess :) >>> >>> Check this >>> >>> https://github.com/OpenSIPS/opensips/blob/master/modules/python/handler.py >>> >>> Differs from your version… Can these differences cause the failure? >>> >>> The __init__ located inside class >>> >>> And the mod_init located last in the script (does the order count for >>> anything in python?) >>> >>> Also called handler function always returns 1 not the init >>> >>> Tomi >>> >>> On 16. May 2020, at 11.20, Gordon Yeong <anexi...@gmail.com> wrote: >>> >>> Yeah I looked at that and ran my code on the python3 interpreter - it >>> worked. >>> Then i put it into a class - it worked. >>> And then only did I put it (the class) to use in opensips.. >>> >>> Had there been an issue, python3 would have kicked and scream which it >>> did not. >>> >>> No issue with the regexp. >>> Thank you >>> >>> Gordon >>> >>> On Sat, 16 May 2020 at 18:03, Tomi Hakkarainen <tpai...@gmail.com> >>> wrote: >>> >>>> Hi, >>>> >>>> not sure has this nothing to do with the error but game to my eye >>>> trying to figure out what this bunch of code is really doing... >>>> >>>> from python re docs: >>>> >>>> Regular expressions use the backslash character ('\') to indicate >>>> special forms or to allow special characters to be used without invoking >>>> their special meaning. This collides with Python’s usage of the same >>>> character for the same purpose in string literals; for example, to match a >>>> literal backslash, one might have to write '\\\\' as the pattern >>>> string, because the regular expression must be \\, and each backslash >>>> must be expressed as \\ inside a regular Python string literal. Also, >>>> please note that any invalid escape sequences in Python’s usage of the >>>> backslash in string literals now generate a DeprecationWarning >>>> <https://docs.python.org/3/library/exceptions.html#DeprecationWarning> and >>>> in the future this will become a SyntaxError >>>> <https://docs.python.org/3/library/exceptions.html#SyntaxError>. This >>>> behaviour will happen even if it is a valid escape sequence for a regular >>>> expression. >>>> >>>> The solution is to use Python’s raw string notation for regular >>>> expression patterns; backslashes are not handled in any special way in a >>>> string literal prefixed with 'r'. So r"\n" is a two-character string >>>> containing '\' and 'n', while "\n"is a one-character string containing >>>> a newline. >>>> >>>> >>>> Tomi >>>> >>>> On 16. May 2020, at 1.47, Gordon Yeong <anexi...@gmail.com> wrote: >>>> >>>> >>>> It's passed the init. If i did a print (LM_ERR) In the first line of >>>> init(), it doesn't show that print. >>>> >>>> If i did a print (LM_ERR)a static string in the get_rn() before the >>>> line that calls compile(), i noticed that it does print out. And if i >>>> tried to print a static string right after the compile() call, it doesn't >>>> print and it calls TypeError. >>>> >>>> That's why i suspect something is wrong bit can't tell exactly what.... >>>> >>>> >>>> On Fri, 15 May 2020, 11:21 pm Ben Newlin, <ben.new...@genesys.com> >>>> wrote: >>>> >>>>> 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-boun...@lists.opensips.org> on behalf of Gordon >>>>> Yeong <anexi...@gmail.com> >>>>> *Reply-To: *OpenSIPS users mailling list <users@lists.opensips.org> >>>>> *Date: *Friday, May 15, 2020 at 1:54 AM >>>>> *To: *OpenSIPS users mailling list <users@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=+ >>>>> 611...@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 >>>>> _______________________________________________ >>>>> Users mailing list >>>>> Users@lists.opensips.org >>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >>>>> >>>> _______________________________________________ >>>> Users mailing list >>>> Users@lists.opensips.org >>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >>>> _______________________________________________ >>>> Users mailing list >>>> Users@lists.opensips.org >>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >>>> >>> _______________________________________________ >>> Users mailing list >>> Users@lists.opensips.org >>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >>> >>> _______________________________________________ >>> Users mailing list >>> Users@lists.opensips.org >>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >>> >> _______________________________________________ > Users mailing list > Users@lists.opensips.org > http://lists.opensips.org/cgi-bin/mailman/listinfo/users > _______________________________________________ > Users mailing list > Users@lists.opensips.org > http://lists.opensips.org/cgi-bin/mailman/listinfo/users >
_______________________________________________ Users mailing list Users@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users