Merge branch 'master' into bbmaster
This commit is contained in:
		
						commit
						335c52e3cb
					
				
					 8 changed files with 78 additions and 21 deletions
				
			
		|  | @ -28,7 +28,6 @@ | ||||||
|         <div metal:use-macro="views/node_macros/object_actions" /> |         <div metal:use-macro="views/node_macros/object_actions" /> | ||||||
|     </tal:actions> |     </tal:actions> | ||||||
|     <h1 tal:attributes="ondblclick item/openEditWindow"> |     <h1 tal:attributes="ondblclick item/openEditWindow"> | ||||||
|       <a name="top" /> |  | ||||||
|       <a tal:omit-tag="python: level > 1" |       <a tal:omit-tag="python: level > 1" | ||||||
|          tal:attributes="href request/URL" |          tal:attributes="href request/URL" | ||||||
|          tal:content="item/title">Title</a> |          tal:content="item/title">Title</a> | ||||||
|  |  | ||||||
							
								
								
									
										25
									
								
								concept.py
									
										
									
									
									
								
							
							
						
						
									
										25
									
								
								concept.py
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| # | # | ||||||
| #  Copyright (c) 2011 Helmut Merz helmutm@cy55.de | #  Copyright (c) 2012 Helmut Merz helmutm@cy55.de | ||||||
| # | # | ||||||
| #  This program is free software; you can redistribute it and/or modify | #  This program is free software; you can redistribute it and/or modify | ||||||
| #  it under the terms of the GNU General Public License as published by | #  it under the terms of the GNU General Public License as published by | ||||||
|  | @ -18,8 +18,6 @@ | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| Definition of the Concept and related classes. | Definition of the Concept and related classes. | ||||||
| 
 |  | ||||||
| $Id$ |  | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| from zope import component, schema | from zope import component, schema | ||||||
|  | @ -209,9 +207,26 @@ class Concept(Contained, Persistent): | ||||||
|         return [r.first for r in self.getParentRelations(predicates, sort=sort, |         return [r.first for r in self.getParentRelations(predicates, sort=sort, | ||||||
|                                                 noSecurityCheck=noSecurityCheck)] |                                                 noSecurityCheck=noSecurityCheck)] | ||||||
| 
 | 
 | ||||||
|     def assignChild(self, concept, predicate=None, order=0, relevance=1.0): |     def checkPredicate(self, child, predicate=None): | ||||||
|  |         cm = self.getConceptManager() | ||||||
|  |         defaultPredicate = cm.getDefaultPredicate() | ||||||
|         if predicate is None: |         if predicate is None: | ||||||
|             predicate = self.getConceptManager().getDefaultPredicate() |             predicate = defaultPredicate | ||||||
|  |         if predicate == defaultPredicate: | ||||||
|  |             subtypePred = cm.get('issubtype') | ||||||
|  |             if subtypePred is not None: | ||||||
|  |                 subtypeRels = list(self.conceptType.getChildRelations( | ||||||
|  |                                         [subtypePred], child.conceptType)) | ||||||
|  |                 if subtypeRels: | ||||||
|  |                     from loops.predicate import adaptedRelation | ||||||
|  |                     rel = adaptedRelation(subtypeRels[0]) | ||||||
|  |                     predName = rel.usePredicate | ||||||
|  |                     if predName and predName != u'standard': | ||||||
|  |                         predicate = cm[predName] | ||||||
|  |         return predicate | ||||||
|  | 
 | ||||||
|  |     def assignChild(self, concept, predicate=None, order=0, relevance=1.0): | ||||||
|  |         predicate = self.checkPredicate(concept, predicate) | ||||||
|         registry = component.getUtility(IRelationRegistry) |         registry = component.getUtility(IRelationRegistry) | ||||||
|         rel = ConceptRelation(self, concept, predicate) |         rel = ConceptRelation(self, concept, predicate) | ||||||
|         if order != 0: |         if order != 0: | ||||||
|  |  | ||||||
|  | @ -263,6 +263,15 @@ | ||||||
|              set_schema="loops.interfaces.IPredicate" /> |              set_schema="loops.interfaces.IPredicate" /> | ||||||
|   </class> |   </class> | ||||||
| 
 | 
 | ||||||
