From 2ba0c75ba580967f111651e162625792e6d09809 Mon Sep 17 00:00:00 2001
From: Sinisa Veseli <sveseli@aps.anl.gov>
Date: Thu, 2 Mar 2017 05:26:47 +0000
Subject: [PATCH] resolve issue with non-printable characters in proposal
 institution; resolve problem with target directory for gridftp plugin

---
 src/python/dm/__init__.py                             |  2 +-
 src/python/dm/aps_bss/impl/bssClient.py               |  8 ++++++--
 .../processing/plugins/gridftpFileTransferPlugin.py   | 11 ++++++++---
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/python/dm/__init__.py b/src/python/dm/__init__.py
index cf4f959e..63426004 100644
--- a/src/python/dm/__init__.py
+++ b/src/python/dm/__init__.py
@@ -1 +1 @@
-__version__ = "1.0 (2017.01.26)"
+__version__ = "1.1 (2017.03.01)"
diff --git a/src/python/dm/aps_bss/impl/bssClient.py b/src/python/dm/aps_bss/impl/bssClient.py
index a5224e4c..75b56705 100644
--- a/src/python/dm/aps_bss/impl/bssClient.py
+++ b/src/python/dm/aps_bss/impl/bssClient.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 
 import datetime
+import string
 
 from suds.wsse import Security
 from suds.wsse import UsernameToken
@@ -98,12 +99,15 @@ class BssClient:
                 'badge' : experimenter.badge,
                 'email' : experimenter.email,
                 'firstName' : experimenter.firstName,
-                'instId' : experimenter.instId,
-                'institution' : experimenter.institution,
                 'lastName' : experimenter.lastName
             })
             if hasattr(experimenter, 'piFlag'):
                 user['piFlag'] = experimenter.piFlag
+            if hasattr(experimenter, 'instId'):
+                user['instId'] = experimenter.instId
+            if hasattr(experimenter, 'institution'):
+                # Remove non-printable characters
+                user['institution'] = ''.join(filter(lambda x:x in string.printable, experimenter.institution))
 
             experimenters.append(user)
         proposalInfo = ProposalInfo({
diff --git a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
index 590e26d2..41957c3f 100755
--- a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
+++ b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
@@ -76,13 +76,18 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
         (scheme, host, port, replacementDirPath) = FtpUtility.parseFtpUrl(dataDirectory)
         self.logger.debug('Replacement dir path: %s' % replacementDirPath)
         self.logger.debug('Number of original files: %s' % len(filePathsDict))
-        self.logger.debug('Looking for existing files in %s' % storageDirectory)
         ftpUtility = SftpUtility(storageHost)
         destDirectory = storageDirectory
         if targetDirectory:
             destDirectory = '%s/%s/' % (destDirectory, targetDirectory)
-        storageFilePathsDict = ftpUtility.getFiles(destDirectory, {}, replacementDirPath)
-        self.logger.debug('There are %s files in %s' % (len(storageFilePathsDict), destDirectory))
+        storageFilePathsDict = {}
+        try:
+            self.logger.debug('Looking for existing files in %s' % destDirectory)
+            storageFilePathsDict = ftpUtility.getFiles(destDirectory, {}, replacementDirPath)
+            self.logger.debug('There are %s files in %s' % (len(storageFilePathsDict), destDirectory))
+        except Exception, ex:
+            self.logger.warn('Could not find existing files in %s, assuming there are none (got error: %s)' % (destDirectory,ex))
+
         # Remove file from plugin dict if we do not need to transfer it
         for (filePath,storageFilePathDict) in storageFilePathsDict.items():
             filePathDict = filePathsDict.get(filePath)
-- 
GitLab