Update offset/limits processing for print jobs

This commit is contained in:
Ross Scroggs
2016-04-26 14:51:45 -07:00
parent d850f5575b
commit 49d1845129

View File

@@ -2122,7 +2122,8 @@ def doPrintPrintJobs():
query = None query = None
age = None age = None
older_or_newer = None older_or_newer = None
offset = limit = None offset = 0
jobLimit = 25
i = 3 i = 3
while i < len(sys.argv): while i < len(sys.argv):
myarg = sys.argv[i].lower().replace(u'_', u'') myarg = sys.argv[i].lower().replace(u'_', u'')
@@ -2178,18 +2179,28 @@ def doPrintPrintJobs():
offset = max(0, int(sys.argv[i+1])) offset = max(0, int(sys.argv[i+1]))
i += 2 i += 2
elif myarg == u'limit': elif myarg == u'limit':
limit = max(1, int(sys.argv[i+1])) jobLimit = max(0, int(sys.argv[i+1]))
i += 2 i += 2
else: else:
print u'ERROR: %s is not a valid argument for "gam print printjobs"' % sys.argv[i] print u'ERROR: %s is not a valid argument for "gam print printjobs"' % sys.argv[i]
sys.exit(2) sys.exit(2)
if sortorder and descending: if sortorder and descending:
sortorder = PRINTJOB_DESCENDINGORDER_MAP[sortorder] sortorder = PRINTJOB_DESCENDINGORDER_MAP[sortorder]
jobs = callGAPI(service=cp.jobs(), function=u'list', jobCount = 0
while True:
limit = 25 if jobLimit == 0 else jobLimit-jobCount
if limit == 0:
break
result = callGAPI(cp.jobs(), u'list',
printerid=printerid, q=query, status=status, sortorder=sortorder, printerid=printerid, q=query, status=status, sortorder=sortorder,
owner=owner, offset=offset, limit=limit) owner=owner, offset=offset, limit=limit)
checkCloudPrintResult(jobs) checkCloudPrintResult(result)
for job in jobs[u'jobs']: newJobs = result[u'range'][u'jobsCount']
if newJobs == 0:
break
jobCount += newJobs
offset += newJobs
for job in result[u'jobs']:
createTime = int(job[u'createTime'])/1000 createTime = int(job[u'createTime'])/1000
if older_or_newer: if older_or_newer:
if older_or_newer == u'older' and createTime > age: if older_or_newer == u'older' and createTime > age:
@@ -2236,7 +2247,7 @@ def doPrintPrinters():
else: else:
print u'ERROR: %s is not a valid argument for "gam print printers"' % sys.argv[i] print u'ERROR: %s is not a valid argument for "gam print printers"' % sys.argv[i]
sys.exit(2) sys.exit(2)
printers = callGAPI(service=cp.printers(), function=u'list', q=query, type=printer_type, connection_status=connection_status, extra_fields=extra_fields) printers = callGAPI(cp.printers(), u'list', q=query, type=printer_type, connection_status=connection_status, extra_fields=extra_fields)
checkCloudPrintResult(printers) checkCloudPrintResult(printers)
for printer in printers[u'printers']: for printer in printers[u'printers']:
createTime = int(printer[u'createTime'])/1000 createTime = int(printer[u'createTime'])/1000
@@ -2561,7 +2572,8 @@ def doPrintJobFetch():
query = None query = None
age = None age = None
older_or_newer = None older_or_newer = None
offset = limit = None offset = 0
jobLimit = 25
i = 4 i = 4
while i < len(sys.argv): while i < len(sys.argv):
myarg = sys.argv[i].lower().replace(u'_', u'') myarg = sys.argv[i].lower().replace(u'_', u'')
@@ -2611,24 +2623,32 @@ def doPrintJobFetch():
offset = max(0, int(sys.argv[i+1])) offset = max(0, int(sys.argv[i+1]))
i += 2 i += 2
elif myarg == u'limit': elif myarg == u'limit':
limit = max(1, int(sys.argv[i+1])) jobLimit = max(0, int(sys.argv[i+1]))
i += 2 i += 2
else: else:
print u'ERROR: %s is not a valid argument for "gam printjobs fetch"' % sys.argv[i] print u'ERROR: %s is not a valid argument for "gam printjobs fetch"' % sys.argv[i]
sys.exit(2) sys.exit(2)
if sortorder and descending: if sortorder and descending:
sortorder = PRINTJOB_DESCENDINGORDER_MAP[sortorder] sortorder = PRINTJOB_DESCENDINGORDER_MAP[sortorder]
result = callGAPI(service=cp.jobs(), function=u'list', valid_chars = u'-_.() abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
ssd = u'{"state": {"type": "DONE"}}'
jobCount = 0
while True:
limit = 25 if jobLimit == 0 else jobLimit-jobCount
if limit == 0:
break
result = callGAPI(cp.jobs(), u'list',
printerid=printerid, q=query, status=status, sortorder=sortorder, printerid=printerid, q=query, status=status, sortorder=sortorder,
owner=owner, offset=offset, limit=limit) owner=owner, offset=offset, limit=limit)
if u'errorCode' in result and result[u'errorCode'] == 413: if u'errorCode' in result and result[u'errorCode'] == 413:
print u'No print jobs.' print u'No print jobs.'
sys.exit(0) sys.exit(0)
checkCloudPrintResult(result) checkCloudPrintResult(result)
valid_chars = u'-_.() abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' newJobs = result[u'range'][u'jobsCount']
ssd = '''{ if newJobs == 0:
"state": {"type": "DONE"} break
}''' jobCount += newJobs
offset += newJobs
for job in result[u'jobs']: for job in result[u'jobs']:
createTime = int(job[u'createTime'])/1000 createTime = int(job[u'createTime'])/1000
if older_or_newer: if older_or_newer:
@@ -2643,8 +2663,8 @@ def doPrintJobFetch():
fileName = u'%s-%s' % (fileName, jobid) fileName = u'%s-%s' % (fileName, jobid)
_, content = cp._http.request(uri=fileUrl, method='GET') _, content = cp._http.request(uri=fileUrl, method='GET')
if writeFile(fileName, content, continueOnError=True): if writeFile(fileName, content, continueOnError=True):
# ticket = callGAPI(service=cp.jobs(), function=u'getticket', jobid=jobid, use_cjt=True) # ticket = callGAPI(cp.jobs(), u'getticket', jobid=jobid, use_cjt=True)
result = callGAPI(service=cp.jobs(), function=u'update', jobid=jobid, semantic_state_diff=ssd) result = callGAPI(cp.jobs(), u'update', jobid=jobid, semantic_state_diff=ssd)
checkCloudPrintResult(result) checkCloudPrintResult(result)
print u'Printed job %s to %s' % (jobid, fileName) print u'Printed job %s to %s' % (jobid, fileName)