@@ -230,7 +230,8 @@ def update_service(self,
230230 dependencies = None ,
231231 teardown = None ,
232232 setup = None ,
233- legacy = None ):
233+ legacy = None ,
234+ force = None ):
234235 """Update (upgrade) a service.
235236
236237 :param mount: Service mount path (e.g "/_admin/aardvark").
@@ -247,8 +248,10 @@ def update_service(self,
247248 :type teardown: bool
248249 :param setup: Run service setup script.
249250 :type setup: bool
250- :param legacy: Install the service in 2.8 legacy compatibility mode.
251+ :param legacy: Update the service in 2.8 legacy compatibility mode.
251252 :type legacy: bool
253+ :param force: Force update if no service is found.
254+ :type force: bool
252255 :return: Updated service metadata.
253256 :rtype: dict
254257 :raise arango.exceptions.FoxxServiceUpdateError: If update fails.
@@ -260,6 +263,8 @@ def update_service(self,
260263 params ['setup' ] = setup
261264 if legacy is not None :
262265 params ['legacy' ] = legacy
266+ if force is not None :
267+ params ['force' ] = force
263268
264269 data = {}
265270 if source is not None :
@@ -283,52 +288,56 @@ def response_handler(resp):
283288
284289 return self ._execute (request , response_handler )
285290
286- # TODO Remove once method is confirmed to be not supported
287- # def update_service_by_file(self,
288- # mount,
289- # filename=None,
290- # teardown=None,
291- # setup=None,
292- # legacy=None):
293- # """Update (upgrade) a service using a javascript file or zip bundle.
294- #
295- # :param mount: Service mount path (e.g "/_admin/aardvark").
296- # :type mount: str | unicode
297- # :param filename: Full path to the javascript file or zip bundle.
298- # :type filename: str | unicode
299- # :param teardown: Run service teardown script.
300- # :type teardown: bool
301- # :param setup: Run service setup script.
302- # :type setup: bool
303- # :param legacy: Install the service in 2.8 legacy compatibility mode.
304- # :type legacy: bool
305- # :return: Updated service metadata.
306- # :rtype: dict
307- # :raise arango.exceptions.FoxxServiceUpdateError: If update fails.
308- # """
309- # params = {'mount': mount}
310- # if teardown is not None:
311- # params['teardown'] = teardown
312- # if setup is not None:
313- # params['setup'] = setup
314- # if legacy is not None:
315- # params['legacy'] = legacy
316- #
317- # data = self._encode_file(filename)
318- # request = Request(
319- # method='patch',
320- # endpoint='/_api/foxx',
321- # params=params,
322- # data=data,
323- # headers={'content-type': data.content_type}
324- # )
325- #
326- # def response_handler(resp):
327- # if not resp.is_success:
328- # raise FoxxServiceUpdateError(resp, request)
329- # return resp.body
330- #
331- # return self._execute(request, response_handler)
291+ def update_service_with_file (self ,
292+ mount ,
293+ filename = None ,
294+ teardown = None ,
295+ setup = None ,
296+ legacy = None ,
297+ force = None ):
298+ """Update (upgrade) a service using a javascript file or zip bundle.
299+
300+ :param mount: Service mount path (e.g "/_admin/aardvark").
301+ :type mount: str | unicode
302+ :param filename: Full path to the javascript file or zip bundle.
303+ :type filename: str | unicode
304+ :param teardown: Run service teardown script.
305+ :type teardown: bool
306+ :param setup: Run service setup script.
307+ :type setup: bool
308+ :param legacy: Update the service in 2.8 legacy compatibility mode.
309+ :type legacy: bool
310+ :param force: Force update if no service is found.
311+ :type force: bool
312+ :return: Updated service metadata.
313+ :rtype: dict
314+ :raise arango.exceptions.FoxxServiceUpdateError: If update fails.
315+ """
316+ params = {'mount' : mount }
317+ if teardown is not None :
318+ params ['teardown' ] = teardown
319+ if setup is not None :
320+ params ['setup' ] = setup
321+ if legacy is not None :
322+ params ['legacy' ] = legacy
323+ if force is not None :
324+ params ['force' ] = force
325+
326+ data = self ._encode_file (filename )
327+ request = Request (
328+ method = 'patch' ,
329+ endpoint = '/_api/foxx/service' ,
330+ params = params ,
331+ data = data ,
332+ headers = {'content-type' : data .content_type }
333+ )
334+
335+ def response_handler (resp ):
336+ if not resp .is_success :
337+ raise FoxxServiceUpdateError (resp , request )
338+ return resp .body
339+
340+ return self ._execute (request , response_handler )
332341
333342 def replace_service (self ,
334343 mount ,
@@ -355,7 +364,7 @@ def replace_service(self,
355364 :type teardown: bool
356365 :param setup: Run service setup script.
357366 :type setup: bool
358- :param legacy: Install the service in 2.8 legacy compatibility mode.
367+ :param legacy: Replace the service in 2.8 legacy compatibility mode.
359368 :type legacy: bool
360369 :param force: Force install if no service is found.
361370 :type force: bool
@@ -395,57 +404,56 @@ def response_handler(resp):
395404
396405 return self ._execute (request , response_handler )
397406
398- # TODO Remove once method is confirmed to be not supported
399- # def replace_service_by_file(self,
400- # mount,
401- # filename=None,
402- # teardown=None,
403- # setup=None,
404- # legacy=None,
405- # force=None):
406- # """Replace a service using a javascript file or zip bundle.
407- #
408- # :param mount: Service mount path (e.g "/_admin/aardvark").
409- # :type mount: str | unicode
410- # :param filename: Full path to the javascript file or zip bundle.
411- # :type filename: str | unicode
412- # :param teardown: Run service teardown script.
413- # :type teardown: bool
414- # :param setup: Run service setup script.
415- # :type setup: bool
416- # :param legacy: Install the service in 2.8 legacy compatibility mode.
417- # :type legacy: bool
418- # :param force: Force install if no service is found.
419- # :type force: bool
420- # :return: Replaced service metadata.
421- # :rtype: dict
422- # :raise arango.exceptions.FoxxServiceReplaceError: If replace fails.
423- # """
424- # params = {'mount': mount}
425- # if teardown is not None:
426- # params['teardown'] = teardown
427- # if setup is not None:
428- # params['setup'] = setup
429- # if legacy is not None:
430- # params['legacy'] = legacy
431- # if force is not None:
432- # params['force'] = force
433- #
434- # data = self._encode_file(filename)
435- # request = Request(
436- # method='put',
437- # endpoint='/_api/foxx',
438- # params=params,
439- # data=data,
440- # headers={'content-type': data.content_type}
441- # )
442- #
443- # def response_handler(resp):
444- # if not resp.is_success:
445- # raise FoxxServiceReplaceError(resp, request)
446- # return resp.body
447- #
448- # return self._execute(request, response_handler)
407+ def replace_service_with_file (self ,
408+ mount ,
409+ filename = None ,
410+ teardown = None ,
411+ setup = None ,
412+ legacy = None ,
413+ force = None ):
414+ """Replace a service using a javascript file or zip bundle.
415+
416+ :param mount: Service mount path (e.g "/_admin/aardvark").
417+ :type mount: str | unicode
418+ :param filename: Full path to the javascript file or zip bundle.
419+ :type filename: str | unicode
420+ :param teardown: Run service teardown script.
421+ :type teardown: bool
422+ :param setup: Run service setup script.
423+ :type setup: bool
424+ :param legacy: Replace the service in 2.8 legacy compatibility mode.
425+ :type legacy: bool
426+ :param force: Force install if no service is found.
427+ :type force: bool
428+ :return: Replaced service metadata.
429+ :rtype: dict
430+ :raise arango.exceptions.FoxxServiceReplaceError: If replace fails.
431+ """
432+ params = {'mount' : mount }
433+ if teardown is not None :
434+ params ['teardown' ] = teardown
435+ if setup is not None :
436+ params ['setup' ] = setup
437+ if legacy is not None :
438+ params ['legacy' ] = legacy
439+ if force is not None :
440+ params ['force' ] = force
441+
442+ data = self ._encode_file (filename )
443+ request = Request (
444+ method = 'put' ,
445+ endpoint = '/_api/foxx/service' ,
446+ params = params ,
447+ data = data ,
448+ headers = {'content-type' : data .content_type }
449+ )
450+
451+ def response_handler (resp ):
452+ if not resp .is_success :
453+ raise FoxxServiceReplaceError (resp , request )
454+ return resp .body
455+
456+ return self ._execute (request , response_handler )
449457
450458 def delete_service (self , mount , teardown = None ):
451459 """Uninstall a service.
0 commit comments