@@ -49,11 +49,15 @@ def __repr__(self):
4949 return '<Foxx in {}>' .format (self ._conn .db_name )
5050
5151 # noinspection PyMethodMayBeStatic
52- def _encode_file (self , filename ):
53- """Encode file into multipart data.
52+ def _encode (self , filename , config , deps ):
53+ """Encode file, configuration and dependencies into multipart data.
5454
5555 :param filename: Full path to the javascript file or zip bundle.
5656 :type filename: str
57+ :param config: Configuration values.
58+ :type config: dict
59+ :param deps: Dependency settings.
60+ :type deps: dict
5761 :return: Multipart encoder object
5862 :rtype: requests_toolbelt.MultipartEncoder
5963 """
@@ -65,9 +69,16 @@ def _encode_file(self, filename):
6569 else :
6670 raise ValueError ('File extension must be .zip or .js' )
6771
68- return MultipartEncoder (
69- fields = {'source' : (None , open (filename , 'rb' ), source_type )}
70- )
72+ fields = {'source' : (None , open (filename , 'rb' ), source_type )}
73+
74+ if config is not None :
75+ fields ['configuration' ] = \
76+ self ._conn .serialize (config ).encode ('utf-8' )
77+ if deps is not None :
78+ fields ['dependencies' ] = \
79+ self ._conn .serialize (deps ).encode ('utf-8' )
80+
81+ return MultipartEncoder (fields = fields )
7182
7283 def services (self , exclude_system = False ):
7384 """List installed services.
@@ -182,7 +193,9 @@ def create_service_with_file(self,
182193 filename ,
183194 development = None ,
184195 setup = None ,
185- legacy = None ):
196+ legacy = None ,
197+ config = None ,
198+ dependencies = None ):
186199 """Install a new service using a javascript file or zip bundle.
187200
188201 :param mount: Service mount path (e.g "/_admin/aardvark").
@@ -195,6 +208,10 @@ def create_service_with_file(self,
195208 :type setup: bool
196209 :param legacy: Install the service in 2.8 legacy compatibility mode.
197210 :type legacy: bool
211+ :param config: Configuration values.
212+ :type config: dict
213+ :param dependencies: Dependency settings.
214+ :type dependencies: dict
198215 :return: Service metadata.
199216 :rtype: dict
200217 :raise arango.exceptions.FoxxServiceCreateError: If install fails.
@@ -207,7 +224,7 @@ def create_service_with_file(self,
207224 if legacy is not None :
208225 params ['legacy' ] = legacy
209226
210- data = self ._encode_file (filename )
227+ data = self ._encode (filename , config , dependencies )
211228 request = Request (
212229 method = 'post' ,
213230 endpoint = '/_api/foxx' ,
@@ -294,7 +311,9 @@ def update_service_with_file(self,
294311 teardown = None ,
295312 setup = None ,
296313 legacy = None ,
297- force = None ):
314+ force = None ,
315+ config = None ,
316+ dependencies = None ):
298317 """Update (upgrade) a service using a javascript file or zip bundle.
299318
300319 :param mount: Service mount path (e.g "/_admin/aardvark").
@@ -309,6 +328,10 @@ def update_service_with_file(self,
309328 :type legacy: bool
310329 :param force: Force update if no service is found.
311330 :type force: bool
331+ :param config: Configuration values.
332+ :type config: dict
333+ :param dependencies: Dependency settings.
334+ :type dependencies: dict
312335 :return: Updated service metadata.
313336 :rtype: dict
314337 :raise arango.exceptions.FoxxServiceUpdateError: If update fails.
@@ -323,7 +346,7 @@ def update_service_with_file(self,
323346 if force is not None :
324347 params ['force' ] = force
325348
326- data = self ._encode_file (filename )
349+ data = self ._encode (filename , config , dependencies )
327350 request = Request (
328351 method = 'patch' ,
329352 endpoint = '/_api/foxx/service' ,
@@ -410,7 +433,9 @@ def replace_service_with_file(self,
410433 teardown = None ,
411434 setup = None ,
412435 legacy = None ,
413- force = None ):
436+ force = None ,
437+ config = None ,
438+ dependencies = None ):
414439 """Replace a service using a javascript file or zip bundle.
415440
416441 :param mount: Service mount path (e.g "/_admin/aardvark").
@@ -425,6 +450,10 @@ def replace_service_with_file(self,
425450 :type legacy: bool
426451 :param force: Force install if no service is found.
427452 :type force: bool
453+ :param config: Configuration values.
454+ :type config: dict
455+ :param dependencies: Dependency settings.
456+ :type dependencies: dict
428457 :return: Replaced service metadata.
429458 :rtype: dict
430459 :raise arango.exceptions.FoxxServiceReplaceError: If replace fails.
@@ -439,7 +468,7 @@ def replace_service_with_file(self,
439468 if force is not None :
440469 params ['force' ] = force
441470
442- data = self ._encode_file (filename )
471+ data = self ._encode (filename , config , dependencies )
443472 request = Request (
444473 method = 'put' ,
445474 endpoint = '/_api/foxx/service' ,
0 commit comments