~aelkner/schooltool/cando_merge_fix

« back to all changes in this revision

Viewing changes to src/schooltool/cando/model.py

  • Committer: Alan Elkner
  • Date: 2012-11-12 05:59:01 UTC
  • mfrom: (132.1.10 schooltool.cando)
  • Revision ID: aelkner@gmail.com-20121112055901-d8phjpbnulvwu2jv
Created NodeCatalog and SkillSetCatalog
New indexed AggregateNodesTable that mixes nodes with skillsets and skills
Got rid of skill layers from nodes-only table filter

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import itertools
21
21
 
22
22
from persistent import Persistent
 
23
import zope.lifecycleevent
 
24
from zope.catalog.text import TextIndex
23
25
from zope.container.btree import BTreeContainer
24
26
from zope.container.contained import Contained
25
27
from zope.component import adapts, adapter
26
 
from zope.component import getUtility
27
28
from zope.interface import implements, implementer
28
 
from zope.intid import addIntIdSubscriber
29
 
from zope.intid.interfaces import IIntIds
30
 
from zope.lifecycleevent import ObjectAddedEvent
31
 
from zope.lifecycleevent.interfaces import IObjectRemovedEvent
32
29
from zope.security.proxy import removeSecurityProxy
33
30
 
34
31
from schooltool.app.app import InitBase, StartUpBase
35
32
from schooltool.app.interfaces import ISchoolToolApplication
 
33
from schooltool.app.catalog import AttributeCatalog
 
34
from zope.index.text.interfaces import ISearchableText
36
35
from schooltool.cando import interfaces
37
36
from schooltool.cando.skill import URISkillSet
38
37
from schooltool.relationship import URIObject
40
39
from schooltool.relationship.interfaces import InvalidRelationship
41
40
from schooltool.relationship.interfaces import IBeforeRelationshipEvent
42
41
from schooltool.relationship.interfaces import IBeforeRemovingRelationshipEvent
 
42
from schooltool.table.catalog import ConvertingSetIndex
43
43
 
44
44
 
45
45
URILayer = URIObject(
475
475
            child_nodes=child_nodes_in_model)
476
476
 
477
477
 
 
478
def nodeModifiedOnNodeLayerChange(event):
 
479
    match = event.match(NodeLayer)
 
480
    if match is None:
 
481
        return
 
482
    zope.lifecycleevent.modified(match.node)
 
483
 
 
484
 
478
485
def getOrderedByHierarchy(layers):
479
486
    layers = list(layers)
480
487
    orphans = []
531
538
        if 'schooltool.cando.document' not in self.app:
532
539
            self.app['schooltool.cando.document'] = DocumentContainer()
533
540
 
 
541
 
 
542
def get_node_layer_names(node):
 
543
    return [l.__name__ for l in node.layers]
 
544
 
 
545
 
 
546
def get_node_layer_titles(node):
 
547
    return [l.title for l in node.layers]
 
548
 
 
549
 
 
550
class NodeCatalog(AttributeCatalog):
 
551
 
 
552
    version = '1.1 - update layers and layer titles'
 
553
    interface = interfaces.INode
 
554
    attributes = ('title', 'label', 'description',
 
555
                  'required', 'retired')
 
556
 
 
557
    def setIndexes(self, catalog):
 
558
        super(NodeCatalog, self).setIndexes(catalog)
 
559
        catalog['text'] = TextIndex('getSearchableText', ISearchableText, True)
 
560
        catalog['layers'] = ConvertingSetIndex(converter=get_node_layer_names)
 
561
        catalog['layer_titles'] = ConvertingSetIndex(converter=get_node_layer_titles)
 
562
 
 
563
 
 
564
getNodeCatalog = NodeCatalog.get
 
565
 
 
566
 
 
567
class SearchableTextNode(object):
 
568
 
 
569
    adapts(interfaces.INode)
 
570
    implements(ISearchableText)
 
571
 
 
572
    def __init__(self, context):
 
573
        self.context = context
 
574
 
 
575
    def getSearchableText(self):
 
576
        result = [
 
577
            self.context.title,
 
578
            self.context.label or '',
 
579
            self.context.description or '',
 
580
            ]
 
581
        result.extend([l.title for l in self.context.layers])
 
582
        return ' '.join(result)