devtools/devctl.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 16 Sep 2010 18:56:35 +0200
changeset 6279 42079f752a9c
parent 6138 65f5e488f983
child 6356 e89f71a41e20
permissions -rw-r--r--
backport stable into default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5375
diff changeset
     1
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
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: 5375
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5545
diff changeset
    18
"""additional cubicweb-ctl commands and command handlers for cubicweb and
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5545
diff changeset
    19
cubicweb's cubes development
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5545
diff changeset
    20
"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
__docformat__ = "restructuredtext en"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
4718
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
    24
# *ctl module should limit the number of import to be imported as quickly as
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
    25
# possible (for cubicweb-ctl reactivity, necessary for instance for usable bash
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
    26
# completion). So import locally in command helpers.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    27
import sys
1016
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 396
diff changeset
    28
from datetime import datetime
4719
aaed3f813ef8 kill dead/useless code as suggested by pylint
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4718
diff changeset
    29
from os import mkdir, chdir
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
from os.path import join, exists, abspath, basename, normpath, split, isdir
2551
91f579b7a1e1 [F bw compat] warn if entities.pot exists but consider it anyway
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2534
diff changeset
    31
from warnings import warn
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
from logilab.common import STD_BLACKLIST
4428
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
    34
3978
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3858
diff changeset
    35
from cubicweb.__pkginfo__ import version as cubicwebversion
2790
968108e16066 move underline_title to toolsutils
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2773
diff changeset
    36
from cubicweb import CW_SOFTWARE_ROOT as BASEDIR, BadCommandUsage
6138
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
    37
from cubicweb.cwctl import CWCTL
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
    38
from cubicweb.toolsutils import (SKEL_EXCLUDE, Command,
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
    39
                                 copy_skeleton, underline_title)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
from cubicweb.web.webconfig import WebConfiguration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
from cubicweb.server.serverconfig import ServerConfiguration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
2790
968108e16066 move underline_title to toolsutils
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2773
diff changeset
    43
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    44
class DevConfiguration(ServerConfiguration, WebConfiguration):
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    45
    """dummy config to get full library schema and appobjects for
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    46
    a cube or for cubicweb (without a home)
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    47
    """
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    48
    creating = True
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    49
    cleanup_interface_sobjects = False
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    50
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    51
    cubicweb_appobject_path = (ServerConfiguration.cubicweb_appobject_path
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    52
                               | WebConfiguration.cubicweb_appobject_path)
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    53
    cube_appobject_path = (ServerConfiguration.cube_appobject_path
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    54
                           | WebConfiguration.cube_appobject_path)
373
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    55
4428
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
    56
    def __init__(self, *cubes):
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    57
        super(DevConfiguration, self).__init__(cubes and cubes[0] or None)
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    58
        if cubes:
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    59
            self._cubes = self.reorder_cubes(
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    60
                self.expand_cubes(cubes, with_recommends=True))
5534
b75aa6ce0c04 [i18ncube] we must load site_cubicweb file before calling set_schema, else we may miss some options or other initialization stuff necessary to appobject loading
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    61
            self.load_site_cubicweb()
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    62
        else:
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
    63
            self._cubes = ()
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
    64
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
    @property
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
    def apphome(self):
373
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    67
        return None
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    68
    def main_config_file(self):
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    69
        return None
5442
3ed8afbbdf70 [webconfig] refactor/cleanup debug mode management on startup: simply use config.debugmode instead of debug argument everywhere...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
    70
    def init_log(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
        pass
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    72
    def load_configuration(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
        pass
373
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    74
    def default_log_file(self):
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    75
        return None
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    77
373
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    78
def cleanup_sys_modules(config):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    79
    # cleanup sys.modules, required when we're updating multiple cubes
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
    for name, mod in sys.modules.items():
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    81
        if mod is None:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    82
            # duh ? logilab.common.os for instance
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    83
            del sys.modules[name]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    84
            continue
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    85
        if not hasattr(mod, '__file__'):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    86
            continue
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    87
        for path in config.vregistry_path():
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    88
            if mod.__file__.startswith(path):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    89
                del sys.modules[name]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    90
                break
1850
75661f0a691b should be outside the loop
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1774
diff changeset
    91
    # fresh rtags
75661f0a691b should be outside the loop
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1774
diff changeset
    92
    from cubicweb import rtags
75661f0a691b should be outside the loop
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1774
diff changeset
    93
    from cubicweb.web import uicfg
75661f0a691b should be outside the loop
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1774
diff changeset
    94
    rtags.RTAGS[:] = []
75661f0a691b should be outside the loop
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1774
diff changeset
    95
    reload(uicfg)
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
    96
373
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    97
def generate_schema_pot(w, cubedir=None):
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    98
    """generate a pot file with schema specific i18n messages
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
    99
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
   100
    notice that relation definitions description and static vocabulary
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
   101
    should be marked using '_' and extracted using xgettext
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
   102
    """
2650
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2633
diff changeset
   103
    from cubicweb.cwvreg import CubicWebVRegistry
373
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
   104
    if cubedir:
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   105
        cube = split(cubedir)[-1]
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   106
        config = DevConfiguration(cube)
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   107
        depcubes = list(config._cubes)
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   108
        depcubes.remove(cube)
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   109
        libconfig = DevConfiguration(*depcubes)
373
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
   110
    else:
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   111
        config = DevConfiguration()
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   112
        cube = libconfig = None
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   113
    cleanup_sys_modules(config)
1665
14a8f9d434c8 more i18nupdate fixes
sylvain.thenault@logilab.fr
parents: 1662
diff changeset
   114
    schema = config.load_schema(remove_unused_rtypes=False)
2650
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2633
diff changeset
   115
    vreg = CubicWebVRegistry(config)
373
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
   116
    # set_schema triggers objects registrations
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
   117
    vreg.set_schema(schema)
0c931b2e2a68 fix i18n catalog generation
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 365
diff changeset
   118
    w(DEFAULT_POT_HEAD)
4722
9c13d5db03d9 pylint suggested refactorings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4719
diff changeset
   119
    _generate_schema_pot(w, vreg, schema, libconfig=libconfig)
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   120
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   121
4718
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   122
def _generate_schema_pot(w, vreg, schema, libconfig=None):
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   123
    from copy import deepcopy
4021
280c910c8710 move i18n / migration modules from cw.common to cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   124
    from cubicweb.i18n import add_msg
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   125
    from cubicweb.web import uicfg
4718
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   126
    from cubicweb.schema import META_RTYPES, SYSTEM_RTYPES, CONSTRAINTS
3287
19c1011736a6 tweak catalog generation by adding a new SYSTEM_RTYPES set to schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3286
diff changeset
   127
    no_context_rtypes = META_RTYPES | SYSTEM_RTYPES
1016
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 396
diff changeset
   128
    w('# schema pot file, generated on %s\n' % datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   129
    w('# \n')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   130
    w('# singular and plural forms for each entity type\n')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   131
    w('\n')
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   132
    vregdone = set()
1470
fbdf66a08fbb don't add to cube i18n catalog msg id for components redefined from cw or from a depending cube
sylvain.thenault@logilab.fr
parents: 1451
diff changeset
   133
    if libconfig is not None:
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   134
        from cubicweb.cwvreg import CubicWebVRegistry, clear_rtag_objects
1665
14a8f9d434c8 more i18nupdate fixes
sylvain.thenault@logilab.fr
parents: 1662
diff changeset
   135
        libschema = libconfig.load_schema(remove_unused_rtypes=False)
3476
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   136
        afs = deepcopy(uicfg.autoform_section)
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   137
        appearsin_addmenu = deepcopy(uicfg.actionbox_appearsin_addmenu)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   138
        clear_rtag_objects()
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   139
        cleanup_sys_modules(libconfig)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   140
        libvreg = CubicWebVRegistry(libconfig)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   141
        libvreg.set_schema(libschema) # trigger objects registration
3476
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   142
        libafs = uicfg.autoform_section
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   143
        libappearsin_addmenu = uicfg.actionbox_appearsin_addmenu
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   144
        # prefill vregdone set
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   145
        list(_iter_vreg_objids(libvreg, vregdone))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   146
    else:
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   147
        libschema = {}
3476
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   148
        afs = uicfg.autoform_section
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   149
        appearsin_addmenu = uicfg.actionbox_appearsin_addmenu
3978
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3858
diff changeset
   150
        for cstrtype in CONSTRAINTS:
2c95e3033f64 finish yesterday work on rql constraints:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3858
diff changeset
   151
            add_msg(w, cstrtype)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   152
    done = set()
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   153
    for eschema in sorted(schema.entities()):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   154
        etype = eschema.type
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   155
        if etype not in libschema:
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   156
            add_msg(w, etype)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   157
            add_msg(w, '%s_plural' % etype)
3689
deb13e88e037 follow yams 0.25 api changes to improve performance
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3638
diff changeset
   158
            if not eschema.final:
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   159
                add_msg(w, 'This %s' % etype)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   160
                add_msg(w, 'New %s' % etype)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   161
            if eschema.description and not eschema.description in done:
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   162
                done.add(eschema.description)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   163
                add_msg(w, eschema.description)
3689
deb13e88e037 follow yams 0.25 api changes to improve performance
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3638
diff changeset
   164
        if eschema.final:
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   165
            continue
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   166
        for rschema, targetschemas, role in eschema.relation_definitions(True):
4399
bc8d7ac70347 skip final relations at this point
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4380
diff changeset
   167
            if rschema.final:
bc8d7ac70347 skip final relations at this point
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4380
diff changeset
   168
                continue
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   169
            for tschema in targetschemas:
3476
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   170
                fsections = afs.etype_get(eschema, rschema, role, tschema)
4400
4d36e0e93fdb must check for relation inlined in main form type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4399
diff changeset
   171
                if 'main_inlined' in fsections and \
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   172
                       (libconfig is None or not
4400
4d36e0e93fdb must check for relation inlined in main form type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4399
diff changeset
   173
                        'main_inlined' in libafs.etype_get(
3476
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   174
                            eschema, rschema, role, tschema)):
3275
5247789df541 [gettext] provide GNU contexts to avoid translations ambiguities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3221
diff changeset
   175
                    add_msg(w, 'add a %s' % tschema,
5247789df541 [gettext] provide GNU contexts to avoid translations ambiguities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3221
diff changeset
   176
                            'inlined:%s.%s.%s' % (etype, rschema, role))
4380
5613d7c06339 simplify messages used for inlined forms
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   177
                    add_msg(w, str(tschema),
3327
44efba78afac fix/enhance i18n context usage for inlined forms
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3287
diff changeset
   178
                            'inlined:%s.%s.%s' % (etype, rschema, role))
5431
84d8b4357528 fix i18ncube for pegase where we do strange things by redefining relations
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5424
diff changeset
   179
                if appearsin_addmenu.etype_get(eschema, rschema, role, tschema):
84d8b4357528 fix i18ncube for pegase where we do strange things by redefining relations
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5424
diff changeset
   180
                    if libconfig is not None and libappearsin_addmenu.etype_get(eschema, rschema, role, tschema):
84d8b4357528 fix i18ncube for pegase where we do strange things by redefining relations
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5424
diff changeset
   181
                        if eschema in libschema and tschema in libschema:
84d8b4357528 fix i18ncube for pegase where we do strange things by redefining relations
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5424
diff changeset
   182
                            continue
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   183
                    if role == 'subject':
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   184
                        label = 'add %s %s %s %s' % (eschema, rschema,
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   185
                                                     tschema, role)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   186
                        label2 = "creating %s (%s %%(linkto)s %s %s)" % (
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   187
                            tschema, eschema, rschema, tschema)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   188
                    else:
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   189
                        label = 'add %s %s %s %s' % (tschema, rschema,
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   190
                                                     eschema, role)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   191
                        label2 = "creating %s (%s %s %s %%(linkto)s)" % (
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   192
                            tschema, tschema, rschema, eschema)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   193
                    add_msg(w, label)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   194
                    add_msg(w, label2)
3858
ba96e4607e67 add XX reminder
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   195
            # XXX also generate "creating ...' messages for actions in the
ba96e4607e67 add XX reminder
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   196
            # addrelated submenu
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   197
    w('# subject and object forms for each relation type\n')
4467
0e73d299730a fix long-waiting symetric typo: should be spelled symmetric. Add auto database migration on schema deserialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4439
diff changeset
   198
    w('# (no object form for final or symmetric relation types)\n')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   199
    w('\n')
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   200
    for rschema in sorted(schema.relations()):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   201
        rtype = rschema.type
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   202
        if rtype not in libschema:
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   203
            # bw compat, necessary until all translation of relation are done properly...
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   204
            add_msg(w, rtype)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   205
            if rschema.description and rschema.description not in done:
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   206
                done.add(rschema.description)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   207
                add_msg(w, rschema.description)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   208
            done.add(rtype)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   209
            librschema = None
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   210
        else:
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   211
            librschema = libschema.rschema(rtype)
3281
bea1bde00fbc [i18n] do not add context information for metadata relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3280
diff changeset
   212
        # add context information only for non-metadata rtypes
3287
19c1011736a6 tweak catalog generation by adding a new SYSTEM_RTYPES set to schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3286
diff changeset
   213
        if rschema not in no_context_rtypes:
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   214
            libsubjects = librschema and librschema.subjects() or ()
3281
bea1bde00fbc [i18n] do not add context information for metadata relations
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3280
diff changeset
   215
            for subjschema in rschema.subjects():
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   216
                if not subjschema in libsubjects:
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   217
                    add_msg(w, rtype, subjschema.type)
4467
0e73d299730a fix long-waiting symetric typo: should be spelled symmetric. Add auto database migration on schema deserialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4439
diff changeset
   218
        if not (schema.rschema(rtype).final or rschema.symmetric):
3287
19c1011736a6 tweak catalog generation by adding a new SYSTEM_RTYPES set to schema
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3286
diff changeset
   219
            if rschema not in no_context_rtypes:
3285
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   220
                libobjects = librschema and librschema.objects() or ()
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   221
                for objschema in rschema.objects():
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   222
                    if not objschema in libobjects:
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   223
                        add_msg(w, '%s_object' % rtype, objschema.type)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   224
            if rtype not in libschema:
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   225
                # bw compat, necessary until all translation of relation are done properly...
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   226
                add_msg(w, '%s_object' % rtype)
fa3dc35b564f fix .po generation: ensure we get all msgids when building a cube catalog
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3281
diff changeset
   227
    for objid in _iter_vreg_objids(vreg, vregdone):
1470
fbdf66a08fbb don't add to cube i18n catalog msg id for components redefined from cw or from a depending cube
sylvain.thenault@logilab.fr
parents: 1451
diff changeset
   228
        add_msg(w, '%s_description' % objid)
fbdf66a08fbb don't add to cube i18n catalog msg id for components redefined from cw or from a depending cube
sylvain.thenault@logilab.fr
parents: 1451
diff changeset
   229
        add_msg(w, objid)
fbdf66a08fbb don't add to cube i18n catalog msg id for components redefined from cw or from a depending cube
sylvain.thenault@logilab.fr
parents: 1451
diff changeset
   230
3293
69c0ba095536 backport 3.5
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3230 3287
diff changeset
   231
4722
9c13d5db03d9 pylint suggested refactorings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4719
diff changeset
   232
def _iter_vreg_objids(vreg, done):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   233
    for reg, objdict in vreg.items():
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   234
        for objects in objdict.values():
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   235
            for obj in objects:
3677
acdba524bb8f fix i18ncube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3674
diff changeset
   236
                objid = '%s_%s' % (reg, obj.__regid__)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   237
                if objid in done:
1470
fbdf66a08fbb don't add to cube i18n catalog msg id for components redefined from cw or from a depending cube
sylvain.thenault@logilab.fr
parents: 1451
diff changeset
   238
                    break
3677
acdba524bb8f fix i18ncube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3674
diff changeset
   239
                try: # XXX < 3.6 bw compat
acdba524bb8f fix i18ncube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3674
diff changeset
   240
                    pdefs = obj.property_defs
acdba524bb8f fix i18ncube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3674
diff changeset
   241
                except AttributeError:
acdba524bb8f fix i18ncube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3674
diff changeset
   242
                    pdefs = getattr(obj, 'cw_property_defs', {})
acdba524bb8f fix i18ncube
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3674
diff changeset
   243
                if pdefs:
1470
fbdf66a08fbb don't add to cube i18n catalog msg id for components redefined from cw or from a depending cube
sylvain.thenault@logilab.fr
parents: 1451
diff changeset
   244
                    yield objid
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   245
                    done.add(objid)
1470
fbdf66a08fbb don't add to cube i18n catalog msg id for components redefined from cw or from a depending cube
sylvain.thenault@logilab.fr
parents: 1451
diff changeset
   246
                    break
374
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   247
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   248
155
9ed6db94a087 spanish is now a supported language
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 133
diff changeset
   249
LANGS = ('en', 'fr', 'es')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   250
I18NDIR = join(BASEDIR, 'i18n')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   251
DEFAULT_POT_HEAD = r'''msgid ""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   252
msgstr ""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   253
"Project-Id-Version: cubicweb %s\n"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   254
"PO-Revision-Date: 2008-03-28 18:14+0100\n"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   255
"Last-Translator: Logilab Team <contact@logilab.fr>\n"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   256
"Language-Team: fr <contact@logilab.fr>\n"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   257
"MIME-Version: 1.0\n"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   258
"Content-Type: text/plain; charset=UTF-8\n"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   259
"Content-Transfer-Encoding: 8bit\n"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   260
"Generated-By: cubicweb-devtools\n"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   261
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   262
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   263
''' % cubicwebversion
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   264
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   265
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   266
class UpdateCubicWebCatalogCommand(Command):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   267
    """Update i18n catalogs for cubicweb library.
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   268
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   269
    It will regenerate cubicweb/i18n/xx.po files. You'll have then to edit those
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   270
    files to add translations of newly added messages.
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   271
    """
1898
39b37f90a8a4 [cw-ctl] rename i18n commands (see #342889)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1850
diff changeset
   272
    name = 'i18ncubicweb'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   273
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   274
    def run(self, args):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   275
        """run the command with its specific arguments"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   276
        if args:
