setup.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Thu, 21 Mar 2019 14:33:54 +0100
changeset 12530 9d88e1177c35
parent 12357 e385c9732f1e
child 12567 26744ad37953
permissions -rw-r--r--
Remove Twisted web server Twisted web server is not used anymore and has been superseded by pyramid many years ago. Furthermore, our usage is not compatible with Python 3. So we drop the "etwist" sub-package. As a consequence, "all-in-one" configuration type gets dropped as it was Twisted-specific. We resurrect it in cubicweb/pyramid/config.py by only keeping options used by the "pyramid". Similarly, we introduce a AllInOneCreateHandler in cubicweb/pyramid/pyramidctl.py that is basically the one that lived in cubicweb/etwist/twctl.py and is used to create the "all-in-one" instance. Added a TODO here about "pyramid.ini" that could be generated at the end of bootstrap() method. In cubicweb/devtools/httptest.py, CubicWebServerTC is now equivalent to CubicWebWsgiTC and the latter is dropped.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     1
#!/usr/bin/env python
6491
ee9a10b6620e pylint option update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6327
diff changeset
     2
# pylint: disable=W0142,W0403,W0404,W0613,W0622,W0622,W0704,R0904,C0103,E0611
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     3
#
7879
9aae456abab5 [pylint] fix pylint detected errors and tweak it so that pylint -E will be much less verbose next time (+ update some copyrights on the way)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6836
diff changeset
     4
# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4721
diff changeset
     5
# 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: 4721
diff changeset
     6
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4721
diff changeset
     7
# 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: 4721
diff changeset
     8
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4721
diff changeset
     9
# 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: 4721
diff changeset
    10
# 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: 4721
diff changeset
    11
# 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: 4721
diff changeset
    12
# any later version.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    13
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    14
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    15
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4721
diff changeset
    16
# 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: 4721
diff changeset
    17
# details.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
#
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4721
diff changeset
    19
# 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: 4721
diff changeset
    20
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4721
diff changeset
    21
