# HG changeset patch # User Arthur Lutz # Date 1234370648 -3600 # Node ID 4705ceb624cce9deffe1ee62bad26c7d8878b268 # Parent f8c1f8a407499d683de00ad29ff2c05e19d7d5cc# Parent c8ff5d88f164f95f73e50a249215e590bd173459 merge diff -r f8c1f8a40749 -r 4705ceb624cc web/test/unittest_viewselector.py --- a/web/test/unittest_viewselector.py Wed Feb 11 17:43:18 2009 +0100 +++ b/web/test/unittest_viewselector.py Wed Feb 11 17:44:08 2009 +0100 @@ -19,6 +19,7 @@ treeview, idownloadable, wdoc, debug) from cubicweb.entities.lib import Card from cubicweb.interfaces import IMileStone +from cubicweb.web.views import owl USERACTIONS = [('myprefs', actions.UserPreferencesAction), ('myinfos', actions.UserInfoAction), @@ -74,7 +75,7 @@ ('index', startup.IndexView), ('info', management.ProcessInformationView), ('manage', startup.ManageView), - ('owl', startup.OWLView), + ('owl', owl.OWLView), ('schema', startup.SchemaView), ('systemepropertiesform', management.SystemEpropertiesForm)]) # no entity but etype @@ -97,6 +98,7 @@ ('filetree', treeview.FileTreeView), ('list', baseviews.ListView), ('oneline', baseviews.OneLineView), + ('owlabox', owl.OWLABOXView), ('primary', baseviews.PrimaryView), ('rsetxml', baseviews.XMLRsetView), ('rss', baseviews.RssView), @@ -117,6 +119,7 @@ ('filetree', treeview.FileTreeView), ('list', baseviews.ListView), ('oneline', baseviews.OneLineView), + ('owlabox', owl.OWLABOXView), ('primary', baseviews.PrimaryView), ('rsetxml', baseviews.XMLRsetView), ('rss', baseviews.RssView), @@ -137,6 +140,7 @@ ('filetree', treeview.FileTreeView), ('list', baseviews.ListView), ('oneline', baseviews.OneLineView), + ('owlabox', owl.OWLABOXView), ('primary', baseviews.PrimaryView), ('rsetxml', baseviews.XMLRsetView), ('rss', baseviews.RssView), @@ -163,8 +167,10 @@ ('ecsvexport', baseviews.CSVEntityView), ('editable-table', tableview.EditableTableView), ('filetree', treeview.FileTreeView), + ('foaf', euser.FoafView), ('list', baseviews.ListView), ('oneline', baseviews.OneLineView), + ('owlabox', owl.OWLABOXView), ('primary', euser.EUserPrimaryView), ('rsetxml', baseviews.XMLRsetView), ('rss', baseviews.RssView), diff -r f8c1f8a40749 -r 4705ceb624cc web/views/euser.py --- a/web/views/euser.py Wed Feb 11 17:43:18 2009 +0100 +++ b/web/views/euser.py Wed Feb 11 17:44:08 2009 +0100 @@ -14,11 +14,6 @@ from cubicweb.web.form import EntityForm from cubicweb.web.views.baseviews import PrimaryView, EntityView -try: - from hashlib import sha1 as sha - -except ImportError: - from sha import sha class EUserPrimaryView(PrimaryView): accepts = ('EUser',) @@ -72,8 +67,8 @@ % html_escape(entity.firstname)) emailaddr = entity.get_email() if emailaddr: - self.w(u'%s\n' % html_escape(unicode(emailaddr))) - self.w(u'\n') + self.w(u'%s\n' % html_escape(emailaddr)) + self.w(u'\n') class EditGroups(EntityForm): diff -r f8c1f8a40749 -r 4705ceb624cc web/views/owl.py --- a/web/views/owl.py Wed Feb 11 17:43:18 2009 +0100 +++ b/web/views/owl.py Wed Feb 11 17:44:08 2009 +0100 @@ -1,4 +1,4 @@ -from logilab.mtconverter import html_escape +from logilab.mtconverter import TransformError, html_escape from cubicweb.common.view import StartupView from cubicweb.common.view import EntityView @@ -11,124 +11,77 @@ '*': '' } -OWL_CARD_MAP_DATA = {'String': 'xsd:string', - 'Datetime': 'xsd:dateTime', - 'Bytes': 'xsd:byte', - 'Float': 'xsd:float', - 'Boolean': 'xsd:boolean', - 'Int': 'xsd:int', - 'Date':'xsd:date', - 'Time': 'xsd:time', - 'Password': 'xsd:byte', - 'Decimal' : 'xsd:decimal', - 'Interval': 'xsd:duration' - } +OWL_TYPE_MAP = {'String': 'xsd:string', + 'Datetime': 'xsd:dateTime', + 'Bytes': 'xsd:byte', + 'Float': 'xsd:float', + 'Boolean': 'xsd:boolean', + 'Int': 'xsd:int', + 'Date':'xsd:date', + 'Time': 'xsd:time', + 'Password': 'xsd:byte', + 'Decimal' : 'xsd:decimal', + 'Interval': 'xsd:duration' + } OWL_OPENING_ROOT = u''' - - - - - - ]> - +]> + - - - %s Cubicweb OWL Ontology - - - ''' + + + %(appid)s Cubicweb OWL Ontology + + ''' OWL_CLOSING_ROOT = u'' -class OWLView(StartupView): - """This view export in owl format the whole cubicweb ontologie. First part is the TBOX, second part is an ABOX ligth version.""" - id = 'owl' - title = _('owl (tbox+abox)') - templatable =False - content_type = 'application/xml' # 'text/xml' +DEFAULT_SKIP_RELS = frozenset(('is', 'is_instance_of', 'identity', + 'owned_by', 'created_by')) - def call(self): - - skipmeta = int(self.req.form.get('skipmeta', True)) - self.w(OWL_OPENING_ROOT % (self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name)) - self.wview('tbox', None, writeprefix=False) - entities = [eschema for eschema in self.schema.entities() - if not eschema.is_final()] - if skipmeta: - entities = [eschema for eschema in entities - if not eschema.meta] - for entity in entities: - rql = 'Any X where X is %s' - rset = self.req.execute(rql% entity) - if rset: - self.wview('owlaboxlight', rset, writeprefix=False) - self.w(OWL_CLOSING_ROOT) - -class TBoxView(StartupView): +class OWLView(StartupView): """This view export in owl format schema database. It is the TBOX""" - id = 'tbox' - title = _('tbox') - templatable =False + id = 'owl' + title = _('owl') + templatable = False content_type = 'application/xml' # 'text/xml' def call(self, writeprefix=True): skipmeta = int(self.req.form.get('skipmeta', True)) if writeprefix: - self.w(OWL_OPENING_ROOT % (self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name) ) - - self.visit_schema(display_relations=True, - skiprels=('is', 'is_instance_of', 'identity', - 'owned_by', 'created_by'), - skipmeta=skipmeta) + self.w(OWL_OPENING_ROOT % {'appid': self.schema.name}) + self.visit_schema(skipmeta=skipmeta) if writeprefix: self.w(OWL_CLOSING_ROOT) - def visit_schema(self, display_relations=0, - skiprels=(), skipmeta=True): + def visit_schema(self, skiprels=DEFAULT_SKIP_RELS, skipmeta=True): """get a layout for a whole schema""" - - entities = [eschema for eschema in self.schema.entities() - if not eschema.is_final()] + entities = sorted([eschema for eschema in self.schema.entities() + if not eschema.is_final()]) if skipmeta: entities = [eschema for eschema in entities if not eschema.meta] - keys = [(eschema.type, eschema) for eschema in entities] self.w(u'') - for key, eschema in sorted(keys): + for eschema in entities: self.visit_entityschema(eschema, skiprels) - self.w(u'') - self.w(u'') - for key, eschema in sorted(keys): - self.visit_property_schema(eschema, skiprels) - self.w(u'') - for key, eschema in sorted(keys): - self.visit_property_object_schema(eschema, skiprels) - - def stereotype(self, name): - return Span((' <<%s>>' % name,), klass='stereotype') + self.w(u'') + self.visit_property_schema(eschema, skiprels) + self.w(u'') + self.visit_property_object_schema(eschema) def visit_entityschema(self, eschema, skiprels=()): """get a layout for an entity OWL schema""" - etype = eschema.type - - if eschema.meta: - self.stereotype('meta') - self.w(u''' - '''%eschema, stereotype) - else: - self.w(u''' - '''% eschema) - + self.w(u'' + % eschema) self.w(u'') for rschema, targetschemas, role in eschema.relation_definitions(): if rschema.type in skiprels: @@ -141,13 +94,15 @@ card = rschema.rproperty(eschema, oeschema, 'cardinality')[0] else: card = rschema.rproperty(oeschema, eschema, 'cardinality')[1] - self.w(u''' - - - %s - - - ''' % (label, OWL_CARD_MAP[card])) + cardtag = OWL_CARD_MAP[card] + if cardtag: + self.w(u''' + + + %s + + +''' % (label, cardtag)) self.w(u'') @@ -157,21 +112,17 @@ aname = rschema.type if aname == 'eid': continue - card_data = aschema.type self.w(u''' - - - - - ''' - + + + + +''' % aname) self.w(u'') def visit_property_schema(self, eschema, skiprels=()): """get a layout for property entity OWL schema""" - etype = eschema.type - for rschema, targetschemas, role in eschema.relation_definitions(): if rschema.type in skiprels: continue @@ -180,78 +131,54 @@ for oeschema in targetschemas: label = rschema.type self.w(u''' - - - - - ''' % (label, eschema, oeschema.type )) + + + +''' % (label, eschema, oeschema.type)) - def visit_property_object_schema(self, eschema, skiprels=()): - + def visit_property_object_schema(self, eschema): for rschema, aschema in eschema.attribute_definitions(): if not (rschema.has_local_role('read') or rschema.has_perm(self.req, 'read')): continue aname = rschema.type if aname == 'eid': continue - card_data = aschema.type self.w(u''' - - - ''' - % (aname, eschema, OWL_CARD_MAP_DATA[card_data])) - -class OWLABOXLightView(EntityView): - '''This view represents the lihgt part of the ABOX for a given entity''' - id = 'owlaboxlight' - title = _('owlaboxlight') - templatable =False - accepts = ('Any',) - content_type = 'application/xml' # 'text/xml' - - def call(self, writeprefix=True): + + +''' + % (aname, eschema, OWL_TYPE_MAP[aschema.type])) - skipmeta = int(self.req.form.get('skipmeta', True)) - if writeprefix: - self.w(OWL_OPENING_ROOT % (self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name)) - for i in xrange(self.rset.rowcount): - self.cell_call(i, 0, skiprels=('is', 'is_instance_of', 'identity', - 'owned_by', 'created_by'), - skipmeta=skipmeta) - if writeprefix: - self.w(OWL_CLOSING_ROOT) - - - def cell_call(self, row, col, skiprels=(), skipmeta=True): - entity = self.complete_entity(row, col) - eschema = entity.e_schema - self.w(u'<%s rdf:ID="%s">' % (eschema, entity.eid)) - self.w(u''% eschema) - - -class OWLABOXEView(EntityView): + +class OWLABOXView(EntityView): '''This view represents a part of the ABOX for a given entity.''' id = 'owlabox' title = _('owlabox') - templatable =False + templatable = False accepts = ('Any',) content_type = 'application/xml' # 'text/xml' - def call(self, writeprefix=True): - - skipmeta = int(self.req.form.get('skipmeta', True)) - if writeprefix: - self.w(OWL_OPENING_ROOT % (self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name)) + def call(self): + self.w(OWL_OPENING_ROOT % {'appid': self.schema.name}) + self.wview('owl', None, writeprefix=False) for i in xrange(self.rset.rowcount): - self.cell_call(i, 0, skiprels=('is', 'is_instance_of', 'identity', - 'owned_by', 'created_by'), - skipmeta=skipmeta) - if writeprefix: - self.w(OWL_CLOSING_ROOT) + self.cell_call(i, 0) + self.w(OWL_CLOSING_ROOT) + + def cell_call(self, row, col, skiprels=DEFAULT_SKIP_RELS): + self.wview('owlaboxitem', self.rset, row=row, col=col, skiprels=skiprels) + +class OWLABOXItemView(EntityView): + '''This view represents a part of the ABOX for a given entity.''' + + id = 'owlaboxitem' + templatable = False + accepts = ('Any',) + content_type = 'application/xml' # 'text/xml' - def cell_call(self, row, col, skiprels=(), skipmeta=True): + def cell_call(self, row, col, skiprels=DEFAULT_SKIP_RELS): entity = self.complete_entity(row, col) eschema = entity.e_schema self.w(u'<%s rdf:ID="%s">' % (eschema, entity.eid)) @@ -264,9 +191,12 @@ aname = rschema.type if aname == 'eid': continue - attr = getattr(entity, aname) - if attr is not None: - self.w(u'<%s>%s' % (aname, html_escape(unicode(attr)), aname)) + try: + attr = entity.printable_value(aname, format='text/plain') + if attr: + self.w(u'<%s>%s' % (aname, html_escape(attr), aname)) + except TransformError: + pass self.w(u'') for rschema, targetschemas, role in eschema.relation_definitions(): if rschema.type in skiprels: