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 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 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 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 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 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 testSubsequentDatasetSubmission(self):
        SubmitDatasetUtils.createDataset(self.session, TestDatasetName)
        zipFileName = TestDatasetName + ".zip"
        zipFilePath = TestConfig.DatasetsBaseDir + os.path.sep + zipFileName
        # Zip the required directory
        SubmitDatasetUtils.zipLocalDirectory(TestConfig.DirPath,
                                             TestConfig.TestPat, zipFilePath)
        zipFilePath = TestConfig.DatasetsBaseDir + os.path.sep + zipFileName
        #logger.debug("ZipFileName: " + zipFileName)
        localZipFileContent = SubmitDatasetUtils.getLocalFileContents(
            zipFilePath)
        SubmitDatasetUtils.submitFileToDataset(self.session, TestDatasetName,
                                               zipFileName, zipFilePath,
                                               TestConfig.ZipMimeType,
                                               zipFileName)

        #Resubmit the File to Dataset skipping dataset creation as the dataset already exists
        SubmitDatasetUtils.submitFileToDataset(self.session, TestDatasetName,
                                               zipFileName, zipFilePath,
                                               TestConfig.ZipMimeType,
                                               zipFileName)
        # Read from the  updated Dataset
        (remoteMimeType,
         remoteZipFileContent) = SubmitDatasetUtils.getFileFromDataset(
             self.session, TestDatasetName + "-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 files contents")

        #unpack the contents
        newDatasetname = SubmitDatasetUtils.unzipRemoteFileToNewDataset(
            self.session, TestDatasetName, zipFileName)
        SubmitDatasetUtils.deleteDataset(self.session,
                                         TestDatasetName + "-packed")
        SubmitDatasetUtils.deleteDataset(self.session, newDatasetname)
        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)