cubicweb/etwist/twconfig.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Mon, 08 Apr 2019 11:24:53 +0200
branch3.26
changeset 12586 afafc8fd9a45
parent 12376 890853079ce3
child 12527 bcb895aa2684
permissions -rw-r--r--
Account for new psycopg2 exception classes mapping From psycopg2 >= 2.8, specific exceptions are raised corresponding to postgresql errors. E.g. a CheckViolation exception is raised instead of a generic IntegrityError previously when a constraint violation occurs. The way we intercept database errors, especially for constraint violation, is not compliant with that because we do not catch subclasses of IntegrityError in native source's doexec() method. We fix this by checking for the presence of IntegrityError error in exception class's mro. This is still overcomplicated and clumsy, because we still use string comparison, but this is the best we can do as far as I know. (A better fix would be 'isinstance(ex, IntegrityError)' but we have no engine-independent error classes, so this is not possible. Something like sqlalchemy's DBAPI Errors [1] might help: https://docs.sqlalchemy.org/en/latest/errors.html#dbapi-errors)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10235
684215aca046 Remove remote repository-access-through-pyro support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9252
diff changeset
     1
# copyright 2003-2014 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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
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: 5326
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
"""twisted server configurations:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    20
* the "all-in-one" configuration to get a web instance running in a twisted
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
  web server integrating a repository server in the same process (only available
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
  if the repository part of the software is installed
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
"""
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11739
diff changeset
    24
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
from os.path import join
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    27
8989
8742f4bf029f import merge_options directly from logilab.common
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8828
diff changeset
    28
from logilab.common.configuration import Method, merge_options
4719
aaed3f813ef8 kill dead/useless code as suggested by pylint
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    29
6844
5ae2bc554c23 [config] stop using a metaclass for registration of "public" configuration, simply do it explicitly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6829
diff changeset
    30
from cubicweb.cwconfig import CONFIGURATIONS
11989
309cf6a2c24f [etwist] Drop try/except around definitions of 'all-in-one' configuration and command handlers
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
    31
from cubicweb.server.serverconfig import ServerConfiguration
8989
8742f4bf029f import merge_options directly from logilab.common
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 8828
diff changeset
    32
from cubicweb.web.webconfig import WebConfiguration
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
6844
5ae2bc554c23 [config] stop using a metaclass for registration of "public" configuration, simply do it explicitly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6829
diff changeset
    34
9252
01bca75ee8bd [devtools,etwist] rename TwistedConfiguration to WebConfigurationBase (follows #2919310)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9251
diff changeset
    35
class WebConfigurationBase(WebConfiguration):
2476
1294a6bdf3bf application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    36
    """web instance (in a twisted web server) client of a RQL server"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
    options = merge_options((
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
        # ctl configuration
5554
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    40
        ('port',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    41
         {'type' : 'int',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    42
          'default': None,
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    43
          'help': 'http server port number (default to 8080)',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    44
          'group': 'web', 'level': 0,
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    45
          }),
6817
1959d97ebf2e [etwist] add an 'interface' config option (passed to reactor.listenTCP)
david.douard@logilab.fr
parents: 6012
diff changeset
    46
        ('interface',
1959d97ebf2e [etwist] add an 'interface' config option (passed to reactor.listenTCP)
david.douard@logilab.fr
parents: 6012
diff changeset
    47
         {'type' : 'string',
11739
bc864c80ec36 [twconfig] Set default value for "interface" to 0.0.0.0
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    48
          'default': '0.0.0.0',
6817
1959d97ebf2e [etwist] add an 'interface' config option (passed to reactor.listenTCP)
david.douard@logilab.fr
parents: 6012
diff changeset
    49
          'help': 'http server address on which to listen (default to everywhere)',
6829
43d70b3fdcb5 [c-c create] don't ask for web server interface at level 0
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6817
diff changeset
    50
          'group': 'web', 'level': 1,
6817
1959d97ebf2e [etwist] add an 'interface' config option (passed to reactor.listenTCP)
david.douard@logilab.fr
parents: 6012
diff changeset
    51
          }),
5554
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    52
        ('max-post-length',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    53
         {'type' : 'bytes',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    54
          'default': '100MB',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    55
          'help': 'maximum length of HTTP request. Default to 100 MB.',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    56
          'group': 'web', 'level': 1,
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    57
          }),
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    58
        ('profile',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    59
         {'type' : 'string',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    60
          'default': None,
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    61
          'help': 'profile code and use the specified file to store stats if this option is set',
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    62
          'group': 'web', 'level': 3,
9b7bdbfee68b [config] move web specific config to the web section of the configuration file
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5456
diff changeset
    63
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
        ('host',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
          'default': None,
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
          'help': 'host name if not correctly detectable through gethostname',
5323
329b4f6d18b4 [config] with lgc >= 0.50, option's dict inputlevel becomes level
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5270
diff changeset
    68
          'group': 'main', 'level': 1,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
        ('pid-file',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    72
          'default': Method('default_pid_file'),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
          'help': 'repository\'s pid file',
5323
329b4f6d18b4 [config] with lgc >= 0.50, option's dict inputlevel becomes level
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5270
diff changeset
    74
          'group': 'main', 'level': 2,
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    75
          }),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
        ('uid',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    77
         {'type' : 'string',
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    78
          'default': None,
12376
890853079ce3 [cubicweb-ctl] make uid option obvious
Laurent Peuch <cortex@worlddomination.be>
parents: 11989
diff changeset
    79
          'help': 'unix user, if this option is set, use the specified user to start \
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
the repository rather than the user running the command',
5323
329b4f6d18b4 [config] with lgc >= 0.50, option's dict inputlevel becomes level
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5270
diff changeset
    81
          'group': 'main', 'level': WebConfiguration.mode == 'system'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    82
          }),
7644
7a0914469618 [twisted] add an option to configure twisted's threadpool size
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6844
diff changeset
    83
        ('webserver-threadpool-size',
7a0914469618 [twisted] add an option to configure twisted's threadpool size
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6844
diff changeset
    84
         {'type': 'int',
7a0914469618 [twisted] add an option to configure twisted's threadpool size
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6844
diff changeset
    85
          'default': 4,
7a0914469618 [twisted] add an option to configure twisted's threadpool size
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6844
diff changeset
    86
          'help': "size of twisted's reactor threadpool. It should probably be not too \
7a0914469618 [twisted] add an option to configure twisted's threadpool size
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6844
diff changeset
    87
much greater than connection-poolsize",
7a0914469618 [twisted] add an option to configure twisted's threadpool size
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6844
diff changeset
    88
          'group': 'web', 'level': 3,
7a0914469618 [twisted] add an option to configure twisted's threadpool size
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 6844
diff changeset
    89
          }),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    90
        ) + WebConfiguration.options)
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 136
diff changeset
    91
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    92
    def server_file(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    93
        return join(self.apphome, '%s-%s.py' % (self.appid, self.name))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    94
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    95
    def default_base_url(self):
8828
1437c47925c3 default base-url now uses fdqn instead of hostname only (closes #2542815)
Florent Cayre <florent.cayre@logilab.fr>
parents: 8669
diff changeset
    96
        from socket import getfqdn
10224
996cf2c0ec99 [config] Lowercase the FQDN we get from the OS (closes #5040345)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9252
diff changeset
    97
        return 'http://%s:%s/' % (self['host'] or getfqdn().lower(), self['port'] or 8080)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
6844
5ae2bc554c23 [config] stop using a metaclass for registration of "public" configuration, simply do it explicitly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6829
diff changeset
    99
11989
309cf6a2c24f [etwist] Drop try/except around definitions of 'all-in-one' configuration and command handlers
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   100
class AllInOneConfiguration(WebConfigurationBase, ServerConfiguration):
309cf6a2c24f [etwist] Drop try/except around definitions of 'all-in-one' configuration and command handlers
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   101
    """repository and web instance in the same twisted process"""
309cf6a2c24f [etwist] Drop try/except around definitions of 'all-in-one' configuration and command handlers
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   102
    name = 'all-in-one'
309cf6a2c24f [etwist] Drop try/except around definitions of 'all-in-one' configuration and command handlers
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   103
    options = merge_options(WebConfigurationBase.options
309cf6a2c24f [etwist] Drop try/except around definitions of 'all-in-one' configuration and command handlers
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   104
                            + ServerConfiguration.options)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   105
11989
309cf6a2c24f [etwist] Drop try/except around definitions of 'all-in-one' configuration and command handlers
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   106
    cubicweb_appobject_path = WebConfigurationBase.cubicweb_appobject_path | ServerConfiguration.cubicweb_appobject_path
309cf6a2c24f [etwist] Drop try/except around definitions of 'all-in-one' configuration and command handlers
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   107
    cube_appobject_path = WebConfigurationBase.cube_appobject_path | ServerConfiguration.cube_appobject_path
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 136
diff changeset
   108
6844
5ae2bc554c23 [config] stop using a metaclass for registration of "public" configuration, simply do it explicitly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6829
diff changeset
   109
11989
309cf6a2c24f [etwist] Drop try/except around definitions of 'all-in-one' configuration and command handlers
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   110
CONFIGURATIONS.append(AllInOneConfiguration)