Changeset 459

Show
Ignore:
Timestamp:
08/24/07 00:44:47 (11 months ago)
Author:
athomas
Message:

pyndexter: Re-added stemmers and added an entry_point for them.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • pyndexter/branches/simplification/pyndexter/__init__.py

    r458 r459  
    3333 
    3434 
    35 __all__ = ['Document', 'Query', 'Hit', 'Indexer', 'ResultSet', 
     35__all__ = ['Document', 'Query', 'Hit', 'Indexer', 'ResultSet', 'Stemmer', 
    3636           'Error', 'DocumentNotFound', 'InvalidURI', 'InvalidIndexer', 
    3737           'connect'] 
     38 
     39 
     40def _debug(message): 
     41    """Print a debug message.""" 
     42    if _debug.enabled: 
     43        print >> sys.stderr, message 
     44# Set this to true to enable debug tracing 
     45_debug.enabled = False 
    3846 
    3947 
     
    4553    methods.""" 
    4654 
    47 class InvalidURI(Error): 
    48     """The URI provided was invalid in that context.""" 
    49  
    50 class InvalidIndexer(Error): 
    51     """The provided indexer URI was invalid.""" 
     55class PluginError(Error): 
     56    """An error occurred in the plugin system.""" 
     57 
     58 
     59class Stemmer(object): 
     60    """Abstraction for a stemming algorithm.""" 
     61    def __call__(self, words): 
     62        """Return an iterable of the words in stemmed form.""" 
     63        raise NotImplementedError 
    5264 
    5365 
     
    297309 
    298310 
    299 def connect(uri, plugin_paths=None): 
    300     """Connect to the indexer defined by URI.""" 
     311def load_plugin(name, entry_point, plugin_paths=None): 
    301312    import pkg_resources 
    302     uri = URI(uri) 
    303313 
    304314    if plugin_paths is None: 
     
    310320 
    311321    for dist in distributions: 
     322        _debug('Adding distribution %s' % dist) 
    312323        pkg_resources.working_set.add(dist) 
    313324 
     
    328339            _debug(_format_error(dist, e)) 
    329340 
    330     for entry in pkg_resources.working_set.iter_entry_points('pyndexter.indexers'): 
    331         if entry.name == uri.scheme: 
     341    for entry in pkg_resources.working_set.iter_entry_points(entry_point): 
     342        if entry.name == name: 
    332343            try: 
    333344                _debug('Loading %s' % entry) 
    334                 connect = entry.load(require=True) 
    335                 return IndexerWrapper(connect(uri)) 
     345                factory = entry.load(require=True) 
     346                return factory 
    336347            except (ImportError, pkg_resources.DistributionNotFound, 
    337348                    pkg_resources.VersionConflict, pkg_resources.UnknownExtra), e: 
    338                 _debug('Failed to load %s: %s' % (uri.scheme, _format_error(entry, e))) 
    339                 raise InvalidIndexer('%s (%s)' % (str(uri), _format_error(entry, e))) 
    340  
    341  
    342 def _debug(message): 
    343     """Print a debug message.""" 
    344     if _debug.enabled: 
    345         print >> sys.stderr, message 
    346 # Set this to true to enable debug tracing 
    347 _debug.enabled = False 
    348  
    349  
     349                _debug('Failed to load %s: %s' % (name, _format_error(entry, e))) 
     350                raise PluginError('%s (%s)' % (name, _format_error(entry, e))) 
     351    raise PluginError('No suitable plugins found for %s' % name) 
     352 
     353 
     354def connect(uri, plugin_paths=None): 
     355    """Connect to the indexer defined by uri.""" 
     356    uri = URI(uri) 
     357    indexer_factory = load_plugin(uri.scheme, 'pyndexter.indexers', 
     358                                  plugin_paths) 
     359    return IndexerWrapper(indexer_factory(uri)) 
  • pyndexter/branches/simplification/setup.py

    r458 r459  
    2424                 'Topic :: Software Development :: Libraries'], 
    2525    packages=find_packages(exclude=['*.tests']), 
     26    dependency_links=[ 
     27        'http://snowball.tartarus.org/download.php', 
     28    ], 
    2629    extras_require={ 
    2730        'hyperestraier': ['hyperestraier>=0.9.3'], 
     31        'snowball': ['PyStemmer>=1.0.1'], 
    2832        # TODO put more indexer requirements in here 
    2933        }, 
     
    3337 
    3438        [pyndexter.stemmers] 
    35         builtin = pyndexter.stemmers.builtin 
     39        porter = pyndexter.stemmers.porter:factory 
     40        snowball = pyndexter.stemmers.snowball:factory[snowball] 
    3641        """ 
    3742    )