From 1eb392b2bc4117bdecff4016fc9ec56be5fb937f Mon Sep 17 00:00:00 2001 From: Sinisa Veseli <sveseli@aps.anl.gov> Date: Sat, 4 Mar 2017 01:44:28 +0000 Subject: [PATCH] fixed parsing data directory --- src/python/dm/__init__.py | 2 +- .../dm/aps_beamline_tools/cli/daqCli.py | 14 ------ .../dm/aps_beamline_tools/cli/uploadCli.py | 15 ------ src/python/dm/common/cli/dmCli.py | 46 +++++++++++++++++++ .../cli/daqWebServiceSessionCli.py | 17 ------- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/src/python/dm/__init__.py b/src/python/dm/__init__.py index 63426004..bee1cd67 100644 --- a/src/python/dm/__init__.py +++ b/src/python/dm/__init__.py @@ -1 +1 @@ -__version__ = "1.1 (2017.03.01)" +__version__ = "1.1 (2017.03.03)" diff --git a/src/python/dm/aps_beamline_tools/cli/daqCli.py b/src/python/dm/aps_beamline_tools/cli/daqCli.py index 8a3392f3..1ca2d2e2 100755 --- a/src/python/dm/aps_beamline_tools/cli/daqCli.py +++ b/src/python/dm/aps_beamline_tools/cli/daqCli.py @@ -1,6 +1,5 @@ #!/usr/bin/env python -import os from dm.aps_bss.api.apsBssApi import ApsBssApi from dm.ds_web_service.api.experimentDsApi import ExperimentDsApi from dm.ds_web_service.api.userDsApi import UserDsApi @@ -114,19 +113,6 @@ class DaqCli(ApsBeamlineCli): # Remove duplicates by converting into set return list(set(users+beamlineManagers)) - def getDataDirectory(self): - dataDirectory = self.options.dataDirectory - replacementMap = os.environ.get('DM_DATA_DIRECTORY_MAP', '') - (scheme, host, port, dirPath) = FtpUtility.parseUrl(dataDirectory) - if dirPath and replacementMap: - # Map entries are expected to be in the form - # <original>|<replacement>;<original>|<replacement>;... - for entry in replacementMap.split(';'): - original = entry.split('|')[0] - replacement = entry.split('|')[1] - dirPath = dataDirectory.replace(original,replacement) - return FtpUtility.assembleUrl(scheme, host, port, dirPath) - def addOrUpdateExperiment(self): dsExperimentApi = ExperimentDsApi(self.loginUsername, self.loginPassword, self.dsServiceHost, self.dsServicePort, self.serviceProtocol) dsUserApi = UserDsApi(self.loginUsername, self.loginPassword, self.dsServiceHost, self.dsServicePort, self.serviceProtocol) diff --git a/src/python/dm/aps_beamline_tools/cli/uploadCli.py b/src/python/dm/aps_beamline_tools/cli/uploadCli.py index 206e9245..a50e67e8 100755 --- a/src/python/dm/aps_beamline_tools/cli/uploadCli.py +++ b/src/python/dm/aps_beamline_tools/cli/uploadCli.py @@ -1,13 +1,11 @@ #!/usr/bin/env python -import os from dm.aps_bss.api.apsBssApi import ApsBssApi from dm.ds_web_service.api.experimentDsApi import ExperimentDsApi from dm.ds_web_service.api.userDsApi import UserDsApi from dm.daq_web_service.api.experimentDaqApi import ExperimentDaqApi from dm.common.constants import dmProcessingMode -from dm.common.utility.ftpUtility import FtpUtility from dm.common.exceptions.invalidRequest import InvalidRequest from dm.common.exceptions.objectNotFound import ObjectNotFound from dm.common.utility.configurationManager import ConfigurationManager @@ -105,19 +103,6 @@ class UploadCli(ApsBeamlineCli): # Remove duplicates by converting into set return list(set(users+beamlineManagers)) - def getDataDirectory(self): - dataDirectory = self.options.dataDirectory - replacementMap = os.environ.get('DM_DATA_DIRECTORY_MAP', '') - (scheme, host, port, dirPath) = FtpUtility.parseUrl(dataDirectory) - if dirPath and replacementMap: - # Map entries are expected to be in the form - # <original>|<replacement>;<original>|<replacement>;... - for entry in replacementMap.split(';'): - original = entry.split('|')[0] - replacement = entry.split('|')[1] - dirPath = dataDirectory.replace(original,replacement) - return FtpUtility.assembleUrl(scheme, host, port, dirPath) - def addOrUpdateExperiment(self): dsExperimentApi = ExperimentDsApi(self.loginUsername, self.loginPassword, self.dsServiceHost, self.dsServicePort, self.serviceProtocol) dsUserApi = UserDsApi(self.loginUsername, self.loginPassword, self.dsServiceHost, self.dsServicePort, self.serviceProtocol) diff --git a/src/python/dm/common/cli/dmCli.py b/src/python/dm/common/cli/dmCli.py index 3be3e201..1fbc0634 100755 --- a/src/python/dm/common/cli/dmCli.py +++ b/src/python/dm/common/cli/dmCli.py @@ -4,6 +4,7 @@ import sys import os import os.path import stat +import urlparse from optparse import OptionGroup import dm @@ -242,6 +243,51 @@ class DmCli(object): else: return '%s' % dmObject + def getDataDirectory(self): + dataDirectory = self.options.dataDirectory + replacementMap = os.environ.get('DM_DATA_DIRECTORY_MAP', '') + (scheme, host, port, dirPath) = self.parseUrl(dataDirectory) + if dirPath and replacementMap: + # Map entries are expected to be in the form + # <original>:<replacement> <original>:<replacement>;... + for entry in replacementMap.split(' '): + original = entry.split(':')[0] + replacement = entry.split(':')[1] + dirPath = dirPath.replace(original,replacement) + return self.assembleUrl(scheme, host, port, dirPath) + + @classmethod + def parseUrl(cls, url, defaultHost=None, defaultPort=None): + host = defaultHost + port = defaultPort + parseResult = urlparse.urlparse(url) + scheme = parseResult.scheme + netlocTokens = parseResult.netloc + if netlocTokens: + netlocTokens = netlocTokens.split(':') + host = netlocTokens[0] + if len(netlocTokens) > 1: + port = int(netlocTokens[1]) + dirPath = parseResult.path + dirPath = os.path.normpath(dirPath) + return (scheme, host, port, dirPath) + + @classmethod + def assembleUrl(cls, scheme, host, port, dirPath): + url = '' + if scheme: + url += '%s://' % scheme + if host: + url += '%s' % (host) + if port: + url += ':%s' % (port) + if dirPath: + if len(url) and not dirPath.startswith('/'): + url += '/%s' % (os.path.normpath(dirPath)) + else: + url += '%s' % (os.path.normpath(dirPath)) + return url + ####################################################################### # Testing diff --git a/src/python/dm/daq_web_service/cli/daqWebServiceSessionCli.py b/src/python/dm/daq_web_service/cli/daqWebServiceSessionCli.py index 48b090e6..35ab8be7 100755 --- a/src/python/dm/daq_web_service/cli/daqWebServiceSessionCli.py +++ b/src/python/dm/daq_web_service/cli/daqWebServiceSessionCli.py @@ -26,21 +26,4 @@ class DaqWebServiceSessionCli(DmRestSessionCli): def getExperimentName(self): return self.options.experimentName - def getDataDirectory(self): - dataDirectory = self.options.dataDirectory - if not dataDirectory: - return None - if dataDirectory.find('://') < 0: - fileServerUrl = os.environ.get('DM_FILE_SERVER_URL') - dataDirectory = '%s%s' % (fileServerUrl, dataDirectory) - replacementMap = os.environ.get('DM_DATA_DIRECTORY_MAP', '') - (scheme, host, port, dirPath) = FtpUtility.parseUrl(dataDirectory) - if dirPath and replacementMap: - # Map entries are expected to be in the form - # <original>|<replacement>;<original>|<replacement>;... - for entry in replacementMap.split(';'): - original = entry.split('|')[0] - replacement = entry.split('|')[1] - dirPath = dataDirectory.replace(original,replacement) - return FtpUtility.assembleUrl(scheme, host, port, dirPath) -- GitLab