5608
f9ab62103ad4 proof read documentation
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5537
diff changeset
   277
            raise BadCommandUsage('Too many arguments')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   278
        import shutil
2446
440cb4ea7e5c [refactor] #342855: replace uses of (deprecated) mktemp
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   279
        import tempfile
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   280
        import yams
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   281
        from logilab.common.fileutils import ensure_fs_mode
58
c7c22b210372 only try to internationalize our own js files
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 57
diff changeset
   282
        from logilab.common.shellutils import globfind, find, rm
4718
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   283
        from logilab.common.modutils import get_module_files
4021
280c910c8710 move i18n / migration modules from cw.common to cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   284
        from cubicweb.i18n import extract_from_tal, execute
2692
bffb0e64736c [i18ncubicweb] fix stupid NameError with mkdtemp
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2657
diff changeset
   285
        tempdir = tempfile.mkdtemp()
2534
cda22bc0e6ef [i18n] #344832: rename entities.pot
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2528
diff changeset
   286
        potfiles = [join(I18NDIR, 'static-messages.pot')]
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   287
        print '-> extract schema messages.'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   288
        schemapot = join(tempdir, 'schema.pot')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   289
        potfiles.append(schemapot)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   290
        # explicit close necessary else the file may not be yet flushed when
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   291
        # we'll using it below
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   292
        schemapotstream = file(schemapot, 'w')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   293
        generate_schema_pot(schemapotstream.write, cubedir=None)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   294
        schemapotstream.close()
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   295
        print '-> extract TAL messages.'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   296
        tali18nfile = join(tempdir, 'tali18n.py')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   297
        extract_from_tal(find(join(BASEDIR, 'web'), ('.py', '.pt')), tali18nfile)
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   298
        print '-> generate .pot files.'
