DynamicPyModelDataService.java [src/csip] Revision: Date:
/*
* $Id$
*
* This file is part of the Cloud Services Integration Platform (CSIP),
* a Model-as-a-Service framework, API and application suite.
*
* 2012-2022, Olaf David and others, OMSLab, Colorado State University.
*
* OMSLab licenses this file to you under the MIT license.
* See the LICENSE file in the project root for more information.
*/
package csip;
import csip.api.server.ServiceException;
import csip.api.server.Executable;
import csip.annotations.Author;
import csip.annotations.Description;
import csip.annotations.Documentation;
import csip.annotations.License;
import csip.annotations.Name;
import csip.annotations.Resource;
import csip.annotations.ResourceType;
import csip.annotations.State;
import csip.annotations.VersionInfo;
import csip.utils.Binaries;
import java.io.StringWriter;
import java.lang.annotation.Annotation;
import java.util.logging.Level;
import javax.ws.rs.Path;
@Name("DynPy")
@Description("Dynamic, server-side Python execution.")
@Documentation("https://alm.engr.colostate.edu/csip")
@State(State.STABLE)
@License(License.MIT)
@VersionInfo("$Id$")
@Author(name = "od", email = "<odavid@colostate.edu>", org = "CSU")
@Path("p/dynpy/1.0")
public class DynamicPyModelDataService extends ModelDataService {
static final String PY_SCRIPT = "py_script";
@Override
protected void doProcess() throws Exception {
if (!metainfo().hasName(PY_SCRIPT)) {
throw new ServiceException("Missing Python script in metainfo.");
}
String pyScript = metainfo().getString(PY_SCRIPT);
if (!attachments().hasFile(pyScript)) {
throw new ServiceException("Missing Python attachment: " + pyScript);
}
Resource res = new Resource() {
@Override
public String file() {
try {
return attachments().getFile(pyScript).toString();
} catch (ServiceException ex) {
LOG.log(Level.SEVERE, null, ex);
}
return null;
}
@Override
public ResourceType type() {
return ResourceType.PYTHON3;
}
@Override
public String id() {
return "";
}
@Override
public boolean wine() {
return false;
}
@Override
public String args() {
return "";
}
@Override
public String[] env() {
return new String[]{};
}
@Override
public Class<?> from() {
return Object.class;
}
@Override
public Class<? extends Annotation> annotationType() {
return Resource.class;
}
};
Executable e = Binaries.getResourcePython(res, getWorkspaceDir0(), LOG, this.getClass());
StringWriter err = new StringWriter();
e.redirectError(err);
LOG.info("running : " + e.getName());
int ret = e.exec();
LOG.info("done with exit value: " + ret);
// Not Successful.
if (ret != 0)
throw new ServiceException(err.toString());
}
}