Changeset 453

Show
Ignore:
Timestamp:
08/22/07 06:42:12 (11 months ago)
Author:
athomas
Message:

pyndexter: Moved to hyperestraier pure-Python module, fixed setup.py.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • pyndexter/trunk/pyndexter/indexers/_hyperestraier.py

    r452 r453  
    4545 
    4646import os 
    47 import HyperEstraier 
     47import hyperestraier 
    4848from pyndexter import * 
    4949 
     
    5454class HyperestraierIndexer(Indexer): 
    5555    """ Pyndexter adapter for the Hyperestraier indexer. """ 
    56     def __init__(self, framework, path, hype_mode=None): 
     56    def __init__(self, framework, host, path, username='admin', 
     57                 password='admin', port=1978): 
    5758        Indexer.__init__(self, framework) 
    58         self.hype_mode = hype_mode 
    5959 
    60         path = path.encode('utf-8') 
    61         self.path = path 
    62         self.db_path = os.path.join(path, 'hyperestraier.db').encode('utf-8') 
    63         self.state_path = os.path.join(path, 'state.db') 
    64  
    65         if framework.mode == READWRITE: 
    66             if not os.path.exists(self.path): 
    67                 os.makedirs(self.path) 
    68  
    69         if self.hype_mode is None: 
    70             self.hype_mode = HyperEstraier.Database.DBREADER 
    71             if self.framework.mode == READWRITE: 
    72                 self.hype_mode |= HyperEstraier.Database.DBWRITER|HyperEstraier.Database.DBCREAT 
    73  
    74         self.db = HyperEstraier.Database() 
    75         self.db.open(self.db_path, self.hype_mode) 
     60        self.db = hyperestraier.Node() 
     61        self.db.set_url('http://%s:%s/%s' % (host, port, path)) 
     62        self.db.set_auth(username, password) 
    7663 
    7764    def index(self, document): 
    78         hdoc = HyperEstraier.Document() 
     65        hdoc = hyperestraier.Document() 
    7966        for k, v in document.attributes.iteritems(): 
    80             hdoc.add_attr(unicode('@' + k).encode('utf-8'), 
    81                           unicode(v).encode('utf-8')) 
     67            hdoc.add_attr(u'@' + k, v) 
    8268        for line in document.content.splitlines(): 
    83             hdoc.add_text(line.encode('utf-8')
     69            hdoc.add_text(line
    8470        self.db.put_doc(hdoc, 1) 
    8571 
    8672    def discard(self, uri): 
    87         uuri = unicode(uri).encode('utf-8') 
    88         id = self.db.uri_to_id(uuri) 
    89         if id == -1: 
     73        uri = unicode(uri) 
     74        if not self.db.out_doc_by_uri(uri): 
    9075            raise DocumentNotFound(uri) 
    91         self.db.out_doc(id, HyperEstraier.Database.ODCLEAN) 
    9276 
    9377    def fetch(self, uri): 
    94         uuri = unicode(uri).encode('utf-8') 
    95         id = self.db.uri_to_id(uuri) 
    96         if id == -1: 
    97             raise DocumentNotFound(uri) 
    98         doc = self.db.get_doc(id, 0) 
     78        uri = unicode(uri) 
     79        doc = self.db.get_doc_by_uri(uri) 
    9980        attributes = self._translate_attributes(doc) 
    100         return Document(content=u'\n'.join([t.decode('utf-8') 
    101                                             for t in doc.texts()]), 
     81        return Document(content=u'\n'.join([t for t in doc.texts()]), 
    10282                        quality=0.99, 
    10383                        **attributes) 
     
    120100    def hype_search(self, phrase, query, simple=True, order=None): 
    121101        """ Full Hyperestraier search phrase. """ 
    122         cond = HyperEstraier.Condition() 
    123         cond.set_phrase(phrase.encode('utf-8')
     102        cond = hyperestraier.Condition() 
     103        cond.set_phrase(phrase
    124104        search = self.db.search(cond, 0) 
    125         return HyperestraierResult(self, query, search
     105        return HyperestraierResult(self, query, search or []
    126106 
    127107    # Internal methods 
     
    129109        attributes = {} 
    130110        for k in hdoc.attr_names(): 
     111            k = k.encode('utf-8') 
    131112            if k[0] == '@': 
    132                 attributes[k[1:]] = hdoc.attr(k).decode('utf-8') 
     113                attributes[k[1:]] = hdoc.attr(k) 
    133114            else: 
    134                 attributes[k] = hdoc.attr(k).decode('utf-8') 
     115                attributes[k] = hdoc.attr(k) 
    135116        attributes['uri'] = URI(attributes['uri']) 
    136117        return attributes 
    137118 
    138119 
    139  
    140 indexer_factory = PluginFactory(HyperestraierIndexer, hype_mode=int) 
     120indexer_factory = PluginFactory(HyperestraierIndexer) 
    141121 
    142122 
    143123class HyperestraierResult(Result): 
    144124    def __iter__(self): 
    145         for id in self.context
    146             yield self._translate(id
     125        for doc in self.context.docs
     126            yield self._translate(doc
    147127 
    148128    def __len__(self): 
    149         return len(self.context
     129        return self.context.doc_num(
    150130 
    151131    def __getitem__(self, index): 
    152         return self._translate(self.context[index]) 
     132        return self._translate(self.context.get_doc[index]) 
    153133 
    154134    # Internal methods 
    155     def _translate(self, id): 
    156         doc = self.indexer.db.get_doc(id, 0) 
     135    def _translate(self, doc): 
    157136        return Hit(current=self.indexer.framework.fetch, 
    158137                   indexed=self.indexer.fetch, 
  • pyndexter/trunk/pyndexter/__init__.py

    r452 r453  
    225225                text = '%s(%s:"%s"' % ('  ' * depth, node.value[0], node.value[1]) 
    226226            else: 
    227                 text = "%s(%s%s" % ('  ' * depth, type_map[node.type], node.value and ' "%s"' % (node.value,) or "") 
     227                text = "%s(%s%s" % ('  ' * depth, type_map[node.type], 
     228                                    node.value and ' "%s"' % (node.value,) or "") 
    228229            if node.left or node.right: 
    229230                text += "\n" 
     
    467468    """Compact all words in a block of text.""" 
    468469 
    469     def __init__(self, words_re=re.compile(r'\w+'), stemmer=lambda w: w, 
     470    def __init__(self, words_re=r'\w+', stemmer=lambda w: w, 
    470471                 min_word_length=3, max_word_length=64, unique=False, 
    471472                 split=False, lower=True): 
     
    485486            words_re = re.compile(words_re, re.UNICODE) 
    486487        self.words_re = words_re 
    487         self.stemmer = stemmer 
     488        self.stemmer = stemmer or lambda w: w 
    488489        self.min_word_length = min_word_length 
    489490        self.max_word_length = max_word_length 
  • pyndexter/trunk/setup.py

    r401 r453  
    2626                   'Operating System :: OS Independent', 
    2727                   'Topic :: Software Development :: Libraries'], 
    28       packages=['pyndexter', 'pyndexter.indexers', 'pyndexter.sources', 
    29                 'pyndexter.stemmers', 'pyndexter.tests']) 
     28      packages=['pyndexter', 'pyndexter.indexers', 'pyndexter.stemmers', 
     29                'pyndexter.tests'])