61
081078d5b422 rename one of the generated pot files (cubicweb pycubicweb.pot) to avoid problems when msgcats overwrites cubicweb.pot
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 60
diff changeset
   299
        for id, files, lang in [('pycubicweb', get_module_files(BASEDIR) + list(globfind(join(BASEDIR, 'misc', 'migration'), '*.py')), None),
58
c7c22b210372 only try to internationalize our own js files
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 57
diff changeset
   300
                                ('schemadescr', globfind(join(BASEDIR, 'schemas'), '*.py'), None),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   301
                                ('yams', get_module_files(yams.__path__[0]), None),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   302
                                ('tal', [tali18nfile], None),
58
c7c22b210372 only try to internationalize our own js files
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 57
diff changeset
   303
                                ('js', globfind(join(BASEDIR, 'web'), 'cub*.js'), 'java'),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   304
                                ]:
60
dc90556488d8 oops, bad changeset review, revert debug changes
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 58
diff changeset
   305
            cmd = 'xgettext --no-location --omit-header -k_ -o %s %s'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   306
            if lang is not None:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   307
                cmd += ' -L %s' % lang
1502
e25be3c82947 fix i18n catalog compilation
sylvain.thenault@logilab.fr
parents: 1470
diff changeset
   308
            potfile = join(tempdir, '%s.pot' % id)
