diff --git a/mutalyzer/Scheduler.py b/mutalyzer/Scheduler.py index f82671a709cc553172c4e2082220978049b47c0b..f3ad60e6d86331722752e957402d5b17f45ab6d5 100644 --- a/mutalyzer/Scheduler.py +++ b/mutalyzer/Scheduler.py @@ -97,9 +97,9 @@ class Scheduler() : if settings.TESTING: return - # Mail is set to 'job@webservice' if the batch job was submitted using - # the webservice. - if mailTo == 'job@webservice': + # Mail is set to '<IP ADDRESS>@webservice' if the batch job was + # submitted using the webservice without specifying an email address. + if mailTo.endswith('@webservice'): return #TODO: Handle Connection errors in a try, except clause diff --git a/mutalyzer/services/rpc.py b/mutalyzer/services/rpc.py index 8281da387b4049ffbbdcc7d1410d07cf00d4db66..508cd90530491ea8c0448ee2134fad35ab5c4b4f 100644 --- a/mutalyzer/services/rpc.py +++ b/mutalyzer/services/rpc.py @@ -12,7 +12,7 @@ Mutalyzer RPC services. from __future__ import unicode_literals import binning -from spyne.decorator import srpc +from spyne.decorator import rpc, srpc from spyne.service import ServiceBase from spyne.model.primitive import Integer, Boolean, DateTime, Unicode from spyne.model.complex import Array @@ -71,8 +71,8 @@ class MutalyzerService(ServiceBase): super(MutalyzerService, self).__init__(environ) #__init__ - @srpc(Mandatory.ByteArray, Unicode, Unicode, Unicode, _returns=Unicode) - def submitBatchJob(data, process='NameChecker', argument='', email=None): + @rpc(Mandatory.ByteArray, Unicode, Unicode, Unicode, _returns=Unicode) + def submitBatchJob(ctx, data, process='NameChecker', argument='', email=None): """ Submit a batch job. @@ -80,10 +80,10 @@ class MutalyzerService(ServiceBase): website <https://mutalyzer.nl/batch>. Batch jobs are processed using round-robin scheduling grouped by email - address. Per email address, jobs are processed sequentially in order - of submission. Jobs with no email address specified end up in a shared - group. This means your job is likely to be processed sooner if you - provide an email address. + address (or client IP address if no email address is specified). Per + email address, jobs are processed sequentially in order of submission. + This means you will not see any progress on this job until all your + earlier jobs have finished. On error an exception is raised: - detail: Human readable description of the error. @@ -147,7 +147,17 @@ class MutalyzerService(ServiceBase): if job is None: raise Fault('EPARSE', 'Could not parse input file, please check your file format.') - result_id = scheduler.addJob(email or 'job@webservice', job, columns, + if not email: + # If no email address is specified, we create a fake one based on + # the caller's IP address. This makes sure the scheduler processes + # jobs grouped by user. + try: + address = unicode(ctx.transport.req_env['REMOTE_ADDR']) + except (AttributeError, KeyError): + address = 'localhost' + email = '%s@webservice' % address + + result_id = scheduler.addJob(email, job, columns, batch_types[process], argument) return result_id