[mod_python3, ESL py3mod] Add Python3 support.

This commit is contained in:
Andrey Volk
2021-09-26 13:23:46 +03:00
parent 3a66eb415f
commit e44fd2ea38
35 changed files with 20248 additions and 13 deletions

132
libs/esl/python3/ESL.py Normal file
View File

@@ -0,0 +1,132 @@
# This file was automatically generated by SWIG (http://www.swig.org).
# Version 3.0.2
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
from sys import version_info
if version_info >= (2,6,0):
def swig_import_helper():
from os.path import dirname
import imp
fp = None
try:
fp, pathname, description = imp.find_module('_ESL', [dirname(__file__)])
except ImportError:
import _ESL
return _ESL
if fp is not None:
try:
_mod = imp.load_module('_ESL', fp, pathname, description)
finally:
fp.close()
return _mod
_ESL = swig_import_helper()
del swig_import_helper
else:
import _ESL
del version_info
def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
if (name == "thisown"): return self.this.own(value)
if (name == "this"):
if type(value).__name__ == 'SwigPyObject':
self.__dict__[name] = value
return
method = class_type.__swig_setmethods__.get(name,None)
if method: return method(self,value)
if (not static):
self.__dict__[name] = value
else:
raise AttributeError("You cannot add attributes to %s" % self)
def _swig_setattr(self,class_type,name,value):
return _swig_setattr_nondynamic(self,class_type,name,value,0)
def _swig_getattr(self,class_type,name):
if (name == "thisown"): return self.this.own()
method = class_type.__swig_getmethods__.get(name,None)
if method: return method(self)
raise AttributeError(name)
def _swig_repr(self):
try: strthis = "proxy of " + self.this.__repr__()
except: strthis = ""
return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
class ESLevent:
__swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, ESLevent, name, value)
__swig_getmethods__ = {}
__getattr__ = lambda self, name: _swig_getattr(self, ESLevent, name)
__repr__ = _swig_repr
__swig_setmethods__["event"] = _ESL.ESLevent_event_set
__swig_getmethods__["event"] = _ESL.ESLevent_event_get
__swig_setmethods__["serialized_string"] = _ESL.ESLevent_serialized_string_set
__swig_getmethods__["serialized_string"] = _ESL.ESLevent_serialized_string_get
__swig_setmethods__["mine"] = _ESL.ESLevent_mine_set
__swig_getmethods__["mine"] = _ESL.ESLevent_mine_get
def __init__(self, *args):
this = _ESL.new_ESLevent(*args)
try: self.this.append(this)
except: self.this = this
__swig_destroy__ = _ESL.delete_ESLevent
__del__ = lambda self : None;
def serialize(self, format=None): return _ESL.ESLevent_serialize(self, format)
def setPriority(self, *args): return _ESL.ESLevent_setPriority(self, *args)
def getHeader(self, *args): return _ESL.ESLevent_getHeader(self, *args)
def getBody(self): return _ESL.ESLevent_getBody(self)
def getType(self): return _ESL.ESLevent_getType(self)
def addBody(self, *args): return _ESL.ESLevent_addBody(self, *args)
def addHeader(self, *args): return _ESL.ESLevent_addHeader(self, *args)
def pushHeader(self, *args): return _ESL.ESLevent_pushHeader(self, *args)
def unshiftHeader(self, *args): return _ESL.ESLevent_unshiftHeader(self, *args)
def delHeader(self, *args): return _ESL.ESLevent_delHeader(self, *args)
def firstHeader(self): return _ESL.ESLevent_firstHeader(self)
def nextHeader(self): return _ESL.ESLevent_nextHeader(self)
ESLevent_swigregister = _ESL.ESLevent_swigregister
ESLevent_swigregister(ESLevent)
class ESLconnection:
__swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, ESLconnection, name, value)
__swig_getmethods__ = {}
__getattr__ = lambda self, name: _swig_getattr(self, ESLconnection, name)
__repr__ = _swig_repr
def __init__(self, *args):
this = _ESL.new_ESLconnection(*args)
try: self.this.append(this)
except: self.this = this
__swig_destroy__ = _ESL.delete_ESLconnection
__del__ = lambda self : None;
def socketDescriptor(self): return _ESL.ESLconnection_socketDescriptor(self)
def connected(self): return _ESL.ESLconnection_connected(self)
def getInfo(self): return _ESL.ESLconnection_getInfo(self)
def send(self, *args): return _ESL.ESLconnection_send(self, *args)
def sendRecv(self, *args): return _ESL.ESLconnection_sendRecv(self, *args)
def api(self, *args): return _ESL.ESLconnection_api(self, *args)
def bgapi(self, *args): return _ESL.ESLconnection_bgapi(self, *args)
def sendEvent(self, *args): return _ESL.ESLconnection_sendEvent(self, *args)
def sendMSG(self, *args): return _ESL.ESLconnection_sendMSG(self, *args)
def recvEvent(self): return _ESL.ESLconnection_recvEvent(self)
def recvEventTimed(self, *args): return _ESL.ESLconnection_recvEventTimed(self, *args)
def filter(self, *args): return _ESL.ESLconnection_filter(self, *args)
def events(self, *args): return _ESL.ESLconnection_events(self, *args)
def execute(self, *args): return _ESL.ESLconnection_execute(self, *args)
def executeAsync(self, *args): return _ESL.ESLconnection_executeAsync(self, *args)
def setAsyncExecute(self, *args): return _ESL.ESLconnection_setAsyncExecute(self, *args)
def setEventLock(self, *args): return _ESL.ESLconnection_setEventLock(self, *args)
def disconnect(self): return _ESL.ESLconnection_disconnect(self)
ESLconnection_swigregister = _ESL.ESLconnection_swigregister
ESLconnection_swigregister(ESLconnection)
def eslSetLogLevel(*args):
return _ESL.eslSetLogLevel(*args)
eslSetLogLevel = _ESL.eslSetLogLevel
# This file is compatible with both classic and new-style classes.