|  |   <adapter factory="loops.predicate.IsSubtype" | ||||||
|  |            provides="loops.interfaces.IIsSubtype" trusted="True" /> | ||||||
|  |   <class class="loops.predicate.IsSubtype"> | ||||||
|  |     <require permission="zope.View" | ||||||
|  |              interface="loops.interfaces.IIsSubtype" /> | ||||||
|  |     <require permission="zope.ManageContent" | ||||||
|  |              set_schema="loops.interfaces.IIsSubtype" /> | ||||||
|  |   </class> | ||||||
|  | 
 | ||||||
|   <!--<adapter factory="loops.predicate.MappingAttributeRelation" trusted="True" /> |   <!--<adapter factory="loops.predicate.MappingAttributeRelation" trusted="True" /> | ||||||
|   <class class="loops.predicate.MappingAttributeRelation"> |   <class class="loops.predicate.MappingAttributeRelation"> | ||||||
|     <require permission="zope.View" |     <require permission="zope.View" | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								external/element.py
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								external/element.py
									
										
									
									
										vendored
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| # | # | ||||||
| #  Copyright (c) 2009 Helmut Merz helmutm@cy55.de | #  Copyright (c) 2012 Helmut Merz helmutm@cy55.de | ||||||
| # | # | ||||||
| #  This program is free software; you can redistribute it and/or modify | #  This program is free software; you can redistribute it and/or modify | ||||||
| #  it under the terms of the GNU General Public License as published by | #  it under the terms of the GNU General Public License as published by | ||||||
|  | @ -19,8 +19,6 @@ | ||||||
| """ | """ | ||||||
| Basic implementation of the elements used for the intermediate format for export | Basic implementation of the elements used for the intermediate format for export | ||||||
| and import of loops objects. | and import of loops objects. | ||||||
| 
 |  | ||||||
| $Id$ |  | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| import os | import os | ||||||
|  | @ -38,6 +36,7 @@ from loops.interfaces import IConceptSchema | ||||||
| from loops.external.interfaces import IElement | from loops.external.interfaces import IElement | ||||||
| from loops.i18n.common import I18NValue | from loops.i18n.common import I18NValue | ||||||
| from loops.layout.base import LayoutNode | from loops.layout.base import LayoutNode | ||||||
|  | from loops.predicate import adaptedRelation | ||||||
| from loops.view import Node | from loops.view import Node | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -138,14 +137,26 @@ class ChildElement(Element): | ||||||
|     elementType = 'child' |     elementType = 'child' | ||||||
|     posArgs = ('first', 'second', 'predicate', 'order', 'relevance') |     posArgs = ('first', 'second', 'predicate', 'order', 'relevance') | ||||||
| 
 | 
 | ||||||
|     def __init__(self, *args): |     def __init__(self, *args, **kw): | ||||||
|         for idx, arg in enumerate(args): |         for idx, arg in enumerate(args): | ||||||
|             self[self.posArgs[idx]] = arg |             self[self.posArgs[idx]] = arg | ||||||
|  |         for k, v in kw.items(): | ||||||
|  |             self[k] = v | ||||||
| 
 | 
 | ||||||
