Skip to content

Commit

Permalink
make adapters work and cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
tomgross committed Nov 21, 2015
1 parent 1f234fc commit b01645c
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 36 deletions.
2 changes: 2 additions & 0 deletions plone/app/linkintegrity/configure.zcml
Expand Up @@ -9,6 +9,8 @@
<include package="Products.CMFCore" file="permissions.zcml" />

<include package=".browser" />
<adapter factory=".retriever.ATGeneral" />
<adapter factory=".retriever.DXGeneral" />

<configure zcml:condition="installed Products.Archetypes">
<subscriber
Expand Down
30 changes: 2 additions & 28 deletions plone/app/linkintegrity/handlers.py
Expand Up @@ -96,41 +96,15 @@ def getObjectsFromLinks(base, links):
return objects


#def modifiedArchetype(obj, event):
# """ an archetype based object was modified """
# if not check_linkintegrity_dependencies(obj):
# return
# refs = set()
# for field in obj.Schema().fields():
# if isinstance(field, TextField):
# accessor = field.getAccessor(obj)
# encoding = field.getRaw(obj, raw=1).original_encoding
# if accessor is not None:
# value = accessor()
# else:
# # Fields that have been added via schema extension do
# # not have an accessor method.
# value = field.get(obj)
# links = extractLinks(value, encoding)
# refs |= getObjectsFromLinks(obj, links)
# updateReferences(obj, refs)


def modifiedDexterity(obj, event):
""" a dexterity based object was modified """
if not check_linkintegrity_dependencies(obj):
return
retriever = IRetriever(obj, None)
if retriever is not None:
links = retriever.retrieveLinks()

# fti = getUtility(IDexterityFTI, name=obj.portal_type)
# schema = fti.lookupSchema()
# additional_schema = getAdditionalSchemata(context=obj,
# portal_type=obj.portal_type)
# schemas = [i for i in additional_schema] + [schema]
refs = getObjectsFromLinks(obj, links)
updateReferences(obj, refs)
refs = getObjectsFromLinks(obj, links)
updateReferences(obj, refs)


modifiedArchetype = modifiedDexterity
Expand Down
22 changes: 14 additions & 8 deletions plone/app/linkintegrity/retriever.py
Expand Up @@ -6,10 +6,16 @@
from zope.interface import implementer
from Products.Archetypes.Field import TextField
from Products.Archetypes.interfaces import IBaseObject
from plone.dexterity.interfaces import IDexterityContent
from zope.component import getUtility
from plone.dexterity.interfaces import IDexterityFTI
from plone.dexterity.utils import getAdditionalSchemata
from zope.schema import getFieldsInOrder
from plone.app.textfield import RichText


@implementer(IRetriever)
@adapter(IBaseContent)
@adapter(IBaseObject)
class ATGeneral(object):
"""General retriever for AT that extracts URLs from (rich) text fields.
"""
Expand All @@ -22,21 +28,21 @@ def retrieveLinks(self):
links = set()
for field in self.context.Schema().fields():
if isinstance(field, TextField):
accessor = field.getAccessor(obj)
encoding = field.getRaw(obj, raw=1).original_encoding
accessor = field.getAccessor(self.context)
encoding = field.getRaw(self.context, raw=1).original_encoding
if accessor is not None:
value = accessor()
else:
# Fields that have been added via schema extension do
# not have an accessor method.
value = field.get(obj)
links |= extractLinks(value, encoding)
value = field.get(self.context)
links |= set(extractLinks(value, encoding))
return links


@implementer(IRetriever)
@adapter(IDexterityContent)
class ATGeneral(object):
class DXGeneral(object):
"""General retriever for DX that extracts URLs from (rich) text fields.
"""

Expand All @@ -54,9 +60,9 @@ def retrieveLinks(self):
for schema in schemas:
for name, field in getFieldsInOrder(schema):
if isinstance(field, RichText):
value = getattr(schema(obj), name)
value = getattr(schema(self.context), name)
if not value or not getattr(value, 'raw', None):
continue
links |= extractLinks(value.raw)
links |= set(extractLinks(value.raw))
return links

0 comments on commit b01645c

Please sign in to comment.