Skip to content
Snippets Groups Projects
Select Git revision
  • b327739cd0e73037d6510f53a8199bc5656f5dc6
  • master default protected
  • develop protected
  • cmake_boost_refactor
  • ubuntu_ci
  • mmtf
  • non-orthogonal-maps
  • no_boost_filesystem
  • data_viewer
  • 2.11.1
  • 2.11.0
  • 2.10.0
  • 2.9.3
  • 2.9.2
  • 2.9.1
  • 2.9.0
  • 2.8.0
  • 2.7.0
  • 2.6.1
  • 2.6.0
  • 2.6.0-rc4
  • 2.6.0-rc3
  • 2.6.0-rc2
  • 2.6.0-rc
  • 2.5.0
  • 2.5.0-rc2
  • 2.5.0-rc
  • 2.4.0
  • 2.4.0-rc2
29 results

superpose.py

Blame
  • file_loader.py 6.48 KiB
    #------------------------------------------------------------------------------
    # This file is part of the OpenStructure project <www.openstructure.org>
    #
    # Copyright (C) 2008-2010 by the OpenStructure authors
    #
    # This library is free software; you can redistribute it and/or modify it under
    # the terms of the GNU Lesser General Public License as published by the Free
    # Software Foundation; either version 3.0 of the License, or (at your option)
    # any later version.
    # This library is distributed in the hope that it will be useful, but WITHOUT
    # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
    # details.
    #
    # You should have received a copy of the GNU Lesser General Public License
    # along with this library; if not, write to the Free Software Foundation, Inc.,
    # 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    #------------------------------------------------------------------------------
    
    from ost import gui
    from ost import info
    import ost
    import sip
    
    from PyQt4 import QtCore, QtGui, QtNetwork
    from ost.gui import FileLoader
    
    
    class BaseRemoteLoader(gui.RemoteSiteLoader):
      def __init__(self):
        gui.RemoteSiteLoader.__init__(self)
        self.networkmanager_=QtNetwork.QNetworkAccessManager()
        self.downloads_=dict()
        QtCore.QObject.connect(self.networkmanager_, QtCore.SIGNAL("finished(QNetworkReply*)"), self.DownloadFinished)
    
      def LoadById(self, id, selection=""):
        self.ById(id, selection)
      
      def ById(self, id, selection=""):
        file_name=self.GetFileName(id)
        file = QtCore.QFile(file_name)
        if(file.size()==0):
            url = QtCore.QUrl(self.GetUrl(id))
            request = QtNetwork.QNetworkRequest(url)
            reply = self.networkmanager_.get(request)
            self.downloads_[reply]=[id,selection]
            return reply
        else:
          gui.FileLoader.LoadObject(str(file_name),str(selection))
        return None
    
      #Hack for C++ (will be changed soon)
      def ByIdAddr(self,id,selection):
        reply = self.ById(id,selection)
        if reply is not None:
          return sip.unwrapinstance(reply)
        return 0
        
      def IsImg(self):
        return False
        
      def GetRemoteSiteName(self):
        pass  
      
      def GetUrl(self,id):
        pass
          
      def HandleError(self,message):
        pass
        
      def DownloadFinished(self, reply):
        file_name=self.GetFileName(self.downloads_[reply][0])
        file = QtCore.QFile(file_name)
        if(reply.error()!=QtNetwork.QNetworkReply.NoError or reply.bytesAvailable()==0):
          self.HandleError(reply.errorString());
          file.remove()
        else:
          if(self.downloads_.has_key(reply)):
            if(file.open(QtCore.QIODevice.WriteOnly)):
               file.write(reply.readAll());
            file.close();
            selection=self.downloads_[reply][1]
            del(self.downloads_[reply])
            gui.FileLoader.LoadObject(str(file_name),str(selection))
    
    class GenericLoader(BaseRemoteLoader):
      EXT_NAME_ATTRIBUTE_NAME = "ExtName"
      URL_ATTRIBUTE_NAME = "Url"
      UP_CASE_ATTRIBUTE_NAME = "UpCase"
      FILE_TYPE_ATTRIBUTE_NAME = "FileType"
      TMP_URL_ATTRIBUTE_NAME= "TmpUrl"
      IMG_ATTRIBUTE_NAME= "Img"
      
      def __init__(self, name, url, up_case, file_type, tmp_url=None, img=False):
        BaseRemoteLoader.__init__(self)
        self.name_ = QtCore.QString(name)
        self.url_ = QtCore.QString(url)
        self.up_case_ = up_case
        self.img_ = img
        if file_type is not None:
          self.file_type_ = QtCore.QString(file_type)
        else:
          self.file_type_ = None
        
        if tmp_url is not None:
          self.tmp_url_ = QtCore.QString(tmp_url)
        else:
          self.tmp_url_ = tmp_url
        
      def IsImg(self):
        return self.img_    
    
      def GetRemoteSiteName(self):
        return self.name_
      
      def GetUrl(self, id):
        formatted_id = id
        if self.up_case_:
          formatted_id = QtCore.QString(id).toUpper()
        url = QtCore.QString(self.url_)
        url.replace("${ID}",formatted_id)
        return str(url)
        
      def GetFileName(self,id):
        formatted_id = id
        if self.up_case_:
          formatted_id = QtCore.QString(id).toUpper()
        
        url = None
        if self.tmp_url_ is not None:
          url = self.tmp_url_ + QtCore.QDir.separator()
        else:
          url = QtCore.QDir.tempPath() + QtCore.QDir.separator()
        
        file_type = None 
        if self.file_type_ is None:
          remote_url = QtCore.QString(self.GetUrl(id))
          index = remote_url.lastIndexOf(".")
          if(index >=0):
            file_type = remote_url.right(remote_url.size()-index-1)
        if file_type is None:
          file_type = self.file_type_
        
        return url+formatted_id +"_"+self.name_+"."+file_type
      
      def HandleError(self, message):
        messageBox =QtGui.QMessageBox(QtGui.QMessageBox.Warning,
                "Error while Loading PDB from "+self.name_, "Could not download file ("+message+")!")
        messageBox.exec_()
        
      def ToInfo(self,group):
        group.SetAttribute(GenericLoader.EXT_NAME_ATTRIBUTE_NAME, str(self.name_))
        group.SetAttribute(GenericLoader.URL_ATTRIBUTE_NAME, str(self.url_))
        if self.up_case_:
          group.SetAttribute(GenericLoader.UP_CASE_ATTRIBUTE_NAME, str(self.up_case_))
        if self.file_type_ is not None:
          group.SetAttribute(GenericLoader.FILE_TYPE_ATTRIBUTE_NAME, str(self.file_type_))
        if self.tmp_url_ is not None:
          group.SetAttribute(GenericLoader.TMP_URL_ATTRIBUTE_NAME, str(self.tmp_url_))
        if self.img_ is not None:
          group.SetAttribute(GenericLoader.IMG_ATTRIBUTE_NAME, str(int(self.img_)))
          
      @staticmethod
      def FromInfo(group):
        name = None
        url = None
        up_case = False
        file_type = None
        tmp_url = None
        img = False
        
        if group.HasAttribute(GenericLoader.EXT_NAME_ATTRIBUTE_NAME):
          name = QtCore.QString(group.GetAttribute(GenericLoader.EXT_NAME_ATTRIBUTE_NAME))
        
        if group.HasAttribute(GenericLoader.URL_ATTRIBUTE_NAME):
          url = QtCore.QString(group.GetAttribute(GenericLoader.URL_ATTRIBUTE_NAME))
          
        if group.HasAttribute(GenericLoader.UP_CASE_ATTRIBUTE_NAME):
          up_case = bool(group.GetAttribute(GenericLoader.UP_CASE_ATTRIBUTE_NAME))  
        
        if group.HasAttribute(GenericLoader.FILE_TYPE_ATTRIBUTE_NAME):
          file_type = QtCore.QString(group.GetAttribute(GenericLoader.FILE_TYPE_ATTRIBUTE_NAME))
          
        if group.HasAttribute(GenericLoader.TMP_URL_ATTRIBUTE_NAME):
          tmp_url = QtCore.QString(group.GetAttribute(GenericLoader.TMP_URL_ATTRIBUTE_NAME))
        
        if group.HasAttribute(GenericLoader.IMG_ATTRIBUTE_NAME):
          img = bool(int(group.GetAttribute(GenericLoader.IMG_ATTRIBUTE_NAME)))
    
        return GenericLoader(name, url, up_case, file_type, tmp_url, img)