diff --git a/ChangeLog b/ChangeLog index 19c64f19..9db5468e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22711,3 +22711,5 @@ 2021-12-08 Fred Gleason * Modified the 'rivwebpyapi.Import()' method to return a dictionary containing the cart and cut numbers of the import destination. +2021-12-08 Fred Gleason + * Added a 'LockLog()' method to the 'rivwebpyapi' API. diff --git a/apis/rivwebpyapi/api/rivwebpyapi.py b/apis/rivwebpyapi/api/rivwebpyapi.py index 054f4cf5..bf038db3 100755 --- a/apis/rivwebpyapi/api/rivwebpyapi.py +++ b/apis/rivwebpyapi/api/rivwebpyapi.py @@ -1640,6 +1640,77 @@ class rivwebpyapi(object): return handler.output()[0] + def LockLog(self,log_name,operation,guid): + """ + Manage the lock for the specified log (dictionary). + + Takes the following argument: + + log_name - The name of the log for which to create the write lock + (string) + + operation - The operation to perform. Valid values are 'CREATE', + 'UPDATE' and 'CLEAR'. + """ + + if(not log_name): + raise ValueError('invalid log name') + if((operation!='CREATE')and(operation!='UPDATE')and + (operation!='CLEAR')): + raise ValueError('invalid lock operation') + + # + # Build the WebAPI arguments + # + postdata={ + 'COMMAND': '34', + 'LOGIN_NAME': self.__connection_username, + 'PASSWORD': self.__connection_password, + 'LOG_NAME': str(log_name), + 'OPERATION': str(operation), + 'LOCK_GUID': str(guid) + } + + # + # Fetch the XML + # + r=requests.post(self.__connection_url,data=postdata) + if(r.status_code!=requests.codes.ok): + self.__throwError(response=r) + + # + # Generate the output dictionary + # + fields={ + 'result': 'boolean', + 'logName': 'string', + 'lockGuid': 'string', + 'address': 'string', + 'lockTimeout': 'integer' + } + handler=RivWebPyApi_ListHandler(base_tag='logLock',fields=fields) + xml.sax.parseString(r.text,handler) + + return handler.output()[0] + + + + + + + + + + + + + + + + + + + def RemoveCart(self,cart_number): """ Remove a cart from the cart library. diff --git a/apis/rivwebpyapi/tests/Makefile.am b/apis/rivwebpyapi/tests/Makefile.am index 60c53e3b..9d5f4f20 100644 --- a/apis/rivwebpyapi/tests/Makefile.am +++ b/apis/rivwebpyapi/tests/Makefile.am @@ -43,6 +43,7 @@ EXTRA_DIST = add_cart.py\ list_scheduler_codes.py\ list_services.py\ list_system_settings.py\ + lock_log.py\ remove_cart.py\ remove_cut.py\ unassign_sched_code.py diff --git a/apis/rivwebpyapi/tests/lock_log.py b/apis/rivwebpyapi/tests/lock_log.py new file mode 100755 index 00000000..4085fbf7 --- /dev/null +++ b/apis/rivwebpyapi/tests/lock_log.py @@ -0,0 +1,101 @@ +#!%PYTHON_BANGPATH% + +# lock_log.py +# +# RivWebPyApi test script for Rivendell +# +# Test the LockLog Web API call +# +# (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 +def eprint(*args,**kwargs): + print(*args,file=sys.stderr,**kwargs) + +url=''; +username='' +password='' +log_name='' +operation='' +guid='' + +# +# Get login parameters +# +usage='import --url= --username= --log-name= --operation=CREATE|UPDATE|CLEAR --guid=' +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(f0[0]=='--log-name'): + log_name=f0[1] + if(f0[0]=='--operation'): + operation=f0[1] + if(f0[0]=='--guid'): + guid=f0[1] + +if(not password): + password=getpass.getpass() +if((not url)or(not username)): + eprint(usage) + sys.exit(1) +if(not log_name): + eprint('you must supply "--log-name"') + sys.exit(1) +if(not operation): + eprint('you must supply "--operation"') + sys.exit(1) +if((operation!='CREATE')and(operation!='UPDATE')and(operation!='CLEAR')): + eprint('invalid "--operation" specified'); + sys.exit(1) +if((operation!='CREATE')and(not guid)): + eprint('you must supply "--guid"') + sys.exit(1) + +# +# Execute +# +webapi=rivwebpyapi.rivwebpyapi(url=url,username=username,password=password) +try: + result=webapi.LockLog(log_name=log_name,operation=operation,guid=guid) +except rivwebpyapi.RivWebPyError as err: + eprint('*** ERROR ***') + eprint('Response Code: '+str(err.responseCode)) + eprint('ErrorString: '+str(err.errorString)) + eprint('*************') + eprint('') + sys.exit(1) + +# +# Display the result +# +print('') +print('RESULT:') +print('result: '+str(result['result'])) +print('logName: '+str(result['logName'])) +print('lockGuid: '+str(result['lockGuid'])) +print('address: '+str(result['address'])) +print('lockTimeout: '+str(result['address'])) +print('') +