Package platecom :: Package ontocatalog :: Package indexes :: Module translation
[hide private]
[frames] | no frames]

Source Code for Module icsemantic.catalog.indexes.translation

  1  """TranslationIndex is an index for the catalog that does not index 
  2  anything. 
  3   
  4  Instead, the _apply_index performs a query to a thesaurus object for 
  5  translations of the keyword parameters and then queries the site 
  6  catalog for the result of the thesaurus query. 
  7  """ 
  8   
  9  from logging import getLogger 
 10   
 11  from zope.interface import implements 
 12  from zope.component import queryUtility 
 13  from zope.i18n.interfaces import IUserPreferredLanguages 
 14   
 15   
 16  from Globals import Persistent, DTMLFile 
 17  from OFS.SimpleItem import SimpleItem 
 18  from BTrees.IIBTree import IITreeSet, IISet, intersection, union 
 19   
 20  from Products.PluginIndexes import PluggableIndex 
 21  from Products.PluginIndexes.common.util import parseIndexRequest 
 22  from Products.PluginIndexes.interfaces import IPluggableIndex 
 23   
 24  from Products.CMFCore.utils import getToolByName 
 25   
 26  from platecom.ontocatalog.indexes import utils 
 27   
 28   
29 -class TranslationIndex(Persistent, SimpleItem):
30 """An index for translations that does not index anything""" 31 32 __implements__ = (PluggableIndex.PluggableIndexInterface,) 33 implements(IPluggableIndex) 34 35 meta_type = "TranslationIndex" 36 manage_workspace = DTMLFile('dtml/manageFakeIndex', globals()) 37
38 - def __init__(self, id, extra=None, caller=None):
39 """Creates a new index""" 40 self.id = id 41 self.catalog = caller
42
43 - def index_object(self, docid, obj ,threshold=100):
44 """Hook for (Z)Catalog. Since this is a fake index, nothing is 45 done here. 46 """ 47 return 1
48
49 - def unindex_object(self, docid):
50 """Hook for (Z)Catalog. Since this is a fake index, nothing is 51 done here. 52 """ 53 return
54
55 - def _apply_index(self, request, cid=''):
56 """Apply the index to query parameters given in the argument, 57 request. 58 59 The argument should be a mapping object. 60 61 If the request does not contain the needed parameters, then 62 None is returned. 63 64 Otherwise two objects are returned. The first object is a 65 ResultSet containing the record numbers of the matching 66 records. The second object is a tuple containing the names of 67 all data fields used. 68 """ 69 portal = getToolByName(self, 'portal_url').getPortalObject() 70 query_options = ('query', 'language') 71 record = parseIndexRequest(request, self.id, query_options) 72 if record.keys is None: 73 return None 74 75 language = record.get('language', None) 76 77 if language is not None: 78 language = ('',) + tuple(language) 79 else: 80 language = ('',) 81 82 #Languages dance 83 langutil = queryUtility(IUserPreferredLanguages, 84 name='platecom_preferred_languages') 85 user_languages = tuple(langutil.getPreferredLanguages(request=self.REQUEST)) 86 87 thesaurus_results = [] 88 catalog_results = () 89 for k in record.keys: 90 for lang in user_languages: 91 filtered_langs = [l for l in language if 92 l not in [lang, '']] 93 key = "%s@%s" % (k, lang) 94 thesaurus_results += utils.get_equivalent(portal, key, 95 filtered_langs) 96 97 # TODO check if it is the same to move this outside the inner 98 # for statement 99 if thesaurus_results != []: 100 tuples = [tl.split('@') for tl in thesaurus_results] 101 translations = ['\"%s\"' % (t,) for (t,l) in tuples] 102 search_text = ' OR '.join(translations) 103 query = {'SearchableText': search_text, 104 'Language': language} 105 catalog_results += tuple(self.catalog(query)) 106 107 result = utils.build_catalog_results(self.id, self.catalog._catalog, 108 catalog_results) 109 return result
110 111 112 manage_addTranslationIndexForm = DTMLFile('dtml/addFakeIndex', globals()) 113
114 -def manage_addTranslationIndex(self, id, extra=None, REQUEST=None, 115 RESPONSE=None, URL3=None):
116 """Add a fake index""" 117 return self.manage_addIndex(id, 'TranslationIndex', extra=extra, 118 REQUEST=REQUEST, RESPONSE=RESPONSE, URL1=URL3)
119