|     def execute(self, loader): |     def execute(self, loader): | ||||||
|         loader.assignChild(self['first'], self['second'], self['predicate'], |         loader.assignChild(self['first'], self['second'], self['predicate'], | ||||||
|                            order = self.get('order') or 0, |                            order = self.get('order') or 0, | ||||||
|                            relevance = self.get('relevance') or 1.0) |                            relevance = self.get('relevance') or 1.0) | ||||||
|  |         additionalParams = [(k, v) for k, v in self.items() | ||||||
|  |                                    if k not in self.posArgs] | ||||||
|  |         if additionalParams: | ||||||
|  |             pred = loader.getPredicate(self['predicate']) | ||||||
|  |             first = loader.concepts[self['first']] | ||||||
|  |             second = loader.concepts[self['second']] | ||||||
|  |             relation = first.getChildRelations([pred], child=second)[0] | ||||||
|  |             adaptedRel = adaptedRelation(relation) | ||||||
|  |             for attr, value in additionalParams: | ||||||
|  |                 setattr(adaptedRel, attr, value) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class ResourceElement(Element): | class ResourceElement(Element): | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| # | # | ||||||
| #  Copyright (c) 2011 Helmut Merz helmutm@cy55.de | #  Copyright (c) 2012 Helmut Merz helmutm@cy55.de | ||||||
| # | # | ||||||
| #  This program is free software; you can redistribute it and/or modify | #  This program is free software; you can redistribute it and/or modify | ||||||
| #  it under the terms of the GNU General Public License as published by | #  it under the terms of the GNU General Public License as published by | ||||||
|  | @ -18,8 +18,6 @@ | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| loops interface definitions. | loops interface definitions. | ||||||
| 
 |  | ||||||
| $Id$ |  | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| from zope.interface import Interface, Attribute | from zope.interface import Interface, Attribute | ||||||
|  | @ -761,6 +759,16 @@ class IRelationAdapter(Interface): | ||||||
|     """ |     """ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class IIsSubtype(IRelationAdapter): | ||||||
|  | 
 | ||||||
|  |     usePredicate = schema.TextLine( | ||||||
|  |             title=_(u'Use Predicate'), | ||||||
|  |             description=_(u'The name of the predicate that should be used' | ||||||
|  |                     u'for relations between concepts of these types.'), | ||||||
|  |             default=u'standard', | ||||||
|  |             required=False) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| # probably not useful | # probably not useful | ||||||
| class xxIMappingAttributeRelation(IConceptSchema): | class xxIMappingAttributeRelation(IConceptSchema): | ||||||
|     """ A relation based on a predicate ('mappingAttribute') that provides |     """ A relation based on a predicate ('mappingAttribute') that provides | ||||||
|  |  | ||||||
							
								
								
									
										21
									
								
								predicate.py
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								predicate.py
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| # | # | ||||||
| #  Copyright (c) 2008 Helmut Merz helmutm@cy55.de | #  Copyright (c) 2012 Helmut Merz helmutm@cy55.de | ||||||
| # | # | ||||||
| #  This program is free software; you can redistribute it and/or modify | #  This program is free software; you can redistribute it and/or modify | ||||||
| #  it under the terms of the GNU General Public License as published by | #  it under the terms of the GNU General Public License as published by | ||||||
|  | @ -18,8 +18,6 @@ | ||||||
| 
 | 
 | ||||||
| """ | """ | ||||||
| Definition and management of special predicates and corresponding relations. | Definition and management of special predicates and corresponding relations. | ||||||
| 
 |  | ||||||
| $Id$ |  | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| from zope import component, schema | from zope import component, schema | ||||||
|  | @ -31,7 +29,8 @@ from zope.security.proxy import removeSecurityProxy | ||||||
| from zope.traversing.api import getName | from zope.traversing.api import getName | ||||||
| 
 | 
 | ||||||
| from loops.interfaces import ILoopsObject, IConcept, IResource, IConceptRelation | from loops.interfaces import ILoopsObject, IConcept, IResource, IConceptRelation | ||||||
| from loops.interfaces import IPredicate, IRelationAdapter #, IMappingAttributeRelation | from loops.interfaces import IPredicate, IRelationAdapter | ||||||
|  | from loops.interfaces import IIsSubtype     #, IMappingAttributeRelation | ||||||
| from loops.concept import Concept | from loops.concept import Concept | ||||||
| from loops.common import adapted, AdapterBase | from loops.common import adapted, AdapterBase | ||||||
| from loops.type import TypeInterfaceSourceList | from loops.type import TypeInterfaceSourceList | ||||||
|  | @ -89,8 +88,20 @@ def adaptedRelation(relation): | ||||||
| 
 | 
 | ||||||
| # standard relation adapters | # standard relation adapters | ||||||
| 
 | 
 | ||||||
