Skip to content

Commit 5f50e6d

Browse files
committed
add pagination support
1 parent bbe7fbf commit 5f50e6d

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

kandji2snipe

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -469,31 +469,41 @@ def search_snipe_asset(serial):
469469

470470
# Function to get all the asset models from Snipe-IT
471471
def get_snipe_models():
472-
api_url = '{}/api/v1/models'.format(snipe_base)
473-
logging.debug('Calling against: {}'.format(api_url))
474-
response = requests.get(api_url, headers=snipeheaders, verify=user_args.do_not_verify_ssl, hooks={'response': request_handler})
475-
if response.status_code == 200:
476-
jsonresponse = response.json()
477-
logging.info("Got a valid response that should have {} models.".format(jsonresponse['total']))
478-
if jsonresponse['total'] <= len(jsonresponse['rows']) :
479-
return jsonresponse
472+
models = []
473+
limit = 100
474+
offset = 0
475+
while True:
476+
api_url = "{}/api/v1/models?limit={}&offset={}".format(
477+
snipe_base, limit, offset
478+
)
479+
480+
logging.debug(f"Calling against: {api_url}")
481+
482+
response = requests.get(
483+
api_url,
484+
headers=snipeheaders,
485+
verify=user_args.do_not_verify_ssl,
486+
hooks={"response": request_handler},
487+
)
488+
if response.status_code == 200:
489+
jsonresponse = response.json()
490+
logging.info(
491+
"We found {} Assets and already loaded {}".format(
492+
jsonresponse["total"],len(models)
493+
)
494+
)
495+
models.extend(jsonresponse["rows"])
496+
offset += limit
497+
if len(jsonresponse["rows"]) < limit:
498+
return {"rows": models}
499+
480500
else:
481-
logging.info("We didn't get enough results so we need to get them again.")
482-
api_url = '{}/api/v1/models?limit={}'.format(snipe_base, jsonresponse['total'])
483-
newresponse = requests.get(api_url, headers=snipeheaders, verify=user_args.do_not_verify_ssl, hooks={'response': request_handler})
484-
if response.status_code == 200:
485-
newjsonresponse = newresponse.json()
486-
if newjsonresponse['total'] == len(newjsonresponse['rows']) :
487-
return newjsonresponse
488-
else:
489-
logging.error("Unable to get all models from Snipe-IT")
490-
sys.exit(exit_error_message)
491-
else:
492-
logging.error('When we tried to retreive a list of models, Snipe-IT responded with error status code:{} - {}'.format(response.status_code, response.content))
493-
sys.exit(exit_error_message)
494-
else:
495-
logging.error('When we tried to retreive a list of models, Snipe-IT responded with error status code:{} - {}'.format(response.status_code, response.content))
496-
sys.exit(exit_error_message)
501+
logging.error(
502+
"When we tried to retreive a list of models, Snipe-IT responded with error status code:{} - {}".format(
503+
response.status_code, response.content
504+
)
505+
)
506+
sys.exit(exit_error_message)
497507

498508
# Recursive function returns all users in a Snipe-IT Instance, 100 at a time.
499509
def get_snipe_users(previous=[]):

0 commit comments

Comments
 (0)