28
libs/esl/python3/Makefile Normal file
View File

@@ -0,0 +1,28 @@
LOCAL_CFLAGS=`$(PYTHON3) ./python-config --includes`
LOCAL_LDFLAGS=`$(PYTHON3) ./python-config --ldflags`
SITE_DIR=$(DESTDIR)/`$(PYTHON3) -c "from distutils.sysconfig import get_python_lib; print (get_python_lib(1))"`
all: _ESL.so
esl_wrap.cpp:
swig3.0 -module ESL -classic -python -c++ -DMULTIPLICITY -threads -I../src/include -o esl_wrap.cpp ../ESL.i
esl_wrap.o: esl_wrap.cpp
$(CXX) $(CXX_CFLAGS) $(CXXFLAGS) $(LOCAL_CFLAGS) -c esl_wrap.cpp -o esl_wrap.o
_ESL.so: esl_wrap.o
$(CXX) $(SOLINK) esl_wrap.o $(MYLIB) $(LOCAL_LDFLAGS) -o _ESL.so -L. $(LIBS)
install: _ESL.so
mkdir -p $(SITE_DIR)
install -m 755 _ESL.so $(SITE_DIR)
install -m 755 ESL.py $(SITE_DIR)
clean:
rm -f *.o *.so *~
swigclean:
rm -f esl_wrap.* ESL.so
reswig: swigclean esl_wrap.cpp

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,20 @@
#!/usr/bin/env python
import string
import sys
from ESL import *
con = ESLconnection("localhost","8021","ClueCon")
#are we connected?
if con.connected:
con.events("plain", "all");
while 1:
#my $e = $con->recvEventTimed(100);
e = con.recvEvent()
if e:
print e.serialize()

View File

@@ -0,0 +1,55 @@
#!/usr/bin/env python3
from __future__ import print_function
import sys
import os
import getopt
from distutils import sysconfig
valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags',
'ldflags', 'help']
def exit_with_usage(code=1):
print("Usage: %s [%s]" % (sys.argv[0], '|'.join('--'+opt for opt in valid_opts)), file=sys.stderr)
sys.exit(code)
try:
opts, args = getopt.getopt(sys.argv[1:], '', valid_opts)
except getopt.error:
exit_with_usage()
if not opts:
exit_with_usage()
opt = opts[0][0]
pyver = sysconfig.get_config_var('LDVERSION')
if pyver == None:
pyver = sysconfig.get_config_var('VERSION')
getvar = sysconfig.get_config_var
if opt == '--help':
exit_with_usage(0)
elif opt == '--prefix':
print(sysconfig.PREFIX)
elif opt == '--exec-prefix':
print(sysconfig.EXEC_PREFIX)
elif opt in ('--includes', '--cflags'):
flags = ['-I' + sysconfig.get_python_inc(),
'-I' + sysconfig.get_python_inc(plat_specific=True)]
if opt == '--cflags':
flags.extend(getvar('CFLAGS').split())
print(' '.join(flags))
elif opt in ('--libs', '--ldflags'):
libs = getvar('LIBS').split() + getvar('SYSLIBS').split()
libs.append('-lpython'+pyver)
# add the prefix/lib/pythonX.Y/config dir, but only if there is no
# shared library in prefix/lib/.
if opt == '--ldflags' and not getvar('Py_ENABLE_SHARED'):
libs.insert(0, '-L' + getvar('LIBPL'))
print(' '.join(libs))

View File

@@ -0,0 +1,29 @@
#!/usr/bin/env python
import SocketServer
from ESL import *
class ESLRequestHandler(SocketServer.BaseRequestHandler ):
def setup(self):
print self.client_address, 'connected!'
fd = self.request.fileno()
print fd
con = ESLconnection(fd)
print "Connected: "
print con.connected()
if con.connected():
info = con.getInfo()
uuid = info.getHeader("unique-id")
print uuid
con.execute("answer", "", uuid)
con.execute("playback", "/ram/swimp.raw", uuid);
#server host is a tuple ('host', port)
server = SocketServer.ThreadingTCPServer(('', 8040), ESLRequestHandler)
server.serve_forever()

View File

@@ -0,0 +1,43 @@
#!/usr/bin/env python
import string
import sys
from optparse import OptionParser
from ESL import *
def main(argv):
try:
parser = OptionParser()
parser.add_option("-a", "--auth", dest="auth", default="ClueCon",
help="ESL password")
parser.add_option("-s", "--server", dest="server", default="127.0.0.1",
help="FreeSWITCH server IP address")
parser.add_option("-p", "--port", dest="port", default="8021",
help="FreeSWITCH server event socket port")
parser.add_option("-c", "--command", dest="command",
help="command to run, surround mutli word commands in \"\'s")
(options, args) = parser.parse_args()
con = ESLconnection(options.server, options.port, options.auth)
#are we connected?
if con.connected():
#run command
e = con.api(options.command)
print e.getBody()
else:
print "Not Connected"
sys.exit(2)
except:
print parser.get_usage()
if __name__ == "__main__":
main(sys.argv[1:])