"""Generic Setup script, takes package info from __pkginfo__.py file
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4721
diff changeset
    22
"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
11276
6eeb7abda47a [pkg] Use io.open with utf-8 encoding to read long description from README
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    24
import io
12257
39cd3c7eb2e8 [pkg] Use setuptools.find_packages()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12256
diff changeset
    25
from os.path import dirname, join
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
12257
39cd3c7eb2e8 [pkg] Use setuptools.find_packages()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12256
diff changeset
    27
from setuptools import setup, find_packages
12255
08628d6d57ee [pkg] Drop custom "install_data" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12254
diff changeset
    28
5024
9e718abe3fde add egg support with dependencies auto-installation
Alain Leufroy <alain.leufroy@logilab.fr>
parents: 4721
diff changeset
    29
11057
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    30
here = dirname(__file__)
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    31
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
# import required features
11057
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    33
pkginfo = join(here, 'cubicweb', '__pkginfo__.py')
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    34
__pkginfo__ = {}
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    35
with open(pkginfo) as f:
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    36
    exec(f.read(), __pkginfo__)
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    37
modname = __pkginfo__['modname']
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    38
version = __pkginfo__['version']
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    39
license = __pkginfo__['license']
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    40
description = __pkginfo__['description']
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    41
web = __pkginfo__['web']
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    42
author = __pkginfo__['author']
0b59724cb3f2 Reorganize source tree to have a "cubicweb" top-level package
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10662
diff changeset
    43
author_email = __pkginfo__['author_email']
5024
9e718abe3fde add egg support with dependencies auto-installation
Alain Leufroy <alain.leufroy@logilab.fr>
parents: 4721
diff changeset
    44
11276
6eeb7abda47a [pkg] Use io.open with utf-8 encoding to read long description from README
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    45
with io.open('README', encoding='utf-8') as f:
6eeb7abda47a [pkg] Use io.open with utf-8 encoding to read long description from README
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    46
    long_description = f.read()
5024
9e718abe3fde add egg support with dependencies auto-installation
Alain Leufroy <alain.leufroy@logilab.fr>
parents: 4721
diff changeset
    47
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    48
# import optional features
11449
ea5299828d68 [pkg] Make it clearer which entries of __pkginfo__ are actually used
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11426
diff changeset
    49
distname = __pkginfo__['distname']
ea5299828d68 [pkg] Make it clearer which entries of __pkginfo__ are actually used
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11426
diff changeset
    50
package_data = __pkginfo__['package_data']
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
11467
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    53
setup(
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    54
    name=distname,
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    55
    version=version,
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    56
    license=license,
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    57
    url=web,
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    58
    description=description,
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    59
    long_description=long_description,
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    60
    author=author,
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    61
    author_email=author_email,
12257
39cd3c7eb2e8 [pkg] Use setuptools.find_packages()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12256
diff changeset
    62
    packages=find_packages(),
11467
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
    63
    package_data=package_data,
12252
64c4edac1706 [pkg] Drop custom install_lib command and use include_package_data instead
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12193
diff changeset
    64
    include_package_data=True,
11685
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    65
    install_requires=[
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    66
        'six >= 1.4.0',
12069
82f7d583e5a3 [pkg] Depends on logilab-common >= 1.4.0
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11987
diff changeset
    67
        'logilab-common >= 1.4.0',
11685
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    68
        'logilab-mtconverter >= 0.8.0',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    69
        'rql >= 0.34.0',
12070
a44f67dd0474 [pkg] Depends on yams >= 0.45.0
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12069
diff changeset
    70
        'yams >= 0.45.0',
11685
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    71
        'lxml',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    72
        'logilab-database >= 1.15.0',
12193
e4ee04d442be [server/utils] update passlib API to 1.7 (closes #17054805)
David Douard <david.douard@logilab.fr>
parents: 12073
diff changeset
    73
        'passlib',
11685
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    74
        'pytz',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    75
        'Markdown',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    76
        'unittest2 >= 0.7.0',
12357
e385c9732f1e Make test database template creation concurrent
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 12272
diff changeset
    77
        'filelock',
11685
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    78
    ],
11968
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11929
diff changeset
    79
    entry_points={
12254
2060ee44ea9a [pkg] Replace custom "scripts" handling by a setuptools entry points
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12252
diff changeset
    80
        'console_scripts': [
2060ee44ea9a [pkg] Replace custom "scripts" handling by a setuptools entry points
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12252
diff changeset
    81
            'cubicweb-ctl = cubicweb.cwctl:run',
2060ee44ea9a [pkg] Replace custom "scripts" handling by a setuptools entry points
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12252
diff changeset
    82
        ],
11968
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11929
diff changeset
    83
        'paste.app_factory': [
12073
339b26bf17d2 [pyramid] Rename paste app factory to pyramid_main
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12070
diff changeset
    84
            'pyramid_main=cubicweb.pyramid:pyramid_app',
11968
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11929
diff changeset
    85
        ],
bb0dfc7d2d0e [skeleton,pyramid] Move pyramid app definition in cubicweb.pyramid module
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11929
diff changeset
    86
    },
11805
7436b65a44bc [pkg] Fix extra packages not installable
Florent Cayré <florent.cayre@gmail.com>
parents: 11752
diff changeset
    87
    extras_require={
11685
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    88
        'captcha': [
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    89
            'Pillow',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    90
        ],
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    91
        'crypto': [
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    92
            'pycrypto',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    93
        ],
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    94
        'ext': [
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    95
            'docutils >= 0.6',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    96
        ],
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    97
        'ical': [
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    98
            'vobject >= 0.6.0',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
    99
        ],
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   100
        'pyramid': [
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   101
            'pyramid >= 1.5.0',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   102
            'waitress >= 0.8.9',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   103
            'wsgicors >= 0.3',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   104
            'pyramid_multiauth',
11987
d432911e3c26 [pyramid] Drop module-level cache and cleanup looping tasks in tools
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11968
diff changeset
   105
            'repoze.lru',
11685
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   106
        ],
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   107
        'rdf': [
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   108
            'rdflib',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   109
        ],
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   110
        'sparql': [
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   111
            'fyzz >= 0.1.0',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   112
        ],
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   113
        'zmq': [
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   114
            'pyzmq',
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   115
        ],
6c263b8091d3 [pkg] Declare extras (optional) dependencies
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11467
diff changeset
   116
    },
11467
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
   117
    zip_safe=False,
629d9e35ce28 [pkg] Inline call to setup() in setup.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11466
diff changeset
   118
)