3117
32686ae66c75 mostly adapt the i18n subsystem to limitation wrt redirection handinling in windows, using the -o argument of the utilities
Aurélien Campéas
parents: 2692
diff changeset
   309
            execute(cmd % (potfile, ' '.join('"%s"' % f for f in files)))
1502
e25be3c82947 fix i18n catalog compilation
sylvain.thenault@logilab.fr
parents: 1470
diff changeset
   310
            if exists(potfile):
e25be3c82947 fix i18n catalog compilation
sylvain.thenault@logilab.fr
parents: 1470
diff changeset
   311
                potfiles.append(potfile)
e25be3c82947 fix i18n catalog compilation
sylvain.thenault@logilab.fr
parents: 1470
diff changeset
   312
            else:
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   313
                print '-> WARNING: %s file was not generated' % potfile
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   314
        print '-> merging %i .pot files' % len(potfiles)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   315
        cubicwebpot = join(tempdir, 'cubicweb.pot')
3117
32686ae66c75 mostly adapt the i18n subsystem to limitation wrt redirection handinling in windows, using the -o argument of the utilities
Aurélien Campéas
parents: 2692
diff changeset
   316
        execute('msgcat -o %s %s' % (cubicwebpot, ' '.join('"%s"' % f for f in potfiles)))
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   317
        print '-> merging main pot file with existing translations.'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   318
        chdir(I18NDIR)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   319
        toedit = []
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   320
        for lang in LANGS:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   321
            target = '%s.po' % lang
3118
9e7a155bc4e5 more i18n commands fixes :
Aurélien Campéas
parents: 3117
diff changeset
   322
            execute('msgmerge -N --sort-output -o "%snew" "%s" "%s"' % (target, target, cubicwebpot))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   323
            ensure_fs_mode(target)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   324
            shutil.move('%snew' % target, target)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   325
            toedit.append(abspath(target))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   326
        # cleanup
60
dc90556488d8 oops, bad changeset review, revert debug changes
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 58
diff changeset
   327
        rm(tempdir)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   328
        # instructions pour la suite
