Source code for schrodinger.application.steps.licensing
from schrodinger.utils import license
[docs]class LicenseMixin:
"""
A mixin to ensure that a step uses a `LICENSE_KEY` license.
To be mixed in with a `stepper.ReduceStep`.
Subclasses need to define `LICENSE_KEY`.
If no licenses are available when the step is executed an `EXCEPTION` will
be raised.
"""
LICENSE_KEY = None
NO_MORE_LICENSES = 'No license tokens available.'
EXCEPTION = RuntimeError
[docs] def reduceFunction(self, inputs):
"""
Perform the step with checking out (and back in) of the license.
See also `stepper.ReduceStep.reduceFunction`.
"""
lic = license.License(self.LICENSE_KEY)
try:
if not lic.isValid():
raise self.EXCEPTION(self.NO_MORE_LICENSES)
outputs = super().reduceFunction(inputs)
finally:
lic.checkin()
return outputs
[docs] def getLicenseRequirements(self):
required_licenses = super().getLicenseRequirements()
required_licenses[self.LICENSE_KEY] = 1
return required_licenses