From f6e522b790f4f03b2006e2965d1f53ad03ed416b Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Thu, 30 Jun 2011 07:52:29 +0000 Subject: [PATCH] [LMS-2301] example reporting and processing scripts + simple handler and a validator SVN: 21921 --- .../resource/examples/data-set-handler.py | 4 ++ .../examples/data-set-processing-mail.py | 29 ++++++++++ .../resource/examples/data-set-processing.py | 15 +++++ .../examples/data-set-reporting-content.py | 31 ++++++++++ .../examples/data-set-reporting-search.py | 23 ++++++++ .../resource/examples/data-set-reporting.py | 56 +++++++++++++++++++ .../resource/examples/data-set-validator.py | 18 ++++++ 7 files changed, 176 insertions(+) create mode 100644 datastore_server/resource/examples/data-set-handler.py create mode 100644 datastore_server/resource/examples/data-set-processing-mail.py create mode 100644 datastore_server/resource/examples/data-set-processing.py create mode 100644 datastore_server/resource/examples/data-set-reporting-content.py create mode 100644 datastore_server/resource/examples/data-set-reporting-search.py create mode 100644 datastore_server/resource/examples/data-set-reporting.py create mode 100644 datastore_server/resource/examples/data-set-validator.py diff --git a/datastore_server/resource/examples/data-set-handler.py b/datastore_server/resource/examples/data-set-handler.py new file mode 100644 index 00000000000..10e6e80b0da --- /dev/null +++ b/datastore_server/resource/examples/data-set-handler.py @@ -0,0 +1,4 @@ +transaction = service.transaction() +dataSet = transaction.createNewDataSet() +transaction.moveFile(incoming.getAbsolutePath(), dataSet) +dataSet.setExperiment(transaction.getExperiment("/CISD/NEMO/EXP1")) \ No newline at end of file diff --git a/datastore_server/resource/examples/data-set-processing-mail.py b/datastore_server/resource/examples/data-set-processing-mail.py new file mode 100644 index 00000000000..e02266e75b9 --- /dev/null +++ b/datastore_server/resource/examples/data-set-processing-mail.py @@ -0,0 +1,29 @@ +import org.apache.commons.io.IOUtils as IOUtils + +def process(dataSet): + dataSetCode = dataSet.getDataSetCode() + print "script processing " + dataSetCode + processNode(dataSet.getContent().getRootNode(), dataSet.getDataSetCode()) + +def processNode(node, dataSetCode): + print "process node: " + dataSetCode + "/" + node.getRelativePath() + if node.isDirectory(): + for child in node.getChildNodes(): + processNode(child, dataSetCode) + else: + fileAsString = IOUtils.readLines(node.getInputStream()).toString() + fileName = node.getName() + + if fileName.endswith(".txt"): + mailService.createEmailSender().\ + withSubject("processed text file " + fileName).\ + withBody("see the attached file").\ + withAttachedText(fileAsString, fileName).\ + send() + else: + filePath = node.getFile().getPath() + mailService.createEmailSender().\ + withSubject("processed file " + fileName).\ + withBody("see the attached file").\ + withAttachedFile(filePath, fileName).\ + send() \ No newline at end of file diff --git a/datastore_server/resource/examples/data-set-processing.py b/datastore_server/resource/examples/data-set-processing.py new file mode 100644 index 00000000000..6d362162f1a --- /dev/null +++ b/datastore_server/resource/examples/data-set-processing.py @@ -0,0 +1,15 @@ +import org.apache.commons.io.IOUtils as IOUtils + +def process(dataSet): + dataSetCode = dataSet.getDataSetCode() + print "script processing " + dataSetCode + processNode(dataSet.getContent().getRootNode(), dataSet.getDataSetCode()) + +def processNode(node, dataSetCode): + print "process node: " + dataSetCode + "/" + node.getRelativePath() + if node.isDirectory(): + for child in node.getChildNodes(): + processNode(child, dataSetCode) + else: + print "content (" + str(node.getFileLength()) + "): " + \ + IOUtils.readLines(node.getInputStream()).toString() \ No newline at end of file diff --git a/datastore_server/resource/examples/data-set-reporting-content.py b/datastore_server/resource/examples/data-set-reporting-content.py new file mode 100644 index 00000000000..2623cd93242 --- /dev/null +++ b/datastore_server/resource/examples/data-set-reporting-content.py @@ -0,0 +1,31 @@ +import java.util.Date as Date + +CODE = "Code" +FILE_NAME = "File Name" +RELATIVE_PATH = "Relative Path" +LAST_MODIFIED = "Last Modified" +SIZE = "Size" + +def describe(dataSets, tableBuilder): + tableBuilder.addHeader(CODE) + tableBuilder.addHeader(FILE_NAME) + tableBuilder.addHeader(RELATIVE_PATH) + tableBuilder.addHeader(LAST_MODIFIED) + tableBuilder.addHeader(SIZE) + for dataSet in dataSets: + print "script reporting " + dataSet.getDataSetCode() + describeNode(dataSet.getContent().getRootNode(), dataSet.getDataSetCode(), tableBuilder) + + +def describeNode(node, dataSetCode, tableBuilder): + print "describe node: " + dataSetCode + "/" + node.getRelativePath() + if node.isDirectory(): + for child in node.getChildNodes(): + describeNode(child, dataSetCode, tableBuilder) + else: + row = tableBuilder.addRow() + row.setCell(CODE, dataSetCode) + row.setCell(FILE_NAME, node.getName()) + row.setCell(RELATIVE_PATH, node.getRelativePath()) + row.setCell(LAST_MODIFIED, Date(node.getLastModified())) + row.setCell(SIZE, node.getFileLength()) \ No newline at end of file diff --git a/datastore_server/resource/examples/data-set-reporting-search.py b/datastore_server/resource/examples/data-set-reporting-search.py new file mode 100644 index 00000000000..d174e6329be --- /dev/null +++ b/datastore_server/resource/examples/data-set-reporting-search.py @@ -0,0 +1,23 @@ +CODE = "Data Set Code" +EXPERIMENT_IDENTIFIER = "Experiment Identifier" +EXPERIMENT_TYPE = "Experiment Type" +EXPERIMENT_DESCRIPTION = "Description" + +def describe(dataSets, tableBuilder): + + tableBuilder.addHeader(CODE) + tableBuilder.addHeader(EXPERIMENT_IDENTIFIER) + tableBuilder.addHeader(EXPERIMENT_TYPE) + tableBuilder.addHeader(EXPERIMENT_DESCRIPTION) + + for dataSet in dataSets: + projectIdentifier = "/" + dataSet.getSpaceCode() + "/" + dataSet.getProjectCode() + print "script reporting " + dataSet.getDataSetCode() + " from " + projectIdentifier + experiments = searchService.listExperiments(projectIdentifier) + + for experiment in experiments: + row = tableBuilder.addRow() + row.setCell(CODE, dataSet.getDataSetCode()) + row.setCell(EXPERIMENT_IDENTIFIER, experiment.getExperimentIdentifier()) + row.setCell(EXPERIMENT_TYPE, experiment.getExperimentType()) + row.setCell(EXPERIMENT_DESCRIPTION, experiment.getPropertyValue("DESCRIPTION")) \ No newline at end of file diff --git a/datastore_server/resource/examples/data-set-reporting.py b/datastore_server/resource/examples/data-set-reporting.py new file mode 100644 index 00000000000..31e484dc9a9 --- /dev/null +++ b/datastore_server/resource/examples/data-set-reporting.py @@ -0,0 +1,56 @@ +CODE = "Code" +TYPE = "Type" +SIZE = "Size" +LOCATION = "Location" +SPEED_HINT = "Speed Hint" +MAIN_PATTERN = "Main Data Set Pattern" +MAIN_PATH = "Main Data Set Path" +INSTANCE = "Instance" +SPACE = "Space" +PROJECT = "Project" +EXPERIMENT_CODE = "Experiment Code" +EXPERIMENT_IDENTIFIER = "Experiment Identifier" +EXPERIMENT_TYPE = "Experiment Type" +SAMPLE_CODE = "Sample Code" +SAMPLE_IDENTIFIER = "Sample Identifier" +SAMPLE_TYPE = "Sample Type" + +def describe(dataSets, tableBuilder): + + tableBuilder.addHeader(CODE) + tableBuilder.addHeader(TYPE) + tableBuilder.addHeader(SIZE) + tableBuilder.addHeader(LOCATION) + tableBuilder.addHeader(SPEED_HINT) + tableBuilder.addHeader(MAIN_PATTERN) + tableBuilder.addHeader(MAIN_PATH) + tableBuilder.addHeader(INSTANCE) + tableBuilder.addHeader(SPACE) + tableBuilder.addHeader(PROJECT) + tableBuilder.addHeader(EXPERIMENT_CODE) + tableBuilder.addHeader(EXPERIMENT_IDENTIFIER) + tableBuilder.addHeader(EXPERIMENT_TYPE) + tableBuilder.addHeader(SAMPLE_CODE) + tableBuilder.addHeader(SAMPLE_IDENTIFIER) + tableBuilder.addHeader(SAMPLE_TYPE) + + for dataSet in dataSets: + print "script reporting " + dataSet.getDataSetCode() + + row = tableBuilder.addRow() + row.setCell(CODE, dataSet.getDataSetCode()) + row.setCell(TYPE, dataSet.getDataSetTypeCode()) + row.setCell(SIZE, dataSet.getDataSetSize()) + row.setCell(LOCATION, dataSet.getDataSetLocation()) + row.setCell(SPEED_HINT, dataSet.getSpeedHint()) + row.setCell(MAIN_PATTERN, dataSet.getMainDataSetPattern()) + row.setCell(MAIN_PATH, dataSet.getMainDataSetPath()) + row.setCell(INSTANCE, dataSet.getInstanceCode()) + row.setCell(SPACE, dataSet.getSpaceCode()) + row.setCell(PROJECT, dataSet.getProjectCode()) + row.setCell(EXPERIMENT_CODE, dataSet.getExperimentCode()) + row.setCell(EXPERIMENT_IDENTIFIER, dataSet.getExperimentIdentifier()) + row.setCell(EXPERIMENT_TYPE, dataSet.getExperimentTypeCode()) + row.setCell(SAMPLE_CODE, dataSet.getSampleCode()) + row.setCell(SAMPLE_IDENTIFIER, dataSet.getSampleIdentifier()) + row.setCell(SAMPLE_TYPE, dataSet.getSampleTypeCode()) \ No newline at end of file diff --git a/datastore_server/resource/examples/data-set-validator.py b/datastore_server/resource/examples/data-set-validator.py new file mode 100644 index 00000000000..a6459dad162 --- /dev/null +++ b/datastore_server/resource/examples/data-set-validator.py @@ -0,0 +1,18 @@ +import os + +def validate_data_set_file(file): + + errors = [] + + if file.isFile(): + errors.append(createFileValidationError("'" + file.getPath() + "' is a normal file. Expected a directory.")) + else: + for f in file.listFiles(): + if f.getName().startswith('file'): + pf = open(f.getPath(), "r") + if pf.read().find('invalid') > -1: + errors.append(createFileValidationError("File '" + f.getPath() + "' contains invalid text.")) + else: + errors.append(createFileValidationError("File '" + f.getPath() + "' doesn't match file name pattern 'file*'.")) + + return errors \ No newline at end of file -- GitLab