Skip to content
Snippets Groups Projects
Forked from DM / dm-docs
261 commits behind, 871 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
fileSessionControllerImpl.py 1.89 KiB
#!/usr/bin/env python

#
# Implementation for file session controller.
#

import time

from dm.common.objects.dmObjectManager import DmObjectManager
from dm.common.exceptions.invalidRequest import InvalidRequest
from dm.common.objects.fileMetadata import FileMetadata
from dm.common.objects.directoryMetadata import DirectoryMetadata
from dm.common.db.api.experimentDbApi import ExperimentDbApi
from dm.ds_web_service.service.impl.experimentManager import ExperimentManager

class FileSessionControllerImpl(DmObjectManager):
    """ File session controller implementation class. """

    def __init__(self):
        DmObjectManager.__init__(self)
        self.experimentDbApi = ExperimentDbApi()

    def processFile(self, fileInfo):
        experimentFilePath = fileInfo.get('experimentFilePath')
        experimentName = fileInfo.get('experimentName')
        experiment = self.experimentDbApi.getExperimentByName(experimentName)
        ExperimentManager.getInstance().processExperimentFile(experimentFilePath, experiment, fileInfo)
        return FileMetadata(fileInfo)

    def statFile(self, fileInfo, experiment=None):
        experimentFilePath = fileInfo.get('experimentFilePath')
        if not experiment:
            experimentName = fileInfo.get('experimentName')
            experiment = self.experimentDbApi.getExperimentByName(experimentName)
        ExperimentManager.getInstance().statExperimentFile(experimentFilePath, experiment, fileInfo)
        return FileMetadata(fileInfo)

    def processDirectory(self, directoryInfo):
        experimentDirectoryPath = directoryInfo.get('experimentDirectoryPath', '')
        experimentName = directoryInfo.get('experimentName')
        experiment = self.experimentDbApi.getExperimentByName(experimentName)
        ExperimentManager.getInstance().processExperimentDirectory(experimentDirectoryPath, experiment, directoryInfo)
        return DirectoryMetadata(directoryInfo)