Changeset 6017 for TI01-discovery


Ignore:
Timestamp:
17/11/09 14:03:59 (10 years ago)
Author:
sdonegan
Message:

Updated redirectUrlchanger class so deals with different input formats differently and escapes defined contenttpyes in dif

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/branches/ingestAutomation-upgrade/OAIBatch/Utilities.py

    r5847 r6017  
    4848                self.root=self.etree.getroot() # should be the "vocab" element 
    4949 
    50                 #look for and change relevant portions 
    51                 self.changeUrl() 
    52                  
     50                #look for and change relevant portions - fudge it here for now 
     51                self.difContentType = ["GET SERVICE"] 
     52         
     53         
     54                if self.format == 'DIF': 
     55                        self.changeUrl_dif() 
     56                 
     57                elif self.format == 'MDIP': 
     58                        self.changeUrl_mdip() 
     59             
    5360                #rewrite this back into the xml doc      
    5461                self.etree.write(self.outputFilename) 
    5562 
    56                  
    57         ''' 
    58         Method to obtain and change selected URLs 
    59         ''' 
    60         def changeUrl(self): 
    61                  
    62                 #get document id 
    63                 #note as appendNameSPace returns a list, must define which element, only one entry_id so 0 here... (java is so much better at this). 
    64                  
    65                  
     63 
     64        ''' 
     65        Method to obtain and change selected URLs - for MEDIN vN input 
     66        ''' 
     67        def changeUrl_medin_vN(self, contentType): 
     68 
     69                url = '' 
     70 
     71                return url 
     72 
     73                 
     74        ''' 
     75        Method to obtain and change selected URLs - for MDIP input 
     76        ''' 
     77        def changeUrl_mdip(self): 
     78 
    6679                try: 
    6780                        docTitle = self.root.find(self.appendNameSpace(self.datasetTitle())[0]).text 
     
    6982                        #doesnt matter too much if this doesnt work! 
    7083                        docTitle = 'NOT_AVAILABLE' 
    71                  
     84                         
    7285                try: 
    7386                         
    7487                        docID = self.root.find(self.appendNameSpace(self.getIdPath())[0]).text 
    7588                         
    76                         self.paths = self.appendNameSpace(self.URLpaths()) 
    77  
     89                        self.paths = self.appendNameSpace(self.URLpaths_MDIP()) 
     90                                                 
     91                         
    7892                        for path in self.paths: 
    79                          
    80                                 nodes = self.root.findall(path) 
    81  
     93                                                                                                         
     94                                nodes = self.root.findall(path) ##finds all related_url/url 
     95                                 
    8296                                for node in nodes: 
    83                                         currentURL = urllib.quote(node.text) 
    84                                         redirectURL = self.redirectBaseURL + currentURL + '&docID=' + urllib.quote(docID) + '&docTitle=' + urllib.quote(docTitle)                
     97                                         
     98                                        currentURL = urllib.quote(node.txt) 
     99                                        redirectURL = self.redirectBaseURL + children[url] + '&docID=' + urllib.quote(docID) + '&docTitle=' + urllib.quote(docTitle) 
    85100                                        node.text = redirectURL 
    86                  
     101                         
    87102                except: 
    88                         print "Cannot perform identityTransform to rewrite ndg redirect urls!" 
    89                         logging.warn("Cannot perform identityTransform to rewrite ndg redirect urls!") 
     103                        print "Cannot perform identityTransform to rewrite ndg redirect urls on MDIP input format doc" 
     104                        logging.warn("Cannot perform identityTransform to rewrite ndg redirect urls on MDIP format doc") 
     105 
     106 
     107                 
     108        ''' 
     109        Method to obtain and change selected URLs - for GCDM DIF input 
     110        ''' 
     111        def changeUrl_dif(self): 
     112                 
     113                #get document id 
     114                #note as appendNameSPace returns a list, must define which element, only one entry_id so 0 here... (java is so much better at this). 
     115                 
     116                problem=False 
     117                 
     118                try: 
     119                        docTitle = self.root.find(self.appendNameSpace(self.datasetTitle())[0]).text 
     120                except: 
     121                        #doesnt matter too much if this doesnt work! 
     122                        docTitle = 'NOT_AVAILABLE' 
     123                        problem = True 
     124                                 
     125                try: 
     126                        docID = self.root.find(self.appendNameSpace(self.getIdPath())[0]).text 
     127                except: 
     128                        docID = 'NOT_AVAILABLE' 
     129                        problem = True 
     130                 
     131                #get available DIF paths 
     132                self.paths = self.appendNameSpace(self.URLpaths_DIF()) 
     133                 
     134                for path in self.paths: 
     135                                 
     136                        try: 
     137                         
     138                                nodes = self.root.findall(path) ##finds all related_url/url 
     139                         
     140                                for node in nodes: 
     141                                                                 
     142                                        #have to handle different paths available for urls in difs differently - related_url is a complex type, and is 
     143                                        #the one we have to change depending on url_content_type so must do this differently to elsewhere 
     144                                        if path == self.appendNameSpace(['Related_URL'])[0]: 
     145                                                                                                 
     146                                                difChildElements = node.getiterator() 
     147                                                                                                                                                 
     148                                                #build dictionary of node name content pairs                                     
     149                                                children={} 
     150                                                for child in difChildElements: 
     151                                                        children[child.tag] = child.text 
     152                                                         
     153                                                #check for URL_Content_Type - these are the keys of the elements we want 
     154                                                content = self.appendNameSpace(['URL_Content_Type'])[0] 
     155                                                url = self.appendNameSpace(['URL'])[0]   
     156                                                                                                                                                                                         
     157                                                #go over the keys - if url_content_type is in there..            
     158                                                if content in children.keys():                                                   
     159                                                        urlContentType = children[content] 
     160                                                                                                                 
     161                                                        #using the values in contentType, check to see if present 
     162                                                        for ct in self.difContentType: 
     163                                                                 
     164                                                                                 
     165                                                                #..if a match then we actually WANT the original URL 
     166                                                                if ct not in urlContentType:                                                                             
     167                                                                                                                                                 
     168                                                                        #if no match, work out redirect url 
     169                                                                        redirectURL = self.redirectBaseURL + children[url] + '&docID=' + urllib.quote(docID) + '&docTitle=' + urllib.quote(docTitle) 
     170                                                                         
     171                                                                        #if this related_url element is to be changed, access the element directly as a node 
     172                                                                        urlNode = node.find(self.appendNameSpace(['URL'])[0]) 
     173                                                 
     174                                                                        #now set the url to the redirected value                                                         
     175                                                                        urlNode.text = redirectURL                                                       
     176                                                                         
     177                                                #if no url_content_type element present, continue to rewrite the url 
     178                                                else: 
     179                                                        urlNode = node.find(self.appendNameSpace(['URL'])[0]) 
     180                                                        currentURL = urllib.quote(urlNode.text) 
     181                                                        redirectURL = self.redirectBaseURL + children[url] + '&docID=' + urllib.quote(docID) + '&docTitle=' + urllib.quote(docTitle) 
     182                                                        urlNode.text = redirectURL 
     183                                                         
     184                                                                                                                                                                                 
     185                                        #other paths of non related_url complex type 
     186                                        else:                                            
     187                                                currentURL = urllib.quote(node.text) 
     188                                                redirectURL = self.redirectBaseURL + children[url] + '&docID=' + urllib.quote(docID) + '&docTitle=' + urllib.quote(docTitle) 
     189                                                node.text = redirectURL 
     190                         
     191                        except: 
     192                                print "Cannot perform identityTransform to rewrite ndg redirect urls!" 
     193                                logging.warn("Cannot perform identityTransform to rewrite ndg redirect urls!") 
    90194 
    91195                 
     
    131235                elif self.format == 'MDIP': 
    132236                        return ['DatasetIdentifier'] 
    133  
     237         
    134238        '''method to handle xpath for expected URLS if for reqd format ''' 
    135         def URLpaths(self): 
    136                 if self.format == 'DIF': 
    137                         return ['Related_URL/URL','Data_Center/Data_Center_URL'] 
    138                 elif self.format == 'MDIP': 
    139                         return ['OnlineResource','Distributor/Web'] 
     239        def URLpaths_DIF(self): 
     240                return ['Related_URL','Data_Center/Data_Center_URL'] 
     241                 
     242        def URLpaths_MDIP(self):                 
     243                return ['OnlineResource','Distributor/Web'] 
    140244 
    141245        '''method to handle default namespaces for reqd format ''' 
Note: See TracChangeset for help on using the changeset viewer.