| #PredicateInterfaceSourceList.predicateInterfaces += (IMappingAttributeRelation,) | PredicateInterfaceSourceList.predicateInterfaces += ( | ||||||
|  |         IIsSubtype,) | ||||||
| 
 | 
 | ||||||
|  | class IsSubtype(RelationAdapter): | ||||||
|  |     """ Allows specification of a predicate for relations between concepts | ||||||
|  |         of certain types. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     implements(IIsSubtype) | ||||||
|  | 
 | ||||||
|  |     _contextAttributes = list(IIsSubtype) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #PredicateInterfaceSourceList.predicateInterfaces += (IMappingAttributeRelation,) | ||||||
| 
 | 
 | ||||||
| #class MappingAttributeRelation(AdapterBase): | #class MappingAttributeRelation(AdapterBase): | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										5
									
								
								table.py
									
										
									
									
									
								
							
							
						
						
									
										5
									
								
								table.py
									
										
									
									
									
								
							|  | @ -110,8 +110,9 @@ class DataTableSourceBinder(object): | ||||||
|     def __init__(self, tableName): |     def __init__(self, tableName): | ||||||
|         self.tableName = tableName |         self.tableName = tableName | ||||||
| 
 | 
 | ||||||
|     def __call__(self, context): |     def __call__(self, instance): | ||||||
|         context = baseObject(context) |         #context = baseObject(instance.context) | ||||||
|  |         context = instance.view.nodeView.context | ||||||
|         dt = context.getLoopsRoot().getConceptManager()[self.tableName] |         dt = context.getLoopsRoot().getConceptManager()[self.tableName] | ||||||
|         return DataTableSourceList(adapted(dt)) |         return DataTableSourceList(adapted(dt)) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -64,10 +64,12 @@ from loops.config.base import GlobalOptions, LoopsOptions | ||||||
| from loops.config.base import QueryOptions, PredicateOptions, TypeOptions | from loops.config.base import QueryOptions, PredicateOptions, TypeOptions | ||||||
| from loops.interfaces import ILoopsObject, IIndexAttributes | from loops.interfaces import ILoopsObject, IIndexAttributes | ||||||
| from loops.interfaces import IDocument, IFile, ITextDocument | from loops.interfaces import IDocument, IFile, ITextDocument | ||||||
|  | from loops.interfaces import IIsSubtype | ||||||
| from loops.layout.base import LayoutNode | from loops.layout.base import LayoutNode | ||||||
| from loops.organize.memberinfo import MemberInfoProvider | from loops.organize.memberinfo import MemberInfoProvider | ||||||
| from loops.organize.stateful.base import StatefulResourceIndexInfo, handleTransition | from loops.organize.stateful.base import StatefulResourceIndexInfo, handleTransition | ||||||
| from loops.predicate import Predicate   #, MappingAttributeRelation | from loops.predicate import Predicate | ||||||
|  | from loops.predicate import IsSubtype#, MappingAttributeRelation | ||||||
| from loops.expert.concept import QueryConcept | from loops.expert.concept import QueryConcept | ||||||
| from loops.resource import Resource, FileAdapter, TextDocumentAdapter | from loops.resource import Resource, FileAdapter, TextDocumentAdapter | ||||||
| from loops.resource import Document, MediaAsset | from loops.resource import Document, MediaAsset | ||||||
|  | @ -135,6 +137,7 @@ class TestSite(object): | ||||||
|         component.provideAdapter(LoopsType) |         component.provideAdapter(LoopsType) | ||||||
|         component.provideAdapter(ConceptType) |         component.provideAdapter(ConceptType) | ||||||
|         component.provideAdapter(Predicate) |         component.provideAdapter(Predicate) | ||||||
|  |         component.provideAdapter(IsSubtype, provides=IIsSubtype) | ||||||
|         #component.provideAdapter(MappingAttributeRelation) |         #component.provideAdapter(MappingAttributeRelation) | ||||||
|         component.provideAdapter(ResourceType, (IDocument,)) |         component.provideAdapter(ResourceType, (IDocument,)) | ||||||
|         component.provideAdapter(TypeConcept) |         component.provideAdapter(TypeConcept) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue