Changeset 8642 for mauRepo


Ignore:
Timestamp:
19/10/12 09:28:16 (7 years ago)
Author:
mnagni
Message:

Incomplete - # 22576: Filtering on Files in a particular Result returns all Files rather than a subset.
 http://team.ceda.ac.uk/trac/ceda/ticket/22576
Some small code cleaning

File:
1 edited

Legend:

Unmodified
Added
Removed
  • mauRepo/HPFos/trunk/hpfos/HPFos/osImpl/myimpl.py

    r8641 r8642  
    107107                return ident.code   
    108108 
    109 def generate_url_id(url, id = None): 
    110     if id is None: 
     109def generate_url_id(url, iid = None): 
     110    if iid is None: 
    111111        return "%s/search" % (url) 
    112112     
    113     return "%s/search/%s" % (url, id) 
     113    return "%s/search/%s" % (url, iid) 
    114114 
    115115def _new_extract_geographic_extent(result):         
     
    126126                         '%s %s' % (ge.northBoundLatitude, ge.eastBoundLongitude)) 
    127127 
     128def _digest_fatcat_atom(context, results): 
     129    entries = results.findall('{%s}entry' % (ATOM_NAMESPACE)) 
     130    subresults = [] 
     131    for entry in entries: 
     132        iid = entry.find('{%s}id' % (ATOM_NAMESPACE)).text.strip() 
     133        ititle = entry.find('{%s}title' % (ATOM_NAMESPACE)).text.strip() 
     134        kwargs = {} 
     135                      
     136        element = entry.find('.//{%s}beginPosition' % (GML_NAMESPACE)) 
     137        if element is not None: 
     138            kwargs['beginPosition'] = element.text.strip() 
     139            element = None 
     140         
     141        element = entry.find('.//{%s}endPosition' % (GML_NAMESPACE)) 
     142        if element is not None: 
     143            kwargs['endPosition'] = element.text.strip() 
     144            element = None             
     145         
     146        geometry = entry.find('.//{%s}posList' % (GML_NAMESPACE)) 
     147        if geometry is not None: 
     148            kwargs['geometry'] = 'POLYGON((%s))' % geometry.text.strip() 
     149        else: 
     150            geometry = entry.find('.//{%s}Envelope' % (GML_NAMESPACE)) 
     151            if geometry is not None: 
     152                lc = geometry.find('./{%s}lowerCorner' % (GML_NAMESPACE)).text.strip() 
     153                uc = geometry.find('./{%s}upperCorner' % (GML_NAMESPACE)).text.strip() 
     154                kwargs['geometry'] = _create_box2d(lc, uc) 
     155 
     156 
     157        kwargs['enclosure'] = entry.findall("./{%s}link" % (ATOM_NAMESPACE)) 
     158        #This can be activated on python >= 2.7 
     159        #kwargs['enclosure'] = entry.findall("./{%s}link[@rel='enclosure']" % (ATOM_NAMESPACE))                          
     160        kwargs['description'] = 'no description' 
     161        subresults.append(Subresult(iid, ititle,  
     162                                    datetime.now().isoformat(), **kwargs)) 
     163     
     164    return subresults 
     165 
     166def apply_query_params(context, results): 
     167    # A cleaner implementation would require calls to 
     168    # db's merge_period_instant_views() but actually it does not collect  
     169    # infos about CEDA_Results 
     170     
     171    subresults = [] 
     172    if results is None: 
     173        return subresults 
     174    for result in results:           
     175        result_guid = context['moles3EPB'].retrieveGUIDFromInstance(result) 
     176        if result_guid is None: 
     177            continue 
     178        ititle = _extractTitle(result) 
     179 
     180        kwargs = {} 
     181        #------------------------ 
     182        phenomenonTime = result.phenomenonTime 
     183        if isinstance(result, list) and len(result.phenomenonTime) > 0: 
     184            phenomenonTime = result.phenomenonTime[0]                     
     185        kwargs['beginPosition'], kwargs['endPosition'] = \ 
     186            from_pt_to_string(phenomenonTime) 
     187        #------------------------ 
     188         
     189        #------------------------ 
     190        kwargs['geometry'] = _new_extract_geographic_extent(result) 
     191        #------------------------                 
     192 
     193        #------------------------                     
     194        kwargs['description'] = result.description 
     195        #------------------------ 
     196 
     197        item = Subresult(result_guid.id, ititle, datetime.now().isoformat(),  
     198                         **kwargs)                
     199        subresults.append(item) 
     200    return subresults 
     201 
    128202class MyOSAtomResponse(OSAtomResponse): 
    129203    ''' 
     
    132206 
    133207    def __init__(self): 
    134         super(MyOSAtomResponse, self).__init__() 
    135      
    136     def _digest_fatcat_atom_(self, context, results): 
    137         count, start_index, start_page = self._importCountAndPage(context) 
    138         entries = results.findall('{%s}entry' % (ATOM_NAMESPACE)) 
    139         subresults = [] 
    140         for entry in entries: 
    141             iid = entry.find('{%s}id' % (ATOM_NAMESPACE)).text.strip() 
    142             ititle = entry.find('{%s}title' % (ATOM_NAMESPACE)).text.strip() 
    143             kwargs = {} 
    144                           
    145             element = entry.find('.//{%s}beginPosition' % (GML_NAMESPACE)) 
    146             if element is not None: 
    147                 kwargs['beginPosition'] = element.text.strip() 
    148                 element = None 
    149              
    150             element = entry.find('.//{%s}endPosition' % (GML_NAMESPACE)) 
    151             if element is not None: 
    152                 kwargs['endPosition'] = element.text.strip() 
    153                 element = None             
    154              
    155             geometry = entry.find('.//{%s}posList' % (GML_NAMESPACE)) 
    156             if geometry is not None: 
    157                 kwargs['geometry'] = 'POLYGON((%s))' % geometry.text.strip() 
    158             else: 
    159                 geometry = entry.find('.//{%s}Envelope' % (GML_NAMESPACE)) 
    160                 if geometry is not None: 
    161                     lc = geometry.find('./{%s}lowerCorner' % (GML_NAMESPACE)).text.strip() 
    162                     uc = geometry.find('./{%s}upperCorner' % (GML_NAMESPACE)).text.strip() 
    163                     kwargs['geometry'] = _create_box2d(lc, uc) 
    164  
    165  
    166             kwargs['enclosure'] = entry.findall("./{%s}link" % (ATOM_NAMESPACE)) 
    167             #This can be activated on python >= 2.7 
    168             #kwargs['enclosure'] = entry.findall("./{%s}link[@rel='enclosure']" % (ATOM_NAMESPACE))                          
    169             kwargs['description'] = 'no description' 
    170             subresults.append(Subresult(iid, ititle,  
    171                                         datetime.now().isoformat(), **kwargs)) 
    172          
    173         tot_results = int(results.find('{%s}totalResults'  
    174                                        % (OS_NAMESPACE)).text.replace('\n','').strip()) 
    175         return Result(count, start_index, start_page, tot_results,  
    176                       subresult = subresults, title=HPFOS_TITLE)         
    177          
    178     def _digest_fatcat_atom(self, context, results): 
    179         entries = results.findall('{%s}entry' % (ATOM_NAMESPACE)) 
    180         subresults = [] 
    181         for entry in entries: 
    182             iid = entry.find('{%s}id' % (ATOM_NAMESPACE)).text.strip() 
    183             ititle = entry.find('{%s}title' % (ATOM_NAMESPACE)).text.strip() 
    184             kwargs = {} 
    185                           
    186             element = entry.find('.//{%s}beginPosition' % (GML_NAMESPACE)) 
    187             if element is not None: 
    188                 kwargs['beginPosition'] = element.text.strip() 
    189                 element = None 
    190              
    191             element = entry.find('.//{%s}endPosition' % (GML_NAMESPACE)) 
    192             if element is not None: 
    193                 kwargs['endPosition'] = element.text.strip() 
    194                 element = None             
    195              
    196             geometry = entry.find('.//{%s}posList' % (GML_NAMESPACE)) 
    197             if geometry is not None: 
    198                 kwargs['geometry'] = 'POLYGON((%s))' % geometry.text.strip() 
    199             else: 
    200                 geometry = entry.find('.//{%s}Envelope' % (GML_NAMESPACE)) 
    201                 if geometry is not None: 
    202                     lc = geometry.find('./{%s}lowerCorner' % (GML_NAMESPACE)).text.strip() 
    203                     uc = geometry.find('./{%s}upperCorner' % (GML_NAMESPACE)).text.strip() 
    204                     kwargs['geometry'] = _create_box2d(lc, uc) 
    205  
    206  
    207             kwargs['enclosure'] = entry.findall("./{%s}link" % (ATOM_NAMESPACE)) 
    208             #This can be activated on python >= 2.7 
    209             #kwargs['enclosure'] = entry.findall("./{%s}link[@rel='enclosure']" % (ATOM_NAMESPACE))                          
    210             kwargs['description'] = 'no description' 
    211             subresults.append(Subresult(iid, ititle,  
    212                                         datetime.now().isoformat(), **kwargs)) 
    213          
    214         return subresults 
    215      
    216         ''' 
    217         tot_results = int(results.find('{%s}totalResults'  
    218                                        % (OS_NAMESPACE)).text.replace('\n','').strip()) 
    219      
    220         return Result(count, start_index, start_page, tot_results, 
    221                       subresult = subresults, title=HPFOS_TITLE)   
    222         '''       
    223  
    224     def apply_query_params(self, context, results): 
    225         # A cleaner implementation would require calls to 
    226         # db's merge_period_instant_views() but actually it does not collect  
    227         # infos about CEDA_Results 
    228          
    229         subresults = [] 
    230         if results is None: 
    231             return subresults 
    232         for result in results:           
    233             result_guid = context['moles3EPB'].retrieveGUIDFromInstance(result) 
    234             if result_guid is None: 
    235                 continue 
    236             ititle = _extractTitle(result) 
    237  
    238             kwargs = {} 
    239             #------------------------ 
    240             phenomenonTime = result.phenomenonTime 
    241             if isinstance(result, list) and len(result.phenomenonTime) > 0: 
    242                 phenomenonTime = result.phenomenonTime[0]                     
    243             kwargs['beginPosition'], kwargs['endPosition'] = \ 
    244                 from_pt_to_string(phenomenonTime) 
    245             #------------------------ 
    246              
    247             #------------------------ 
    248             kwargs['geometry'] = _new_extract_geographic_extent(result) 
    249             #------------------------                 
    250  
    251             #------------------------                     
    252             kwargs['description'] = result.description 
    253             #------------------------ 
    254  
    255             item = Subresult(result_guid.id, ititle, datetime.now().isoformat(),  
    256                              **kwargs)                
    257             subresults.append(item) 
    258         return subresults 
    259  
    260     def digest_search_results_(self, results, context): 
    261         if type(results) == CEDA_ObservationCollection: 
    262             results = results.member 
    263         elif isinstance(results, _ElementInterface): 
    264             return self._digest_fatcat_atom_(context, results)                     
    265  
    266         count, start_index, start_page = self._importCountAndPage(context) 
    267  
    268         instances = results 
    269         if type(results) == tuple: 
    270             ids = [id[0] for id in results[1]]  
    271             instances = context['moles3EPB'].get_instance_by_ids(ids)  
    272                             
    273         subresults = filter_results(instances, count, start_index, start_page) 
    274         subresults = self.apply_query_params(context, subresults)                                               
    275  
    276         tot_results = 0 
    277         try: 
    278             tot_results = len(instances) 
    279         except: 
    280             pass 
    281                          
    282         return Result(count, start_index, start_page, tot_results, \ 
    283                       subresult = subresults, title=HPFOS_TITLE) 
     208        super(MyOSAtomResponse, self).__init__()        
    284209 
    285210    def digest_search_results(self, results, context): 
Note: See TracChangeset for help on using the changeset viewer.