cubicweb/web/views/schema.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 05 Apr 2019 17:58:19 +0200
changeset 12567 26744ad37953
parent 11767 432f87a63057
permissions -rw-r--r--
Drop python2 support This mostly consists in removing the dependency on "six" and updating the code to use only Python3 idioms. Notice that we previously used TemporaryDirectory from cubicweb.devtools.testlib for compatibility with Python2. We now directly import it from tempfile.
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
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11057
diff changeset
    20
10666
7f6b5f023884 [py3k] replace '_ = unicode' in global scope (closes #7589459)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10663
diff changeset
    21
from cubicweb import _
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
    """
10405
7b27a7443180 [views/schema] extract a hardcoded css class attribute
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9383
diff changeset
    87
    cssclass = "listing schemaInfo"
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    88
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    89
    def permissions_table(self, erschema, permissions=None):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    90
        self._cw.add_css('cubicweb.acl.css')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    91
        w = self.w
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    92
        _ = self._cw._
10405
7b27a7443180 [views/schema] extract a hardcoded css class attribute
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9383
diff changeset
    93
        w(u'<table class="%s">' % self.cssclass)
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
    94
        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
    95
            _("permission"), _('granted to groups'), _('rql expressions')))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    96
        for action in erschema.ACTIONS:
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    97
            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
    98
            if permissions is None:
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
    99
                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
   100
                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
   101
            else:
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   102
                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
   103
                rqlexprs = permissions[action][1]
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   104
            # 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
   105
            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
   106
                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
   107
                      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
   108
            w(u'<br/>'.join(groups))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   109
            w(u'</td><td>')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   110
            w(u'<br/>'.join(rqlexprs))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   111
            w(u'</td></tr>\n')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   112
        w(u'</table>')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   113
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   114
    def grouped_permissions_table(self, rschema):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   115
        # group relation definitions with identical permissions
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   116
        perms = {}
10663
54b8a1f249fb [py3k] dict.itervalues → dict.values
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10662
diff changeset
   117
        for rdef in rschema.rdefs.values():
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   118
            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
   119
            for action in rdef.ACTIONS:
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   120
                groups = sorted(rdef.get_groups(action))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   121
                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
   122
                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
   123
            rdef_perms = tuple(rdef_perms)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   124
            if rdef_perms in perms:
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   125
                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
   126
            else:
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   127
                perms[rdef_perms] = [(rdef.subject, rdef.object)]
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   128
        # 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
   129
        # definition
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   130
        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
   131
        _ = self._cw._
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   132
        w(u'<div style="margin: 0px 1.5em">')
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   133
        tmpl = u'<strong>%s</strong> %s <strong>%s</strong>'
10662
10942ed172de [py3k] dict.iteritems → dict.items
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10405
diff changeset
   134
        for perm, rdefs in perms.items():
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   135
            w(u'<div>%s</div>' % u', '.join(
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   136
                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
   137
            # 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
   138
            # ACTIONS
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   139
            self.permissions_table(rdef, dict(perm))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   140
        w(u'</div>')
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   141
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   142
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
   143
# 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
   144
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
   145
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
   146
    """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
   147
    __regid__ = 'schema'
7810
21683b1975e3 [i18n] tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7797
diff changeset
   148
    title = _('data model schema')
5525
c4eee9921e19 [views] tab schema image renamed to schema diagram
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   149
    tabs = [_('schema-diagram'), _('schema-entity-types'),
6854
ffc982faa264 [views] delete ``permission`` tab in ``SchemaView``
cheb
parents: 6827
diff changeset
   150
            _('schema-relation-types')]
5525
c4eee9921e19 [views] tab schema image renamed to schema diagram
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   151
    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
   152
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
   153
    def call(self):
7810
21683b1975e3 [i18n] tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7797
diff changeset
   154
        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
   155
        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
   156
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
   157
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   158
class SchemaImageTab(StartupView):
5525
c4eee9921e19 [views] tab schema image renamed to schema diagram
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   159
    __regid__ = 'schema-diagram'
1151
b20677336ee6 turn old __rtags__ the new way
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
   160
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
   161
    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
   162
        _ = 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
        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
   164
            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
   165
            '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
   166
            '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
   167
               % 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
   168
        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
   169
               (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
   170
                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
   171
        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
   172
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
   173
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
   174
    __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
   175
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
   176
    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
   177
        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
   178
            '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
   179
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
   180
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
   181
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
   182
    __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
   183
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
    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
   185
        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
   186
            '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
   187
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   188
# CWEType ######################################################################
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   189
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   190
# register msgid generated in entity relations tables
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   191
_('i18ncard_1'), _('i18ncard_?'), _('i18ncard_+'), _('i18ncard_*')
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   192
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   193
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
   194
    __select__ = is_instance('CWEType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   195
    tabs = [_('cwetype-description'), _('cwetype-box'), _('cwetype-workflow'),
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   196
            _('cwetype-views'), _('cwetype-permissions')]
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   197
    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
   198
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   199
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   200
class CWETypeDescriptionTab(tabs.PrimaryTab):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   201
    __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
   202
    __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
   203
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
   204
    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
   205
        super(CWETypeDescriptionTab, self).render_entity_attributes(entity)
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   206
        _ = 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
   207
        # 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
   208
        if entity.specializes:
8213
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   209
            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
   210
            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
   211
            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
   212
        if entity.reverse_specializes:
8213
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   213
            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
   214
            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
   215
            self.w(u'</div>')
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   216
        # entity schema image
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   217
        self.wview('schemagraph', etype=entity.name)
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   218
        # 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
   219
        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
   220
        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
   221
            '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
   222
            '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
   223
            '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
   224
            '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
   225
            '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
   226
            {'x': entity.eid})
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   227
        self.wview('table', rset, 'null',
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   228
                   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
   229
                             2: 'etype-attr-defaultval-cell',
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   230
                             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
   231
                             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
   232
                             6: 'rdef-options-cell'},
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   233
                   headers=(_(u'name'), _(u'type'),
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   234
                            _(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
   235
                            _(u'constraints'), _(u'description'), _('options')))
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   236
        # 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
   237
        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
   238
        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
   239
                    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
   240
                    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
   241
                    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
   242
        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
   243
                  _(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
   244
        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
   245
            '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
   246
            '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
   247
            '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
   248
            '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
   249
            {'x': entity.eid})
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   250
        if rset:
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   251
            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
   252
            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
   253
        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
   254
            '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
   255
            '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
   256
            '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
   257
            '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
   258
            {'x': entity.eid})
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   259
        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
   260
            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
   261
            headers[1] = _(u'subject type')
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   262
            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
   263
            self.wview('table', rset, cellvids=cellvids, headers=headers)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   264
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   265
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   266
class CWETypeAttributeCardinalityCell(baseviews.FinalView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   267
    __regid__ = 'etype-attr-cardinality-cell'
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   268
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   269
    def cell_call(self, row, col):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   270
        if self.cw_rset.rows[row][col][0] == '1':
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   271
            self.w(self._cw._(u'yes'))
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   272
        else:
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   273
            self.w(self._cw._(u'no'))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   274
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   275
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
   276
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
   277
    __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
   278
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
    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
   280
        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
   281
        if defaultval is not None:
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   282
            self.w(str(self.cw_rset.rows[row][col].unzpickle()))
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
   283
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   284
class CWETypeRelationCardinalityCell(baseviews.FinalView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   285
    __regid__ = 'etype-rel-cardinality-cell'
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   286
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   287
    def cell_call(self, row, col):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   288
        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
   289
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   290
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   291
class CWETypeBoxTab(EntityView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   292
    __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
   293
    __select__ = is_instance('CWEType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   294
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   295
    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
   296
        viewer = schemaviewer.SchemaViewer(self._cw)
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   297
        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
   298
        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
   299
        layout = viewer.visit_entityschema(eschema)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   300
        self.w(uilib.ureport_as_html(layout))
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   301
        self.w(u'<br class="clear"/>')
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
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   304
class CWETypePermTab(SecurityViewMixIn, EntityView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   305
    __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
   306
    __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
   307
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   308
    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
   309
        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
   310
        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
   311
        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
   312
        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
   313
        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
   314
        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
   315
        for attr, etype in  eschema.attribute_definitions():
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   316
            if attr not in META_RTYPES:
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   317
                rdef = eschema.rdef(attr)
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   318
                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
   319
                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
   320
                       % (attrtype, self._cw._(attrtype)))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   321
                self.permissions_table(rdef)
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   322
        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
   323
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
   324
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   325
class CWETypeWorkflowTab(EntityView):
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   326
    __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
   327
    __select__ = (is_instance('CWEType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   328
                  & 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
   329
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   330
    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
   331
        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
   332
        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
   333
            wf = entity.default_workflow[0]
5224
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   334
            if len(entity.reverse_workflow_of) > 1:
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   335
                self.w(u'<h1>%s (%s)</h1>'
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   336
                       % (wf.name, self._cw._('default_workflow')))
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   337
            self.display_workflow(wf)
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   338
            defaultwfeid = wf.eid
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   339
        else:
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   340
            self.w(u'<div class="error">%s</div>'
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   341
                   % self._cw._('There is no default workflow'))
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   342
            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
   343
        for altwf in entity.reverse_workflow_of:
5224
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   344
            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
   345
                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
   346
            self.w(u'<h1>%s</h1>' % altwf.name)
5224
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   347
            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
   348
5224
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   349
    def display_workflow(self, wf):
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   350
        self.w(wf.view('wfgraph'))
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   351
        self.w('<a href="%s">%s</a>' % (
34e669b6fd95 [mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4971
diff changeset
   352
            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
   353
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   354
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   355
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
   356
    """possible views for this entity type"""
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   357
    __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
   358
    __select__ = EntityView.__select__ & is_instance('CWEType')
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   359
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   360
    def cell_call(self, row, col):
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   361
        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
   362
        _ = 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
   363
        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
   364
                                   '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
   365
        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
   366
                 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
   367
        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
   368
                   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
   369
                            _(u'view title')))
5233
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   370
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   371
    def possible_views(self, etype):
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   372
        rset = self._cw.etype_rset(etype)
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   373
        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
   374
                if v.category != 'startupview']
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   375
673b63953e7a ticket #787103, entity schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5232
diff changeset
   376
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   377
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
   378
    __select__ = is_instance('CWEType')
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   379
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   380
    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
   381
        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
   382
        if entity.final:
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   383
            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
   384
        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
   385
        if entity.final:
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   386
            self.w(u'</em>')
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   387
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   388
1998
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   389
# CWRType ######################################################################
12040c090aa4 [views] change schema views: remove view eschema and use tabs for cwetype
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
   390
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   391
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
   392
    __select__ = is_instance('CWRType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   393
    tabs = [_('cwrtype-description'), _('cwrtype-permissions')]
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   394
    default_tab = 'cwrtype-description'
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   395
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   396
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   397
class CWRTypeDescriptionTab(tabs.PrimaryTab):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   398
    __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
   399
    __select__ = is_instance('CWRType')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   400
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
   401
    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
   402
        super(CWRTypeDescriptionTab, self).render_entity_attributes(entity)
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   403
        _ = 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
   404
        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
   405
            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
   406
        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
   407
                                '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
   408
                                'R cardinality C', {'x': entity.eid})
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   409
        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
   410
                   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
   411
                            _(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
   412
                   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
   413
                             3: 'rdef-options-cell'})
5234
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
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   416
class CWRTypePermTab(SecurityViewMixIn, EntityView):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   417
    __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
   418
    __select__ = is_instance('CWRType') & authenticated_user()
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   419
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   420
    def cell_call(self, row, col):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   421
        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
   422
        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
   423
        self.grouped_permissions_table(rschema)
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
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   426
# CWAttribute / CWRelation #####################################################
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   427
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
   428
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
   429
    __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
   430
    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
   431
    default_tab = 'rdef-description'
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   432
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
   433
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
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
   435
    __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
   436
    __select__ = is_instance('CWRelation', 'CWAttribute')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   437
1556
b64a0fe1fc86 cleanup
sylvain.thenault@logilab.fr
parents: 1554
diff changeset
   438
    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
   439
        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
   440
        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
   441
        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
   442
            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
   443
            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
   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
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
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
   447
    __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
   448
    __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
   449
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   450
    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
   451
        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
   452
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   453
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
   454
class RDEFNameView(tableview.CellView):
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   455
    """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
   456
    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
   457
    for instance)
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   458
    """
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   459
    __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
   460
    __select__ = is_instance('CWRelation', 'CWAttribute')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   461
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   462
    def cell_call(self, row, col):
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   463
        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
   464
        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
   465
        # XXX use context entity + pgettext
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   466
        self.w(u'<a href="%s">%s</a> (%s)' % (
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   467
            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
   468
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
   469
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
   470
    """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
   471
    """
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   472
    __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
   473
    __select__ = is_instance('CWRelation', 'CWAttribute')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   474
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   475
    def cell_call(self, row, col):
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   476
        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
   477
        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
   478
        # XXX use context entity + pgettext
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   479
        self.w(u'<a href="%s">%s</a> (%s)' % (
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   480
            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
   481
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
   482
class RDEFConstraintsCell(EntityView):
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   483
    __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
   484
    __select__ = is_instance('CWAttribute', 'CWRelation')
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   485
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   486
    def cell_call(self, row, col):
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   487
        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
   488
        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
   489
        rdef = rschema.rdefs[(entity.stype.name, entity.otype.name)]
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   490
        constraints = [xml_escape(str(c)) for c in getattr(rdef, 'constraints')]
5236
13296aa038a9 catalogs update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5235
diff changeset
   491
        self.w(u'<br/>'.join(constraints))
5234
e2476d78b060 ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5233
diff changeset
   492
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
   493
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
   494
    __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
   495
    __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
   496
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
    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
   498
        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
   499
        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
   500
        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
   501
            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
   502
        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
   503
            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
   504
        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
   505
            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
   506
        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
   507
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
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
   509
    __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
   510
    __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
   511
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
    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
   513
        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
   514
        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
   515
        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
   516
        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
   517
            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
   518
        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
   519
            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
   520
        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
   521
            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
   522
                                      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
   523
        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
   524
            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
   525
                                      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
   526
        self.w(u','.join(options))
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   527
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   528
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   529
# schema images ###############################################################
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   530
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
   531
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
   532
    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
   533
        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
   534
        super(RestrictedSchemaVisitorMixIn, self).__init__(*args, **kwargs)
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   535
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
   536
    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
   537
        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
   538
                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
   539
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3768
diff changeset
   540
    def should_display_attr(self, eschema, rschema):
4108
f9c51250480a schema view fix
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4045
diff changeset
   541
        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
   542
                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
   543
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   544
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
   545
class FullSchemaVisitor(RestrictedSchemaVisitorMixIn, s2d.FullSchemaVisitor):
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   546
    pass
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   547
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
   548
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
   549
                           s2d.OneHopESchemaVisitor):
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   550
    pass
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   551
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
   552
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
   553
                           s2d.OneHopRSchemaVisitor):
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   554
    pass
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   555
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   556
class CWSchemaDotPropsHandler(s2d.SchemaDotPropsHandler):
7215
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   557
    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
   558
        self.visitor = visitor
7215
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   559
        self.cw = cw
10668
4fb62d791073 [web/views] use next builtin instead of next method
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
   560
        self._cycle = iter(cycle(('#ff7700', '#000000', '#ebbc69', '#888888')))
4fb62d791073 [web/views] use next builtin instead of next method
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
   561
        self.nextcolor = lambda: next(self._cycle)
4fb62d791073 [web/views] use next builtin instead of next method
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10666
diff changeset
   562
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
   563
        self.colors = {}
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   564
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   565
    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
   566
        """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
   567
        label = ['{',eschema.type,'|']
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   568
        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
   569
                                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
   570
                                    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
   571
        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
   572
        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
   573
                'fontname' : "Courier", 'style' : "filled",
7215
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   574
                '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
   575
                'fontsize': '10px'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   576
                }
1554
3a3263df6cdd new primary view using uicfg.rdisplay (major api cleanup)
sylvain.thenault@logilab.fr
parents: 1533
diff changeset
   577
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   578
    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
   579
        """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
   580
        # Inheritance relation (i.e 'specializes').
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   581
        if rschema is None:
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   582
            kwargs = {'label': 'Parent class',
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   583
                      'color' : 'grey',  'style' : 'filled',
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   584
                      'arrowhead': 'empty',
076c80543fcd [schema view] properly display inheritance (closes #870073).
Damien Garaud <damien.garaud@logilab.fr>
parents: 7845
diff changeset
   585
                      'fontsize': '10px'}
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   586
        # 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
   587
        elif rschema.symmetric:
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   588
            kwargs = {'label': rschema.type,
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   589
                      'color': '#887788', 'style': 'dashed',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   590
                      '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
   591
                      'fontsize': '10px',
2da7f3ec4e6f [schema diagram] proper url generation (closes #1621276)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   592
                      '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
   593
        else:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   594
            kwargs = {'label': rschema.type,
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   595
                      '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
   596
                      '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
   597
            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
   598
            composite = rdef.composite
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   599
            if rdef.composite == 'subject':
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   600
                kwargs['arrowhead'] = 'none'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   601
                kwargs['arrowtail'] = 'diamond'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   602
            elif rdef.composite == 'object':
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   603
                kwargs['arrowhead'] = 'diamond'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   604
                kwargs['arrowtail'] = 'none'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   605
            else:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   606
                kwargs['arrowhead'] = 'open'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   607
                kwargs['arrowtail'] = 'none'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   608
            # 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
   609
            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
   610
                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
   611
            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
   612
                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
   613
            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
   614
                kwargs['color'] = self.colors[rschema]
5689
18d4e78b9369 [schema view] only catch key errors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5688
diff changeset
   615
            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
   616
                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
   617
                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
   618
        kwargs['fontcolor'] = kwargs['color']
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   619
        # 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
   620
        # + 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
   621
        kwargs['decorate'] = 'false'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   622
        #kwargs['labelfloat'] = 'true'
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   623
        return kwargs
1091
b5e253c0dd13 a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents: 1012
diff changeset
   624
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
   625
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   626
class SchemaGraphView(StartupView):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   627
    __regid__ = 'schemagraph'
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   628
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   629
    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
   630
        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
   631
            return
5686
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   632
        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
   633
        if etype:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   634
            assert rtype is None
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   635
            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
   636
                                           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
   637
            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
   638
                             '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
   639
        elif rtype:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   640
            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
   641
                                           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
   642
            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
   643
                             '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
   644
        else:
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   645
            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
   646
                                        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
   647
            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
   648
        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
   649
                '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
   650
        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
   651
        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
   652
                                              ratio='compress',size=None,
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   653
                                              renderer='dot',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   654
                                              additionnal_param={
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   655
                                                  'overlap':'false',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   656
                                                  'splines':'true',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   657
                                                  'sep':'0.2',
bbb89ba88b69 [schema diagram] ticket #191599, make schema image look better
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 5556
diff changeset
   658
                                              }))
9383
7b3fa5a7a5a3 [views/dot] use an inlined svg for schema and workflow graphs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9299
diff changeset
   659
        # 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
   660
        fd, tmpfile = tempfile.mkstemp('.svg')
10970
894c14f08380 [web/views] unlink svg temp file after we're done
Julien Cristau <julien.cristau@logilab.fr>
parents: 10405
diff changeset
   661
        try:
894c14f08380 [web/views] unlink svg temp file after we're done
Julien Cristau <julien.cristau@logilab.fr>
parents: 10405
diff changeset
   662
            os.close(fd)
894c14f08380 [web/views] unlink svg temp file after we're done
Julien Cristau <julien.cristau@logilab.fr>
parents: 10405
diff changeset
   663
            generator.generate(visitor, prophdlr, tmpfile)
894c14f08380 [web/views] unlink svg temp file after we're done
Julien Cristau <julien.cristau@logilab.fr>
parents: 10405
diff changeset
   664
            with codecs.open(tmpfile, 'rb', encoding='utf-8') as svgfile:
894c14f08380 [web/views] unlink svg temp file after we're done
Julien Cristau <julien.cristau@logilab.fr>
parents: 10405
diff changeset
   665
                self.w(svgfile.read())
894c14f08380 [web/views] unlink svg temp file after we're done
Julien Cristau <julien.cristau@logilab.fr>
parents: 10405
diff changeset
   666
        finally:
894c14f08380 [web/views] unlink svg temp file after we're done
Julien Cristau <julien.cristau@logilab.fr>
parents: 10405
diff changeset
   667
            os.unlink(tmpfile)
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
   668
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   669
# breadcrumbs ##################################################################
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 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
   672
    __select__ = is_instance('CWRelation')
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.rtype
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   675
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   676
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
   677
    __select__ = is_instance('CWAttribute')
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
        return self.entity.stype
1498
2c6eec0b46b9 fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   680
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   681
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
   682
    __select__ = is_instance('CWConstraint')
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   683
    def parent_entity(self):
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   684
        if self.entity.reverse_constrained_by:
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   685
            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
   686
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   687
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
   688
    __select__ = is_instance('RQLExpression')
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   689
    def parent_entity(self):
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   690
        return self.entity.expression_of
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5527
diff changeset
   691
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
   692
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
# 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
   694
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
   695
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
   696
    __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
   697
    __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
   698
    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
   699
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6854
diff changeset
   700
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
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
   702
    __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
   703
    __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
   704
7810
21683b1975e3 [i18n] tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7797
diff changeset
   705
    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
   706
    order = 30
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6854
diff changeset
   707
    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
   708
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
   709
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   710
        return self._cw.build_url(self.__regid__)