2396
8bfb99d7bbcc [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2395
diff changeset
   329
        print '-> regenerated CubicWeb\'s .po catalogs.'
8bfb99d7bbcc [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2395
diff changeset
   330
        print '\nYou can now edit the following files:'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   331
        print '* ' + '\n* '.join(toedit)
2396
8bfb99d7bbcc [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2395
diff changeset
   332
        print 'when you are done, run "cubicweb-ctl i18ncube yourcube".'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   333
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   334
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   335
class UpdateTemplateCatalogCommand(Command):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   336
    """Update i18n catalogs for cubes. If no cube is specified, update
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   337
    catalogs of all registered cubes.
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   338
    """
1898
39b37f90a8a4 [cw-ctl] rename i18n commands (see #342889)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1850
diff changeset
   339
    name = 'i18ncube'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   340
    arguments = '[<cube>...]'
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   341
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   342
    def run(self, args):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   343
        """run the command with its specific arguments"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   344
        if args:
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   345
            cubes = [DevConfiguration.cube_dir(cube) for cube in args]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   346
        else:
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   347
            cubes = [DevConfiguration.cube_dir(cube)
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   348
                     for cube in DevConfiguration.available_cubes()]
1015
b5fdad9208f8 search for cubes in a list of directories
sylvain.thenault@logilab.fr
parents: 396
diff changeset
   349
            cubes = [cubepath for cubepath in cubes if exists(join(cubepath, 'i18n'))]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   350
        update_cubes_catalogs(cubes)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   351
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   352
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   353
def update_cubes_catalogs(cubes):
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   354
    for cubedir in cubes:
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   355
        if not isdir(cubedir):
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   356
            print '-> ignoring %s that is not a directory.' % cubedir
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   357
            continue
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   358
        try:
5537
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   359
            toedit = update_cube_catalogs(cubedir)
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   360
        except Exception:
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   361
            import traceback
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   362
            traceback.print_exc()
2527
e60db6312aa0 per cube message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2458
diff changeset
   363
            print '-> error while updating catalogs for cube', cubedir
e60db6312aa0 per cube message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2458
diff changeset
   364
        else:
e60db6312aa0 per cube message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2458
diff changeset
   365
            # instructions pour la suite
5537
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   366
            if toedit:
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   367
                print '-> regenerated .po catalogs for cube %s.' % cubedir
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   368
                print '\nYou can now edit the following files:'
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   369
                print '* ' + '\n* '.join(toedit)
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   370
                print ('When you are done, run "cubicweb-ctl i18ninstance '
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   371
                       '<yourinstance>" to see changes in your instances.')
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   372
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   373
def update_cube_catalogs(cubedir):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   374
    import shutil
2446
440cb4ea7e5c [refactor] #342855: replace uses of (deprecated) mktemp
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   375
    import tempfile
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   376
    from logilab.common.fileutils import ensure_fs_mode
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   377
    from logilab.common.shellutils import find, rm
4021
280c910c8710 move i18n / migration modules from cw.common to cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
   378
    from cubicweb.i18n import extract_from_tal, execute
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   379
    cube = basename(normpath(cubedir))
2446
440cb4ea7e5c [refactor] #342855: replace uses of (deprecated) mktemp
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   380
    tempdir = tempfile.mkdtemp()
2396
8bfb99d7bbcc [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2395
diff changeset
   381
    print underline_title('Updating i18n catalogs for cube %s' % cube)
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   382
    chdir(cubedir)
2551
91f579b7a1e1 [F bw compat] warn if entities.pot exists but consider it anyway
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2534
diff changeset
   383
    if exists(join('i18n', 'entities.pot')):
91f579b7a1e1 [F bw compat] warn if entities.pot exists but consider it anyway
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2534
diff changeset
   384
        warn('entities.pot is deprecated, rename file to static-messages.pot (%s)'
91f579b7a1e1 [F bw compat] warn if entities.pot exists but consider it anyway
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2534
diff changeset
   385
             % join('i18n', 'entities.pot'), DeprecationWarning)
91f579b7a1e1 [F bw compat] warn if entities.pot exists but consider it anyway
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2534
diff changeset
   386
        potfiles = [join('i18n', 'entities.pot')]
91f579b7a1e1 [F bw compat] warn if entities.pot exists but consider it anyway
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2534
diff changeset
   387
    elif exists(join('i18n', 'static-messages.pot')):
91f579b7a1e1 [F bw compat] warn if entities.pot exists but consider it anyway
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2534
diff changeset
   388
        potfiles = [join('i18n', 'static-messages.pot')]
91f579b7a1e1 [F bw compat] warn if entities.pot exists but consider it anyway
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2534
diff changeset
   389
    else:
91f579b7a1e1 [F bw compat] warn if entities.pot exists but consider it anyway
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2534
diff changeset
   390
        potfiles = []
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   391
    print '-> extract schema messages'
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   392
    schemapot = join(tempdir, 'schema.pot')
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   393
    potfiles.append(schemapot)
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   394
    # explicit close necessary else the file may not be yet flushed when
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   395
    # we'll using it below
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   396
    schemapotstream = file(schemapot, 'w')
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   397
    generate_schema_pot(schemapotstream.write, cubedir)
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   398
    schemapotstream.close()
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   399
    print '-> extract TAL messages'
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   400
    tali18nfile = join(tempdir, 'tali18n.py')
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   401
    extract_from_tal(find('.', ('.py', '.pt'), blacklist=STD_BLACKLIST+('test',)), tali18nfile)
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   402
    print '-> extract Javascript messages'
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   403
    jsfiles =  [jsfile for jsfile in find('.', '.js') if basename(jsfile).startswith('cub')]
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   404
    if jsfiles:
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   405
        tmppotfile = join(tempdir, 'js.pot')
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   406
        execute('xgettext --no-location --omit-header -k_ -L java --from-code=utf-8 -o %s %s'
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   407
                % (tmppotfile, ' '.join(jsfiles)))
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   408
        # no pot file created if there are no string to translate
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   409
        if exists(tmppotfile):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   410
            potfiles.append(tmppotfile)
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   411
    print '-> create cube-specific catalog'
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   412
    tmppotfile = join(tempdir, 'generated.pot')
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   413
    cubefiles = find('.', '.py', blacklist=STD_BLACKLIST+('test',))
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   414
    cubefiles.append(tali18nfile)
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   415
    execute('xgettext --no-location --omit-header -k_ -o %s %s'
3118
9e7a155bc4e5 more i18n commands fixes :
Aurélien Campéas
parents: 3117
diff changeset
   416
            % (tmppotfile, ' '.join('"%s"' % f for f in cubefiles)))
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   417
    if exists(tmppotfile): # doesn't exists of no translation string found
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   418
        potfiles.append(tmppotfile)
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   419
    potfile = join(tempdir, 'cube.pot')
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   420
    print '-> merging %i .pot files:' % len(potfiles)
3117
32686ae66c75 mostly adapt the i18n subsystem to limitation wrt redirection handinling in windows, using the -o argument of the utilities
Aurélien Campéas
parents: 2692
diff changeset
   421
    execute('msgcat -o %s %s' % (potfile,
32686ae66c75 mostly adapt the i18n subsystem to limitation wrt redirection handinling in windows, using the -o argument of the utilities
Aurélien Campéas
parents: 2692
diff changeset
   422
                                 ' '.join('"%s"' % f for f in potfiles)))
5537
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   423
    if not exists(potfile):
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   424
        print 'no message catalog for cube', cube, 'nothing to translate'
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   425
        # cleanup
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   426
        rm(tempdir)
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   427
        return ()
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   428
    print '-> merging main pot file with existing translations:'
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   429
    chdir('i18n')
5537
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   430
    toedit = []
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   431
    for lang in LANGS:
2395
e3093fc12a00 [cw-ctl] improve dialog messages
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2092
diff changeset
   432
        print '-> language', lang
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   433
        cubepo = '%s.po' % lang
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   434
        if not exists(cubepo):
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   435
            shutil.copy(potfile, cubepo)
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   436
        else:
3118
9e7a155bc4e5 more i18n commands fixes :
Aurélien Campéas
parents: 3117
diff changeset
   437
            execute('msgmerge -N -s -o %snew %s %s' % (cubepo, cubepo, potfile))
1770
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   438
            ensure_fs_mode(cubepo)
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   439
            shutil.move('%snew' % cubepo, cubepo)
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   440
        toedit.append(abspath(cubepo))
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   441
    # cleanup
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   442
    rm(tempdir)
8bd788149f85 refactor and don't crash on error while generating a cube's catalogs
sylvain.thenault@logilab.fr
parents: 1769
diff changeset
   443
    return toedit
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   444
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   445
4439
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   446
# XXX totally broken, fix it
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   447
# class LiveServerCommand(Command):
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   448
#     """Run a server from within a cube directory.
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   449
#     """
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   450
#     name = 'live-server'
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   451
#     arguments = ''
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   452
#     options = ()
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   453
4439
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   454
#     def run(self, args):
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   455
#         """run the command with its specific arguments"""
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   456
#         from cubicweb.devtools.livetest import runserver
5ab3f63b06ad live-server doesn't work, don't make think it does
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4434
diff changeset
   457
#         runserver()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   458
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   459
132
561671b87c22 rename NewTemplateCommand class into NewCubeCommand
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 61
diff changeset
   460
class NewCubeCommand(Command):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   461
    """Create a new cube.
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   462
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   463
    <cubename>
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   464
      the name of the new cube. It should be a valid python module name.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   465
    """
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   466
    name = 'newcube'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   467
    arguments = '<cubename>'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   468
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   469
    options = (
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   470
        ("layout",
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   471
         {'short': 'L', 'type' : 'choice', 'metavar': '<cube layout>',
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   472
          'default': 'simple', 'choices': ('simple', 'full'),
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   473
          'help': 'cube layout. You\'ll get a minimal cube with the "simple" \
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   474
layout, and a full featured cube with "full" layout.',
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   475
          }
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   476
         ),
1106
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   477
        ("directory",
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   478
         {'short': 'd', 'type' : 'string', 'metavar': '<cubes directory>',
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   479
          'help': 'directory where the new cube should be created',
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   480
          }
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   481
         ),
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   482
        ("verbose",
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   483
         {'short': 'v', 'type' : 'yn', 'metavar': '<verbose>',
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   484
          'default': 'n',
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   485
          'help': 'verbose mode: will ask all possible configuration questions',
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   486
          }
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   487
         ),
365
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   488
        ("author",
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   489
         {'short': 'a', 'type' : 'string', 'metavar': '<author>',
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   490
          'default': 'LOGILAB S.A. (Paris, FRANCE)',
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   491
          'help': 'cube author',
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   492
          }
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   493
         ),
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   494
        ("author-email",
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   495
         {'short': 'e', 'type' : 'string', 'metavar': '<email>',
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   496
          'default': 'contact@logilab.fr',
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   497
          'help': 'cube author\'s email',
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   498
          }
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   499
         ),
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   500
        ("author-web-site",
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   501
         {'short': 'w', 'type' : 'string', 'metavar': '<web site>',
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   502
          'default': 'http://www.logilab.fr',
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   503
          'help': 'cube author\'s web site',
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   504
          }
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   505
         ),
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   506
        ("license",
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   507
         {'short': 'l', 'type' : 'choice', 'metavar': '<license>',
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   508
          'default': 'LGPL', 'choices': ('GPL', 'LGPL', ''),
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   509
          'help': 'cube license',
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   510
          }
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   511
         ),
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   512
        )
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   513
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   514
    LICENSES = {
5423
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   515
        'LGPL': '''\
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   516
# This program is free software: you can redistribute it and/or modify it under
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   517
# the terms of the GNU Lesser General Public License as published by the Free
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   518
# Software Foundation, either version 2.1 of the License, or (at your option)
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   519
# any later version.
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   520
#
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   521
# This program is distributed in the hope that it will be useful, but WITHOUT
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   522
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   523
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   524
# details.
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   525
#
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   526
# You should have received a copy of the GNU Lesser General Public License along
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   527
# with this program. If not, see <http://www.gnu.org/licenses/>.
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   528
''',
5537
2889091bd1bf [i18ncube] do not crash if cube has nothing to translate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5534
diff changeset
   529
5423
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   530
        'GPL': '''\
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   531
# This program is free software: you can redistribute it and/or modify it under
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   532
# the terms of the GNU General Public License as published by the Free Software
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   533
# Foundation, either version 2.1 of the License, or (at your option) any later
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   534
# version.
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   535
#
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   536
# This program is distributed in the hope that it will be useful, but WITHOUT
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   537
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   538
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   539
#
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   540
# You should have received a copy of the GNU General Public License along with
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   541
# this program. If not, see <http://www.gnu.org/licenses/>.
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   542
''',
e15abfdcce38 backport default into stable: stable is now cw 3.8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5385 5421
diff changeset
   543
        '': '# INSERT LICENSE HERE'
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   544
        }
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   545
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   546
    def run(self, args):
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   547
        import re
4718
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   548
        from logilab.common.shellutils import ASK
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   549
        if len(args) != 1:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   550
            raise BadCommandUsage("exactly one argument (cube name) is expected")
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   551
        cubename = args[0]
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   552
        if not re.match('[_A-Za-z][_A-Za-z0-9]*$', cubename):
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   553
            raise BadCommandUsage("cube name should be a valid python module name")
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   554
        verbose = self.get('verbose')
1106
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   555
        cubesdir = self.get('directory')
1116
163e6a65d488 fix dumb name error, should call cubes_search_path, not cubes_path
sylvain.thenault@logilab.fr
parents: 1106
diff changeset
   556
        if not cubesdir:
163e6a65d488 fix dumb name error, should call cubes_search_path, not cubes_path
sylvain.thenault@logilab.fr
parents: 1106
diff changeset
   557
            cubespath = ServerConfiguration.cubes_search_path()
1106
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   558
            if len(cubespath) > 1:
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   559
                raise BadCommandUsage("can't guess directory where to put the new cube."
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   560
                                      " Please specify it using the --directory option")
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   561
            cubesdir = cubespath[0]
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   562
        if not isdir(cubesdir):
2615
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   563
            print "-> creating cubes directory", cubesdir
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   564
            try:
1106
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   565
                mkdir(cubesdir)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   566
            except OSError, err:
1116
163e6a65d488 fix dumb name error, should call cubes_search_path, not cubes_path
sylvain.thenault@logilab.fr
parents: 1106
diff changeset
   567
                self.fail("failed to create directory %r\n(%s)" % (cubesdir, err))
1106
de873146183a fix newcube command to deal with cubes path
sylvain.thenault@logilab.fr
parents: 1105
diff changeset
   568
        cubedir = join(cubesdir, cubename)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   569
        if exists(cubedir):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   570
            self.fail("%s already exists !" % (cubedir))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   571
        skeldir = join(BASEDIR, 'skeleton')
5297
cc747dcef851 [c-c newcube] finish #676915: cubicweb-ctl newcube must be aware of python modules and debian package convention (python part already implemented)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5184
diff changeset
   572
        default_name = 'cubicweb-%s' % cubename.lower().replace('_', '-')
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   573
        if verbose:
2615
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   574
            distname = raw_input('Debian name for your cube ? [%s]): ' % default_name).strip()
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   575
            if not distname:
2615
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   576
                distname = default_name
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   577
            elif not distname.startswith('cubicweb-'):
2615
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   578
                if ASK.confirm('Do you mean cubicweb-%s ?' % distname):
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   579
                    distname = 'cubicweb-' + distname
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   580
        else:
2615
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   581
            distname = default_name
5297
cc747dcef851 [c-c newcube] finish #676915: cubicweb-ctl newcube must be aware of python modules and debian package convention (python part already implemented)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5184
diff changeset
   582
        if not re.match('[a-z][-a-z0-9]*$', distname):
cc747dcef851 [c-c newcube] finish #676915: cubicweb-ctl newcube must be aware of python modules and debian package convention (python part already implemented)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5184
diff changeset
   583
            raise BadCommandUsage("cube distname should be a valid debian package name")
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   584
        longdesc = shortdesc = raw_input('Enter a short description for your cube: ')
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   585
        if verbose:
2615
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   586
            longdesc = raw_input('Enter a long description (leave empty to reuse the short one): ')
5347
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   587
        dependencies = {'cubicweb': '>= %s' % cubicwebversion}
133
6ad5e7eb06ff provide a --verbose option to the newcube command and only ask for a short description by default
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 132
diff changeset
   588
        if verbose:
5347
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   589
            dependencies.update(self._ask_for_dependencies())
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   590
        context = {'cubename' : cubename,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   591
                   'distname' : distname,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   592
                   'shortdesc' : shortdesc,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   593
                   'longdesc' : longdesc or shortdesc,
5347
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   594
                   'dependencies' : dependencies,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   595
                   'version'  : cubicwebversion,
1016
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 396
diff changeset
   596
                   'year'  : str(datetime.now().year),
365
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   597
                   'author': self['author'],
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   598
                   'author-email': self['author-email'],
5d8336b70aa7 make author information configurable
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 264
diff changeset
   599
                   'author-web-site': self['author-web-site'],
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   600
                   'license': self['license'],
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   601
                   'long-license': self.LICENSES[self['license']],
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   602
                   }
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   603
        exclude = SKEL_EXCLUDE
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   604
        if self['layout'] == 'simple':
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   605
            exclude += ('sobjects.py*', 'precreate.py*', 'realdb_test*',
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5442
diff changeset
   606
                        'cubes.*', 'uiprops.py*')
5184
955ee1b24756 [c-c newcube] #1192: simpler cubicweb-ctl newcube, and more
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4722
diff changeset
   607
        copy_skeleton(skeldir, cubedir, context, exclude=exclude)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   608
5344
ed4cd1ca96d6 [skeleton/dependencies] fix typo & new cube generation from template
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 4722
diff changeset
   609
    def _ask_for_dependencies(self):
4718
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   610
        from logilab.common.shellutils import ASK
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   611
        from logilab.common.textutils import splitstrip
5347
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   612
        depcubes = []
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   613
        for cube in ServerConfiguration.available_cubes():
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   614
            answer = ASK.ask("Depends on cube %s? " % cube,
2615
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   615
                             ('N','y','skip','type'), 'N')
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   616
            if answer == 'y':
5347
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   617
                depcubes.append(cube)
2615
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   618
            if answer == 'type':
5347
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   619
                depcubes = splitstrip(raw_input('type dependencies: '))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   620
                break
2615
1ea41b7c0836 F [dialog] offer to create backup. refactor to use l.c.shellutils.ASK
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2551
diff changeset
   621
            elif answer == 'skip':
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   622
                break
5347
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   623
        return dict(('cubicweb-' + cube, ServerConfiguration.cube_version(cube))
8ebed973819b merge stable, fixing dependencies generation on c-c newcube on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5297 5344
diff changeset
   624
                    for cube in depcubes)
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   625
374
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   626
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   627
class ExamineLogCommand(Command):
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   628
    """Examine a rql log file.
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   629
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   630
    will print out the following table
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   631
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   632
      total execution time || number of occurences || rql query
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   633
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   634
    sorted by descending total execution time
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   635
4708
2bd3d03721f3 #687194: cubicweb-ctl exlog : fix help message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4479
diff changeset
   636
    chances are the lines at the top are the ones that will bring the higher
2bd3d03721f3 #687194: cubicweb-ctl exlog : fix help message
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4479
diff changeset
   637
    benefit after optimisation. Start there.
374
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   638
    """
5375
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   639
    arguments = 'rql.log'
374
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   640
    name = 'exlog'
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   641
    options = (
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   642
        )
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   643
374
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   644
    def run(self, args):
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   645
        import re
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   646
        requests = {}
5375
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   647
        for filepath in args:
1188
6937dfb242fb [devtools] ExamineLog command does not fail on strange input and outputs to csv
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1116
diff changeset
   648
            try:
5375
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   649
                stream = file(filepath)
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   650
            except OSError, ex:
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   651
                raise BadCommandUsage("can't open rql log file %s: %s"
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   652
                                      % (filepath, ex))
5755
ca9e1c9123d7 [c-c exlog] fix code and documentation
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5608
diff changeset
   653
            for lineno, line in enumerate(stream):
5375
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   654
                if not ' WHERE ' in line:
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   655
                    continue
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   656
                try:
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   657
                    rql, time = line.split('--')
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   658
                    rql = re.sub("(\'\w+': \d*)", '', rql)
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   659
                    if '{' in rql:
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   660
                        rql = rql[:rql.index('{')]
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   661
                    req = requests.setdefault(rql, [])
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   662
                    time.strip()
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   663
                    chunks = time.split()
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   664
                    clocktime = float(chunks[0][1:])
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   665
                    cputime = float(chunks[-3])
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   666
                    req.append( (clocktime, cputime) )
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   667
                except Exception, exc:
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   668
                    sys.stderr.write('Line %s: %s (%s)\n' % (lineno, exc, line))
374
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   669
        stat = []
5375
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   670
        for rql, times in requests.iteritems():
2092
f5102472243d [exlog] print clocktime in addition to cputime
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1977
diff changeset
   671
            stat.append( (sum(time[0] for time in times),
f5102472243d [exlog] print clocktime in addition to cputime
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1977
diff changeset
   672
                          sum(time[1] for time in times),
f5102472243d [exlog] print clocktime in addition to cputime
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1977
diff changeset
   673
                          len(times), rql) )
374
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   674
        stat.sort()
89225b187eb8 turn exlog into a cw-ctl command
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 373
diff changeset
   675
        stat.reverse()
5375
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   676
        total_time = sum(clocktime for clocktime, cputime, occ, rql in stat) * 0.01
2092
f5102472243d [exlog] print clocktime in addition to cputime
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1977
diff changeset
   677
        print 'Percentage;Cumulative Time (clock);Cumulative Time (CPU);Occurences;Query'
f5102472243d [exlog] print clocktime in addition to cputime
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1977
diff changeset
   678
        for clocktime, cputime, occ, rql in stat:
5375
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   679
            print '%.2f;%.2f;%.2f;%s;%s' % (clocktime/total_time, clocktime,
962e13ab0930 [c-c exlog] #687204: cubicweb-ctl exlog: use a proper file and not stdin for input
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5344
diff changeset
   680
                                            cputime, occ, rql)
1451
982e8616d9a2 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1415
diff changeset
   681
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   682
4428
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   683
class GenerateSchema(Command):
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   684
    """Generate schema image for the given cube"""
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   685
    name = "schema"
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   686
    arguments = '<cube>'
6138
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   687
    min_args = max_args = 1
4428
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   688
    options = [('output-file', {'type':'file', 'default': None,
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   689
                 'metavar': '<file>', 'short':'o', 'help':'output image file',
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   690
                 'input':False}),
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   691
               ('viewer', {'type': 'string', 'default':None,
4434
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   692
                'short': "d", 'metavar':'<cmd>',
4428
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   693
                 'help':'command use to view the generated file (empty for none)'}
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   694
               ),
4434
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   695
               ('show-meta', {'action': 'store_true', 'default':False,
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   696
                'short': "m", 'metavar': "<yN>",
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   697
                 'help':'include meta and internal entities in schema'}
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   698
               ),
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   699
               ('show-workflow', {'action': 'store_true', 'default':False,
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   700
                'short': "w", 'metavar': "<yN>",
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   701
                'help':'include workflow entities in schema'}
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   702
               ),
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   703
               ('show-cw-user', {'action': 'store_true', 'default':False,
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   704
                'metavar': "<yN>",
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   705
                'help':'include cubicweb user entities in schema'}
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   706
               ),
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   707
               ('exclude-type', {'type':'string', 'default':'',
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   708
                'short': "x", 'metavar': "<types>",
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   709
                 'help':'coma separated list of entity types to remove from view'}
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   710
               ),
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   711
               ('include-type', {'type':'string', 'default':'',
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   712
                'short': "i", 'metavar': "<types>",
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   713
                 'help':'coma separated list of entity types to include in view'}
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   714
               ),
4428
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   715
              ]
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   716
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   717
    def run(self, args):
4718
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   718
        from subprocess import Popen
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   719
        from tempfile import NamedTemporaryFile
4428
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   720
        from logilab.common.textutils import splitstrip
4718
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   721
        from yams import schema2dot, BASE_TYPES
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   722
        from cubicweb.schema import (META_RTYPES, SCHEMA_TYPES, SYSTEM_RTYPES,
3dc3ad02d091 avoid module import in c-c plugins module, and remind it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4708
diff changeset
   723
                                     WORKFLOW_TYPES, INTERNAL_TYPES)
6138
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   724
        cubes = splitstrip(args[0])
4479
f25e61a93c42 replace DevCubeConfiguration/DevDepsConfiguration by a single DevConfiguration, fixing recently introduced by w/ i18ncube command on the way
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   725
        dev_conf = DevConfiguration(*cubes)
4428
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   726
        schema = dev_conf.load_schema()
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   727
        out, viewer = self['output-file'], self['viewer']
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   728
        if out is None:
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   729
            tmp_file = NamedTemporaryFile(suffix=".svg")
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   730
            out = tmp_file.name
4434
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   731
        skiptypes = BASE_TYPES | SCHEMA_TYPES
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   732
        if not self['show-meta']:
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   733
            skiptypes |=  META_RTYPES | SYSTEM_RTYPES | INTERNAL_TYPES
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   734
        if not self['show-workflow']:
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   735
            skiptypes |= WORKFLOW_TYPES
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   736
        if not self['show-cw-user']:
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   737
            skiptypes |= set(('CWUser', 'CWGroup', 'EmailAddress'))
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   738
        skiptypes |= set(self['exclude-type'].split(','))
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   739
        skiptypes -= set(self['include-type'].split(','))
101344a6ff9b Improve the schema command with filtering option.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4428
diff changeset
   740
        schema2dot.schema2dot(schema, out, skiptypes=skiptypes)
4428
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   741
        if viewer:
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   742
            p = Popen((viewer, out))
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   743
            p.wait()
03614b377ecd Add a ``schema`` command to cmd ctrl to generate schema image.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 4400
diff changeset
   744
5775
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   745
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   746
class GenerateQUnitHTML(Command):
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   747
    """Generate a QUnit html file to see test in your browser"""
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   748
    name = "qunit-html"
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   749
    arguments = '<test file> [<dependancy js file>...]'
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   750
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   751
    def run(self, args):
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   752
        from cubicweb.devtools.qunit import make_qunit_html
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   753
        print make_qunit_html(args[0], args[1:])
34195230dc2a [packaging] more cleanups, handle javascript test files
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5762
diff changeset
   754
6138
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   755
for cmdcls in (UpdateCubicWebCatalogCommand,
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   756
               UpdateTemplateCatalogCommand,
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   757
               #LiveServerCommand,
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   758
               NewCubeCommand,
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   759
               ExamineLogCommand,
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   760
               GenerateSchema,
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   761
               GenerateQUnitHTML,
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   762
               ):
65f5e488f983 update to lgc.clcommands 0.51 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5775
diff changeset
   763
    CWCTL.register(cmdcls)