src/pyams_thesaurus/thesaurus.py
changeset 108 06272e2e8bb5
parent 87 dfe19304d980
child 115 91b51d5e32e7
equal deleted inserted replaced
107:9149ffc59bb4 108:06272e2e8bb5
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 
    12 
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
    15 
       
    16 # import standard library
       
    17 import re
    15 import re
    18 
    16 
    19 # import interfaces
    17 from hypatia.catalog import Catalog
       
    18 from hypatia.query import Contains, Eq
       
    19 from hypatia.text.lexicon import Lexicon
       
    20 from hypatia.text.parsetree import QueryError
       
    21 from persistent import Persistent
       
    22 from pyramid.events import subscriber
       
    23 from transaction.interfaces import ITransactionManager
       
    24 from zope.componentvocabulary.vocabulary import UtilityVocabulary
       
    25 from zope.container.btree import BTreeContainer
       
    26 from zope.container.contained import Contained
       
    27 from zope.interface import implementer
       
    28 from zope.interface.interfaces import ComponentLookupError
       
    29 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectRemovedEvent
       
    30 from zope.location import locate
       
    31 from zope.location.interfaces import ISublocations
       
    32 from zope.schema.fieldproperty import FieldProperty
       
    33 from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
       
    34 from zope.traversing.interfaces import ITraversable
       
    35 
       
    36 from pyams_catalog.index import FieldIndexWithInterface, TextIndexWithInterface
       
    37 from pyams_catalog.nltk import NltkStemmedTextProcessor
       
    38 from pyams_catalog.query import CatalogResultSet, or_
       
    39 from pyams_catalog.utils import index_object
    20 from pyams_form.interfaces.form import IFormContextPermissionChecker
    40 from pyams_form.interfaces.form import IFormContextPermissionChecker
    21 from pyams_security.interfaces import IDefaultProtectionPolicy
    41 from pyams_security.interfaces import IDefaultProtectionPolicy
       
    42 from pyams_security.property import RolePrincipalsFieldProperty
       
    43 from pyams_security.security import ProtectedObject
    22 from pyams_thesaurus.interfaces import ADMIN_THESAURUS_PERMISSION
    44 from pyams_thesaurus.interfaces import ADMIN_THESAURUS_PERMISSION
    23 from pyams_thesaurus.interfaces.extension import IThesaurusTermExtension
    45 from pyams_thesaurus.interfaces.extension import IThesaurusTermExtension
    24 from pyams_thesaurus.interfaces.loader import IThesaurusLoader
    46 from pyams_thesaurus.interfaces.loader import IThesaurusLoader
    25 from pyams_thesaurus.interfaces.term import IThesaurusTermsContainer, IThesaurusTerm, IThesaurusLoaderTerm
    47 from pyams_thesaurus.interfaces.term import IThesaurusLoaderTerm, IThesaurusTerm, IThesaurusTermsContainer
    26 from pyams_thesaurus.interfaces.thesaurus import IThesaurus, IThesaurusExtract, IThesaurusExtractRoles, \
    48 from pyams_thesaurus.interfaces.thesaurus import IThesaurus, IThesaurusContextManager, IThesaurusExtract, \
    27     IThesaurusRoles, IThesaurusExtracts, IThesaurusContextManager
    49     IThesaurusExtractRoles, IThesaurusExtracts, IThesaurusRoles
       
    50 from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter
       
    51 from pyams_utils.factory import factory_config
    28 from pyams_utils.interfaces.site import IOptionalUtility
    52 from pyams_utils.interfaces.site import IOptionalUtility
    29 from pyams_utils.interfaces.tree import ITree
    53 from pyams_utils.interfaces.tree import ITree
    30 from transaction.interfaces import ITransactionManager
    54 from pyams_utils.registry import get_global_registry, query_utility
    31 from zope.interface.interfaces import ComponentLookupError
       
    32 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectRemovedEvent
       
    33 from zope.location.interfaces import ISublocations
       
    34 from zope.traversing.interfaces import ITraversable
       
    35 
       
    36 # import packages
       
    37 from hypatia.catalog import Catalog
       
    38 from hypatia.query import Eq, Contains
       
    39 from hypatia.text.lexicon import Lexicon
       
    40 from hypatia.text.parsetree import QueryError
       
    41 from persistent import Persistent
       
    42 from pyams_catalog.index import TextIndexWithInterface, FieldIndexWithInterface
       
    43 from pyams_catalog.nltk import NltkStemmedTextProcessor
       
    44 from pyams_catalog.query import CatalogResultSet, or_
       
    45 from pyams_catalog.utils import index_object
       
    46 from pyams_security.security import ProtectedObject
       
    47 from pyams_security.property import RolePrincipalsFieldProperty
       
    48 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
       
    49 from pyams_utils.registry import query_utility, get_utilities_for, get_global_registry
       
    50 from pyams_utils.request import check_request
    55 from pyams_utils.request import check_request
    51 from pyams_utils.traversing import get_parent
    56 from pyams_utils.traversing import get_parent
    52 from pyams_utils.unicode import translate_string
    57 from pyams_utils.unicode import translate_string
    53 from pyams_utils.vocabulary import vocabulary_config
    58 from pyams_utils.vocabulary import vocabulary_config
    54 from pyramid.events import subscriber
       
    55 from zope.componentvocabulary.vocabulary import UtilityVocabulary
       
    56 from zope.container.btree import BTreeContainer
       
    57 from zope.container.contained import Contained
       
    58 from zope.interface import implementer
       
    59 from zope.location import locate
       
    60 from zope.schema.fieldproperty import FieldProperty
       
    61 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
       
    62 
    59 
    63 
    60 
    64 CUSTOM_SEARCH = re.compile(r'\*|\"|\sand\s|\sor\s|\snot\s|\(|\)', re.IGNORECASE)
    61 CUSTOM_SEARCH = re.compile(r'\*|\"|\sand\s|\sor\s|\snot\s|\(|\)', re.IGNORECASE)
    65 
    62 
    66 
    63 
   289 #
   286 #
   290 
   287 
   291 THESAURUS_EXTRACTS_KEY = 'pyams_thesaurus.extracts'
   288 THESAURUS_EXTRACTS_KEY = 'pyams_thesaurus.extracts'
   292 
   289 
   293 
   290 
   294 @implementer(IThesaurusExtracts)
   291 @factory_config(IThesaurusExtracts)
   295 class ThesaurusExtractsContainer(BTreeContainer):
   292 class ThesaurusExtractsContainer(BTreeContainer):
   296     """Thesaurus extracts container"""
   293     """Thesaurus extracts container"""
   297 
   294 
   298 
   295 
   299 @adapter_config(context=IThesaurus, provides=IThesaurusExtracts)
   296 @adapter_config(context=IThesaurus, provides=IThesaurusExtracts)
   300 def thesaurus_extracts_factory(context):
   297 def thesaurus_extracts_factory(context):
   301     """Thesaurus extracts factory"""
   298     """Thesaurus extracts factory"""
   302     return get_annotation_adapter(context, THESAURUS_EXTRACTS_KEY, ThesaurusExtractsContainer,
   299     return get_annotation_adapter(context, THESAURUS_EXTRACTS_KEY, IThesaurusExtracts,
   303                                   name='++extracts++')
   300                                   name='++extracts++')
   304 
   301 
   305 
   302 
   306 @adapter_config(name='extracts', context=IThesaurus, provides=ITraversable)
   303 @adapter_config(name='extracts', context=IThesaurus, provides=ITraversable)
   307 class ThesaurusExtractsNamespace(ContextAdapter):
   304 class ThesaurusExtractsNamespace(ContextAdapter):