web/views/schema.py
author Julien Cristau <julien.cristau@logilab.fr>
Tue, 16 Feb 2016 14:52:28 +0100
changeset 11117 e838a5bbfa64
parent 9383 7b3fa5a7a5a3
child 10405 7b27a7443180
permissions -rw-r--r--
Added tag 3.19.14, debian/3.19.14-1, centos/3.19.14-1 for changeset 72a0f70879ac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8190
2a3c1b787688 [vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7845
diff changeset
     1
# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
    18
"""Specific views for schema related entities"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
__docformat__ = "restructuredtext en"
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
    21
_ = unicode
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
    23
from itertools import cycle
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
    25
import tempfile
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
    26
import os, os.path as osp
9383
7b3fa5a7a5a3 [views/dot] use an inlined svg for schema and workflow graphs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
    27
import codecs
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
    28
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
    29
from logilab.common.graph import GraphGenerator, DotBackend
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
    30
from logilab.common.ureports import Section, Table
8190
2a3c1b787688 [vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7845
diff changeset
    31
from logilab.common.registry import yes
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2277
diff changeset
    32
from logilab.mtconverter import xml_escape
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
    33
from yams import BASE_TYPES, schema2dot as s2d
5232
78c1a531f7b3 ticket #787032, schema view improvement
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5224
diff changeset
    34
from yams.buildobjs import DEFAULT_ATTRPERMS
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
    35
8190
2a3c1b787688 [vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7845
diff changeset
    36
from cubicweb.predicates import (is_instance, match_user_groups, match_kwargs,
2a3c1b787688 [vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7845
diff changeset
    37
                                has_related_entities, authenticated_user)
4434
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4252
diff changeset
    38
from cubicweb.schema import (META_RTYPES, SCHEMA_TYPES, SYSTEM_RTYPES,
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4252
diff changeset
    39
                             WORKFLOW_TYPES, INTERNAL_TYPES)
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
    40
from cubicweb.utils import make_uid
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
    41
from cubicweb.view import EntityView, StartupView
4023
eae23c40627a drop common subpackage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
    42
from cubicweb import tags, uilib
8665
e65af61bde7d [uicfg] uicfg.py moves from web/ to web/views/ (prepares #2406609)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8216
diff changeset
    43
from cubicweb.web import action, facet, schemaviewer
e65af61bde7d [uicfg] uicfg.py moves from web/ to web/views/ (prepares #2406609)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8216
diff changeset
    44
from cubicweb.web.views import uicfg, primary, baseviews, tabs, tableview, ibreadcrumbs
1151
b20677336ee6 turn old __rtags__ the new way
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    45
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
    46
ALWAYS_SKIP_TYPES = BASE_TYPES | SCHEMA_TYPES
4434
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4252
diff changeset
    47
SKIP_TYPES  = (ALWAYS_SKIP_TYPES | META_RTYPES | SYSTEM_RTYPES | WORKFLOW_TYPES
4451
65f4665233e6 misc typos found on my way: NameError / SyntaxError / double __select__, <sigh ...>
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 4434
diff changeset
    48
               | INTERNAL_TYPES)
6827
e730b401f00e [ui tweaks] fix default ui
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    49
SKIP_TYPES.update(set(('CWUser', 'CWGroup', 'EmailAddress', 'Bookmark')))
1151
b20677336ee6 turn old __rtags__ the new way
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    50
2181
94ca417b9b07 backport stable branch, make schema-security consistent with other schema views changes, uniformize skipmeta/withmeta
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2126 2172
diff changeset
    51
def skip_types(req):
94ca417b9b07 backport stable branch, make schema-security consistent with other schema views changes, uniformize skipmeta/withmeta
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2126 2172
diff changeset
    52
    if int(req.form.get('skipmeta', True)):
2387
ea1defea9636 [views] fix some crashers (schema still does not render properly, might be yams side)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2381
diff changeset
    53
        return SKIP_TYPES
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
    54
    return ALWAYS_SKIP_TYPES
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
    55
3768
8c85a2f7f5ad nicer relation|entity schema view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    56
_pvs = uicfg.primaryview_section
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    57
_pvdc = uicfg.primaryview_display_ctrl
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    58
3768
8c85a2f7f5ad nicer relation|entity schema view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    59
for _action in ('read', 'add', 'update', 'delete'):
8c85a2f7f5ad nicer relation|entity schema view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    60
    _pvs.tag_subject_of(('*', '%s_permission' % _action, '*'), 'hidden')
8c85a2f7f5ad nicer relation|entity schema view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    61
    _pvs.tag_object_of(('*', '%s_permission' % _action, '*'), 'hidden')
8c85a2f7f5ad nicer relation|entity schema view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
    62
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    63
for _etype in ('CWEType', 'CWRType', 'CWAttribute', 'CWRelation'):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    64
    _pvdc.tag_attribute((_etype, 'description'), {'showlabel': False})
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    65
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    66
_pvs.tag_attribute(('CWEType', 'name'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    67
_pvs.tag_attribute(('CWEType', 'final'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    68
_pvs.tag_object_of(('*', 'workflow_of', 'CWEType'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    69
_pvs.tag_subject_of(('CWEType', 'default_workflow', '*'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    70
_pvs.tag_object_of(('*', 'specializes', 'CWEType'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    71
_pvs.tag_subject_of(('CWEType', 'specializes', '*'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    72
_pvs.tag_object_of(('*', 'from_entity', 'CWEType'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    73
_pvs.tag_object_of(('*', 'to_entity', 'CWEType'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    74
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    75
_pvs.tag_attribute(('CWRType', 'name'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    76
_pvs.tag_attribute(('CWRType', 'final'), 'hidden')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    77
_pvs.tag_object_of(('*', 'relation_type', 'CWRType'), 'hidden')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    78
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    79
_pvs.tag_subject_of(('CWAttribute', 'constrained_by', '*'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    80
_pvs.tag_subject_of(('CWRelation', 'constrained_by', '*'), 'hidden')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    81
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    82
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    83
class SecurityViewMixIn(object):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    84
    """mixin providing methods to display security information for a entity,
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    85
    relation or relation definition schema
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    86
    """
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    87
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    88
    def permissions_table(self, erschema, permissions=None):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    89
        self._cw.add_css('cubicweb.acl.css')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    90
        w = self.w
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    91
        _ = self._cw._
5819
1017163825c7 [css] more css rework, need visual test in compat/new modes
katia
parents: 5811
diff changeset
    92
        w(u'<table class="listing schemaInfo">')
5823
8a6c15e2e8b0 [schema view] width isn't in authorized th attribute in xhtml DTD. katia, please do it another way.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5822
diff changeset
    93
        w(u'<tr><th>%s</th><th>%s</th><th>%s</th></tr>' % (
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    94
            _("permission"), _('granted to groups'), _('rql expressions')))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    95
        for action in erschema.ACTIONS:
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    96
            w(u'<tr><td>%s</td><td>' % _(action))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    97
            if permissions is None:
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    98
                groups = erschema.get_groups(action)
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
    99
                rqlexprs = sorted(e.expression for e in erschema.get_rqlexprs(action))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   100
            else:
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   101
                groups = permissions[action][0]
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   102
                rqlexprs = permissions[action][1]
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   103
            # XXX get group entity and call it's incontext view
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   104
            groups = [u'<a class="%s" href="%s">%s</a>' % (
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   105
                group, self._cw.build_url('cwgroup/%s' % group), label)
7811
c468ff909e98 [schema view] fix label/name inversion leading to wrong css class / group url depending on user's language
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7782
diff changeset
   106
                      for label, group in sorted((_(g), g) for g in groups)]
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   107
            w(u'<br/>'.join(groups))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   108
            w(u'</td><td>')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   109
            w(u'<br/>'.join(rqlexprs))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   110
            w(u'</td></tr>\n')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   111
        w(u'</table>')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   112
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   113
    def grouped_permissions_table(self, rschema):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   114
        # group relation definitions with identical permissions
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   115
        perms = {}
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   116
        for rdef in rschema.rdefs.itervalues():
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   117
            rdef_perms = []
6084
c764be84700d [schema view] use rdef.ACTIONS, attribute/relation don't use the same actions permission, that causes a crash for attribute rdefs
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6045
diff changeset
   118
            for action in rdef.ACTIONS:
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   119
                groups = sorted(rdef.get_groups(action))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   120
                exprs = sorted(e.expression for e in rdef.get_rqlexprs(action))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   121
                rdef_perms.append( (action, (tuple(groups), tuple(exprs))) )
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   122
            rdef_perms = tuple(rdef_perms)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   123
            if rdef_perms in perms:
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   124
                perms[rdef_perms].append( (rdef.subject, rdef.object) )
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   125
            else:
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   126
                perms[rdef_perms] = [(rdef.subject, rdef.object)]
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   127
        # set layout permissions in a table for each group of relation
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   128
        # definition
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   129
        w = self.w
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   130
        _ = self._cw._
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   131
        w(u'<div style="margin: 0px 1.5em">')
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   132
        tmpl = u'<strong>%s</strong> %s <strong>%s</strong>'
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   133
        for perm, rdefs in perms.iteritems():
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   134
            w(u'<div>%s</div>' % u', '.join(
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   135
                tmpl % (_(s.type), _(rschema.type), _(o.type)) for s, o in rdefs))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   136
            # accessing rdef from previous loop by design: only used to get
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   137
            # ACTIONS
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   138
            self.permissions_table(rdef, dict(perm))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   139
        w(u'</div>')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   140
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   141
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   142
# global schema view ###########################################################
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   143
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   144
class SchemaView(tabs.TabsMixin, StartupView):
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   145
    """display schema information (graphically, listing tables...) in tabs"""
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   146
    __regid__ = 'schema'
7810
21683b1975e3 [i18n] tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7797
diff changeset
   147
    title = _('data model schema')
5525
c4eee9921e19 [views] tab schema image renamed to schema diagram
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   148
    tabs = [_('schema-diagram'), _('schema-entity-types'),
6854
ffc982faa264 [views] delete ``permission`` tab in ``SchemaView``
cheb
parents: 6827
diff changeset
   149
            _('schema-relation-types')]
5525
c4eee9921e19 [views] tab schema image renamed to schema diagram
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   150
    default_tab = 'schema-diagram'
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   151
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   152
    def call(self):
7810
21683b1975e3 [i18n] tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7797
diff changeset
   153
        self.w(u'<h1>%s</h1>' % self._cw._(self.title))
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   154
        self.render_tabs(self.tabs, self.default_tab)
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   155
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   156
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   157
class SchemaImageTab(StartupView):
5525
c4eee9921e19 [views] tab schema image renamed to schema diagram
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   158
    __regid__ = 'schema-diagram'
1151
b20677336ee6 turn old __rtags__ the new way
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
   159
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   160
    def call(self):
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   161
        _ = self._cw._
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   162
        self.w(self._cw._(
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   163
            u'<div>This schema of the data model <em>excludes</em> the '
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   164
            'meta-data, but you can also display a <a href="%s">complete '
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   165
            'schema with meta-data</a>.</div>')
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   166
               % xml_escape(self._cw.build_url('view', vid='schemagraph', skipmeta=0)))
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   167
        self.w(u'<div><a href="%s">%s</a></div>' %
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   168
               (self._cw.build_url('view', vid='owl'),
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   169
                self._cw._(u'Download schema as OWL')))
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   170
        self.wview('schemagraph')
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   171
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   172
class SchemaETypeTab(StartupView):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   173
    __regid__ = 'schema-entity-types'
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   174
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   175
    def call(self):
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   176
        self.wview('table', self._cw.execute(
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   177
            'Any X ORDERBY N WHERE X is CWEType, X name N, X final FALSE'))
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   178
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   179
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   180
class SchemaRTypeTab(StartupView):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   181
    __regid__ = 'schema-relation-types'
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   182
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   183
    def call(self):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   184
        self.wview('table', self._cw.execute(
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   185
            'Any X ORDERBY N WHERE X is CWRType, X name N, X final FALSE'))
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   186
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   187
# CWEType ######################################################################
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   188
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   189
# register msgid generated in entity relations tables
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   190
_('i18ncard_1'), _('i18ncard_?'), _('i18ncard_+'), _('i18ncard_*')
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   191
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   192
class CWETypePrimaryView(tabs.TabbedPrimaryView):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   193
    __select__ = is_instance('CWEType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   194
    tabs = [_('cwetype-description'), _('cwetype-box'), _('cwetype-workflow'),
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   195
            _('cwetype-views'), _('cwetype-permissions')]
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   196
    default_tab = 'cwetype-description'
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   197
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   198
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   199
class CWETypeDescriptionTab(tabs.PrimaryTab):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   200
    __regid__ = 'cwetype-description'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   201
    __select__ = tabs.PrimaryTab.__select__ & is_instance('CWEType')
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   202
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   203
    def render_entity_attributes(self, entity):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   204
        super(CWETypeDescriptionTab, self).render_entity_attributes(entity)
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   205
        _ = self._cw._
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   206
        # inheritance
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   207
        if entity.specializes:
8213
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   208
            self.w(u'<div><strong>%s</strong>' % _('Parent class:'))
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   209
            self.wview('csv', entity.related('specializes', 'subject'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   210
            self.w(u'</div>')
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   211
        if entity.reverse_specializes:
8213
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   212
            self.w(u'<div><strong>%s</strong>' % _('Sub-classes:'))
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   213
            self.wview('csv', entity.related('specializes', 'object'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   214
            self.w(u'</div>')
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   215
        # entity schema image
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   216
        self.wview('schemagraph', etype=entity.name)
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   217
        # entity schema attributes
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   218
        self.w(u'<h2>%s</h2>' % _('CWAttribute_plural'))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   219
        rset = self._cw.execute(
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   220
            'Any A,ON,D,C,A,DE,A, IDX,FTI,I18N,R,O,RN,S ORDERBY AA '
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   221
            'WHERE A is CWAttribute, A from_entity S, S eid %(x)s, '
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   222
            'A ordernum AA, A defaultval D, A description DE, A cardinality C, '
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   223
            'A fulltextindexed FTI, A internationalizable I18N, A indexed IDX, '
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   224
            'A relation_type R, R name RN, A to_entity O, O name ON',
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   225
            {'x': entity.eid})
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   226
        self.wview('table', rset, 'null',
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   227
                   cellvids={0: 'rdef-name-cell',
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   228
                             2: 'etype-attr-defaultval-cell',
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   229
                             3: 'etype-attr-cardinality-cell',
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   230
                             4: 'rdef-constraints-cell',
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   231
                             6: 'rdef-options-cell'},
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   232
                   headers=(_(u'name'), _(u'type'),
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   233
                            _(u'default value'), _(u'required'),
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   234
                            _(u'constraints'), _(u'description'), _('options')))
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   235
        # entity schema relations
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   236
        self.w(u'<h2>%s</h2>' % _('CWRelation_plural'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   237
        cellvids = {0: 'rdef-name-cell',
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   238
                    2: 'etype-rel-cardinality-cell',
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   239
                    3: 'rdef-constraints-cell',
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   240
                    4: 'rdef-options-cell'}
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   241
        headers= [_(u'name'), _(u'object type'), _(u'cardinality'),
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   242
                  _(u'constraints'), _(u'options')]
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   243
        rset = self._cw.execute(
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   244
            'Any A,TT,"i18ncard_"+SUBSTRING(C,1,1),A,A, K,TTN,R,RN ORDERBY RN '
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   245
            'WHERE A is CWRelation, A from_entity S, S eid %(x)s, '
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   246
            'A composite K, A cardinality C, '
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   247
            'A relation_type R, R name RN, A to_entity TT, TT name TTN',
2228
7e85d0169911 some enhancements: link to relation/target type, remove to be deprecated meta, one table for subject relations, another for object relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2172
diff changeset
   248
            {'x': entity.eid})
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   249
        if rset:
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   250
            self.w(u'<h5>%s %s</h5>' % (entity.name, _('is subject of:')))
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   251
            self.wview('table', rset, cellvids=cellvids, headers=headers)
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   252
        rset = self._cw.execute(
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   253
            'Any A,TT,"i18ncard_"+SUBSTRING(C,1,1),A,A, K,TTN,R,RN ORDERBY RN '
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   254
            'WHERE A is CWRelation, A to_entity O, O eid %(x)s, '
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   255
            'A composite K, A cardinality C, '
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   256
            'A relation_type R, R name RN, A from_entity TT, TT name TTN',
2228
7e85d0169911 some enhancements: link to relation/target type, remove to be deprecated meta, one table for subject relations, another for object relations
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2172
diff changeset
   257
            {'x': entity.eid})
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   258
        if rset:
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   259
            cellvids[0] = 'rdef-object-name-cell'
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   260
            headers[1] = _(u'subject type')
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   261
            self.w(u'<h5>%s %s</h5>' % (entity.name, _('is object of:')))
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   262
            self.wview('table', rset, cellvids=cellvids, headers=headers)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   263
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   264
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   265
class CWETypeAttributeCardinalityCell(baseviews.FinalView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   266
    __regid__ = 'etype-attr-cardinality-cell'
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   267
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   268
    def cell_call(self, row, col):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   269
        if self.cw_rset.rows[row][col][0] == '1':
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   270
            self.w(self._cw._(u'yes'))
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   271
        else:
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   272
            self.w(self._cw._(u'no'))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   273
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   274
9299
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   275
class CWETypeAttributeDefaultValCell(baseviews.FinalView):
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   276
    __regid__ = 'etype-attr-defaultval-cell'
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   277
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   278
    def cell_call(self, row, col):
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   279
        defaultval = self.cw_rset.rows[row][col]
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   280
        if defaultval is not None:
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   281
            self.w(unicode(self.cw_rset.rows[row][col].unzpickle()))
c5eed908117d [schema] store default attribute values in a Bytes field, allowing python objects as default values
Aurélien Campeas <aurelien.campeas@logilab.fr>
parents: 8665
diff changeset
   282
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   283
class CWETypeRelationCardinalityCell(baseviews.FinalView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   284
    __regid__ = 'etype-rel-cardinality-cell'
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   285
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   286
    def cell_call(self, row, col):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   287
        self.w(self._cw._(self.cw_rset.rows[row][col]))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   288
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   289
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   290
class CWETypeBoxTab(EntityView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   291
    __regid__ = 'cwetype-box'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   292
    __select__ = is_instance('CWEType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   293
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   294
    def cell_call(self, row, col):
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   295
        viewer = schemaviewer.SchemaViewer(self._cw)
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   296
        entity = self.cw_rset.get_entity(row, col)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   297
        eschema = self._cw.vreg.schema.eschema(entity.name)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   298
        layout = viewer.visit_entityschema(eschema)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   299
        self.w(uilib.ureport_as_html(layout))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   300
        self.w(u'<br class="clear"/>')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   301
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   302
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   303
class CWETypePermTab(SecurityViewMixIn, EntityView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   304
    __regid__ = 'cwetype-permissions'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   305
    __select__ = is_instance('CWEType') & authenticated_user()
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   306
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   307
    def cell_call(self, row, col):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   308
        entity = self.cw_rset.get_entity(row, col)
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   309
        eschema = self._cw.vreg.schema.eschema(entity.name)
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   310
        self.w(u'<h4>%s</h4>' % self._cw._('This entity type permissions:'))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   311
        self.permissions_table(eschema)
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   312
        self.w(u'<div style="margin: 0px 1.5em">')
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   313
        self.w(u'<h4>%s</h4>' % self._cw._('Attributes permissions:'))
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   314
        for attr, etype in  eschema.attribute_definitions():
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   315
            if attr not in META_RTYPES:
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   316
                rdef = eschema.rdef(attr)
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   317
                attrtype = str(rdef.rtype)
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   318
                self.w(u'<h4 class="schema">%s (%s)</h4> '
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6084
diff changeset
   319
                       % (attrtype, self._cw._(attrtype)))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   320
                self.permissions_table(rdef)
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   321
        self.w(u'</div>')
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   322
3215
bf30ab5ba6ee fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2617
diff changeset
   323
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   324
class CWETypeWorkflowTab(EntityView):
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   325
    __regid__ = 'cwetype-workflow'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   326
    __select__ = (is_instance('CWEType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   327
                  & has_related_entities('workflow_of', 'object'))
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   328
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   329
    def cell_call(self, row, col):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   330
        entity = self.cw_rset.get_entity(row, col)
3215
bf30ab5ba6ee fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2617
diff changeset
   331
        if entity.default_workflow:
bf30ab5ba6ee fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2617
diff changeset
   332
            wf = entity.default_workflow[0]
5224
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   333
            if len(entity.reverse_workflow_of) > 1:
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   334
                self.w(u'<h1>%s (%s)</h1>'
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   335
                       % (wf.name, self._cw._('default_workflow')))
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   336
            self.display_workflow(wf)
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   337
            defaultwfeid = wf.eid
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   338
        else:
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   339
            self.w(u'<div class="error">%s</div>'
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   340
                   % self._cw._('There is no default workflow'))
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   341
            defaultwfeid = None
3215
bf30ab5ba6ee fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2617
diff changeset
   342
        for altwf in entity.reverse_workflow_of:
5224
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   343
            if altwf.eid == defaultwfeid:
3215
bf30ab5ba6ee fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2617
diff changeset
   344
                continue
bf30ab5ba6ee fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2617
diff changeset
   345
            self.w(u'<h1>%s</h1>' % altwf.name)
5224
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   346
            self.display_workflow(altwf)
3215
bf30ab5ba6ee fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2617
diff changeset
   347
5224
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   348
    def display_workflow(self, wf):
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   349
        self.w(wf.view('wfgraph'))
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   350
        self.w('<a href="%s">%s</a>' % (
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   351
            wf.absolute_url(), self._cw._('more info about this workflow')))
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   352
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   353
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   354
class CWETypeViewsTab(EntityView):
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   355
    """possible views for this entity type"""
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   356
    __regid__ = 'cwetype-views'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   357
    __select__ = EntityView.__select__ & is_instance('CWEType')
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   358
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   359
    def cell_call(self, row, col):
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   360
        entity = self.cw_rset.get_entity(row, col)
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   361
        _ = self._cw._
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   362
        self.w('<div>%s</div>' % _('Non exhaustive list of views that may '
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   363
                                   'apply to entities of this type'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   364
        views = [(view.content_type, view.__regid__, _(view.title))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   365
                 for view in self.possible_views(entity.name)]
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   366
        self.wview('pyvaltable', pyvalue=sorted(views),
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   367
                   headers=(_(u'content type'), _(u'view identifier'),
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   368
                            _(u'view title')))
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   369
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   370
    def possible_views(self, etype):
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   371
        rset = self._cw.etype_rset(etype)
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   372
        return [v for v in self._cw.vreg['views'].possible_views(self._cw, rset)
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   373
                if v.category != 'startupview']
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   374
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   375
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   376
class CWETypeOneLineView(baseviews.OneLineView):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   377
    __select__ = is_instance('CWEType')
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   378
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   379
    def cell_call(self, row, col, **kwargs):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   380
        entity = self.cw_rset.get_entity(row, col)
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   381
        if entity.final:
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   382
            self.w(u'<em class="finalentity">')
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   383
        super(CWETypeOneLineView, self).cell_call(row, col, **kwargs)
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   384
        if entity.final:
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   385
            self.w(u'</em>')
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   386
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   387
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   388
# CWRType ######################################################################
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   389
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   390
class CWRTypePrimaryView(tabs.TabbedPrimaryView):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   391
    __select__ = is_instance('CWRType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   392
    tabs = [_('cwrtype-description'), _('cwrtype-permissions')]
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   393
    default_tab = 'cwrtype-description'
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   394
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   395
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   396
class CWRTypeDescriptionTab(tabs.PrimaryTab):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   397
    __regid__ = 'cwrtype-description'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   398
    __select__ = is_instance('CWRType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   399
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   400
    def render_entity_attributes(self, entity):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   401
        super(CWRTypeDescriptionTab, self).render_entity_attributes(entity)
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   402
        _ = self._cw._
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   403
        if not entity.final:
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   404
            self.wview('schemagraph', rtype=entity.name)
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   405
        rset = self._cw.execute('Any R,C,R,R, RT WHERE '
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   406
                                'R relation_type RT, RT eid %(x)s, '
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   407
                                'R cardinality C', {'x': entity.eid})
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   408
        self.wview('table', rset, 'null',
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   409
                   headers=(_(u'relation'),  _(u'cardinality'), _(u'constraints'),
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   410
                            _(u'options')),
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   411
                   cellvids={2: 'rdef-constraints-cell',
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   412
                             3: 'rdef-options-cell'})
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   413
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   414
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   415
class CWRTypePermTab(SecurityViewMixIn, EntityView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   416
    __regid__ = 'cwrtype-permissions'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   417
    __select__ = is_instance('CWRType') & authenticated_user()
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   418
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   419
    def cell_call(self, row, col):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   420
        entity = self.cw_rset.get_entity(row, col)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   421
        rschema = self._cw.vreg.schema.rschema(entity.name)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   422
        self.grouped_permissions_table(rschema)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   423
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   424
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   425
# CWAttribute / CWRelation #####################################################
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   426
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   427
class RDEFPrimaryView(tabs.TabbedPrimaryView):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   428
    __select__ = is_instance('CWRelation', 'CWAttribute')
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   429
    tabs = [_('rdef-description'), _('rdef-permissions')]
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   430
    default_tab = 'rdef-description'
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   431
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   432
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   433
class RDEFDescriptionTab(tabs.PrimaryTab):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   434
    __regid__ = 'rdef-description'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   435
    __select__ = is_instance('CWRelation', 'CWAttribute')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   436
1556
b64a0fe1fc86 cleanup
sylvain.thenault@logilab.fr
parents: 1554
diff changeset
   437
    def render_entity_attributes(self, entity):
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   438
        super(RDEFDescriptionTab, self).render_entity_attributes(entity)
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   439
        rdef = entity.yams_schema()
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   440
        if rdef.constraints:
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   441
            self.w(u'<h4>%s</h4>' % self._cw._('constrained_by'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   442
            self.w(entity.view('rdef-constraints-cell'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   443
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   444
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   445
class RDEFPermTab(SecurityViewMixIn, EntityView):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   446
    __regid__ = 'rdef-permissions'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   447
    __select__ = is_instance('CWRelation', 'CWAttribute') & authenticated_user()
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   448
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   449
    def cell_call(self, row, col):
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   450
        self.permissions_table(self.cw_rset.get_entity(row, col).yams_schema())
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   451
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   452
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   453
class RDEFNameView(tableview.CellView):
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   454
    """display relation name and its translation only in a cell view, link to
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   455
    relation definition's primary view (for use in entity type relations table
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   456
    for instance)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   457
    """
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   458
    __regid__ = 'rdef-name-cell'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   459
    __select__ = is_instance('CWRelation', 'CWAttribute')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   460
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   461
    def cell_call(self, row, col):
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   462
        entity = self.cw_rset.get_entity(row, col)
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   463
        rtype = entity.relation_type[0].name
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   464
        # XXX use context entity + pgettext
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   465
        self.w(u'<a href="%s">%s</a> (%s)' % (
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   466
            entity.absolute_url(), rtype, self._cw._(rtype)))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   467
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   468
class RDEFObjectNameView(tableview.CellView):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   469
    """same as RDEFNameView but when the context is the object entity
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   470
    """
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   471
    __regid__ = 'rdef-object-name-cell'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   472
    __select__ = is_instance('CWRelation', 'CWAttribute')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   473
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   474
    def cell_call(self, row, col):
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   475
        entity = self.cw_rset.get_entity(row, col)
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   476
        rtype = entity.relation_type[0].name
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   477
        # XXX use context entity + pgettext
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   478
        self.w(u'<a href="%s">%s</a> (%s)' % (
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   479
            entity.absolute_url(), rtype, self._cw.__(rtype + '_object')))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   480
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   481
class RDEFConstraintsCell(EntityView):
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   482
    __regid__ = 'rdef-constraints-cell'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   483
    __select__ = is_instance('CWAttribute', 'CWRelation')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   484
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   485
    def cell_call(self, row, col):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   486
        entity = self.cw_rset.get_entity(row, col)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   487
        rschema = self._cw.vreg.schema.rschema(entity.rtype.name)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   488
        rdef = rschema.rdefs[(entity.stype.name, entity.otype.name)]
5798
74d9a062965c constraints can contain unicode values
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5525
diff changeset
   489
        constraints = [xml_escape(unicode(c)) for c in getattr(rdef, 'constraints')]
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   490
        self.w(u'<br/>'.join(constraints))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   491
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   492
class CWAttributeOptionsCell(EntityView):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   493
    __regid__ = 'rdef-options-cell'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   494
    __select__ = is_instance('CWAttribute')
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   495
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   496
    def cell_call(self, row, col):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   497
        entity = self.cw_rset.get_entity(row, col)
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   498
        options = []
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   499
        if entity.indexed:
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   500
            options.append(self._cw._('indexed'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   501
        if entity.fulltextindexed:
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   502
            options.append(self._cw._('fulltextindexed'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   503
        if entity.internationalizable:
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   504
            options.append(self._cw._('internationalizable'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   505
        self.w(u','.join(options))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   506
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   507
class CWRelationOptionsCell(EntityView):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   508
    __regid__ = 'rdef-options-cell'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   509
    __select__ = is_instance('CWRelation',)
5239
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   510
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   511
    def cell_call(self, row, col):
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   512
        entity = self.cw_rset.get_entity(row, col)
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   513
        rtype = entity.rtype
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   514
        options = []
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   515
        if rtype.symmetric:
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   516
            options.append(self._cw._('symmetric'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   517
        if rtype.inlined:
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   518
            options.append(self._cw._('inlined'))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   519
        if rtype.fulltext_container:
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   520
            options.append('%s=%s' % (self._cw._('fulltext_container'),
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   521
                                      self._cw._(rtype.fulltext_container)))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   522
        if entity.composite:
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   523
            options.append('%s=%s' % (self._cw._('composite'),
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   524
                                      self._cw._(entity.composite)))
471554b842d2 [schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5236
diff changeset
   525
        self.w(u','.join(options))
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   526
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   527
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   528
# schema images ###############################################################
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   529
2126
a25859917ccc stop using meta attribute from yams schema. Use instead sets defining meta relations and another defining schema types. Refactor various schema view based on this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1998
diff changeset
   530
class RestrictedSchemaVisitorMixIn(object):
a25859917ccc stop using meta attribute from yams schema. Use instead sets defining meta relations and another defining schema types. Refactor various schema view based on this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1998
diff changeset
   531
    def __init__(self, req, *args, **kwargs):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   532
        self._cw = req
2126
a25859917ccc stop using meta attribute from yams schema. Use instead sets defining meta relations and another defining schema types. Refactor various schema view based on this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1998
diff changeset
   533
        super(RestrictedSchemaVisitorMixIn, self).__init__(*args, **kwargs)
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   534
2387
ea1defea9636 [views] fix some crashers (schema still does not render properly, might be yams side)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2381
diff changeset
   535
    def should_display_schema(self, rschema):
ea1defea9636 [views] fix some crashers (schema still does not render properly, might be yams side)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 2381
diff changeset
   536
        return (super(RestrictedSchemaVisitorMixIn, self).should_display_schema(rschema)
3890
d7a270f50f54 backport stable branch (one more time painfully)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777 3877
diff changeset
   537
                and rschema.may_have_permission('read', self._cw))
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   538
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3768
diff changeset
   539
    def should_display_attr(self, eschema, rschema):
4108
f9c51250480a schema view fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4045
diff changeset
   540
        return (super(RestrictedSchemaVisitorMixIn, self).should_display_attr(eschema, rschema)
3890
d7a270f50f54 backport stable branch (one more time painfully)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777 3877
diff changeset
   541
                and eschema.rdef(rschema).may_have_permission('read', self._cw))
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   542
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   543
2126
a25859917ccc stop using meta attribute from yams schema. Use instead sets defining meta relations and another defining schema types. Refactor various schema view based on this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1998
diff changeset
   544
class FullSchemaVisitor(RestrictedSchemaVisitorMixIn, s2d.FullSchemaVisitor):
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   545
    pass
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   546
2126
a25859917ccc stop using meta attribute from yams schema. Use instead sets defining meta relations and another defining schema types. Refactor various schema view based on this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1998
diff changeset
   547
class OneHopESchemaVisitor(RestrictedSchemaVisitorMixIn,
a25859917ccc stop using meta attribute from yams schema. Use instead sets defining meta relations and another defining schema types. Refactor various schema view based on this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1998
diff changeset
   548
                           s2d.OneHopESchemaVisitor):
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   549
    pass
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   550
2126
a25859917ccc stop using meta attribute from yams schema. Use instead sets defining meta relations and another defining schema types. Refactor various schema view based on this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1998
diff changeset
   551
class OneHopRSchemaVisitor(RestrictedSchemaVisitorMixIn,
a25859917ccc stop using meta attribute from yams schema. Use instead sets defining meta relations and another defining schema types. Refactor various schema view based on this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1998
diff changeset
   552
                           s2d.OneHopRSchemaVisitor):
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   553
    pass
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   554
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   555
class CWSchemaDotPropsHandler(s2d.SchemaDotPropsHandler):
7215
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   556
    def __init__(self, visitor, cw):
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   557
        self.visitor = visitor
7215
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   558
        self.cw = cw
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   559
        self.nextcolor = cycle( ('#ff7700', '#000000',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   560
                                 '#ebbc69', '#888888') ).next
5688
21658a3a386a [schema view] improve it slightly by attributing the same color to rdef of the same relation type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5686
diff changeset
   561
        self.colors = {}
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   562
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   563
    def node_properties(self, eschema):
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   564
        """return DOT drawing options for an entity schema include href"""
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   565
        label = ['{',eschema.type,'|']
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   566
        label.append(r'\l'.join('%s (%s)' % (rel.type, eschema.rdef(rel.type).object)
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   567
                                for rel in eschema.ordered_relations()
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   568
                                    if rel.final and self.visitor.should_display_attr(eschema, rel)))
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   569
        label.append(r'\l}') # trailing \l ensure alignement of the last one
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   570
        return {'label' : ''.join(label), 'shape' : "record",
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   571
                'fontname' : "Courier", 'style' : "filled",
7215
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   572
                'href': self.cw.build_url('cwetype/%s' % eschema.type),
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   573
                'fontsize': '10px'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   574
                }
1554
3a3263df6cdd new primary view using uicfg.rdisplay (major api cleanup)
sylvain.thenault@logilab.fr
parents: 1533
diff changeset
   575
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   576
    def edge_properties(self, rschema, subjnode, objnode):
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   577
        """return default DOT drawing options for a relation schema"""
8213
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   578
        # Inheritance relation (i.e 'specializes').
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   579
        if rschema is None:
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   580
            kwargs = {'label': 'Parent class',
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   581
                      'color' : 'grey',  'style' : 'filled',
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   582
                      'arrowhead': 'empty',
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   583
                      'fontsize': '10px'}
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   584
        # symmetric rels are handled differently, let yams decide what's best
8213
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   585
        elif rschema.symmetric:
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   586
            kwargs = {'label': rschema.type,
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   587
                      'color': '#887788', 'style': 'dashed',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   588
                      'dir': 'both', 'arrowhead': 'normal', 'arrowtail': 'normal',
7215
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   589
                      'fontsize': '10px',
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   590
                      'href': self.cw.build_url('cwrtype/%s' % rschema.type)}
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   591
        else:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   592
            kwargs = {'label': rschema.type,
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   593
                      'color' : 'black',  'style' : 'filled', 'fontsize': '10px',
7215
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   594
                      'href': self.cw.build_url('cwrtype/%s' % rschema.type)}
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   595
            rdef = rschema.rdef(subjnode, objnode)
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   596
            composite = rdef.composite
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   597
            if rdef.composite == 'subject':
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   598
                kwargs['arrowhead'] = 'none'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   599
                kwargs['arrowtail'] = 'diamond'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   600
            elif rdef.composite == 'object':
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   601
                kwargs['arrowhead'] = 'diamond'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   602
                kwargs['arrowtail'] = 'none'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   603
            else:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   604
                kwargs['arrowhead'] = 'open'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   605
                kwargs['arrowtail'] = 'none'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   606
            # UML like cardinalities notation, omitting 1..1
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   607
            if rdef.cardinality[1] != '1':
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   608
                kwargs['taillabel'] = s2d.CARD_MAP[rdef.cardinality[1]]
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   609
            if rdef.cardinality[0] != '1':
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   610
                kwargs['headlabel'] = s2d.CARD_MAP[rdef.cardinality[0]]
5688
21658a3a386a [schema view] improve it slightly by attributing the same color to rdef of the same relation type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5686
diff changeset
   611
            try:
21658a3a386a [schema view] improve it slightly by attributing the same color to rdef of the same relation type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5686
diff changeset
   612
                kwargs['color'] = self.colors[rschema]
5689
18d4e78b9369 [schema view] only catch key errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5688
diff changeset
   613
            except KeyError:
5688
21658a3a386a [schema view] improve it slightly by attributing the same color to rdef of the same relation type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5686
diff changeset
   614
                kwargs['color'] = self.nextcolor()
21658a3a386a [schema view] improve it slightly by attributing the same color to rdef of the same relation type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5686
diff changeset
   615
                self.colors[rschema] = kwargs['color']
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   616
        kwargs['fontcolor'] = kwargs['color']
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   617
        # dot label decoration is just awful (1 line underlining the label
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   618
        # + 1 line going to the closest edge spline point)
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   619
        kwargs['decorate'] = 'false'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   620
        #kwargs['labelfloat'] = 'true'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   621
        return kwargs
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   622
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   623
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   624
class SchemaGraphView(StartupView):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   625
    __regid__ = 'schemagraph'
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   626
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   627
    def call(self, etype=None, rtype=None, alt=''):
9383
7b3fa5a7a5a3 [views/dot] use an inlined svg for schema and workflow graphs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   628
        if 'MSIE 8' in self._cw.useragent():
7b3fa5a7a5a3 [views/dot] use an inlined svg for schema and workflow graphs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   629
            return
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   630
        schema = self._cw.vreg.schema
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   631
        if etype:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   632
            assert rtype is None
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   633
            visitor = OneHopESchemaVisitor(self._cw, schema.eschema(etype),
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   634
                                           skiptypes=skip_types(self._cw))
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   635
            alt = self._cw._('graphical representation of the %(etype)s '
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   636
                             'entity type from %(appid)s data model')
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   637
        elif rtype:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   638
            visitor = OneHopRSchemaVisitor(self._cw, schema.rschema(rtype),
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   639
                                           skiptypes=skip_types(self._cw))
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   640
            alt = self._cw._('graphical representation of the %(rtype)s '
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   641
                             'relation type from %(appid)s data model')
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   642
        else:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   643
            visitor = FullSchemaVisitor(self._cw, schema,
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   644
                                        skiptypes=skip_types(self._cw))
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   645
            alt = self._cw._('graphical representation of %(appid)s data model')
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   646
        alt %= {'rtype': rtype, 'etype': etype,
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   647
                'appid': self._cw.vreg.config.appid}
7215
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   648
        prophdlr = CWSchemaDotPropsHandler(visitor, self._cw)
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   649
        generator = GraphGenerator(DotBackend('schema', 'BT',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   650
                                              ratio='compress',size=None,
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   651
                                              renderer='dot',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   652
                                              additionnal_param={
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   653
                                                  'overlap':'false',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   654
                                                  'splines':'true',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   655
                                                  'sep':'0.2',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   656
                                              }))
9383
7b3fa5a7a5a3 [views/dot] use an inlined svg for schema and workflow graphs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   657
        # svg image file
7b3fa5a7a5a3 [views/dot] use an inlined svg for schema and workflow graphs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   658
        fd, tmpfile = tempfile.mkstemp('.svg')
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   659
        os.close(fd)
9383
7b3fa5a7a5a3 [views/dot] use an inlined svg for schema and workflow graphs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   660
        generator.generate(visitor, prophdlr, tmpfile)
7b3fa5a7a5a3 [views/dot] use an inlined svg for schema and workflow graphs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   661
        with codecs.open(tmpfile, 'rb', encoding='utf-8') as svgfile:
7b3fa5a7a5a3 [views/dot] use an inlined svg for schema and workflow graphs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   662
            self.w(svgfile.read())
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   663
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   664
# breadcrumbs ##################################################################
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   665
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   666
class CWRelationIBreadCrumbsAdapter(ibreadcrumbs.IBreadCrumbsAdapter):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   667
    __select__ = is_instance('CWRelation')
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   668
    def parent_entity(self):
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   669
        return self.entity.rtype
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   670
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   671
class CWAttributeIBreadCrumbsAdapter(ibreadcrumbs.IBreadCrumbsAdapter):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   672
    __select__ = is_instance('CWAttribute')
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   673
    def parent_entity(self):
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   674
        return self.entity.stype
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   675
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   676
class CWConstraintIBreadCrumbsAdapter(ibreadcrumbs.IBreadCrumbsAdapter):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   677
    __select__ = is_instance('CWConstraint')
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   678
    def parent_entity(self):
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   679
        if self.entity.reverse_constrained_by:
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   680
            return self.entity.reverse_constrained_by[0]
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   681
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   682
class RQLExpressionIBreadCrumbsAdapter(ibreadcrumbs.IBreadCrumbsAdapter):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   683
    __select__ = is_instance('RQLExpression')
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   684
    def parent_entity(self):
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   685
        return self.entity.expression_of
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   686
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   687
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   688
# misc: facets, actions ########################################################
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   689
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   690
class CWFinalFacet(facet.AttributeFacet):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   691
    __regid__ = 'cwfinal-facet'
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5823
diff changeset
   692
    __select__ = facet.AttributeFacet.__select__ & is_instance('CWEType', 'CWRType')
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   693
    rtype = 'final'
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   694
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6854
diff changeset
   695
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   696
class ViewSchemaAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   697
    __regid__ = 'schema'
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   698
    __select__ = yes()
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   699
7810
21683b1975e3 [i18n] tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7797
diff changeset
   700
    title = _('data model schema')
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   701
    order = 30
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6854
diff changeset
   702
    category = 'manage'
2436
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   703
44b2eea35efa move all schema related views where they belong (eg not startup), fix schema graph views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2387
diff changeset
   704
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   705
        return self._cw.build_url(self.__regid__)