Ticket #339: pleiades-notsure.patch

File pleiades-notsure.patch, 2.4 kB (added by sgillies, 1 year ago)
  • geo.py

    old new  
    3434 
    3535from Products.ATContentTypes.interface.topic import IATTopic 
    3636from Products.ATContentTypes.interface.folder import IATFolder 
     37from Products.ATContentTypes.interface.folder import IATBTreeFolder 
    3738 
    3839from Products.PleiadesGeocoder.interfaces import IGeoItemSimple \ 
    3940    , IGeoCollectionSimple, IGeoreferencedEvent 
    4041 
     42import logging 
    4143 
     44logger = logging.getLogger('PleiadesGeocoder.geo') 
     45 
     46 
    4247class GeoreferencedEvent(object): 
    4348    """Event to notify that object has been georeferenced. 
    4449    """ 
     
    157162    def geoItems(self): 
    158163        if IATTopic.providedBy(self.context): 
    159164            for ob in self.context.queryCatalog(): 
    160                 try: 
    161                     item = IGeoItemSimple(ob.getObject()) 
    162                     assert(item.isGeoreferenced()) 
    163                 except: 
     165                item = self._adapt(ob.getObject()) 
     166                if item is None: 
    164167                    continue 
    165                 yield item 
    166         elif IATFolder.providedBy(self.context):  
     168                else: 
     169                    yield item 
     170        elif (IATFolder.providedBy(self.context) or 
     171              IATBTreeFolder.providedBy(self.context)): 
    167172            for ob in self.context.listFolderContents(): 
    168                 try: 
    169                     item = IGeoItemSimple(ob) 
    170                     assert(item.isGeoreferenced()) 
    171                 except: 
     173                item = self._adapt(ob) 
     174                if item is None: 
    172175                    continue 
     176                else: 
     177                    yield item 
     178        else: 
     179            item = self._adapt(self.context) 
     180            if item is None: 
     181                return 
     182            else: 
    173183                yield item 
    174         else: 
    175             try: 
    176                 item = IGeoItemSimple(self.context) 
    177                 assert(item.isGeoreferenced()) 
    178             except: 
    179                 pass 
    180             yield item 
    181184 
     185    def _adapt(self, ob): 
     186        try: 
     187            item = IGeoItemSimple(ob) 
     188            if item.isGeoreferenced(): 
     189                return item 
     190            else: 
     191                logger.debug("%s is not georeferenced" % item) 
     192        except TypeError: 
     193            logger.debug("Could not adapt %s to IGeoItemSimple" % self.context) 
     194        return None 
    182195 
     196