Commit bce44a52 authored by Denis Laxalde's avatar Denis Laxalde
Browse files

[entities] Introduce an IDublinCore adapter

Move all dc_ methods from AnyEntity to the new IDublinCore adapter and proxy
them through a __getattr__ method on AnyEntity.

Current test suite should be enough.

Closes #3119992.
parent ef6b18c56b5a
......@@ -98,57 +98,15 @@ class AnyEntity(Entity):
# meta data api ###########################################################
def dc_title(self):
"""return a suitable *unicode* title for this entity"""
for rschema, attrschema in self.e_schema.attribute_definitions():
if rschema.meta:
continue
value = self.cw_attr_value(rschema.type)
if value is not None:
# make the value printable (dates, floats, bytes, etc.)
return self.printable_value(rschema.type, value, attrschema.type,
format='text/plain')
return u'%s #%s' % (self.dc_type(), self.eid)
def dc_long_title(self):
"""return a more detailled title for this entity"""
return self.dc_title()
def dc_description(self, format='text/plain'):
"""return a suitable description for this entity"""
if 'description' in self.e_schema.subjrels:
return self.printable_value('description', format=format)
return u''
def dc_authors(self):
"""return a suitable description for the author(s) of the entity"""
try:
return ', '.join(u.name() for u in self.owned_by)
except Unauthorized:
return u''
def dc_creator(self):
"""return a suitable description for the creator of the entity"""
if self.creator:
return self.creator.name()
return u''
def dc_date(self, date_format=None):# XXX default to ISO 8601 ?
"""return latest modification date of this entity"""
return self._cw.format_date(self.modification_date, date_format=date_format)
def dc_type(self, form=''):
"""return the display name for the type of this entity (translated)"""
return self.e_schema.display_name(self._cw, form)
def dc_language(self):
"""return language used by this entity (translated)"""
# check if entities has internationalizable attributes
# XXX one is enough or check if all String attributes are internationalizable?
for rschema, attrschema in self.e_schema.attribute_definitions():
if rschema.rdef(self.e_schema, attrschema).internationalizable:
return self._cw._(self._cw.user.property_value('ui.language'))
return self._cw._(self._cw.vreg.property_value('ui.language'))
def __getattr__(self, name):
prefix = 'dc_'
if name.startswith(prefix):
# Proxy to IDublinCore adapter for bw compat.
adapted = self.cw_adapt_to('IDublinCore')
method = name[len(prefix):]
if hasattr(adapted, method):
return getattr(adapted, method)
raise AttributeError(name)
@property
def creator(self):
......
......@@ -25,10 +25,71 @@ from itertools import chain
from logilab.mtconverter import TransformError
from logilab.common.decorators import cached
from cubicweb import ValidationError, view, ViolatedConstraint, UniqueTogetherError
from cubicweb import (Unauthorized, ValidationError, view, ViolatedConstraint,
UniqueTogetherError)
from cubicweb.predicates import is_instance, relation_possible, match_exception
class IDublinCoreAdapter(view.EntityAdapter):
__regid__ = 'IDublinCore'
__select__ = is_instance('Any')
def title(self):
"""Return a suitable *unicode* title for entity"""
entity = self.entity
for rschema, attrschema in entity.e_schema.attribute_definitions():
if rschema.meta:
continue
value = entity.cw_attr_value(rschema.type)
if value is not None:
# make the value printable (dates, floats, bytes, etc.)
return entity.printable_value(
rschema.type, value, attrschema.type, format='text/plain')
return u'%s #%s' % (self.type(), entity.eid)
def long_title(self):
"""Return a more detailled title for entity"""
return self.title()
def description(self, format='text/plain'):
"""Return a suitable description for entity"""
if 'description' in self.entity.e_schema.subjrels:
return self.entity.printable_value('description', format=format)
return u''
def authors(self):
"""Return a suitable description for the author(s) of the entity"""
try:
return u', '.join(u.name() for u in self.entity.owned_by)
except Unauthorized:
return u''
def creator(self):
"""Return a suitable description for the creator of the entity"""
if self.entity.creator:
return self.entity.creator.name()
return u''
def date(self, date_format=None): # XXX default to ISO 8601 ?
"""Return latest modification date of entity"""
return self._cw.format_date(self.entity.modification_date,
date_format=date_format)
def type(self, form=''):
"""Return the display name for the type of entity (translated)"""
return self.entity.e_schema.display_name(self._cw, form)
def language(self):
"""Return language used by this entity (translated)"""
eschema = self.entity.e_schema
# check if entities has internationalizable attributes
# XXX one is enough or check if all String attributes are internationalizable?
for rschema, attrschema in eschema.attribute_definitions():
if rschema.rdef(eschema, attrschema).internationalizable:
return self._cw._(self._cw.user.property_value('ui.language'))
return self._cw._(self._cw.vreg.property_value('ui.language'))
class IEmailableAdapter(view.EntityAdapter):
__regid__ = 'IEmailable'
__select__ = relation_possible('primary_email') | relation_possible('use_email')
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment