def testSubmitDatasetHandlerDatasetCreation(self): outputStr = StringIO.StringIO() # Invoke dataset submission program, passing faked form submission parameters SubmitDatasetConfirmationHandler.processDatasetSubmissionForm( TestConfig.formdata, outputStr) # Check that the dataset is created found = SubmitDatasetUtils.ifDatasetExists(self.session, TestConfig.DatasetId) self.assertEquals(found, True, "Dataset Creation Failed!") # Check that the new dataset can be dereferenced in the databank self.session.doHTTP_GET(resource="/" + TestConfig.SiloName + "/datasets/" + TestConfig.DatasetId + "-packed", expect_status=200, expect_reason="OK", accept_type="application/json") # Check that a HTML Response page is returned outputStr.seek(0, os.SEEK_SET) firstLine = outputStr.readline() # self.assertEqual( firstLine, "Content-type: text/html\n", "Submission Handler could not action the client request!") self.assertEqual( firstLine.strip(), "Status: 303 Dataset submission successful", "Submission Handler could not action the client request!") SubmitDatasetUtils.deleteDataset(self.session, TestConfig.DatasetId + "-packed") return
def testSubmitDatasetHandlerDirectorySubmission(self): outputStr = StringIO.StringIO() # Invoke dataset submission program, passing faked form submission parameters SubmitDatasetConfirmationHandler.processDatasetSubmissionForm( TestConfig.formdata, outputStr) # Check that the dataset created for unzipped data can be dereferenced in the databank datasetId = SubmitDatasetUtils.getFormParam('datId', TestConfig.formdata) datasetDir = SubmitDatasetUtils.getFormParam('datDir', TestConfig.formdata) self.session.doHTTP_GET(resource="/" + TestConfig.SiloName + "/datasets/" + datasetId + "-packed", expect_status=200, expect_reason="OK", accept_type="application/json") # Invoke dataset submission program yet again. # This time, bypassing the dataset creation but continuing submittion of data to the already exiting dataset SubmitDatasetConfirmationHandler.processDatasetSubmissionForm( TestConfig.formdata, outputStr) # Check that the dataset created for unzipped data can be dereferenced in the databank self.session.doHTTP_GET(resource="/" + TestConfig.SiloName + "/datasets/" + TestConfig.DatasetId + "-packed", expect_status=200, expect_reason="OK", accept_type="application/json") SubmitDatasetUtils.deleteDataset(self.session, TestConfig.DatasetId + "-packed") return
def testDatasetDeletion(self): SubmitDatasetUtils.createDataset( self.session,TestDatasetName) # Check dataset exists response = self.session.doHTTP_GET( resource = "/" + TestConfig.SiloName + "/datasets/" + TestDatasetName+"-packed", expect_status=200, expect_reason="OK", accept_type="application/json") # Test the dataset deletion SubmitDatasetUtils.deleteDataset( self.session,TestDatasetName+"-packed") # Test dataset no longer exists response = self.session.doHTTP_GET( resource = "/" + TestConfig.SiloName + "/datasets/" + TestDatasetName+"-packed", expect_status=404, expect_reason="Not Found") return
def testSingleFileSubmission(self): SubmitDatasetUtils.createDataset(self.session, TestDatasetName) # Submit a file to the Dataset localMimeType = TestConfig.FileMimeType localFileContent = SubmitDatasetUtils.getLocalFileContents( TestConfig.FilePath) SubmitDatasetUtils.submitFileToDataset(self.session, TestDatasetName, TestConfig.FileName, TestConfig.FilePath, localMimeType, TestConfig.FileName) # Read from the updated Dataset (remoteMimeType, remoteFileContent) = SubmitDatasetUtils.getFileFromDataset( self.session, TestDatasetName + "-packed", TestConfig.FileName) # Check that the <localFileContent> = <remoteFileContents> self.assertEqual(localMimeType, remoteMimeType, "Difference between local and remote MIME types") self.assertEqual(localFileContent, remoteFileContent, "Difference between local and remote file contents") SubmitDatasetUtils.deleteDataset(self.session, TestDatasetName + "-packed") return
def processLogout(formdata, outputstr): """ Process logout from the DMIRAl system formdata is a dictionary containing parameters from the dataset submission form """ if outputstr: sys.stdout = outputstr try: redirectToLogoutResponsePage(convertToUriString(SuccessStatus)) return except SubmitDatasetUtils.SubmitDatasetError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePageFromException(e)
def processDirectoryListingRequest(formdata, srcdir, outputstr): """ Generate a list of all directory contents - files and subdirectories in a specified directory, expressed relative to the supplied base directory, and write the result to the supplied output stream as as an HTTP application/JSON entity. srcdir source directory containing files, directories and subdirectories outputstr output stream to receive resulting JSON entity """ datdir = SubmitDatasetUtils.getFormParam("datdir", formdata) datdir = "/home/" + datdir logger.debug(" datdir "+ datdir) outputstr.write("Content-type: application/JSON\n") outputstr.write("\n") # end of MIME headers index = datdir.rindex('/') # basedir - base relative to which results are expressed basedir = datdir[:-(len(datdir)-index)] contents = CollectDirectoryContents(datdir, basedir, listFiles=True) json.dump(contents, outputstr, indent=4) return
def testSubmitDatasetHandlerHTMLResponse(self): outputStr = StringIO.StringIO() # Invoke dataset submission program, passing faked form submission parameters SubmitDatasetConfirmationHandler.processDatasetSubmissionForm(TestConfig.formdata, outputStr) #Logger.debug("Output String from output stream: "+outputStr.getvalue()) # print "Output String from output stream: "+outputStr.getvalue() outputStr.seek(0, os.SEEK_SET) firstLine = outputStr.readline() Logger.debug("FirstLine = " + firstLine); #self.assertEqual( firstLine, "Content-type: text/html\n", "Submission Handler could not action the client request!") self.assertEqual( firstLine.strip(), "Status: 303 Dataset submission successful","Submission Handler could not action the client request!") SubmitDatasetUtils.deleteDataset(self.session, TestConfig.DatasetId +"-packed"); #SubmitDatasetUtils.deleteDataset(TestConfig.SiloName, datasetId); return
def submitMetadata(formdata, outputstr): """ Process form data, and print (to stdout) a new HTML page reflecting the outcome of the request. formdata is a dictionary containing parameters from the dataset submission form """ userName = SubmitDatasetUtils.getFormParam("user", formdata) datasetName = SubmitDatasetUtils.getFormParam("datId", formdata) title = SubmitDatasetUtils.getFormParam("title", formdata) description = SubmitDatasetUtils.getFormParam("description", formdata) dirName = SubmitDatasetUtils.getFormParam("datDir", formdata) ElementUriList = [ ElementIdentifierUri, ElementTitleUri, ElementDescriptionUri ] ElementValueList = [datasetName, title, description] if outputstr: sys.stdout = outputstr try: # Update the local manifest manifestFilePath = dirName + str(os.path.sep) + DefaultManifestName Logger.debug("Element List = " + repr(ElementUriList)) Logger.debug("Element Value List = " + repr(ElementValueList)) basedir = "/home" # Check for empty Dataset ID and redirect to an error page if empty if datasetName == "" or datasetName == None: redirectToErrorPage(dirName, convertToUriString(ErrorStatus_1)) # Check for empty dataset Directory and redirect to an error page if empty if dirName == "" or dirName == None: redirectToErrorPage(dirName, convertToUriString(ErrorStatus_2)) # Check for the dataset directory write access. Update the manifest only if the user has write access to the dataset directory. # Redirect to the error page if the user has no write permissions on the selected dataset directory else: if IsDirectoryWritable(dirName): # Update the manifest only if the user has write access to the dataset directory. updateMetadataInDirectoryBeforeSubmission( manifestFilePath, ElementUriList, ElementValueList) # Redirect to the Submission Confirmation page redirectToSubmissionConfirmationPage(dirName) else: redirectToErrorPage(dirName, convertToUriString(ErrorStatus_3)) return except SubmitDatasetUtils.SubmitDatasetError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePageFromException(e)
def testDatasetDeletion(self): SubmitDatasetUtils.createDataset(self.session, TestDatasetName) # Check dataset exists response = self.session.doHTTP_GET(resource="/" + TestConfig.SiloName + "/datasets/" + TestDatasetName + "-packed", expect_status=200, expect_reason="OK", accept_type="application/json") # Test the dataset deletion SubmitDatasetUtils.deleteDataset(self.session, TestDatasetName + "-packed") # Test dataset no longer exists response = self.session.doHTTP_GET(resource="/" + TestConfig.SiloName + "/datasets/" + TestDatasetName + "-packed", expect_status=404, expect_reason="Not Found") return
def submitMetadata(formdata, outputstr): """ Process form data, and print (to stdout) a new HTML page reflecting the outcome of the request. formdata is a dictionary containing parameters from the dataset submission form """ userName = SubmitDatasetUtils.getFormParam("user" , formdata) datasetName = SubmitDatasetUtils.getFormParam("datId" , formdata) title = SubmitDatasetUtils.getFormParam("title" , formdata) description = SubmitDatasetUtils.getFormParam("description" , formdata) dirName = SubmitDatasetUtils.getFormParam("datDir" , formdata) ElementUriList = [ElementIdentifierUri, ElementTitleUri, ElementDescriptionUri] ElementValueList = [datasetName, title, description] if outputstr: sys.stdout = outputstr try: # Update the local manifest manifestFilePath = dirName + str(os.path.sep) + DefaultManifestName Logger.debug("Element List = " + repr(ElementUriList)) Logger.debug("Element Value List = " + repr(ElementValueList)) basedir = "/home" # Check for empty Dataset ID and redirect to an error page if empty if datasetName=="" or datasetName==None: redirectToErrorPage(dirName, convertToUriString(ErrorStatus_1)) # Check for empty dataset Directory and redirect to an error page if empty if dirName=="" or dirName==None: redirectToErrorPage(dirName, convertToUriString(ErrorStatus_2)) # Check for the dataset directory write access. Update the manifest only if the user has write access to the dataset directory. # Redirect to the error page if the user has no write permissions on the selected dataset directory else : if IsDirectoryWritable(dirName) : # Update the manifest only if the user has write access to the dataset directory. updateMetadataInDirectoryBeforeSubmission(manifestFilePath, ElementUriList, ElementValueList) # Redirect to the Submission Confirmation page redirectToSubmissionConfirmationPage(dirName); else : redirectToErrorPage(dirName, convertToUriString(ErrorStatus_3)) return except SubmitDatasetUtils.SubmitDatasetError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePageFromException(e)
def testDatasetCreation(self): # Read original Dataset List from Silo initialDatasetsFromSilo = SubmitDatasetUtils.getDatasetsListFromSilo( self.session) # Formulate the initial datasets received form Databank Silo into a List: <initialDatasetsListFromSilo> initialDatasetsListFromSilo = [] for initialDataset in initialDatasetsFromSilo: initialDatasetsListFromSilo.append(initialDataset) # Create a new Test Dataset SubmitDatasetUtils.createDataset(self.session, TestDatasetName) # Read updated Dataset List from Silo updatedDatasetsFromSilo = SubmitDatasetUtils.getDatasetsListFromSilo( self.session) # Formulate the updated datasets received from Databank Silo into a List: <updatedDatasetListFromSilo> updatedDatasetsListFromSilo = [] for updatedDataset in updatedDatasetsFromSilo: updatedDatasetsListFromSilo.append(updatedDataset) logger.debug("Updated no. of Datasets in Silo " + str(len(updatedDatasetsListFromSilo)) + ", Initial no. of Datasets in Silo " + str(len(initialDatasetsListFromSilo))) # Test that the length <updatedDatasetListFromSilo> = length<initialDatasetsListFromSilo> + 1 self.assertEquals(len(updatedDatasetsListFromSilo), len(initialDatasetsListFromSilo) + 1, "Dataset was not Created Successfully") SubmitDatasetUtils.deleteDataset(self.session, TestDatasetName + "-packed") return
def tearDown(self): try: SubmitDatasetUtils.deleteDataset(self.session, SubmitDatasetUtils.getFormParam('datId', TestConfig.formdata)) SubmitDatasetUtils.deleteDataset(self.session, SubmitDatasetUtils.getFormParam('datId', TestConfig.formdata) +"-packed"); except: pass return
def testDatasetCreation(self): # Read original Dataset List from Silo initialDatasetsFromSilo = SubmitDatasetUtils.getDatasetsListFromSilo(self.session) # Formulate the initial datasets received form Databank Silo into a List: <initialDatasetsListFromSilo> initialDatasetsListFromSilo = [] for initialDataset in initialDatasetsFromSilo: initialDatasetsListFromSilo.append(initialDataset) # Create a new Test Dataset SubmitDatasetUtils.createDataset(self.session,TestDatasetName) # Read updated Dataset List from Silo updatedDatasetsFromSilo = SubmitDatasetUtils.getDatasetsListFromSilo(self.session) # Formulate the updated datasets received from Databank Silo into a List: <updatedDatasetListFromSilo> updatedDatasetsListFromSilo = [] for updatedDataset in updatedDatasetsFromSilo: updatedDatasetsListFromSilo.append(updatedDataset) logger.debug("Updated no. of Datasets in Silo "+str(len(updatedDatasetsListFromSilo))+", Initial no. of Datasets in Silo "+str(len(initialDatasetsListFromSilo))) # Test that the length <updatedDatasetListFromSilo> = length<initialDatasetsListFromSilo> + 1 self.assertEquals(len(updatedDatasetsListFromSilo), len(initialDatasetsListFromSilo)+1, "Dataset was not Created Successfully") SubmitDatasetUtils.deleteDataset( self.session,TestDatasetName+"-packed") return
def testSubmitDatasetHandlerDirectorySubmission(self): outputStr = StringIO.StringIO() # Invoke dataset submission program, passing faked form submission parameters SubmitDatasetConfirmationHandler.processDatasetSubmissionForm(TestConfig.formdata, outputStr) # Check that the dataset created for unzipped data can be dereferenced in the databank datasetId = SubmitDatasetUtils.getFormParam('datId', TestConfig.formdata) datasetDir = SubmitDatasetUtils.getFormParam('datDir', TestConfig.formdata) self.session.doHTTP_GET(resource="/" + TestConfig.SiloName +"/datasets/"+datasetId+"-packed", expect_status=200, expect_reason="OK", accept_type="application/json") # Invoke dataset submission program yet again. # This time, bypassing the dataset creation but continuing submittion of data to the already exiting dataset SubmitDatasetConfirmationHandler.processDatasetSubmissionForm(TestConfig.formdata, outputStr) # Check that the dataset created for unzipped data can be dereferenced in the databank self.session.doHTTP_GET(resource="/" + TestConfig.SiloName +"/datasets/"+TestConfig.DatasetId+"-packed", expect_status=200, expect_reason="OK", accept_type="application/json") SubmitDatasetUtils.deleteDataset(self.session, TestConfig.DatasetId+"-packed") return
def testSingleFileSubmission(self): SubmitDatasetUtils.createDataset(self.session,TestDatasetName) # Submit a file to the Dataset localMimeType = TestConfig.FileMimeType localFileContent = SubmitDatasetUtils.getLocalFileContents(TestConfig.FilePath) SubmitDatasetUtils.submitFileToDataset(self.session, TestDatasetName, TestConfig.FileName, TestConfig.FilePath,localMimeType, TestConfig.FileName) # Read from the updated Dataset (remoteMimeType,remoteFileContent) = SubmitDatasetUtils.getFileFromDataset(self.session, TestDatasetName+"-packed", TestConfig.FileName) # Check that the <localFileContent> = <remoteFileContents> self.assertEqual(localMimeType, remoteMimeType, "Difference between local and remote MIME types") self.assertEqual(localFileContent, remoteFileContent, "Difference between local and remote file contents") SubmitDatasetUtils.deleteDataset(self.session,TestDatasetName+"-packed") return
def testSubmitDatasetHandlerEmptyDirectorySubmission(self): outputStr = StringIO.StringIO() # reset the Dataset Directory to point to an empty directory formdata = TestConfig.formdata.copy() formdata['datDir'] = cgi.MiniFieldStorage('datDir', TestConfig.DatasetsEmptyDirPath) # Invoke dataset submission program, passing faked form submission parameters SubmitDatasetConfirmationHandler.processDatasetSubmissionForm(formdata, outputStr) # Check that the dataset created for unzipped data can be dereferenced in the databank self.session.doHTTP_GET(resource="/" + TestConfig.SiloName +"/datasets/"+TestConfig.DatasetId+"-packed", expect_status=200, expect_reason="OK", accept_type="application/json") # Invoke dataset submission program yet again. # This time, bypassing the dataset creation but continuing submittion of data to the already exiting dataset SubmitDatasetConfirmationHandler.processDatasetSubmissionForm(formdata, outputStr) # Check that the dataset created for unzipped data can be dereferenced in the databank self.session.doHTTP_GET(resource="/" + TestConfig.SiloName +"/datasets/"+TestConfig.DatasetId+"-packed", expect_status=200, expect_reason="OK", accept_type="application/json") SubmitDatasetUtils.deleteDataset(self.session, TestConfig.DatasetId+"-packed") return
def testSubmitDatasetHandlerDatasetDeletion(self): outputStr = StringIO.StringIO() # Invoke dataset submission program, passing faked form submission parameters SubmitDatasetConfirmationHandler.processDatasetSubmissionForm(TestConfig.formdata, outputStr) SubmitDatasetUtils.deleteDataset(self.session, TestConfig.DatasetId) # Check that the dataset is deleted found = SubmitDatasetUtils.ifDatasetExists(self.session, TestConfig.DatasetId) self.assertEquals(found, False, "Dataset Deletion Failed!" ) # Check that the dataset deleted cannot be dereferenced in the databank self.session.doHTTP_GET(resource="/" + TestConfig.SiloName +"/datasets/"+ TestConfig.DatasetId, expect_status=404, expect_reason="Not Found", accept_type="application/json") # Check that a HTML Response page is returned outputStr.seek(0, os.SEEK_SET) firstLine = outputStr.readline() # self.assertEqual( firstLine, "Content-type: text/html\n", "Submission Handler could not action the client request!") self.assertEqual( firstLine.strip(), "Status: 303 Dataset submission successful","Submission Handler could not action the client request!") SubmitDatasetUtils.deleteDataset(self.session, TestConfig.DatasetId+"-packed") return
def getDatasetMetadata(formdata, manifestName ,outputstr): """ Gets the metadata from the manifest.rdf file and formulates it into the JSON format. formdata is a dictionary containing parameters from the dataset submission form """ dirName = SubmitDatasetUtils.getFormParam("directory",formdata) manifestPath = dirName + str(os.path.sep) + manifestName Logger.debug("Manifest Path = " + manifestPath) outputstr.write("Content-type: application/JSON\n") outputstr.write("\n") # end of MIME headers manifestDictionary = ManifestRDFUtils.getDictionaryFromManifest(manifestPath, ElementUriList) Logger.debug("Manifest Dictionary = " + repr(manifestDictionary)) json.dump(manifestDictionary, outputstr, indent=4) Logger.debug("Manifest Dictionary = " + repr(manifestDictionary)) return
def logoutResponseForm(formdata, outputstr): """ Print (to stdout) a new HTML page reflecting the outcome of the logout request. formdata is a dictionary containing parameters from the logout handler """ status = SubmitDatasetUtils.getFormParam("status" , formdata) # print repr(formdata) if outputstr: sys.stdout = outputstr # Generate response headers print "Content-type: text/html" print "Cache-control: no-cache" print # Generate web page pageTemplate = (""" <html> <head> <script type="text/javascript" src="../../jQuery/js/jquery-1.4.2.js"></script> </head> <body> <div> <span><a href="/"><img alt="site_logo" src="/images/Admiral-logo-284x100.png" border="0"/></a></span> </div> <h2>%(status)s</h2> </body> </html> """) print (pageTemplate% { 'status' : status }) return
def logoutResponseForm(formdata, outputstr): """ Print (to stdout) a new HTML page reflecting the outcome of the logout request. formdata is a dictionary containing parameters from the logout handler """ status = SubmitDatasetUtils.getFormParam("status", formdata) # print repr(formdata) if outputstr: sys.stdout = outputstr # Generate response headers print "Content-type: text/html" print "Cache-control: no-cache" print # Generate web page pageTemplate = (""" <html> <head> <script type="text/javascript" src="../../jQuery/js/jquery-1.4.2.js"></script> </head> <body> <div> <span><a href="/"><img alt="site_logo" src="/images/Admiral-logo-284x100.png" border="0"/></a></span> </div> <h2>%(status)s</h2> </body> </html> """) print(pageTemplate % {'status': status}) return
def testEmptyDirectorySubmission(self): # Create a new Test Dataset SubmitDatasetUtils.createDataset(self.session,EmptyTestDatasetName) zipFileName = EmptyTestDatasetName+".zip" zipFilePath = TestConfig.DatasetsBaseDir + os.path.sep + zipFileName # Zip the Empty directory SubmitDatasetUtils.zipLocalDirectory(TestConfig.DatasetsEmptyDirPath,TestConfig.TestPat,zipFilePath) zipFilePath = TestConfig.DatasetsBaseDir + os.path.sep + zipFileName #logger.debug("ZipFileName: " + zipFileName) localZipFileContent = SubmitDatasetUtils.getLocalFileContents(zipFilePath) SubmitDatasetUtils.submitFileToDataset(self.session,EmptyTestDatasetName, zipFileName, zipFilePath, TestConfig.ZipMimeType, zipFileName) # Read from the updated Dataset (remoteMimeType, remoteZipFileContent) = SubmitDatasetUtils.getFileFromDataset(self.session, EmptyTestDatasetName+"-packed", zipFileName) #logger.debug("LocalZipFileContents: " + localZipFileContent) #logger.debug(" RemoteZipFileContents: " + remoteZipFileContent) # Check that the <localFileContent> = <remoteFileContents> self.assertEqual(TestConfig.ZipMimeType, remoteMimeType, "Difference between local and remote zip MIME types") self.assertEqual(localZipFileContent, remoteZipFileContent, "Difference between local and remote zip file contents") #unpack the contents newDatasetName = SubmitDatasetUtils.unzipRemoteFileToNewDataset(self.session, EmptyTestDatasetName, zipFileName) SubmitDatasetUtils.deleteDataset(self.session,EmptyTestDatasetName+"-packed") SubmitDatasetUtils.deleteDataset(self.session,newDatasetName) return
#Logger.debug("datasetName %s, dirName %s, zipFileName %s"%(datasetName,dirName,zipFileName)) SubmitDatasetUtils.zipLocalDirectory(dirName, FilePat, zipFilePath) # Submit zip file to dataset SubmitDatasetUtils.submitFileToDataset(session, datasetName, zipFileName, zipFilePath, ZipMimeType, zipFileName) # Unzip the contents into a new dataset datasetUnzippedName = SubmitDatasetUtils.unzipRemoteFileToNewDataset(session, datasetName, zipFileName) # Redirect to the Dataset Summary page redirectToSubmissionSummaryPage(dirName, datasetName+"-packed", datasetUnzippedName, convertToUriString(SuccessStatus)) return except SubmitDatasetUtils.SubmitDatasetError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePageFromException(e) except session.HTTPSessionError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePage( SubmitDatasetUtils.HTTP_ERROR, e.code, e.reason) SubmitDatasetUtils.printStackTrace() except: SubmitDatasetUtils.printHTMLHeaders() print "<h2>Server error while processing dataset submission</h2>" print "<p>Diagnostic stack trace follows</p>" SubmitDatasetUtils.printStackTrace() raise finally: print "</body>" print "</html>"
def testEmptyDirectorySubmission(self): # Create a new Test Dataset SubmitDatasetUtils.createDataset(self.session, EmptyTestDatasetName) zipFileName = EmptyTestDatasetName + ".zip" zipFilePath = TestConfig.DatasetsBaseDir + os.path.sep + zipFileName # Zip the Empty directory SubmitDatasetUtils.zipLocalDirectory(TestConfig.DatasetsEmptyDirPath, TestConfig.TestPat, zipFilePath) zipFilePath = TestConfig.DatasetsBaseDir + os.path.sep + zipFileName #logger.debug("ZipFileName: " + zipFileName) localZipFileContent = SubmitDatasetUtils.getLocalFileContents( zipFilePath) SubmitDatasetUtils.submitFileToDataset(self.session, EmptyTestDatasetName, zipFileName, zipFilePath, TestConfig.ZipMimeType, zipFileName) # Read from the updated Dataset (remoteMimeType, remoteZipFileContent) = SubmitDatasetUtils.getFileFromDataset( self.session, EmptyTestDatasetName + "-packed", zipFileName) #logger.debug("LocalZipFileContents: " + localZipFileContent) #logger.debug(" RemoteZipFileContents: " + remoteZipFileContent) # Check that the <localFileContent> = <remoteFileContents> self.assertEqual(TestConfig.ZipMimeType, remoteMimeType, "Difference between local and remote zip MIME types") self.assertEqual( localZipFileContent, remoteZipFileContent, "Difference between local and remote zip file contents") #unpack the contents newDatasetName = SubmitDatasetUtils.unzipRemoteFileToNewDataset( self.session, EmptyTestDatasetName, zipFileName) SubmitDatasetUtils.deleteDataset(self.session, EmptyTestDatasetName + "-packed") SubmitDatasetUtils.deleteDataset(self.session, newDatasetName) return
def datasetDetailsErrorForm(formdata, outputstr): """ Print (to stdout) a new HTML page reflecting the outcome of the request formdata is a dictionary containing parameters from the dataset details form """ save_stdout = sys.stdout dirName = SubmitDatasetUtils.getFormParam("dir", formdata) datasetName = SubmitDatasetUtils.getFormParam("id", formdata) status = SubmitDatasetUtils.getFormParam("status", formdata) # print repr(formdata) if outputstr: sys.stdout = outputstr # Generate response headers print "Content-type: text/html" print "Cache-control: no-cache" print # Generate web page dataToolURL = "../../SubmitDatasetUI/html/SubmitDatasetDetails.html" mainURL = "../../../.." resetURL = "../../SubmitDatasetUI/html/SubmitDatasetDetails.html?dir=" + dirName pageTemplate = (""" <html> <head> <script type="text/javascript" src="../../jQuery/js/jquery-1.4.2.js"></script> <!-- Import generic code from the dataset utils package --> <script type="text/javascript" src="../../DatasetUtils/js/DatasetManifestDictionary.js"></script> <!-- import rdfquery libraries --> <script type="text/javascript" src="../../rdfquery/jquery.uri.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.xmlns.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.curie.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.datatype.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdfa.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.datatype.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.xml.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.turtle.js"></script> <!-- Import MochiKit modules: require MochiKit library functions to be fully qualified --> <script type="text/javascript">MochiKit = {__export__: false};</script> <script type="text/javascript" src="../../MochiKit/Base.js"></script> <script type="text/javascript" src="../../MochiKit/Iter.js"></script> <script type="text/javascript" src="../../MochiKit/Logging.js"></script> <!-- Import Admiral functions --> <script type="text/javascript" src="../../Admiral/admiral-base.js"></script> <script type="text/javascript" src="../../Admiral/Error.js"></script> <script type="text/javascript" src="../../Admiral/AsyncComputation.js"></script> <!-- Import admiral configuration details --> <!-- NOTE: these are loaded from an absolute location in the web server --> <script type="text/javascript" src="/js/admiral-config.js"></script> </head> <body> <div> <span><a href="/"><img alt="site_logo" src="/images/Admiral-logo-284x100.png" border="0"/></a></span> </div> <h2>%(status)s%(dirName)s</h2> <h3><a href="%(dataToolURL)s">Return to Dataset details page</a></h3> <h3><a href="%(mainURL)s">Return to ADMIRAL front page</a></h3> </body> </html> """) print( pageTemplate % { 'datasetName': datasetName, 'dirName': dirName, 'dataToolURL': dataToolURL, 'mainURL': mainURL, 'status': status }) return
if IsDirectoryWritable(dirName) : # Update the manifest only if the user has write access to the dataset directory. updateMetadataInDirectoryBeforeSubmission(manifestFilePath, ElementUriList, ElementValueList) # Redirect to the Submission Confirmation page redirectToSubmissionConfirmationPage(dirName); else : redirectToErrorPage(dirName, convertToUriString(ErrorStatus_3)) return except SubmitDatasetUtils.SubmitDatasetError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePageFromException(e) except HttpSession.Session.HTTPSessionError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePage( SubmitDatasetUtils.HTTP_ERROR, e.code, e.reason) SubmitDatasetUtils.printStackTrace() except: SubmitDatasetUtils.printHTMLHeaders() print "<h2>Server error while saving Metadata</h2>" print "<p>Diagnostic stack trace follows</p>" SubmitDatasetUtils.printStackTrace() raise finally: sys.stdout = save_stdout return
def setDatasetsBaseDir(base): global DatasetsBaseDir DatasetsBaseDir = base #global HostName = "zoo-admiral-behav.zoo.ox.ac.uk" #global HostName = "zoo-admiral-silk.zoo.ox.ac.uk" #global HostName = "zoo-admiral-devel.zoo.ox.ac.uk" #global HostName = "zoo-admiral-ibrg.zoo.ox.ac.uk" #global hostname = "zakynthos.zoo.ox.ac.uk" global HostName, SiloName, Username, Password, FileName global FilePath, FileMimeType, ZipMimeType global DirName, DirPath global DatasetsEmptyDirName, DatasetsEmptyDirPath global UpdatedTitle, UpdatedDescription, TestPat #HostName = "localhost" HostName = "zoo-admiral-ibrg.zoo.ox.ac.uk" SiloName = "admiral" Username = "******" Password = "******" FileName = "file1.txt" FilePath = DatasetsBaseDir + os.path.sep + FileName FileMimeType = "text/plain" ZipMimeType = "application/zip" DirName = "DatasetsTopDir" DirPath = DatasetsBaseDir + os.path.sep + DirName DatasetsEmptyDirName = "DatasetsEmptySubDir" DatasetsEmptyDirPath = DatasetsBaseDir + os.path.sep + DirName + os.path.sep + DatasetsEmptyDirName UpdatedTitle = "Updated Title" UpdatedDescription = "Updated Description" TestPat = re.compile("^.*$(?<!\.zip)") global ManifestName, ManifestFilePath ManifestName = "manifest.rdf" ManifestFilePath = DatasetsBaseDir + os.path.sep + DirName + os.path.sep + ManifestName global formdata, updatedformdata formdata = \ { 'datDir' : cgi.MiniFieldStorage('datDir' , DirPath) , 'datId' : cgi.MiniFieldStorage('datId' , "SubmissionToolTest") , 'title' : cgi.MiniFieldStorage('title' , "Submission tool test title") , 'description' : cgi.MiniFieldStorage('description' , "Submission tool test description") , 'user' : cgi.MiniFieldStorage('user' , Username) , 'pass' : cgi.MiniFieldStorage('pass' , Password) , 'endpointhost': cgi.MiniFieldStorage('endpointhost', HostName) , 'basepath' : cgi.MiniFieldStorage('basepath' , "/"+SiloName+"/") , 'submit' : cgi.MiniFieldStorage('submit' , "Submit") , 'directory' : cgi.MiniFieldStorage('directory' , DirPath) } updatedformdata = \ { 'datDir' : cgi.MiniFieldStorage('datDir' , DirPath) , 'datId' : cgi.MiniFieldStorage('datId' , "SubmissionToolTest") , 'title' : cgi.MiniFieldStorage('title' , "Submission tool updated test title") , 'description' : cgi.MiniFieldStorage('description' , "Submission tool updated test description") , 'user' : cgi.MiniFieldStorage('user' , Username) , 'pass' : cgi.MiniFieldStorage('pass' , Password) , 'endpointhost': cgi.MiniFieldStorage('endpointhost', HostName) , 'basepath' : cgi.MiniFieldStorage('basepath' , "/"+SiloName+"/") , 'submit' : cgi.MiniFieldStorage('submit' , "Submit") } global DatasetId, DatasetDir, Title, Description, User, ElementValueList, ElementValueUpdatedList DatasetId = SubmitDatasetUtils.getFormParam('datId', formdata) DatasetDir = SubmitDatasetUtils.getFormParam('datDir', formdata) Title = SubmitDatasetUtils.getFormParam('title', formdata) Description = SubmitDatasetUtils.getFormParam('description', formdata) User = SubmitDatasetUtils.getFormParam('user', formdata) ElementValueList = [User, DatasetId, Title, Description] ElementValueUpdatedList = [User, DatasetId, UpdatedTitle, UpdatedDescription] global dcterms, oxds dcterms = URIRef("http://purl.org/dc/terms/") oxds = URIRef("http://vocab.ox.ac.uk/dataset/schema#") global NamespaceDictionary NamespaceDictionary = { "dcterms" : dcterms , "oxds" : oxds } global ElementCreatorUri,ElementIdentifierUri,ElementTitleUri,ElementDescriptionUri,ElementUriList ElementCreatorUri = URIRef(dcterms + "creator") ElementIdentifierUri = URIRef(dcterms + "identifier") ElementTitleUri = URIRef(dcterms + "title") ElementDescriptionUri = URIRef(dcterms + "description") ElementUriList = [ElementCreatorUri, ElementIdentifierUri, ElementTitleUri, ElementDescriptionUri] return
def processDatasetSubmissionForm(formdata, outputstr): """ Process form data, and print (to stdout) a new HTML page reflecting the outcome of the request. formdata is a dictionary containing parameters from the dataset submission form """ userName = SubmitDatasetUtils.getFormParam("user" , formdata) userPass = SubmitDatasetUtils.getFormParam("pass" , formdata) endpointhost = SubmitDatasetUtils.getFormParam("endpointhost", formdata) basepath = SubmitDatasetUtils.getFormParam("basepath" , formdata) datasetName = SubmitDatasetUtils.getFormParam("datId" , formdata) title = SubmitDatasetUtils.getFormParam("title" , formdata) description = SubmitDatasetUtils.getFormParam("description" , formdata) dirName = SubmitDatasetUtils.getFormParam("datDir" , formdata) ElementValueList = [userName, datasetName, title, description] # Host and silo name in the form data are used for testing. # In a live system, these are not provided in the form: the following values are used. if endpointhost==None or endpointhost=="": endpointhost = "localhost" if basepath==None or basepath=="": basepath = siloProxyPath ###print("\n---- processDatasetSubmissionForm:formdata ---- \n"+repr(formdata)) # Zip the selected Directory zipFileName = os.path.basename(dirName) +".zip" zipFilePath = "/tmp/" + zipFileName Logger.debug("zipFilePath = "+zipFilePath) if outputstr: sys.stdout = outputstr try: # Validate the dataset name and dataset directory fields validateFields(dirName, datasetName) # Set user credentials #session.setRequestUserPass(userName,userPass) #Create Session session = HttpSession.makeHttpSession(endpointhost, basepath, userName, userPass) SubmitDatasetUtils.createDataset(session, datasetName) # Update the local manifest manifestFilePath = dirName + str(os.path.sep) + DefaultManifestName Logger.debug("Element List = " + repr(ElementUriList)) Logger.debug("Element Value List = " + repr(ElementValueList)) SubmitDatasetDetailsHandler.updateMetadataInDirectoryBeforeSubmission(manifestFilePath, ElementUriList, ElementValueList) #Logger.debug("datasetName %s, dirName %s, zipFileName %s"%(datasetName,dirName,zipFileName)) SubmitDatasetUtils.zipLocalDirectory(dirName, FilePat, zipFilePath) # Submit zip file to dataset SubmitDatasetUtils.submitFileToDataset(session, datasetName, zipFileName, zipFilePath, ZipMimeType, zipFileName) # Unzip the contents into a new dataset datasetUnzippedName = SubmitDatasetUtils.unzipRemoteFileToNewDataset(session, datasetName, zipFileName) # Redirect to the Dataset Summary page redirectToSubmissionSummaryPage(dirName, datasetName+"-packed", datasetUnzippedName, convertToUriString(SuccessStatus)) return except SubmitDatasetUtils.SubmitDatasetError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePageFromException(e)
# Update the manifest only if the user has write access to the dataset directory. updateMetadataInDirectoryBeforeSubmission( manifestFilePath, ElementUriList, ElementValueList) # Redirect to the Submission Confirmation page redirectToSubmissionConfirmationPage(dirName) else: redirectToErrorPage(dirName, convertToUriString(ErrorStatus_3)) return except SubmitDatasetUtils.SubmitDatasetError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePageFromException(e) except HttpSession.Session.HTTPSessionError, e: SubmitDatasetUtils.printHTMLHeaders() SubmitDatasetUtils.generateErrorResponsePage( SubmitDatasetUtils.HTTP_ERROR, e.code, e.reason) SubmitDatasetUtils.printStackTrace() except: SubmitDatasetUtils.printHTMLHeaders() print "<h2>Server error while saving Metadata</h2>" print "<p>Diagnostic stack trace follows</p>" SubmitDatasetUtils.printStackTrace() raise finally: sys.stdout = save_stdout return
def datasetSummaryForm(formdata, outputstr): """ Print (to stdout) a new HTML page reflecting the outcome of the request. formdata is a dictionary containing parameters from the dataset submission form / handler """ save_stdout = sys.stdout dirName = SubmitDatasetUtils.getFormParam("dir" , formdata) datasetName = SubmitDatasetUtils.getFormParam("id" , formdata) datasetUnzippedName = SubmitDatasetUtils.getFormParam("unzipid" , formdata) status = SubmitDatasetUtils.getFormParam("status" , formdata) # print repr(formdata) if outputstr: sys.stdout = outputstr # Generate response headers print "Content-type: text/html" print "Cache-control: no-cache" print # Generate web page dataToolURL = "../../SubmitDatasetUI/html/SubmitDatasetDetails.html" mainURL = "../../../.." resetURL = "../../SubmitDatasetUI/html/SubmitDatasetDetails.html?dir=" + dirName loadDatasetURL = "'../../DisplayDataset/html/DisplayDataset.html?dir=" + dirName + "#"+ datasetUnzippedName +" #outherMain"+"'" viewDatasetURL = "'../../DisplayDataset/html/DisplayDataset.html?dir=" + dirName + "#"+ datasetUnzippedName +"'" unpackedLink = "/databanksilo/datasets/" + datasetUnzippedName pageTemplate = (""" <html> <head> <!-- Import Stylesheets --> <link rel="stylesheet" href="../../DisplayDataset/css/DisplayDataset.css" type="text/css" /> <link rel="stylesheet" href="../../jQuery/jquery-treeview/jquery.treeview.css" type="text/css" /> <link rel="stylesheet" href="../../SelectDataset/css/SelectDataset.css" type="text/css" /> <!-- Import jQuery framework --> <script type="text/javascript" src="../../jQuery/js/jquery-1.4.2.js"></script> <!-- Import jQuery additional libraries --> <script type="text/javascript" src="../../jQuery/jquery.json-2.2.js"></script> <!-- Import treeview plugin --> <script type="text/javascript" src="../../jQuery/jquery-treeview/jquery.treeview.js"></script> <!-- import rdfquery libraries --> <script type="text/javascript" src="../../rdfquery/jquery.uri.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.xmlns.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.curie.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.datatype.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdfa.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.datatype.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.xml.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.turtle.js"></script> <!-- Import MochiKit modules: require MochiKit library functions to be fully qualified --> <script type="text/javascript">MochiKit = {__export__: false};</script> <script type="text/javascript" src="../../MochiKit/Base.js"></script> <script type="text/javascript" src="../../MochiKit/Iter.js"></script> <script type="text/javascript" src="../../MochiKit/Logging.js"></script> <!-- Import Admiral functions --> <script type="text/javascript" src="../../Admiral/admiral-base.js"></script> <script type="text/javascript" src="../../Admiral/Error.js"></script> <script type="text/javascript" src="../../Admiral/AsyncComputation.js"></script> <!-- Import generic code from the dataset utils package --> <script type="text/javascript" src="../../DatasetUtils/js/DatasetTree.js"></script> <script type="text/javascript" src="../../DatasetUtils/js/DatasetManifestDictionary.js"></script> <!-- Import dataset information display code --> <script type="text/javascript" src="../../DisplayDataset/DisplayDatasetTree.js"></script> <script type="text/javascript" src="../../DisplayDataset/DisplayDataset.js"></script> <!-- Import admiral configuration details --> <!-- NOTE: these are loaded from an absolute location in the web server --> <script type="text/javascript" src="/js/admiral-config.js"></script> <script> jQuery(document).ready( function () { var m = new admiral.AsyncComputation(); /* m.eval(function(val,callback) { var datasetName = "%(datasetUnzippedName)s"; var datasetPath = "/"+admiral.databanksilo+"/datasets/"+datasetName; admiral.datasetManifestDictionary(datasetPath,datasetName, callback); }); m.eval(function(datasetdetails,callback) { jQuery("#currentVersion").text(datasetdetails.currentVersion); jQuery("#lastModified").text(datasetdetails.lastModified); callback(datasetdetails); }); */ m.eval(function(val,callback) { jQuery('#displayDatasetPage').load(%(loadDatasetURL)s , function(){}); callback(val); }); m.eval(function(val,callback) { url=%(viewDatasetURL)s; admiral.loadDisplay(url); callback(val); }); m.exec(null,admiral.noop); }); </script> </head> <body> <h2>%(status)s <span><a href="%(unpackedLink)s"><img name="databank_logo" id="databank_logo" alt="databank_logo" src="http://databank.ora.ox.ac.uk/static/databank_logo_generic.png" /></a></span> </h2> <div id="displayDatasetPage"> </div> <!-- <table name="submissionStatus" id = "submissionStatus" > <tr><td>Dataset Identifier</td><td> %(datasetUnzippedName)s</td></tr> <tr><td>Version number</td><td><span id="currentVersion">nn</span></td></tr> <tr><td>Date</td><td><span id="lastModified">yyyy-mm-dd</span></td></tr> </table> <h4><a href="%(viewDatasetURL)s">View details of submitted ADMIRAL data package - %(datasetUnzippedName)s</a></h4> --> <h4><a href="%(unpackedLink)s">View the data package</a></h4> <h4><a href="%(resetURL)s" id="revised">Submit a revised version of this data package</a></h4> <h4><a href="%(dataToolURL)s">Submit another ADMIRAL data package to databank</a></h4> <h4><a href="%(mainURL)s">Return to your research group's ADMIRAL front page</a></h4> </body> </html> """) print (pageTemplate% { 'viewDatasetURL' : viewDatasetURL , 'loadDatasetURL' : loadDatasetURL , 'unpackedLink' : unpackedLink , 'datasetName' : datasetName , 'dataToolURL' : dataToolURL , 'mainURL' : mainURL , 'datasetUnzippedName' : datasetUnzippedName , 'status' : status , 'resetURL' : resetURL }) return
def datasetSummaryForm(formdata, outputstr): """ Print (to stdout) a new HTML page reflecting the outcome of the request. formdata is a dictionary containing parameters from the dataset submission form / handler """ save_stdout = sys.stdout dirName = SubmitDatasetUtils.getFormParam("dir", formdata) datasetName = SubmitDatasetUtils.getFormParam("id", formdata) datasetUnzippedName = SubmitDatasetUtils.getFormParam("unzipid", formdata) status = SubmitDatasetUtils.getFormParam("status", formdata) # print repr(formdata) if outputstr: sys.stdout = outputstr # Generate response headers print "Content-type: text/html" print "Cache-control: no-cache" print # Generate web page dataToolURL = "../../SubmitDatasetUI/html/SubmitDatasetDetails.html" mainURL = "../../../.." resetURL = "../../SubmitDatasetUI/html/SubmitDatasetDetails.html?dir=" + dirName loadDatasetURL = "'../../DisplayDataset/html/DisplayDataset.html?dir=" + dirName + "#" + datasetUnzippedName + " #outherMain" + "'" viewDatasetURL = "'../../DisplayDataset/html/DisplayDataset.html?dir=" + dirName + "#" + datasetUnzippedName + "'" unpackedLink = "/databanksilo/datasets/" + datasetUnzippedName pageTemplate = (""" <html> <head> <!-- Import Stylesheets --> <link rel="stylesheet" href="../../DisplayDataset/css/DisplayDataset.css" type="text/css" /> <link rel="stylesheet" href="../../jQuery/jquery-treeview/jquery.treeview.css" type="text/css" /> <link rel="stylesheet" href="../../SelectDataset/css/SelectDataset.css" type="text/css" /> <!-- Import jQuery framework --> <script type="text/javascript" src="../../jQuery/js/jquery-1.4.2.js"></script> <!-- Import jQuery additional libraries --> <script type="text/javascript" src="../../jQuery/jquery.json-2.2.js"></script> <!-- Import treeview plugin --> <script type="text/javascript" src="../../jQuery/jquery-treeview/jquery.treeview.js"></script> <!-- import rdfquery libraries --> <script type="text/javascript" src="../../rdfquery/jquery.uri.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.xmlns.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.curie.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.datatype.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdfa.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.datatype.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.xml.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.turtle.js"></script> <!-- Import MochiKit modules: require MochiKit library functions to be fully qualified --> <script type="text/javascript">MochiKit = {__export__: false};</script> <script type="text/javascript" src="../../MochiKit/Base.js"></script> <script type="text/javascript" src="../../MochiKit/Iter.js"></script> <script type="text/javascript" src="../../MochiKit/Logging.js"></script> <!-- Import Admiral functions --> <script type="text/javascript" src="../../Admiral/admiral-base.js"></script> <script type="text/javascript" src="../../Admiral/Error.js"></script> <script type="text/javascript" src="../../Admiral/AsyncComputation.js"></script> <!-- Import generic code from the dataset utils package --> <script type="text/javascript" src="../../DatasetUtils/js/DatasetTree.js"></script> <script type="text/javascript" src="../../DatasetUtils/js/DatasetManifestDictionary.js"></script> <!-- Import dataset information display code --> <script type="text/javascript" src="../../DisplayDataset/DisplayDatasetTree.js"></script> <script type="text/javascript" src="../../DisplayDataset/DisplayDataset.js"></script> <!-- Import admiral configuration details --> <!-- NOTE: these are loaded from an absolute location in the web server --> <script type="text/javascript" src="/js/admiral-config.js"></script> <script> jQuery(document).ready( function () { var m = new admiral.AsyncComputation(); /* m.eval(function(val,callback) { var datasetName = "%(datasetUnzippedName)s"; var datasetPath = "/"+admiral.databanksilo+"/datasets/"+datasetName; admiral.datasetManifestDictionary(datasetPath,datasetName, callback); }); m.eval(function(datasetdetails,callback) { jQuery("#currentVersion").text(datasetdetails.currentVersion); jQuery("#lastModified").text(datasetdetails.lastModified); callback(datasetdetails); }); */ m.eval(function(val,callback) { jQuery('#displayDatasetPage').load(%(loadDatasetURL)s , function(){}); callback(val); }); m.eval(function(val,callback) { url=%(viewDatasetURL)s; admiral.loadDisplay(url); callback(val); }); m.exec(null,admiral.noop); }); </script> </head> <body> <h2>%(status)s <span><a href="%(unpackedLink)s"><img name="databank_logo" id="databank_logo" alt="databank_logo" src="http://databank.ora.ox.ac.uk/static/databank_logo_generic.png" /></a></span> </h2> <div id="displayDatasetPage"> </div> <!-- <table name="submissionStatus" id = "submissionStatus" > <tr><td>Dataset Identifier</td><td> %(datasetUnzippedName)s</td></tr> <tr><td>Version number</td><td><span id="currentVersion">nn</span></td></tr> <tr><td>Date</td><td><span id="lastModified">yyyy-mm-dd</span></td></tr> </table> <h4><a href="%(viewDatasetURL)s">View details of submitted ADMIRAL data package - %(datasetUnzippedName)s</a></h4> --> <h4><a href="%(unpackedLink)s">View the data package</a></h4> <h4><a href="%(resetURL)s" id="revised">Submit a revised version of this data package</a></h4> <h4><a href="%(dataToolURL)s">Submit another ADMIRAL data package to databank</a></h4> <h4><a href="%(mainURL)s">Return to your research group's ADMIRAL front page</a></h4> </body> </html> """) print( pageTemplate % { 'viewDatasetURL': viewDatasetURL, 'loadDatasetURL': loadDatasetURL, 'unpackedLink': unpackedLink, 'datasetName': datasetName, 'dataToolURL': dataToolURL, 'mainURL': mainURL, 'datasetUnzippedName': datasetUnzippedName, 'status': status, 'resetURL': resetURL }) return
def datasetDetailsErrorForm(formdata, outputstr): """ Print (to stdout) a new HTML page reflecting the outcome of the request formdata is a dictionary containing parameters from the dataset details form """ save_stdout = sys.stdout dirName = SubmitDatasetUtils.getFormParam("dir" , formdata) datasetName = SubmitDatasetUtils.getFormParam("id" , formdata) status = SubmitDatasetUtils.getFormParam("status" , formdata) # print repr(formdata) if outputstr: sys.stdout = outputstr # Generate response headers print "Content-type: text/html" print "Cache-control: no-cache" print # Generate web page dataToolURL = "../../SubmitDatasetUI/html/SubmitDatasetDetails.html" mainURL = "../../../.." resetURL = "../../SubmitDatasetUI/html/SubmitDatasetDetails.html?dir="+dirName pageTemplate = (""" <html> <head> <script type="text/javascript" src="../../jQuery/js/jquery-1.4.2.js"></script> <!-- Import generic code from the dataset utils package --> <script type="text/javascript" src="../../DatasetUtils/js/DatasetManifestDictionary.js"></script> <!-- import rdfquery libraries --> <script type="text/javascript" src="../../rdfquery/jquery.uri.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.xmlns.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.curie.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.datatype.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdfa.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.datatype.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.xml.js"></script> <script type="text/javascript" src="../../rdfquery/jquery.rdf.turtle.js"></script> <!-- Import MochiKit modules: require MochiKit library functions to be fully qualified --> <script type="text/javascript">MochiKit = {__export__: false};</script> <script type="text/javascript" src="../../MochiKit/Base.js"></script> <script type="text/javascript" src="../../MochiKit/Iter.js"></script> <script type="text/javascript" src="../../MochiKit/Logging.js"></script> <!-- Import Admiral functions --> <script type="text/javascript" src="../../Admiral/admiral-base.js"></script> <script type="text/javascript" src="../../Admiral/Error.js"></script> <script type="text/javascript" src="../../Admiral/AsyncComputation.js"></script> <!-- Import admiral configuration details --> <!-- NOTE: these are loaded from an absolute location in the web server --> <script type="text/javascript" src="/js/admiral-config.js"></script> </head> <body> <div> <span><a href="/"><img alt="site_logo" src="/images/Admiral-logo-284x100.png" border="0"/></a></span> </div> <h2>%(status)s%(dirName)s</h2> <h3><a href="%(dataToolURL)s">Return to Dataset details page</a></h3> <h3><a href="%(mainURL)s">Return to ADMIRAL front page</a></h3> </body> </html> """) print (pageTemplate% { 'datasetName' : datasetName , 'dirName' : dirName , 'dataToolURL' : dataToolURL , 'mainURL' : mainURL , 'status' : status }) return