From 0b5a5e780704a5cea5212abdd5035474033909d7 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Thu, 4 Nov 2021 19:36:53 -0400 Subject: [PATCH] 2021-11-04 Fred Gleason * Added a 'rivwebpyapi' API. Signed-off-by: Fred Gleason --- ChangeLog | 2 + apis/Makefile.am | 5 +- apis/rivwebpyapi/Makefile.am | 39 ++++++++++++++ apis/rivwebpyapi/api/Makefile.am | 39 ++++++++++++++ apis/rivwebpyapi/api/rivwebpyapi.py | 69 +++++++++++++++++++++++++ apis/rivwebpyapi/tests/Makefile.am | 38 ++++++++++++++ apis/rivwebpyapi/tests/list_services.py | 61 ++++++++++++++++++++++ apis/rivwebpyapi/tests/rivwebpyapi.py | 1 + configure.ac | 3 ++ 9 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 apis/rivwebpyapi/Makefile.am create mode 100644 apis/rivwebpyapi/api/Makefile.am create mode 100755 apis/rivwebpyapi/api/rivwebpyapi.py create mode 100644 apis/rivwebpyapi/tests/Makefile.am create mode 100755 apis/rivwebpyapi/tests/list_services.py create mode 120000 apis/rivwebpyapi/tests/rivwebpyapi.py diff --git a/ChangeLog b/ChangeLog index 9b0cc9e6..73c7dbf0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22571,3 +22571,5 @@ 2021-10-28 Fred Gleason * Moved the 'Daylight Saving Time Considerations' section in the Operations Guide to after the 'The RDCatch Main Window' section. +2021-11-04 Fred Gleason + * Added a 'rivwebpyapi' API. diff --git a/apis/Makefile.am b/apis/Makefile.am index 75b568be..33e17693 100644 --- a/apis/Makefile.am +++ b/apis/Makefile.am @@ -2,7 +2,7 @@ ## ## Makefile.am for rivendell/apis ## -## (C) Copyright 2018 Fred Gleason +## (C) Copyright 2018-2021 Fred Gleason ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as @@ -21,7 +21,8 @@ ## Use automake to process this into a Makefile.in SUBDIRS = pypad\ - rivwebcapi + rivwebcapi\ + rivwebpyapi CLEANFILES = *~\ *.idb\ diff --git a/apis/rivwebpyapi/Makefile.am b/apis/rivwebpyapi/Makefile.am new file mode 100644 index 00000000..82cd272e --- /dev/null +++ b/apis/rivwebpyapi/Makefile.am @@ -0,0 +1,39 @@ +## Makefile.am +## +## Automake.am for Python binding for the Rivendell Web API +## +## (C) Copyright 2021 Fred Gleason +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as +## published by the Free Software Foundation; either version 2 of +## the License, or (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public +## License along with this program; if not, write to the Free Software +## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +## +## Use automake to process this into a Makefile.in + +SUBDIRS = api\ + tests + +CLEANFILES = *~\ + *.idb\ + *ilk\ + *.obj\ + *.pdb\ + *.qm\ + moc_* + +MAINTAINERCLEANFILES = *~\ + *.tar.gz\ + aclocal.m4\ + configure\ + Makefile.in\ + moc_* diff --git a/apis/rivwebpyapi/api/Makefile.am b/apis/rivwebpyapi/api/Makefile.am new file mode 100644 index 00000000..be23e219 --- /dev/null +++ b/apis/rivwebpyapi/api/Makefile.am @@ -0,0 +1,39 @@ +## Makefile.am +## +## Automake.am for Python binding for the Rivendell Web API +## +## (C) Copyright 2021 Fred Gleason +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as +## published by the Free Software Foundation; either version 2 of +## the License, or (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public +## License along with this program; if not, write to the Free Software +## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +## +## Use automake to process this into a Makefile.in + +rivendelldir = $(pyexecdir) +rivendell_PYTHON = rivwebpyapi.py + +CLEANFILES = *~\ + *.idb\ + *ilk\ + *.obj\ + *.pdb\ + *.qm\ + moc_* + +MAINTAINERCLEANFILES = *~\ + *.tar.gz\ + aclocal.m4\ + configure\ + Makefile.in\ + moc_* diff --git a/apis/rivwebpyapi/api/rivwebpyapi.py b/apis/rivwebpyapi/api/rivwebpyapi.py new file mode 100755 index 00000000..15dba3d0 --- /dev/null +++ b/apis/rivwebpyapi/api/rivwebpyapi.py @@ -0,0 +1,69 @@ +# pypad.py +# +# Python binding for the Rivendell Web API +# +# (C) Copyright 2021 Fred Gleason +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +import requests +import untangle + +class RivWebPyApi(object): + """ + Create a 'RivWebPyApi' object for accessing the Web API. + """ + + def __init__(self,url,username,passwd): + """ + Initialize a WebAPI connection to a Rivendell instance. + + Takes three arguments: + + url - The URL of the service. Typically of the form + 'http://rivendell.example.com/rd-bin/rdxport.cgi' (string). + + username - The Rivendell Username to connect as (string). + + password - The password for the specified Rivendell Username + (string). + """ + self.__connection_url=url + self.__connection_username=username + self.__connection_password=passwd + + def ListServices(self,trackable): + """ + Returns a list of Rivendell services (Element). + + Takes one argument: + + trackable - Boolean. If True, return will include only services that + are configured to support voice tracking. If False, + all configured services will be included. + """ + trackarg='0' + if(trackable): + trackarg='1' + postdata={ + 'COMMAND': '21', + 'LOGIN_NAME': self.__connection_username, + 'PASSWORD': self.__connection_password, + 'TRACKABLE': trackarg + } + r=requests.post(self.__connection_url,data=postdata) + if(r.status_code!=requests.codes.ok): + r.raise_for_status() + return untangle.parse(r.text) diff --git a/apis/rivwebpyapi/tests/Makefile.am b/apis/rivwebpyapi/tests/Makefile.am new file mode 100644 index 00000000..a8b36c46 --- /dev/null +++ b/apis/rivwebpyapi/tests/Makefile.am @@ -0,0 +1,38 @@ +## Makefile.am +## +## Automake.am for Python binding for the Rivendell Web API +## +## (C) Copyright 2021 Fred Gleason +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as +## published by the Free Software Foundation; either version 2 of +## the License, or (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public +## License along with this program; if not, write to the Free Software +## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +## +## Use automake to process this into a Makefile.in + +EXTRA_DIST = list_services.py + +CLEANFILES = *~\ + *.idb\ + *ilk\ + *.obj\ + *.pdb\ + *.qm\ + moc_* + +MAINTAINERCLEANFILES = *~\ + *.tar.gz\ + aclocal.m4\ + configure\ + Makefile.in\ + moc_* diff --git a/apis/rivwebpyapi/tests/list_services.py b/apis/rivwebpyapi/tests/list_services.py new file mode 100755 index 00000000..32036bad --- /dev/null +++ b/apis/rivwebpyapi/tests/list_services.py @@ -0,0 +1,61 @@ +#!%PYTHON_BANGPATH% + +# login_test.py +# +# RivWebPyApi test script for Rivendell +# +# Attempt to log in to the Rivendell Web API +# +# (C) Copyright 2021 Fred Gleason +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +import getpass +import rivwebpyapi +import sys + +url=''; +username='' +password='' + +# +# Get login parameters +# +usage='login_test --url= --username=' +for arg in sys.argv: + f0=arg.split('=') + if(len(f0)==2): + if(f0[0]=='--url'): + url=f0[1] + if(f0[0]=='--username'): + username=f0[1] + if(f0[0]=='--password'): + password=f0[1] +if(not password): + password=getpass.getpass() +if((not url)or(not username)): + print(usage) + sys.exit(1) + + +webapi=rivwebpyapi.RivWebPyApi(url=url,username=username,passwd=password) +services=webapi.ListServices(False) +for svc in services.serviceList.service: + print('NAME: '+svc.name.cdata) + if(svc.description.cdata): + print('DESCRIPTION: '+svc.description.cdata) + else: + print('DESCRIPTION: [none]') + print('') diff --git a/apis/rivwebpyapi/tests/rivwebpyapi.py b/apis/rivwebpyapi/tests/rivwebpyapi.py new file mode 120000 index 00000000..0ea3f162 --- /dev/null +++ b/apis/rivwebpyapi/tests/rivwebpyapi.py @@ -0,0 +1 @@ +../api/rivwebpyapi.py \ No newline at end of file diff --git a/configure.ac b/configure.ac index b257208f..4fc5d470 100644 --- a/configure.ac +++ b/configure.ac @@ -610,6 +610,9 @@ AC_CONFIG_FILES([rivendell.spec \ apis/rivwebcapi/rivwebcapi.pc \ apis/rivwebcapi/rivwebcapi/Makefile \ apis/rivwebcapi/tests/Makefile \ + apis/rivwebpyapi/Makefile \ + apis/rivwebpyapi/api/Makefile \ + apis/rivwebpyapi/tests/Makefile \ lib/rdpaths.h \ lib/Makefile \ rdhpi/Makefile \