@@ -314,6 +314,8 @@ def _func_keys(self, arg):
314
314
{'type' : 'number' , 'optional' : True },
315
315
{'type' : 'number' , 'optional' : True })
316
316
def _func_find_first (self , text , search , start = 0 , end = None ):
317
+ self ._ensure_integer ('find_first' , start , start )
318
+ self ._ensure_integer ('find_first' , end , end )
317
319
return self ._find_impl (
318
320
text ,
319
321
search ,
@@ -328,6 +330,8 @@ def _func_find_first(self, text, search, start = 0, end = None):
328
330
{'type' : 'number' , 'optional' : True },
329
331
{'type' : 'number' , 'optional' : True })
330
332
def _func_find_last (self , text , search , start = 0 , end = None ):
333
+ self ._ensure_integer ('find_last' , start , start )
334
+ self ._ensure_integer ('find_last' , end , end )
331
335
return self ._find_impl (
332
336
text ,
333
337
search ,
@@ -355,13 +359,15 @@ def _find_impl(self, text, search, func, start, end):
355
359
{'type' : 'number' },
356
360
{'type' : 'string' , 'optional' : True })
357
361
def _func_pad_left (self , text , width , padding = ' ' ):
362
+ self ._ensure_non_negative_integer ('pad_left' , 'width' , width )
358
363
return self ._pad_impl (lambda : text .rjust (width , padding ), padding )
359
364
360
365
@signature (
361
366
{'type' : 'string' },
362
367
{'type' : 'number' },
363
368
{'type' : 'string' , 'optional' : True })
364
369
def _func_pad_right (self , text , width , padding = ' ' ):
370
+ self ._ensure_non_negative_integer ('pad_left' , 'width' , width )
365
371
return self ._pad_impl (lambda : text .ljust (width , padding ), padding )
366
372
367
373
def _pad_impl (self , func , padding ):
@@ -378,7 +384,7 @@ def _pad_impl(self, func, padding):
378
384
{'type' : 'string' },
379
385
{'type' : 'number' , 'optional' : True })
380
386
def _func_replace (self , text , search , replacement , count = None ):
381
- self ._ensure_non_negative_optional_integer (
387
+ self ._ensure_non_negative_integer (
382
388
'replace' ,
383
389
'count' ,
384
390
count )
@@ -392,7 +398,7 @@ def _func_replace(self, text, search, replacement, count = None):
392
398
{'type' : 'string' },
393
399
{'type' : 'number' , 'optional' : True })
394
400
def _func_split (self , text , search , count = None ):
395
- self ._ensure_non_negative_optional_integer (
401
+ self ._ensure_non_negative_integer (
396
402
'split' ,
397
403
'count' ,
398
404
count )
@@ -410,7 +416,24 @@ def _func_split(self, text, search, count = None):
410
416
return text .split (search , count )
411
417
return text .split (search )
412
418
413
- def _ensure_non_negative_optional_integer (
419
+ def _ensure_integer (
420
+ self ,
421
+ func_name ,
422
+ param_name ,
423
+ param_value ):
424
+
425
+ if param_value != None :
426
+ if int (param_value ) != param_value :
427
+ raise exceptions .JMESPathError (
428
+ 'invalid-type: {}() expects ${} to be a '
429
+ 'integer, but received {} instead.'
430
+ .format (
431
+ func_name ,
432
+ param_name ,
433
+ param_value
434
+ ))
435
+
436
+ def _ensure_non_negative_integer (
414
437
self ,
415
438
func_name ,
416
439
param_name ,
@@ -419,12 +442,12 @@ def _ensure_non_negative_optional_integer(
419
442
if param_value != None :
420
443
if int (param_value ) != param_value or int (param_value ) < 0 :
421
444
raise exceptions .JMESPathError (
422
- 'syntax-error: replace () expects ${} to be a '
445
+ 'invalid-type: {} () expects ${} to be a '
423
446
'non-negative integer, but received {} instead.'
424
447
.format (
425
448
func_name ,
426
449
param_name ,
427
- param_name
450
+ param_value
428
451
))
429
452
430
453
@signature ({'type' : 'string' }, {'type' : 'string' , 'optional' : True })
0 commit comments