--- a/.hgignore Thu Nov 17 11:00:01 2016 +0100
+++ b/.hgignore Fri Nov 18 15:42:10 2016 +0100
@@ -12,6 +12,14 @@
\.swp$
^doc/book/en/apidoc$
\.old$
+\.pybuild
+debian/python-cubicweb
+debian/*.log
+debian/*.substvars
+debian/cubicweb-doc
+debian/cubicweb
+debian/files
+
syntax: regexp
.*/data.*/database/.*
.*/data/ldapdb/.*
--- a/.hgtags Thu Nov 17 11:00:01 2016 +0100
+++ b/.hgtags Fri Nov 18 15:42:10 2016 +0100
@@ -581,3 +581,6 @@
8b287ad7b95bbd3b30914b3e98c26b5bb789b9bf debian/3.23.2-1
9f7949b63ab2214827a873cc26068cadb658142f 3.24.0
9f7949b63ab2214827a873cc26068cadb658142f centos/3.24.0-1
+da52fda6f15b76823361bb64c9b69686707137c2 3.24.1
+da52fda6f15b76823361bb64c9b69686707137c2 debian/3.24.1-1
+da52fda6f15b76823361bb64c9b69686707137c2 centos/3.24.1-1
--- a/MANIFEST.in Thu Nov 17 11:00:01 2016 +0100
+++ b/MANIFEST.in Fri Nov 18 15:42:10 2016 +0100
@@ -5,8 +5,11 @@
include pylintrc
include jshintrc
include tox.ini
+include flake8-ok-files.txt
+
include bin/cubicweb-*
include man/cubicweb-ctl.1
+recursive-include extras *.bash_completion
include doc/*.rst
include doc/*.txt
--- a/cubicweb.spec Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb.spec Fri Nov 18 15:42:10 2016 +0100
@@ -8,7 +8,7 @@
%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
Name: cubicweb
-Version: 3.24.0
+Version: 3.24.1
Release: logilab.1%{?dist}
Summary: CubicWeb is a semantic web application framework
Source0: https://pypi.python.org/packages/source/c/cubicweb/cubicweb-%{version}.tar.gz
--- a/cubicweb/__init__.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/__init__.py Fri Nov 18 15:42:10 2016 +0100
@@ -29,24 +29,27 @@
import warnings
import zlib
-warnings.filterwarnings('ignore', category=UserWarning,
- message='.*was already imported',
- module='.*pygments')
-
-
from six import PY2, binary_type, text_type
from six.moves import builtins
+from logilab.common.deprecation import deprecated
+from logilab.common.logging_ext import set_log_methods
+from yams.constraints import BASE_CONVERTERS, BASE_CHECKERS
+from yams.schema import role_name as rname
+
+from cubicweb.__pkginfo__ import version as __version__ # noqa
+
+# make all exceptions accessible from the package
+from logilab.common.registry import ObjectNotFound, NoSelectableObject, RegistryNotFound # noqa
+from yams import ValidationError
+from cubicweb._exceptions import * # noqa
+
if PY2:
# http://bugs.python.org/issue10211
from StringIO import StringIO as BytesIO
else:
from io import BytesIO
-from logilab.common.deprecation import deprecated
-from logilab.common.logging_ext import set_log_methods
-from yams.constraints import BASE_CONVERTERS, BASE_CHECKERS
-
# ignore the pygments UserWarnings
warnings.filterwarnings('ignore', category=UserWarning,
message='.*was already imported',
@@ -54,21 +57,12 @@
# pre python 2.7.2 safety
logging.basicConfig()
+set_log_methods(sys.modules[__name__], logging.getLogger('cubicweb'))
# this is necessary for i18n devtools test where chdir is done while __path__ is relative, which
# breaks later imports
-__path__[0] = os.path.abspath(__path__[0])
-CW_SOFTWARE_ROOT = __path__[0]
-
-
-from cubicweb.__pkginfo__ import version as __version__ # noqa
-
-
-set_log_methods(sys.modules[__name__], logging.getLogger('cubicweb'))
-
-# make all exceptions accessible from the package
-from cubicweb._exceptions import * # noqa
-from logilab.common.registry import ObjectNotFound, NoSelectableObject, RegistryNotFound # noqa
+__path__[0] = os.path.abspath(__path__[0]) # noqa
+CW_SOFTWARE_ROOT = __path__[0] # noqa
# '_' is available to mark internationalized string but should not be used to
@@ -163,6 +157,8 @@
def check_password(eschema, value):
return isinstance(value, (binary_type, Binary))
+
+
BASE_CHECKERS['Password'] = check_password
@@ -170,6 +166,8 @@
if isinstance(value, Binary):
return value
return binary_type(value)
+
+
BASE_CONVERTERS['Password'] = str_or_binary
@@ -230,6 +228,7 @@
else:
callback(context, *args, **kwargs)
+
CW_EVENT_MANAGER = CubicWebEventManager()
@@ -249,9 +248,6 @@
return _decorator
-from yams.schema import role_name as rname
-
-
def validation_error(entity, errors, substitutions=None, i18nvalues=None):
"""easy way to retrieve a :class:`cubicweb.ValidationError` for an entity or eid.
--- a/cubicweb/cwgettext.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/cwgettext.py Fri Nov 18 15:42:10 2016 +0100
@@ -18,6 +18,8 @@
import gettext
+from six import PY3
+
class cwGNUTranslations(gettext.GNUTranslations):
# The encoding of a msgctxt and a msgid in a .mo file is
@@ -83,6 +85,9 @@
else:
return msgid2
+ if PY3:
+ ugettext = gettext.GNUTranslations.gettext
+
def upgettext(self, context, message):
ctxt_message_id = self.CONTEXT_ENCODING % (context, message)
missing = object()
--- a/cubicweb/dataimport/stores.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/dataimport/stores.py Fri Nov 18 15:42:10 2016 +0100
@@ -63,7 +63,7 @@
from copy import copy
from itertools import count
-from six import text_type, add_metaclass
+from six import add_metaclass
import pytz
--- a/cubicweb/devtools/devctl.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/devtools/devctl.py Fri Nov 18 15:42:10 2016 +0100
@@ -102,6 +102,7 @@
def cleanup_sys_modules(config):
# cleanup sys.modules, required when we're updating multiple cubes
+ appobjects_path = config.appobjects_path()
for name, mod in list(sys.modules.items()):
if mod is None:
# duh ? logilab.common.os for instance
@@ -112,7 +113,7 @@
if mod.__file__ is None:
# odd/rare but real
continue
- for path in config.appobjects_path():
+ for path in appobjects_path:
if mod.__file__.startswith(path):
del sys.modules[name]
break
@@ -568,8 +569,12 @@
cubedir = osp.abspath(osp.normpath(cubedir))
workdir = tempfile.mkdtemp()
try:
- distname = osp.basename(cubedir)
- cubename = distname.split('_')[-1]
+ cubename = osp.basename(cubedir)
+ if cubename.startswith('cubicweb_'): # new layout
+ distname = cubename
+ cubename = cubename[len('cubicweb_'):]
+ else:
+ distname = 'cubicweb_' + cubename
print('cubedir', cubedir)
extract_cls = I18nCubeMessageExtractor
try:
--- a/cubicweb/devtools/fake.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/devtools/fake.py Fri Nov 18 15:42:10 2016 +0100
@@ -55,12 +55,20 @@
return {'system': {'db-driver': 'sqlite'}}
+class FakeCWRegistryStore(CWRegistryStore):
+
+ def property_value(self, key):
+ if key == 'ui.language':
+ return 'en'
+ assert False
+
+
class FakeRequest(ConnectionCubicWebRequestBase):
"""test implementation of an cubicweb request object"""
def __init__(self, *args, **kwargs):
if not (args or 'vreg' in kwargs):
- kwargs['vreg'] = CWRegistryStore(FakeConfig(), initlog=False)
+ kwargs['vreg'] = FakeCWRegistryStore(FakeConfig(), initlog=False)
kwargs['https'] = False
self._http_method = kwargs.pop('method', 'GET')
self._url = kwargs.pop('url', None)
@@ -134,7 +142,7 @@
if vreg is None:
vreg = getattr(self.repo, 'vreg', None)
if vreg is None:
- vreg = CWRegistryStore(FakeConfig(), initlog=False)
+ vreg = FakeCWRegistryStore(FakeConfig(), initlog=False)
self.vreg = vreg
self.cnxset = FakeConnectionsSet()
self.user = user or FakeUser()
@@ -176,7 +184,7 @@
self._count = 0
self.schema = schema
self.config = config or FakeConfig()
- self.vreg = vreg or CWRegistryStore(self.config, initlog=False)
+ self.vreg = vreg or FakeCWRegistryStore(self.config, initlog=False)
self.vreg.schema = schema
def internal_session(self):
--- a/cubicweb/devtools/test/unittest_i18n.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/devtools/test/unittest_i18n.py Fri Nov 18 15:42:10 2016 +0100
@@ -136,11 +136,11 @@
@patch('pkg_resources.load_entry_point', return_value=FakeMessageExtractor)
def test_cube_custom_extractor(self, mock_load_entry_point):
- for distname, cubedir in [
- ('cubicweb_i18ntestcube',
- osp.join(DATADIR, 'libpython', 'cubicweb_i18ntestcube')),
+ distname = 'cubicweb_i18ntestcube' # same for new and legacy layout
+ for cubedir in [
+ osp.join(DATADIR, 'libpython', 'cubicweb_i18ntestcube'),
# Legacy cubes.
- ('i18ntestcube', osp.join(DATADIR, 'cubes', 'i18ntestcube')),
+ osp.join(DATADIR, 'cubes', 'i18ntestcube'),
]:
with self.subTest(cubedir=cubedir):
with capture_stdout() as stream:
--- a/cubicweb/devtools/testlib.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/devtools/testlib.py Fri Nov 18 15:42:10 2016 +0100
@@ -28,7 +28,6 @@
from inspect import isgeneratorfunction
from itertools import chain
from warnings import warn
-import tempfile
from six import text_type, string_types, reraise
from six.moves import range
@@ -45,7 +44,7 @@
from cubicweb import (ValidationError, NoSelectableObject, AuthenticationError,
BadConnectionId)
-from cubicweb import cwconfig, devtools, web, server, repoapi
+from cubicweb import cwconfig, devtools, web, server
from cubicweb.utils import json
from cubicweb.sobjects import notification
from cubicweb.web import Redirect, application, eid_param
@@ -53,6 +52,7 @@
from cubicweb.server.session import Session
from cubicweb.devtools import SYSTEM_ENTITIES, SYSTEM_RELATIONS, VIEW_VALIDATORS
from cubicweb.devtools import fake, htmlparser, DEFAULT_EMPTY_DB_ID
+from cubicweb.devtools.fill import insert_entity_queries, make_relations_queries
if sys.version_info[:2] < (3, 4):
@@ -208,6 +208,7 @@
def sendmail(self, fromaddr, recipients, msg):
MAILBOX.append(Email(fromaddr, recipients, msg))
+
cwconfig.SMTP = MockSMTP
@@ -852,7 +853,9 @@
path = location
params = {}
else:
- cleanup = lambda p: (p[0], urlunquote(p[1]))
+ def cleanup(p):
+ return (p[0], urlunquote(p[1]))
+
params = dict(cleanup(p.split('=', 1)) for p in params.split('&') if p)
if path.startswith(req.base_url()): # may be relative
path = path[len(req.base_url()):]
@@ -968,8 +971,11 @@
viewfunc = view.render
else:
kwargs['view'] = view
- viewfunc = lambda **k: viewsreg.main_template(req, template,
- rset=rset, **kwargs)
+
+ def viewfunc(**k):
+ return viewsreg.main_template(req, template,
+ rset=rset, **kwargs)
+
return self._test_view(viewfunc, view, template, kwargs)
def _test_view(self, viewfunc, view, template='main-template', kwargs={}):
@@ -1105,11 +1111,8 @@
# auto-populating test classes and utilities ###################################
-from cubicweb.devtools.fill import insert_entity_queries, make_relations_queries
-
# XXX cleanup unprotected_entities & all mess
-
def how_many_dict(schema, cnx, how_many, skip):
"""given a schema, compute how many entities by type we need to be able to
satisfy relations cardinality.
--- a/cubicweb/entities/wfobjs.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/entities/wfobjs.py Fri Nov 18 15:42:10 2016 +0100
@@ -235,7 +235,7 @@
# check one of the rql expression conditions matches if any
if self.condition:
if DBG:
- print('my_be_fired: %r: %s' %
+ print('may_be_fired: %r: %s' %
(self.name, [(rqlexpr.expression,
rqlexpr.check_expression(self._cw, eid))
for rqlexpr in self.condition]))
--- a/cubicweb/hooks/syncschema.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/hooks/syncschema.py Fri Nov 18 15:42:10 2016 +0100
@@ -201,6 +201,13 @@
for eschema in self.cnx.repo.schema.entities():
if not eschema.final:
clear_cache(eschema, 'ordered_relations')
+ # clear additional cached properties
+ try:
+ # is_composite use composite_rdef_roles, hence one try except should be enough
+ del eschema.composite_rdef_roles
+ del eschema.is_composite
+ except AttributeError:
+ pass
def postcommit_event(self):
repo = self.cnx.repo
--- a/cubicweb/hooks/test/unittest_syncschema.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/hooks/test/unittest_syncschema.py Fri Nov 18 15:42:10 2016 +0100
@@ -400,6 +400,23 @@
# comparison on Python 2.
self.assertEqual(set(rdef.constraints), set([cstr, cstr3]))
+ def test_eschema_composite_properties(self):
+ with self.admin_access.repo_cnx() as cnx:
+ part_eschema = self.schema['EmailPart']
+ email_eschema = self.schema['Email']
+ parts_rdef = email_eschema.rdef('parts')
+ self.assertEqual(part_eschema.composite_rdef_roles, [])
+ self.assertEqual(part_eschema.is_composite, False)
+ self.assertEqual(email_eschema.composite_rdef_roles,
+ [(parts_rdef, 'subject')])
+ self.assertEqual(email_eschema.is_composite, True)
+ cnx.execute('DELETE CWRType X WHERE X name "parts"')
+ cnx.commit()
+ self.assertEqual(part_eschema.composite_rdef_roles, [])
+ self.assertEqual(part_eschema.is_composite, False)
+ self.assertEqual(email_eschema.composite_rdef_roles, [])
+ self.assertEqual(email_eschema.is_composite, False)
+
if __name__ == '__main__':
import unittest
--- a/cubicweb/i18n/de.po Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/i18n/de.po Fri Nov 18 15:42:10 2016 +0100
@@ -43,13 +43,6 @@
msgstr " :"
#, python-format
-msgid "\"action\" must be specified in options; allowed values are %s"
-msgstr ""
-
-msgid "\"role=subject\" or \"role=object\" must be specified in options"
-msgstr ""
-
-#, python-format
msgid "%(KEY-cstr)s constraint failed for value %(KEY-value)r"
msgstr ""
@@ -110,10 +103,6 @@
msgstr "%d Jahre"
#, python-format
-msgid "%s could be supported"
-msgstr ""
-
-#, python-format
msgid "%s error report"
msgstr "%s Fehlerbericht"
@@ -125,19 +114,6 @@
msgid "%s updated"
msgstr "%s aktualisiert"
-#, python-format
-msgid "'%s' action doesn't take any options"
-msgstr ""
-
-#, python-format
-msgid ""
-"'%s' action for in_state relation should at least have 'linkattr=name' option"
-msgstr ""
-
-#, python-format
-msgid "'%s' action requires 'linkattr' option"
-msgstr ""
-
msgid "(UNEXISTANT EID)"
msgstr "(EID nicht gefunden)"
@@ -225,6 +201,9 @@
msgid "Attributes permissions:"
msgstr "Rechte der Attribute"
+msgid "Authentication failed. Please check your credentials."
+msgstr ""
+
# schema pot file, generated on 2009-09-16 16:46:55
#
# singular and plural forms for each entity type
@@ -349,6 +328,12 @@
msgid "CWRelation_plural"
msgstr "Relationen"
+msgid "CWSession"
+msgstr ""
+
+msgid "CWSession_plural"
+msgstr ""
+
msgid "CWSource"
msgstr ""
@@ -358,12 +343,6 @@
msgid "CWSourceHostConfig_plural"
msgstr ""
-msgid "CWSourceSchemaConfig"
-msgstr ""
-
-msgid "CWSourceSchemaConfig_plural"
-msgstr ""
-
msgid "CWSource_plural"
msgstr ""
@@ -461,9 +440,6 @@
msgid "Deleted %(etype)s : %(entity)s"
msgstr ""
-msgid "Detected problems"
-msgstr ""
-
msgid "Do you want to delete the following element(s)?"
msgstr "Wollen Sie das/die folgend(n) Element(e) löschen?"
@@ -492,9 +468,6 @@
"reapply your changes."
msgstr ""
-msgid "Entity and relation supported by this source"
-msgstr ""
-
msgid "ExternalUri"
msgstr "Externer Uri"
@@ -600,15 +573,15 @@
msgid "New CWRelation"
msgstr "Neue Relation"
+msgid "New CWSession"
+msgstr ""
+
msgid "New CWSource"
msgstr ""
msgid "New CWSourceHostConfig"
msgstr ""
-msgid "New CWSourceSchemaConfig"
-msgstr ""
-
msgid "New CWUniqueTogetherConstraint"
msgstr "Neue unique-together-Einschränkung"
@@ -665,6 +638,9 @@
msgid "Password_plural"
msgstr "Passwörter"
+msgid "Persistent session. Used by cubicweb.pyramid to store the session data."
+msgstr ""
+
msgid "Please note that this is only a shallow copy"
msgstr "Achtung: dies ist nur eine flache Kopie!"
@@ -818,15 +794,15 @@
msgid "This CWRelation:"
msgstr "Diese Relation:"
+msgid "This CWSession:"
+msgstr ""
+
msgid "This CWSource:"
msgstr ""
msgid "This CWSourceHostConfig:"
msgstr ""
-msgid "This CWSourceSchemaConfig:"
-msgstr ""
-
msgid "This CWUniqueTogetherConstraint:"
msgstr "Diese unique-together-Einschränkung:"
@@ -953,9 +929,6 @@
"\"Durchsuchen\" oberhalb eine neue Datei hochladen, oder den Datei-Inhalt "
"mit dem Widget unterhalb editieren."
-msgid "You can't change this relation"
-msgstr ""
-
msgid "You cannot remove the system source"
msgstr ""
@@ -1173,15 +1146,15 @@
msgid "add a CWRelation"
msgstr ""
+msgid "add a CWSession"
+msgstr ""
+
msgid "add a CWSource"
msgstr ""
msgid "add a CWSourceHostConfig"
msgstr ""
-msgid "add a CWSourceSchemaConfig"
-msgstr ""
-
msgid "add a CWUniqueTogetherConstraint"
msgstr ""
@@ -1287,16 +1260,9 @@
msgid "allow to set a specific workflow for an entity"
msgstr "erlaube, einen bestimmten Workflow für eine Entität zu setzen"
-msgid "allowed options depends on the source type"
-msgstr ""
-
msgid "allowed transitions from this state"
msgstr "erlaubte Übergänge von diesem Zustand"
-#, python-format
-msgid "allowed values for \"action\" are %s"
-msgstr ""
-
msgid "allowed_transition"
msgstr "erlaubter Übergang"
@@ -2020,20 +1986,6 @@
msgid "cw.users-management"
msgstr ""
-msgid "cw_for_source"
-msgstr ""
-
-msgctxt "CWSourceSchemaConfig"
-msgid "cw_for_source"
-msgstr ""
-
-msgid "cw_for_source_object"
-msgstr ""
-
-msgctxt "CWSource"
-msgid "cw_for_source_object"
-msgstr ""
-
msgid "cw_host_config_of"
msgstr ""
@@ -2062,28 +2014,6 @@
msgid "cw_import_of_object"
msgstr ""
-msgid "cw_schema"
-msgstr ""
-
-msgctxt "CWSourceSchemaConfig"
-msgid "cw_schema"
-msgstr ""
-
-msgid "cw_schema_object"
-msgstr ""
-
-msgctxt "CWEType"
-msgid "cw_schema_object"
-msgstr ""
-
-msgctxt "CWRType"
-msgid "cw_schema_object"
-msgstr ""
-
-msgctxt "CWRelation"
-msgid "cw_schema_object"
-msgstr ""
-
msgid "cw_source"
msgstr ""
@@ -2117,15 +2047,19 @@
msgid "cwrtype-permissions"
msgstr "Berechtigungen"
+msgid "cwsessiondata"
+msgstr ""
+
+msgctxt "CWSession"
+msgid "cwsessiondata"
+msgstr ""
+
msgid "cwsource-imports"
msgstr ""
msgid "cwsource-main"
msgstr ""
-msgid "cwsource-mapping"
-msgstr ""
-
msgid "cwuri"
msgstr "interner URI"
@@ -2463,9 +2397,6 @@
msgid "entities deleted"
msgstr "Entitäten gelöscht"
-msgid "entity and relation types can't be mapped, only attributes or relations"
-msgstr ""
-
msgid "entity copied"
msgstr "Entität kopiert"
@@ -2502,9 +2433,6 @@
msgid "entityview"
msgstr ""
-msgid "error"
-msgstr ""
-
msgid "error while publishing ReST text"
msgstr "Fehler beim Übersetzen von reST"
@@ -3450,10 +3378,6 @@
msgid "options"
msgstr "Optionen"
-msgctxt "CWSourceSchemaConfig"
-msgid "options"
-msgstr ""
-
msgid "order"
msgstr "Reihenfolge"
@@ -3646,24 +3570,6 @@
msgid "relation %(relname)s of %(ent)s"
msgstr "Relation %(relname)s von %(ent)s"
-#, python-format
-msgid ""
-"relation %(rtype)s with %(etype)s as %(role)s is supported but no target "
-"type supported"
-msgstr ""
-
-#, python-format
-msgid ""
-"relation %(type)s with %(etype)s as %(role)s and target type %(target)s is "
-"mandatory but not supported"
-msgstr ""
-
-#, python-format
-msgid ""
-"relation %s is supported but none of its definitions matches supported "
-"entities"
-msgstr ""
-
msgid "relation add"
msgstr "Relation hinzufügen"
@@ -4155,15 +4061,9 @@
msgid "this entity is currently owned by"
msgstr "Diese Entität gehört:"
-msgid "this parser doesn't use a mapping"
-msgstr ""
-
msgid "this resource does not exist"
msgstr "cette ressource est introuvable"
-msgid "this source doesn't use a mapping"
-msgstr ""
-
msgid "thursday"
msgstr "Donnerstag"
@@ -4564,6 +4464,9 @@
msgid "view identifier"
msgstr "Nutzername"
+msgid "view original"
+msgstr ""
+
msgid "view title"
msgstr "Titel"
@@ -4576,9 +4479,6 @@
msgid "visible"
msgstr "sichtbar"
-msgid "warning"
-msgstr ""
-
msgid "we are not yet ready to handle this query"
msgstr "Momentan können wir diese sparql-Anfrage noch nicht ausführen."
--- a/cubicweb/i18n/en.po Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/i18n/en.po Fri Nov 18 15:42:10 2016 +0100
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: 2.0\n"
"POT-Creation-Date: 2006-01-12 17:35+CET\n"
-"PO-Revision-Date: 2011-04-29 12:57+0200\n"
+"PO-Revision-Date: 2016-11-14 12:24+0100\n"
"Last-Translator: Sylvain Thenault <sylvain.thenault@logilab.fr>\n"
"Language-Team: English <devel@logilab.fr.org>\n"
"Language: en\n"
@@ -35,13 +35,6 @@
msgstr ":"
#, python-format
-msgid "\"action\" must be specified in options; allowed values are %s"
-msgstr ""
-
-msgid "\"role=subject\" or \"role=object\" must be specified in options"
-msgstr ""
-
-#, python-format
msgid "%(KEY-cstr)s constraint failed for value %(KEY-value)r"
msgstr ""
@@ -102,10 +95,6 @@
msgstr ""
#, python-format
-msgid "%s could be supported"
-msgstr ""
-
-#, python-format
msgid "%s error report"
msgstr ""
@@ -117,19 +106,6 @@
msgid "%s updated"
msgstr ""
-#, python-format
-msgid "'%s' action doesn't take any options"
-msgstr ""
-
-#, python-format
-msgid ""
-"'%s' action for in_state relation should at least have 'linkattr=name' option"
-msgstr ""
-
-#, python-format
-msgid "'%s' action requires 'linkattr' option"
-msgstr ""
-
msgid "(UNEXISTANT EID)"
msgstr ""
@@ -214,6 +190,9 @@
msgid "Attributes permissions:"
msgstr ""
+msgid "Authentication failed. Please check your credentials."
+msgstr "Authentication failed. Please check your credentials."
+
# schema pot file, generated on 2009-09-16 16:46:55
#
# singular and plural forms for each entity type
@@ -338,6 +317,12 @@
msgid "CWRelation_plural"
msgstr "Relations"
+msgid "CWSession"
+msgstr "Persistent session"
+
+msgid "CWSession_plural"
+msgstr "Persistent sessions"
+
msgid "CWSource"
msgstr "Data source"
@@ -347,12 +332,6 @@
msgid "CWSourceHostConfig_plural"
msgstr "Source host configurations"
-msgid "CWSourceSchemaConfig"
-msgstr "Source schema configuration"
-
-msgid "CWSourceSchemaConfig_plural"
-msgstr "Source schema configurations"
-
msgid "CWSource_plural"
msgstr "Data sources"
@@ -439,9 +418,6 @@
msgid "Deleted %(etype)s : %(entity)s"
msgstr ""
-msgid "Detected problems"
-msgstr ""
-
msgid "Do you want to delete the following element(s)?"
msgstr ""
@@ -470,9 +446,6 @@
"reapply your changes."
msgstr ""
-msgid "Entity and relation supported by this source"
-msgstr ""
-
msgid "ExternalUri"
msgstr "External Uri"
@@ -578,15 +551,15 @@
msgid "New CWRelation"
msgstr "New relation"
+msgid "New CWSession"
+msgstr "New persistent session"
+
msgid "New CWSource"
msgstr "New source"
msgid "New CWSourceHostConfig"
msgstr "New source host configuration"
-msgid "New CWSourceSchemaConfig"
-msgstr "New source schema configuration"
-
msgid "New CWUniqueTogetherConstraint"
msgstr "New unicity constraint"
@@ -641,6 +614,9 @@
msgid "Password_plural"
msgstr "Passwords"
+msgid "Persistent session. Used by cubicweb.pyramid to store the session data."
+msgstr "Persistent session. Used by cubicweb.pyramid to store the session data."
+
msgid "Please note that this is only a shallow copy"
msgstr ""
@@ -794,15 +770,15 @@
msgid "This CWRelation:"
msgstr "This relation:"
+msgid "This CWSession:"
+msgstr "This persistent session :"
+
msgid "This CWSource:"
msgstr "This data source:"
msgid "This CWSourceHostConfig:"
msgstr "This source host configuration:"
-msgid "This CWSourceSchemaConfig:"
-msgstr "This source schema configuration:"
-
msgid "This CWUniqueTogetherConstraint:"
msgstr "This unicity constraint:"
@@ -922,9 +898,6 @@
"content online with the widget below."
msgstr ""
-msgid "You can't change this relation"
-msgstr ""
-
msgid "You cannot remove the system source"
msgstr ""
@@ -1135,15 +1108,15 @@
msgid "add a CWRelation"
msgstr ""
+msgid "add a CWSession"
+msgstr "add a persistent session"
+
msgid "add a CWSource"
msgstr ""
msgid "add a CWSourceHostConfig"
msgstr ""
-msgid "add a CWSourceSchemaConfig"
-msgstr ""
-
msgid "add a CWUniqueTogetherConstraint"
msgstr ""
@@ -1247,16 +1220,9 @@
msgid "allow to set a specific workflow for an entity"
msgstr ""
-msgid "allowed options depends on the source type"
-msgstr ""
-
msgid "allowed transitions from this state"
msgstr ""
-#, python-format
-msgid "allowed values for \"action\" are %s"
-msgstr ""
-
msgid "allowed_transition"
msgstr "allowed transition"
@@ -1977,20 +1943,6 @@
msgid "cw.users-management"
msgstr "users"
-msgid "cw_for_source"
-msgstr "for source"
-
-msgctxt "CWSourceSchemaConfig"
-msgid "cw_for_source"
-msgstr "for source"
-
-msgid "cw_for_source_object"
-msgstr "mapping"
-
-msgctxt "CWSource"
-msgid "cw_for_source_object"
-msgstr "mapping"
-
msgid "cw_host_config_of"
msgstr "source"
@@ -2019,28 +1971,6 @@
msgid "cw_import_of_object"
msgstr "imports"
-msgid "cw_schema"
-msgstr "maps"
-
-msgctxt "CWSourceSchemaConfig"
-msgid "cw_schema"
-msgstr "maps"
-
-msgid "cw_schema_object"
-msgstr "mapped by"
-
-msgctxt "CWEType"
-msgid "cw_schema_object"
-msgstr "mapped by"
-
-msgctxt "CWRType"
-msgid "cw_schema_object"
-msgstr "mapped by"
-
-msgctxt "CWRelation"
-msgid "cw_schema_object"
-msgstr "mapped by"
-
msgid "cw_source"
msgstr "source"
@@ -2074,15 +2004,19 @@
msgid "cwrtype-permissions"
msgstr "permissions"
+msgid "cwsessiondata"
+msgstr "session data"
+
+msgctxt "CWSession"
+msgid "cwsessiondata"
+msgstr "session data"
+
msgid "cwsource-imports"
msgstr ""
msgid "cwsource-main"
msgstr "description"
-msgid "cwsource-mapping"
-msgstr "mapping"
-
msgid "cwuri"
msgstr "internal uri"
@@ -2412,9 +2346,6 @@
msgid "entities deleted"
msgstr ""
-msgid "entity and relation types can't be mapped, only attributes or relations"
-msgstr ""
-
msgid "entity copied"
msgstr ""
@@ -2451,9 +2382,6 @@
msgid "entityview"
msgstr "entity views"
-msgid "error"
-msgstr ""
-
msgid "error while publishing ReST text"
msgstr ""
@@ -3368,10 +3296,6 @@
msgid "options"
msgstr ""
-msgctxt "CWSourceSchemaConfig"
-msgid "options"
-msgstr "options"
-
msgid "order"
msgstr ""
@@ -3563,24 +3487,6 @@
msgid "relation %(relname)s of %(ent)s"
msgstr ""
-#, python-format
-msgid ""
-"relation %(rtype)s with %(etype)s as %(role)s is supported but no target "
-"type supported"
-msgstr ""
-
-#, python-format
-msgid ""
-"relation %(type)s with %(etype)s as %(role)s and target type %(target)s is "
-"mandatory but not supported"
-msgstr ""
-
-#, python-format
-msgid ""
-"relation %s is supported but none of its definitions matches supported "
-"entities"
-msgstr ""
-
msgid "relation add"
msgstr ""
@@ -4058,15 +3964,9 @@
msgid "this entity is currently owned by"
msgstr ""
-msgid "this parser doesn't use a mapping"
-msgstr ""
-
msgid "this resource does not exist"
msgstr ""
-msgid "this source doesn't use a mapping"
-msgstr ""
-
msgid "thursday"
msgstr ""
@@ -4456,6 +4356,9 @@
msgid "view identifier"
msgstr ""
+msgid "view original"
+msgstr "view original"
+
msgid "view title"
msgstr ""
@@ -4468,9 +4371,6 @@
msgid "visible"
msgstr ""
-msgid "warning"
-msgstr ""
-
msgid "we are not yet ready to handle this query"
msgstr ""
@@ -4556,9 +4456,3 @@
msgid "you should probably delete that property"
msgstr ""
-
-#~ msgid "components_etypenavigation"
-#~ msgstr "filtering by type"
-
-#~ msgid "components_etypenavigation_description"
-#~ msgstr "permit to filter search results by entity type"
--- a/cubicweb/i18n/es.po Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/i18n/es.po Fri Nov 18 15:42:10 2016 +0100
@@ -46,16 +46,6 @@
msgstr ":"
#, python-format
-msgid "\"action\" must be specified in options; allowed values are %s"
-msgstr ""
-"\"action\" debe estar especificada en opciones; los valores permitidos son : "
-"%s"
-
-msgid "\"role=subject\" or \"role=object\" must be specified in options"
-msgstr ""
-"\"role=subject\" o \"role=object\" debe ser especificado en las opciones"
-
-#, python-format
msgid "%(KEY-cstr)s constraint failed for value %(KEY-value)r"
msgstr "%(KEY-cstr)s restricción errónea para el valor %(KEY-value)r"
@@ -116,10 +106,6 @@
msgstr "%d años"
#, python-format
-msgid "%s could be supported"
-msgstr "%s podría ser mantenido"
-
-#, python-format
msgid "%s error report"
msgstr "%s reporte de errores"
@@ -131,21 +117,6 @@
msgid "%s updated"
msgstr "%s actualizado"
-#, python-format
-msgid "'%s' action doesn't take any options"
-msgstr "la acción '%s' no acepta opciones"
-
-#, python-format
-msgid ""
-"'%s' action for in_state relation should at least have 'linkattr=name' option"
-msgstr ""
-"'%s' acción en la relación in_state debe por lo menos tener la opción "
-"'linkattr=name'"
-
-#, python-format
-msgid "'%s' action requires 'linkattr' option"
-msgstr "la acción '%s' requiere una opción 'linkattr'"
-
msgid "(UNEXISTANT EID)"
msgstr "(EID INEXISTENTE"
@@ -233,6 +204,9 @@
msgid "Attributes permissions:"
msgstr "Permisos de atributos:"
+msgid "Authentication failed. Please check your credentials."
+msgstr ""
+
# schema pot file, generated on 2009-09-16 16:46:55
#
# singular and plural forms for each entity type
@@ -357,6 +331,12 @@
msgid "CWRelation_plural"
msgstr "Relaciones"
+msgid "CWSession"
+msgstr ""
+
+msgid "CWSession_plural"
+msgstr ""
+
msgid "CWSource"
msgstr "Fuente de datos"
@@ -366,12 +346,6 @@
msgid "CWSourceHostConfig_plural"
msgstr "Configuraciones de fuente"
-msgid "CWSourceSchemaConfig"
-msgstr "Configuraciones de Esquema de Fuente"
-
-msgid "CWSourceSchemaConfig_plural"
-msgstr "Configuraciones de Esquema de Fuente"
-
msgid "CWSource_plural"
msgstr "Fuentes de Datos"
@@ -470,9 +444,6 @@
msgid "Deleted %(etype)s : %(entity)s"
msgstr "Se eliminó %(etype)s : %(entity)s"
-msgid "Detected problems"
-msgstr "Problemas detectados"
-
msgid "Do you want to delete the following element(s)?"
msgstr "Desea eliminar el/los elemento(s) a continuación?"
@@ -501,9 +472,6 @@
"reapply your changes."
msgstr ""
-msgid "Entity and relation supported by this source"
-msgstr "Entidades y relaciones aceptadas por esta fuente"
-
msgid "ExternalUri"
msgstr "Uri externo"
@@ -609,15 +577,15 @@
msgid "New CWRelation"
msgstr "Nueva definición de relación final"
+msgid "New CWSession"
+msgstr ""
+
msgid "New CWSource"
msgstr "Nueva fuente"
msgid "New CWSourceHostConfig"
msgstr "Nueva configuración de fuente"
-msgid "New CWSourceSchemaConfig"
-msgstr "Nueva parte de mapeo de fuente"
-
msgid "New CWUniqueTogetherConstraint"
msgstr "Nueva restricción de singularidad"
@@ -672,6 +640,9 @@
msgid "Password_plural"
msgstr "Contraseñas"
+msgid "Persistent session. Used by cubicweb.pyramid to store the session data."
+msgstr ""
+
msgid "Please note that this is only a shallow copy"
msgstr "Recuerde que sólo es una copia superficial"
@@ -828,15 +799,15 @@
msgid "This CWRelation:"
msgstr "Esta definición de relación no final:"
+msgid "This CWSession:"
+msgstr ""
+
msgid "This CWSource:"
msgstr "Esta fuente:"
msgid "This CWSourceHostConfig:"
msgstr "Esta configuración de fuente:"
-msgid "This CWSourceSchemaConfig:"
-msgstr "Esta parte de mapeo de fuente:"
-
msgid "This CWUniqueTogetherConstraint:"
msgstr "Esta restricción de singularidad:"
@@ -967,9 +938,6 @@
"\"buscar\" en la parte superior, o editar el contenido del archivo en línea\n"
"en el campo siguiente."
-msgid "You can't change this relation"
-msgstr "Usted no puede modificar esta relación"
-
msgid "You cannot remove the system source"
msgstr "Usted no puede eliminar la fuente sistema"
@@ -1192,15 +1160,15 @@
msgid "add a CWRelation"
msgstr ""
+msgid "add a CWSession"
+msgstr ""
+
msgid "add a CWSource"
msgstr ""
msgid "add a CWSourceHostConfig"
msgstr ""
-msgid "add a CWSourceSchemaConfig"
-msgstr ""
-
msgid "add a CWUniqueTogetherConstraint"
msgstr ""
@@ -1306,16 +1274,9 @@
msgid "allow to set a specific workflow for an entity"
msgstr "permite definir un Workflow específico para una entidad"
-msgid "allowed options depends on the source type"
-msgstr "las opciones permitidas dependen del tipo de fuente"
-
msgid "allowed transitions from this state"
msgstr "transiciones autorizadas desde este estado"
-#, python-format
-msgid "allowed values for \"action\" are %s"
-msgstr "los valores permitidos por \"acción\" son %s"
-
msgid "allowed_transition"
msgstr "transiciones autorizadas"
@@ -2063,20 +2024,6 @@
msgid "cw.users-management"
msgstr "usuarios"
-msgid "cw_for_source"
-msgstr "fuente"
-
-msgctxt "CWSourceSchemaConfig"
-msgid "cw_for_source"
-msgstr "fuente"
-
-msgid "cw_for_source_object"
-msgstr "elemento de mapeo"
-
-msgctxt "CWSource"
-msgid "cw_for_source_object"
-msgstr "elemento de mapeo"
-
msgid "cw_host_config_of"
msgstr "configuración del host de"
@@ -2105,28 +2052,6 @@
msgid "cw_import_of_object"
msgstr "importación"
-msgid "cw_schema"
-msgstr "esquema"
-
-msgctxt "CWSourceSchemaConfig"
-msgid "cw_schema"
-msgstr "esquema"
-
-msgid "cw_schema_object"
-msgstr "mapeado por"
-
-msgctxt "CWEType"
-msgid "cw_schema_object"
-msgstr "mapeado por"
-
-msgctxt "CWRType"
-msgid "cw_schema_object"
-msgstr "mapeado por"
-
-msgctxt "CWRelation"
-msgid "cw_schema_object"
-msgstr "mapeado por"
-
msgid "cw_source"
msgstr "desde la fuente de datos"
@@ -2160,15 +2085,19 @@
msgid "cwrtype-permissions"
msgstr "Permisos"
+msgid "cwsessiondata"
+msgstr ""
+
+msgctxt "CWSession"
+msgid "cwsessiondata"
+msgstr ""
+
msgid "cwsource-imports"
msgstr "importación"
msgid "cwsource-main"
msgstr "descripción"
-msgid "cwsource-mapping"
-msgstr "mapeo"
-
msgid "cwuri"
msgstr "Uri Interna"
@@ -2516,11 +2445,6 @@
msgid "entities deleted"
msgstr "Entidades eliminadas"
-msgid "entity and relation types can't be mapped, only attributes or relations"
-msgstr ""
-"los tipos de entidad y relación no pueden ser mapeados, solo los atributos y "
-"las relaciones"
-
msgid "entity copied"
msgstr "Entidad copiada"
@@ -2557,9 +2481,6 @@
msgid "entityview"
msgstr "vistas de entidades"
-msgid "error"
-msgstr "error"
-
msgid "error while publishing ReST text"
msgstr ""
"Se ha producido un error durante la interpretación del texto en formato ReST"
@@ -3503,10 +3424,6 @@
msgid "options"
msgstr "Opciones"
-msgctxt "CWSourceSchemaConfig"
-msgid "options"
-msgstr "opciones"
-
msgid "order"
msgstr "Orden"
@@ -3701,30 +3618,6 @@
msgid "relation %(relname)s of %(ent)s"
msgstr "relación %(relname)s de %(ent)s"
-#, python-format
-msgid ""
-"relation %(rtype)s with %(etype)s as %(role)s is supported but no target "
-"type supported"
-msgstr ""
-"la relación %(rtype)s con %(etype)s como %(role)s es aceptada pero ningún "
-"tipo target es aceptado"
-
-#, python-format
-msgid ""
-"relation %(type)s with %(etype)s as %(role)s and target type %(target)s is "
-"mandatory but not supported"
-msgstr ""
-"la relación %(type)s con %(etype)s como %(role)s y tipo objetivo %(target)s "
-"es obligatoria pero no mantenida"
-
-#, python-format
-msgid ""
-"relation %s is supported but none of its definitions matches supported "
-"entities"
-msgstr ""
-"la relación %s es aceptada pero ninguna de sus definiciones corresponden a "
-"los tipos de entidades aceptadas"
-
msgid "relation add"
msgstr "Agregar Relación"
@@ -4220,15 +4113,9 @@
msgid "this entity is currently owned by"
msgstr "Esta Entidad es propiedad de"
-msgid "this parser doesn't use a mapping"
-msgstr "este analizador (parser) no utiliza mapeo"
-
msgid "this resource does not exist"
msgstr "Este recurso no existe"
-msgid "this source doesn't use a mapping"
-msgstr "esta fuente no utiliza mapeo"
-
msgid "thursday"
msgstr "Jueves"
@@ -4627,6 +4514,9 @@
msgid "view identifier"
msgstr "Identificador"
+msgid "view original"
+msgstr ""
+
msgid "view title"
msgstr "Nombre"
@@ -4639,9 +4529,6 @@
msgid "visible"
msgstr "Visible"
-msgid "warning"
-msgstr "atención"
-
msgid "we are not yet ready to handle this query"
msgstr "Aún no podemos manejar este tipo de consulta Sparql"
@@ -4731,18 +4618,70 @@
msgid "you should probably delete that property"
msgstr "probablamente debería suprimir esta propriedad"
+#~ msgid "\"action\" must be specified in options; allowed values are %s"
+#~ msgstr ""
+#~ "\"action\" debe estar especificada en opciones; los valores permitidos "
+#~ "son : %s"
+
+#~ msgid "\"role=subject\" or \"role=object\" must be specified in options"
+#~ msgstr ""
+#~ "\"role=subject\" o \"role=object\" debe ser especificado en las opciones"
+
+#~ msgid "%s could be supported"
+#~ msgstr "%s podría ser mantenido"
+
#~ msgid "%s relation should not be in mapped"
#~ msgstr "la relación %s no debería estar mapeada"
+#~ msgid "'%s' action doesn't take any options"
+#~ msgstr "la acción '%s' no acepta opciones"
+
+#~ msgid ""
+#~ "'%s' action for in_state relation should at least have 'linkattr=name' "
+#~ "option"
+#~ msgstr ""
+#~ "'%s' acción en la relación in_state debe por lo menos tener la opción "
+#~ "'linkattr=name'"
+
+#~ msgid "'%s' action requires 'linkattr' option"
+#~ msgstr "la acción '%s' requiere una opción 'linkattr'"
+
#~ msgid "Any"
#~ msgstr "Cualquiera"
#~ msgid "Browse by category"
#~ msgstr "Busca por categoría"
+#~ msgid "CWSourceSchemaConfig"
+#~ msgstr "Configuraciones de Esquema de Fuente"
+
+#~ msgid "CWSourceSchemaConfig_plural"
+#~ msgstr "Configuraciones de Esquema de Fuente"
+
+#~ msgid "Detected problems"
+#~ msgstr "Problemas detectados"
+
+#~ msgid "Entity and relation supported by this source"
+#~ msgstr "Entidades y relaciones aceptadas por esta fuente"
+
+#~ msgid "New CWSourceSchemaConfig"
+#~ msgstr "Nueva parte de mapeo de fuente"
+
#~ msgid "No account? Try public access at %s"
#~ msgstr "No esta registrado? Use el acceso público en %s"
+#~ msgid "This CWSourceSchemaConfig:"
+#~ msgstr "Esta parte de mapeo de fuente:"
+
+#~ msgid "You can't change this relation"
+#~ msgstr "Usted no puede modificar esta relación"
+
+#~ msgid "allowed options depends on the source type"
+#~ msgstr "las opciones permitidas dependen del tipo de fuente"
+
+#~ msgid "allowed values for \"action\" are %s"
+#~ msgstr "los valores permitidos por \"acción\" son %s"
+
#~ msgid "anonymous"
#~ msgstr "anónimo"
@@ -4766,9 +4705,57 @@
#~ msgid "components_etypenavigation_description"
#~ msgstr "Permite filtrar por tipo de entidad los resultados de una búsqueda"
+#~ msgid "cw_for_source"
+#~ msgstr "fuente"
+
+#~ msgctxt "CWSourceSchemaConfig"
+#~ msgid "cw_for_source"
+#~ msgstr "fuente"
+
+#~ msgid "cw_for_source_object"
+#~ msgstr "elemento de mapeo"
+
+#~ msgctxt "CWSource"
+#~ msgid "cw_for_source_object"
+#~ msgstr "elemento de mapeo"
+
+#~ msgid "cw_schema"
+#~ msgstr "esquema"
+
+#~ msgctxt "CWSourceSchemaConfig"
+#~ msgid "cw_schema"
+#~ msgstr "esquema"
+
+#~ msgid "cw_schema_object"
+#~ msgstr "mapeado por"
+
+#~ msgctxt "CWEType"
+#~ msgid "cw_schema_object"
+#~ msgstr "mapeado por"
+
+#~ msgctxt "CWRType"
+#~ msgid "cw_schema_object"
+#~ msgstr "mapeado por"
+
+#~ msgctxt "CWRelation"
+#~ msgid "cw_schema_object"
+#~ msgstr "mapeado por"
+
+#~ msgid "cwsource-mapping"
+#~ msgstr "mapeo"
+
#~ msgid "edit canceled"
#~ msgstr "Edición cancelada"
+#~ msgid ""
+#~ "entity and relation types can't be mapped, only attributes or relations"
+#~ msgstr ""
+#~ "los tipos de entidad y relación no pueden ser mapeados, solo los "
+#~ "atributos y las relaciones"
+
+#~ msgid "error"
+#~ msgstr "error"
+
#~ msgid "error while querying source %s, some data may be missing"
#~ msgstr ""
#~ "Un error ha ocurrido al interrogar %s, es posible que los \n"
@@ -4782,9 +4769,40 @@
#~ msgid "no edited fields specified for entity %s"
#~ msgstr "Ningún campo editable especificado para la entidad %s"
+#~ msgctxt "CWSourceSchemaConfig"
+#~ msgid "options"
+#~ msgstr "opciones"
+
+#~ msgid ""
+#~ "relation %(rtype)s with %(etype)s as %(role)s is supported but no target "
+#~ "type supported"
+#~ msgstr ""
+#~ "la relación %(rtype)s con %(etype)s como %(role)s es aceptada pero ningún "
+#~ "tipo target es aceptado"
+
+#~ msgid ""
+#~ "relation %(type)s with %(etype)s as %(role)s and target type %(target)s "
+#~ "is mandatory but not supported"
+#~ msgstr ""
+#~ "la relación %(type)s con %(etype)s como %(role)s y tipo objetivo "
+#~ "%(target)s es obligatoria pero no mantenida"
+
+#~ msgid ""
+#~ "relation %s is supported but none of its definitions matches supported "
+#~ "entities"
+#~ msgstr ""
+#~ "la relación %s es aceptada pero ninguna de sus definiciones corresponden "
+#~ "a los tipos de entidades aceptadas"
+
#~ msgid "the value \"%s\" is already used, use another one"
#~ msgstr "El valor \"%s\" ya esta en uso, favor de utilizar otro"
+#~ msgid "this parser doesn't use a mapping"
+#~ msgstr "este analizador (parser) no utiliza mapeo"
+
+#~ msgid "this source doesn't use a mapping"
+#~ msgstr "esta fuente no utiliza mapeo"
+
#~ msgid "timeline"
#~ msgstr "Escala de Tiempo"
@@ -4794,6 +4812,9 @@
#~ msgid "value %(KEY-value)s must be %(KEY-op)s %(KEY-boundary)s"
#~ msgstr "El valor %(KEY-value)s debe ser %(KEY-op)s %(KEY-boundary)s"
+#~ msgid "warning"
+#~ msgstr "atención"
+
#~ msgid "web sessions without CNX"
#~ msgstr "sesiones web sin conexión asociada"
--- a/cubicweb/i18n/fr.po Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/i18n/fr.po Fri Nov 18 15:42:10 2016 +0100
@@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: cubicweb 2.46.0\n"
-"PO-Revision-Date: 2014-06-24 13:29+0200\n"
+"PO-Revision-Date: 2016-11-14 11:26+0100\n"
"Last-Translator: Logilab Team <contact@logilab.fr>\n"
"Language-Team: fr <contact@logilab.fr>\n"
"Language: \n"
@@ -40,16 +40,6 @@
msgstr " :"
#, python-format
-msgid "\"action\" must be specified in options; allowed values are %s"
-msgstr ""
-"\"action\" doit être specifié dans les options; les valeurs autorisées "
-"sont : %s"
-
-msgid "\"role=subject\" or \"role=object\" must be specified in options"
-msgstr ""
-"\"role=subject\" ou \"role=object\" doit être specifié dans les options"
-
-#, python-format
msgid "%(KEY-cstr)s constraint failed for value %(KEY-value)r"
msgstr "la valeur %(KEY-value)r ne satisfait pas la contrainte %(KEY-cstr)s"
@@ -111,10 +101,6 @@
msgstr "%d années"
#, python-format
-msgid "%s could be supported"
-msgstr "%s pourrait être supporté"
-
-#, python-format
msgid "%s error report"
msgstr "%s rapport d'erreur"
@@ -126,21 +112,6 @@
msgid "%s updated"
msgstr "%s mis à jour"
-#, python-format
-msgid "'%s' action doesn't take any options"
-msgstr "l'action '%s' ne prend pas d'option"
-
-#, python-format
-msgid ""
-"'%s' action for in_state relation should at least have 'linkattr=name' option"
-msgstr ""
-"l'action '%s' pour la relation in_state doit au moins avoir l'option "
-"'linkattr=name'"
-
-#, python-format
-msgid "'%s' action requires 'linkattr' option"
-msgstr "l'action '%s' nécessite une option 'linkattr'"
-
msgid "(UNEXISTANT EID)"
msgstr "(EID INTROUVABLE)"
@@ -227,6 +198,9 @@
msgid "Attributes permissions:"
msgstr "Permissions des attributs"
+msgid "Authentication failed. Please check your credentials."
+msgstr "Échec de l'authentification. Veuillez vérifier vos identifiant et mot de passe."
+
# schema pot file, generated on 2009-09-16 16:46:55
#
# singular and plural forms for each entity type
@@ -351,6 +325,12 @@
msgid "CWRelation_plural"
msgstr "Relations"
+msgid "CWSession"
+msgstr "Session persistante"
+
+msgid "CWSession_plural"
+msgstr "Sessions persistantes"
+
msgid "CWSource"
msgstr "Source de données"
@@ -360,12 +340,6 @@
msgid "CWSourceHostConfig_plural"
msgstr "Configurations de source"
-msgid "CWSourceSchemaConfig"
-msgstr "Configuration de schéma de source"
-
-msgid "CWSourceSchemaConfig_plural"
-msgstr "Configurations de schéma de source"
-
msgid "CWSource_plural"
msgstr "Source de données"
@@ -464,9 +438,6 @@
msgid "Deleted %(etype)s : %(entity)s"
msgstr "Entité %(etype)s supprimée : %(entity)s"
-msgid "Detected problems"
-msgstr "Problèmes détectés"
-
msgid "Do you want to delete the following element(s)?"
msgstr "Voulez-vous supprimer le(s) élément(s) suivant(s) ?"
@@ -497,9 +468,6 @@
"L'entité %(eid)s a été modifiée depuis votre demande d'édition. Veuillez "
"recharger cette page et réappliquer vos changements."
-msgid "Entity and relation supported by this source"
-msgstr "Entités et relations supportés par cette source"
-
msgid "ExternalUri"
msgstr "Uri externe"
@@ -605,15 +573,15 @@
msgid "New CWRelation"
msgstr "Nouvelle définition de relation non finale"
+msgid "New CWSession"
+msgstr "Nouvelle session persistante"
+
msgid "New CWSource"
msgstr "Nouvelle source"
msgid "New CWSourceHostConfig"
msgstr "Nouvelle configuration de source"
-msgid "New CWSourceSchemaConfig"
-msgstr "Nouvelle partie de mapping de source"
-
msgid "New CWUniqueTogetherConstraint"
msgstr "Nouvelle contrainte unique_together"
@@ -668,6 +636,9 @@
msgid "Password_plural"
msgstr "Mots de passe"
+msgid "Persistent session. Used by cubicweb.pyramid to store the session data."
+msgstr "Session persistante. Utilisée par cubicweb.pyramid pour stocker les données de session."
+
msgid "Please note that this is only a shallow copy"
msgstr "Attention, cela n'effectue qu'une copie de surface"
@@ -826,15 +797,15 @@
msgid "This CWRelation:"
msgstr "Cette définition de relation :"
+msgid "This CWSession:"
+msgstr "Cette session persistante :"
+
msgid "This CWSource:"
msgstr "Cette source :"
msgid "This CWSourceHostConfig:"
msgstr "Cette configuration de source :"
-msgid "This CWSourceSchemaConfig:"
-msgstr "Cette partie de mapping de source :"
-
msgid "This CWUniqueTogetherConstraint:"
msgstr "Cette contrainte unique_together :"
@@ -965,9 +936,6 @@
"\"parcourir\" ci-dessus, soit éditer le contenu du fichier en ligne\n"
"avec le champ ci-dessous."
-msgid "You can't change this relation"
-msgstr "Vous ne pouvez pas modifier cette relation"
-
msgid "You cannot remove the system source"
msgstr "Vous ne pouvez pas supprimer la source système"
@@ -1190,15 +1158,15 @@
msgid "add a CWRelation"
msgstr ""
+msgid "add a CWSession"
+msgstr "Ajouter une session persistante"
+
msgid "add a CWSource"
msgstr ""
msgid "add a CWSourceHostConfig"
msgstr ""
-msgid "add a CWSourceSchemaConfig"
-msgstr ""
-
msgid "add a CWUniqueTogetherConstraint"
msgstr ""
@@ -1304,16 +1272,9 @@
msgid "allow to set a specific workflow for an entity"
msgstr "permet de spécifier un workflow donné pour une entité"
-msgid "allowed options depends on the source type"
-msgstr "les options autorisées dépendent du type de la source"
-
msgid "allowed transitions from this state"
msgstr "transitions autorisées depuis cet état"
-#, python-format
-msgid "allowed values for \"action\" are %s"
-msgstr "les valeurs autorisées pour \"action\" sont %s"
-
msgid "allowed_transition"
msgstr "transitions autorisées"
@@ -2066,20 +2027,6 @@
msgid "cw.users-management"
msgstr "utilisateurs"
-msgid "cw_for_source"
-msgstr "source"
-
-msgctxt "CWSourceSchemaConfig"
-msgid "cw_for_source"
-msgstr "source"
-
-msgid "cw_for_source_object"
-msgstr "élément de mapping"
-
-msgctxt "CWSource"
-msgid "cw_for_source_object"
-msgstr "élément de mapping"
-
msgid "cw_host_config_of"
msgstr "host configuration of"
@@ -2108,28 +2055,6 @@
msgid "cw_import_of_object"
msgstr "imports"
-msgid "cw_schema"
-msgstr "schéma"
-
-msgctxt "CWSourceSchemaConfig"
-msgid "cw_schema"
-msgstr "schéma"
-
-msgid "cw_schema_object"
-msgstr "mappé par"
-
-msgctxt "CWEType"
-msgid "cw_schema_object"
-msgstr "mappé par"
-
-msgctxt "CWRType"
-msgid "cw_schema_object"
-msgstr "mappé par"
-
-msgctxt "CWRelation"
-msgid "cw_schema_object"
-msgstr "mappé par"
-
msgid "cw_source"
msgstr "source"
@@ -2163,15 +2088,19 @@
msgid "cwrtype-permissions"
msgstr "permissions"
+msgid "cwsessiondata"
+msgstr "Données de session"
+
+msgctxt "CWSession"
+msgid "cwsessiondata"
+msgstr "Données de session"
+
msgid "cwsource-imports"
msgstr "imports"
msgid "cwsource-main"
msgstr "description"
-msgid "cwsource-mapping"
-msgstr "mapping"
-
msgid "cwuri"
msgstr "uri interne"
@@ -2515,11 +2444,6 @@
msgid "entities deleted"
msgstr "entités supprimées"
-msgid "entity and relation types can't be mapped, only attributes or relations"
-msgstr ""
-"les types d'entités et de relations ne peuvent être mappés, uniquement les "
-"relations"
-
msgid "entity copied"
msgstr "entité copiée"
@@ -2556,9 +2480,6 @@
msgid "entityview"
msgstr "vues d'entité"
-msgid "error"
-msgstr "erreur"
-
msgid "error while publishing ReST text"
msgstr ""
"une erreur s'est produite lors de l'interprétation du texte au format ReST"
@@ -3502,10 +3423,6 @@
msgid "options"
msgstr "options"
-msgctxt "CWSourceSchemaConfig"
-msgid "options"
-msgstr "options"
-
msgid "order"
msgstr "ordre"
@@ -3701,30 +3618,6 @@
msgid "relation %(relname)s of %(ent)s"
msgstr "relation %(relname)s de %(ent)s"
-#, python-format
-msgid ""
-"relation %(rtype)s with %(etype)s as %(role)s is supported but no target "
-"type supported"
-msgstr ""
-"la relation %(rtype)s avec %(etype)s comme %(role)s est supportée mais aucun "
-"type cible n'est supporté"
-
-#, python-format
-msgid ""
-"relation %(type)s with %(etype)s as %(role)s and target type %(target)s is "
-"mandatory but not supported"
-msgstr ""
-"la relation %(rtype)s avec %(etype)s comme %(role)s est obligatoire mais non "
-"supportée"
-
-#, python-format
-msgid ""
-"relation %s is supported but none of its definitions matches supported "
-"entities"
-msgstr ""
-"la relation %s est supportée mais aucune de ses définitions ne correspondent "
-"aux types d'entités supportés"
-
msgid "relation add"
msgstr "ajout de relation"
@@ -4221,15 +4114,9 @@
msgid "this entity is currently owned by"
msgstr "cette entité appartient à"
-msgid "this parser doesn't use a mapping"
-msgstr "ce parseur n'utilise pas de mapping"
-
msgid "this resource does not exist"
msgstr "cette ressource est introuvable"
-msgid "this source doesn't use a mapping"
-msgstr "cette source n'utilise pas de mapping"
-
msgid "thursday"
msgstr "jeudi"
@@ -4634,6 +4521,9 @@
msgid "view identifier"
msgstr "identifiant"
+msgid "view original"
+msgstr "voir l'original"
+
msgid "view title"
msgstr "titre"
@@ -4646,9 +4536,6 @@
msgid "visible"
msgstr "visible"
-msgid "warning"
-msgstr "attention"
-
msgid "we are not yet ready to handle this query"
msgstr ""
"nous ne sommes pas capable de gérer ce type de requête sparql pour le moment"
@@ -4738,10 +4625,3 @@
msgid "you should probably delete that property"
msgstr "vous devriez probablement supprimer cette propriété"
-
-#~ msgid "edit canceled"
-#~ msgstr "édition annulée"
-
-#~ msgid "the value \"%s\" is already used, use another one"
-#~ msgstr ""
-#~ "la valeur \"%s\" est déjà utilisée, veuillez utiliser une autre valeur"
--- a/cubicweb/misc/migration/3.24.0_Any.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/misc/migration/3.24.0_Any.py Fri Nov 18 15:42:10 2016 +0100
@@ -8,4 +8,6 @@
sql('ALTER TABLE entities DROP COLUMN extid')
sql('DROP INDEX entities_type_idx')
+# force cw_schema deletion before CWSourceSchemaConfig to avoid nasty bug
+drop_relation_type('cw_schema')
drop_entity_type('CWSourceSchemaConfig')
--- a/cubicweb/pyramid/__init__.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/__init__.py Fri Nov 18 15:42:10 2016 +0100
@@ -28,6 +28,7 @@
config.include('cubicweb.pyramid')
return config
+
def settings_from_cwconfig(cwconfig):
'''
Extract settings from pyramid.ini and pyramid-debug.ini (if in debug)
@@ -42,21 +43,21 @@
if cwconfig.debugmode:
settings_filenames.insert(
0, os.path.join(cwconfig.apphome, 'pyramid-debug.ini'))
-
+
settings.update({
'pyramid.debug_authorization': True,
'pyramid.debug_notfound': True,
'pyramid.debug_routematch': True,
'pyramid.reload_templates': True,
})
-
+
for fname in settings_filenames:
if os.path.exists(fname):
cp = SafeConfigParser()
cp.read(fname)
settings.update(cp.items('main'))
break
-
+
return settings
--- a/cubicweb/pyramid/auth.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/auth.py Fri Nov 18 15:42:10 2016 +0100
@@ -159,8 +159,8 @@
defaults={
'hashalg': 'sha512',
'cookie_name': 'pauth_tkt',
- 'max_age': 3600*24*30,
- 'reissue_time': 3600*24,
+ 'max_age': 3600 * 24 * 30,
+ 'reissue_time': 3600 * 24,
'http_only': True,
'secure': True
},
--- a/cubicweb/pyramid/bwcompat.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/bwcompat.py Fri Nov 18 15:42:10 2016 +0100
@@ -103,7 +103,6 @@
if content is not None:
request.response.body = content
-
except LogOut as ex:
# The actual 'logging out' logic should be in separated function
# that is accessible by the pyramid views
@@ -116,6 +115,11 @@
content = vreg['views'].main_template(req, 'login')
request.response.status_code = 403
request.response.body = content
+ except cubicweb.web.NotFound as ex:
+ view = vreg['views'].select('404', req)
+ content = vreg['views'].main_template(req, view=view)
+ request.response.status_code = ex.status
+ request.response.body = content
finally:
# XXX CubicWebPyramidRequest.headers_out should
# access directly the pyramid response headers.
--- a/cubicweb/pyramid/core.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/core.py Fri Nov 18 15:42:10 2016 +0100
@@ -7,7 +7,6 @@
import rql
from cubicweb.web.request import CubicWebRequestBase
-from cubicweb import repoapi
import cubicweb
import cubicweb.web
@@ -29,9 +28,11 @@
This behavior makes sure the actual session data is not loaded until
actually accessed.
"""
+
def __init__(self, session, *args, **kw):
super(Connection, self).__init__(session, *args, **kw)
self._session = session
+ self.lang = session._cached_lang
def _get_session_data(self):
return self._session.data
@@ -272,14 +273,15 @@
"""A lightweight version of
:meth:`cubicweb.server.repository.Repository.connect` that does not keep
track of opened sessions, removing the need of closing them"""
- user = tools.cached_build_user(repo, eid)
+ user, lang = tools.cached_build_user(repo, eid)
session = Session(request, user, repo)
+ session._cached_lang = lang
tools.cnx_attach_entity(session, user)
# Calling the hooks should be done only once, disabling it completely for
# now
- #with session.new_cnx() as cnx:
- #repo.hm.call_hooks('session_open', cnx)
- #cnx.commit()
+ # with session.new_cnx() as cnx:
+ # repo.hm.call_hooks('session_open', cnx)
+ # cnx.commit()
# repo._sessions[session.sessionid] = session
return session
--- a/cubicweb/pyramid/login.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/login.py Fri Nov 18 15:42:10 2016 +0100
@@ -47,6 +47,10 @@
user = repo.authenticate_user(cnx, login, password=password)
user_eid = user.eid
except cubicweb.AuthenticationError:
+ if repo.vreg.config.get('language-mode') != '':
+ lang = request.cw_request.negotiated_language()
+ if lang is not None:
+ request.cw_request.set_language(lang)
request.cw_request.set_message(request.cw_request._(
"Authentication failed. Please check your credentials."))
request.cw_request.post = dict(request.params)
--- a/cubicweb/pyramid/pyramidctl.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/pyramidctl.py Fri Nov 18 15:42:10 2016 +0100
@@ -11,13 +11,11 @@
import os
import signal
import sys
-import tempfile
import time
import threading
import subprocess
from cubicweb import BadCommandUsage, ExecutionError
-from cubicweb.__pkginfo__ import numversion as cwversion
from cubicweb.cwconfig import CubicWebConfiguration as cwcfg
from cubicweb.cwctl import CWCTL, InstanceCommand, init_cmdline_log_threshold
from cubicweb.pyramid import wsgi_application_from_cwconfig
@@ -34,12 +32,11 @@
class PyramidStartHandler(InstanceCommand):
"""Start an interactive pyramid server.
- This command requires http://hg.logilab.org/review/pyramid_cubicweb/
-
<instance>
identifier of the instance to configure.
"""
name = 'pyramid'
+ actionverb = 'started'
options = (
('no-daemon',
@@ -86,20 +83,15 @@
'metavar': 'N',
'help': 'Dump profile stats to ouput every N requests '
'(default: 100)'}),
+ ('param',
+ {'short': 'p',
+ 'type': 'named',
+ 'metavar': 'key1:value1,key2:value2',
+ 'default': {},
+ 'help': 'override <key> configuration file option with <value>.'}),
)
- if cwversion >= (3, 21, 0):
- options = options + (
- ('param',
- {'short': 'p',
- 'type': 'named',
- 'metavar': 'key1:value1,key2:value2',
- 'default': {},
- 'help': 'override <key> configuration file option with <value>.',
- }),
- )
_reloader_environ_key = 'CW_RELOADER_SHOULD_RUN'
- _reloader_filelist_environ_key = 'CW_RELOADER_FILELIST'
def debug(self, msg):
print('DEBUG - %s' % msg)
@@ -222,17 +214,17 @@
os.dup2(0, 1) # standard output (1)
os.dup2(0, 2) # standard error (2)
- def restart_with_reloader(self):
+ def restart_with_reloader(self, filelist_path):
self.debug('Starting subprocess with file monitor')
- with tempfile.NamedTemporaryFile(delete=False) as f:
- filelist_path = f.name
+ # Create or clear monitored files list file.
+ with open(filelist_path, 'w') as f:
+ pass
while True:
args = [self.quote_first_command_arg(sys.executable)] + sys.argv
new_environ = os.environ.copy()
new_environ[self._reloader_environ_key] = 'true'
- new_environ[self._reloader_filelist_environ_key] = filelist_path
proc = None
try:
try:
@@ -299,12 +291,13 @@
autoreload = self['reload'] or self['debug']
daemonize = not (self['no-daemon'] or debugmode or autoreload)
- if autoreload and not os.environ.get(self._reloader_environ_key):
- return self.restart_with_reloader()
+ cwconfig = cwcfg.config_for(appid, debugmode=debugmode)
+ filelist_path = os.path.join(cwconfig.apphome,
+ '.pyramid-reload-files.list')
- cwconfig = cwcfg.config_for(appid, debugmode=debugmode)
- if cwversion >= (3, 21, 0):
- cwconfig.cmdline_options = self.config.param
+ if autoreload and not os.environ.get(self._reloader_environ_key):
+ return self.restart_with_reloader(filelist_path)
+
if autoreload:
_turn_sigterm_into_systemexit()
self.debug('Running reloading file monitor')
@@ -313,8 +306,7 @@
extra_files.extend(self.i18nfiles(cwconfig))
self.install_reloader(
self['reload-interval'], extra_files,
- filelist_path=os.environ.get(
- self._reloader_filelist_environ_key))
+ filelist_path=filelist_path)
if daemonize:
self.daemonize(cwconfig['pid-file'])
@@ -343,6 +335,7 @@
return 3
return 0
+
CWCTL.register(PyramidStartHandler)
--- a/cubicweb/pyramid/resources.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/resources.py Fri Nov 18 15:42:10 2016 +0100
@@ -64,8 +64,17 @@
self.cls = vreg['etypes'].etype_class(self.etype)
def __getitem__(self, value):
- attrname = self.cls.cw_rest_attr_info()[0]
- return EntityResource(self.request, self.cls, attrname, value)
+ # Try eid first, then rest attribute as for URL path evaluation
+ # mecanism in cubicweb.web.views.urlpublishing.
+ for attrname in ('eid', self.cls.cw_rest_attr_info()[0]):
+ resource = EntityResource(self.request, self.cls, attrname, value)
+ try:
+ rset = resource.rset
+ except HTTPNotFound:
+ continue
+ if rset.rowcount:
+ return resource
+ raise KeyError(value)
@reify
def rset(self):
--- a/cubicweb/pyramid/rest_api.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/rest_api.py Fri Nov 18 15:42:10 2016 +0100
@@ -1,10 +1,8 @@
from __future__ import absolute_import
-from pyramid.httpexceptions import HTTPNotFound
from pyramid.view import view_config
from cubicweb.pyramid.resources import EntityResource, ETypeResource
-from cubicweb.pyramid.predicates import MatchIsETypePredicate
@view_config(
--- a/cubicweb/pyramid/test/test_bw_request.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/test/test_bw_request.py Fri Nov 18 15:42:10 2016 +0100
@@ -52,7 +52,7 @@
self.assertIn('https://', r.text)
def test_big_content(self):
- content = b'x'*100001
+ content = b'x' * 100001
req = CubicWebPyramidRequest(
self.make_request('/', {
@@ -97,6 +97,11 @@
content_type='application/x-www-form-urlencoded'))
self.assertEqual(u"é", req.form['arg'])
+ def test_404(self):
+ r = self.webapp.get('/unexisting/', status=404)
+ self.assertNotIn('error occurred', r.text)
+ self.assertIn('resource does not exist', r.text)
+
if __name__ == '__main__':
from unittest import main
--- a/cubicweb/pyramid/test/test_login.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/test/test_login.py Fri Nov 18 15:42:10 2016 +0100
@@ -1,3 +1,6 @@
+from os.path import join
+from shutil import rmtree
+
from cubicweb.pyramid.test import PyramidCWTest
@@ -41,9 +44,17 @@
self.assertIsNotNone(cookies['pauth_tkt'].expires)
def test_login_bad_password(self):
- res = self.webapp.post('/login', {
- '__login': self.admlogin, '__password': 'empty'}, status=403)
- self.assertIn('Authentication failed', res.text)
+ self.config.i18ncompile(['en', 'fr'])
+ try:
+ self.config._gettext_init()
+ res = self.webapp.post(
+ '/login',
+ {'__login': self.admlogin, '__password': 'empty'},
+ headers={'Accept-Language': 'fr'},
+ status=403)
+ finally:
+ rmtree(join(self.config.apphome, 'i18n'))
+ self.assertIn(u"\xc9chec de l'authentification", res.text)
if __name__ == '__main__':
--- a/cubicweb/pyramid/tools.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/pyramid/tools.py Fri Nov 18 15:42:10 2016 +0100
@@ -43,21 +43,17 @@
"""Cached version of
:meth:`cubicweb.server.repository.Repository._build_user`
"""
+ if eid in _user_cache:
+ user, lang = _user_cache[eid]
+ entity = clone_user(repo, user)
+ return entity, lang
+
with repo.internal_cnx() as cnx:
- if eid in _user_cache:
- entity = clone_user(repo, _user_cache[eid])
- # XXX the cnx is needed here so that the CWUser instance has an
- # access to the vreg, which it needs when its 'prefered_language'
- # property is accessed.
- # If this property did not need a cnx to access a vreg, we could
- # avoid the internal_cnx() and save more time.
- cnx_attach_entity(cnx, entity)
- return entity
-
user = repo._build_user(cnx, eid)
+ lang = user.prefered_language()
user.cw_clear_relation_cache()
- _user_cache[eid] = clone_user(repo, user)
- return user
+ _user_cache[eid] = (clone_user(repo, user), lang)
+ return user, lang
def clear_cache():
@@ -72,5 +68,5 @@
"""
repo = config.registry['cubicweb.repository']
interval = int(config.registry.settings.get(
- 'cubicweb.usercache.expiration_time', 60*5))
+ 'cubicweb.usercache.expiration_time', 60 * 5))
repo.looping_task(interval, clear_cache)
--- a/cubicweb/req.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/req.py Fri Nov 18 15:42:10 2016 +0100
@@ -74,6 +74,7 @@
# should be emptied on commit/rollback of the server session / web
# connection
self.user = None
+ self.lang = None
self.local_perm_cache = {}
self._ = text_type
@@ -95,7 +96,15 @@
Raises :exc:`KeyError` if translation doesn't exist.
"""
self.lang = lang
- gettext, pgettext = self.vreg.config.translations[lang]
+ try:
+ gettext, pgettext = self.vreg.config.translations[lang]
+ except KeyError:
+ assert self.vreg.config.mode == 'test'
+ gettext = text_type
+
+ def pgettext(x, y):
+ return text_type(y)
+
# use _cw.__ to translate a message without registering it to the catalog
self._ = self.__ = gettext
self.pgettext = pgettext
--- a/cubicweb/server/repository.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/server/repository.py Fri Nov 18 15:42:10 2016 +0100
@@ -32,6 +32,7 @@
from itertools import chain
from time import time, localtime, strftime
from contextlib import contextmanager
+from logging import getLogger
from six.moves import range, queue
@@ -45,6 +46,7 @@
UnknownEid, AuthenticationError, ExecutionError,
BadConnectionId, ValidationError, Unauthorized,
UniqueTogetherError, onevent, ViolatedConstraint)
+from cubicweb import set_log_methods
from cubicweb import cwvreg, schema, server
from cubicweb.server import ShuttingDown, utils, hook, querier, sources
from cubicweb.server.session import Session, InternalManager
@@ -155,6 +157,7 @@
def __init__(self, config, tasks_manager=None, vreg=None):
self.config = config
+ self.sources_by_eid = {}
if vreg is None:
vreg = cwvreg.CWRegistryStore(config)
self.vreg = vreg
@@ -262,7 +265,6 @@
# internals ###############################################################
def init_sources_from_database(self):
- self.sources_by_eid = {}
if self.config.quick_start or 'CWSource' not in self.schema: # 3.10 migration
self.system_source.init_creating()
return
@@ -1033,6 +1035,4 @@
info = warning = error = critical = exception = debug = lambda msg, *a, **kw: None
-from logging import getLogger
-from cubicweb import set_log_methods
set_log_methods(Repository, getLogger('cubicweb.repository'))
--- a/cubicweb/server/schema2sql.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/server/schema2sql.py Fri Nov 18 15:42:10 2016 +0100
@@ -17,8 +17,6 @@
# with yams. If not, see <http://www.gnu.org/licenses/>.
"""write a schema as sql"""
-
-
from hashlib import md5
from six import string_types, text_type
--- a/cubicweb/server/session.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/server/session.py Fri Nov 18 15:42:10 2016 +0100
@@ -168,6 +168,7 @@
if self.oldwrite is not None:
self.cnx.write_security = self.oldwrite
+
HOOKS_ALLOW_ALL = object()
HOOKS_DENY_ALL = object()
DEFAULT_SECURITY = object() # evaluated to true by design
@@ -383,6 +384,8 @@
assert not self._open
self._open = True
self.cnxset = self.repo._get_cnxset()
+ if self.lang is None:
+ self.set_language(self.user.prefered_language())
return self
def __exit__(self, exctype=None, excvalue=None, tb=None):
--- a/cubicweb/server/sqlutils.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/server/sqlutils.py Fri Nov 18 15:42:10 2016 +0100
@@ -16,10 +16,9 @@
# You should have received a copy of the GNU Lesser General Public License along
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>.
"""SQL utilities functions and classes."""
+
from __future__ import print_function
-
-
import sys
import re
import subprocess
@@ -458,6 +457,7 @@
# only defining here to prevent pylint from complaining
info = warning = error = critical = exception = debug = lambda msg, *a, **kw: None
+
set_log_methods(SQLAdapterMixIn, getLogger('cubicweb.sqladapter'))
@@ -560,6 +560,7 @@
import yams.constraints
yams.constraints.patch_sqlite_decimal()
+
sqlite_hooks = SQL_CONNECT_HOOKS.setdefault('sqlite', [])
sqlite_hooks.append(_init_sqlite_connection)
@@ -571,5 +572,6 @@
# rolled back
cnx.commit()
+
postgres_hooks = SQL_CONNECT_HOOKS.setdefault('postgres', [])
postgres_hooks.append(_init_postgres_connection)
--- a/cubicweb/skeleton/debian/control.tmpl Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/skeleton/debian/control.tmpl Fri Nov 18 15:42:10 2016 +0100
@@ -13,7 +13,7 @@
Package: %(distname)s
Architecture: all
Depends:
- cubicweb-common (>= %(version)s),
+ python-cubicweb (>= %(version)s),
python-six (>= 1.4.0),
${python:Depends},
${misc:Depends},
@@ -22,5 +22,5 @@
.
%(longdesc)s
.
- This package will install all the components you need to run the
- %(distname)s application (cube :)..
+ This package will install all the components you need to run an application
+ using the %(distname)s cube.
--- a/cubicweb/sobjects/textparsers.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/sobjects/textparsers.py Fri Nov 18 15:42:10 2016 +0100
@@ -22,8 +22,6 @@
will provide the text to analyze...
"""
-
-
import re
from cubicweb import UnknownEid
--- a/cubicweb/test/unittest_repoapi.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/test/unittest_repoapi.py Fri Nov 18 15:42:10 2016 +0100
@@ -83,6 +83,13 @@
rset = cnx.execute('Any X WHERE X is CWUser')
self.assertTrue(rset)
+ def test_cnx_has_lang(self):
+ """check that client and repo cnx have .lang set"""
+ with self.admin_access.client_cnx() as cnx:
+ self.assertEqual(cnx.lang, 'en')
+ with self.admin_access.repo_cnx() as cnx:
+ self.assertEqual(cnx.lang, 'en')
+
if __name__ == '__main__':
from logilab.common.testlib import unittest_main
--- a/cubicweb/web/request.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/web/request.py Fri Nov 18 15:42:10 2016 +0100
@@ -146,10 +146,9 @@
#: Header used for the final response
self.headers_out = Headers()
#: HTTP status use by the final response
- self.status_out = 200
- # set up language based on request headers or site default (we don't
- # have a user yet, and might not get one)
- self.set_user_language(None)
+ self.status_out = 200
+ # set up language based on site default (we don't have a user yet, and might not get one)
+ self.set_language(vreg.property_value('ui.language'))
#: dictionary that may be used to store request data that has to be
#: shared among various components used to publish the request (views,
#: controller, application...)
@@ -664,7 +663,7 @@
def build_url_path(self, *args):
path = super(_CubicWebRequestBase, self).build_url_path(*args)
lang_prefix = ''
- if self.lang and self.vreg.config.get('language-mode') == 'url-prefix':
+ if self.lang is not None and self.vreg.config.get('language-mode') == 'url-prefix':
lang_prefix = '%s/' % self.lang
return lang_prefix + path
@@ -929,18 +928,6 @@
return lang
return None
- def set_user_language(self, user):
- vreg = self.vreg
- if user is not None:
- try:
- lang = vreg.typed_value('ui.language', user.properties['ui.language'])
- self.set_language(lang)
- return
- except KeyError:
- pass
- # site's default language
- self.set_default_language(vreg)
-
def _cnx_func(name):
def proxy(req, *args, **kwargs):
@@ -993,25 +980,15 @@
self.cnx = cnx
self.session = cnx.session
self._set_user(cnx.user)
- self.set_user_language(cnx.user)
+ # set language according to the one defined on the connection which consider user's
+ # preference
+ self.set_language(cnx.lang)
def execute(self, *args, **kwargs):
rset = self.cnx.execute(*args, **kwargs)
rset.req = self
return rset
- def set_default_language(self, vreg):
- try:
- lang = vreg.property_value('ui.language')
- except Exception: # property may not be registered
- lang = 'en'
- try:
- self.set_language(lang)
- except KeyError:
- # this occurs usually during test execution
- self._ = self.__ = text_type
- self.pgettext = lambda x, y: text_type(y)
-
entity_metas = _cnx_func('entity_metas') # XXX deprecated
entity_type = _cnx_func('entity_type')
source_defs = _cnx_func('source_defs')
--- a/cubicweb/web/test/unittest_application.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/web/test/unittest_application.py Fri Nov 18 15:42:10 2016 +0100
@@ -248,8 +248,9 @@
"""Language negociated, normal case."""
self.config.global_set_option('language-mode', 'http-negotiation')
orig_translations = self.config.translations.copy()
- self.config.translations = {'fr': (text_type, text_type),
- 'en': (text_type, text_type)}
+ self.config.translations = {
+ 'fr': (text_type, lambda x, y: text_type(y)),
+ 'en': (text_type, lambda x, y: text_type(y))}
try:
headers = {'Accept-Language': 'fr'}
with self.admin_access.web_request(headers=headers) as req:
--- a/cubicweb/web/test/unittest_request.py Thu Nov 17 11:00:01 2016 +0100
+++ b/cubicweb/web/test/unittest_request.py Fri Nov 18 15:42:10 2016 +0100
@@ -6,7 +6,7 @@
from six import text_type
-from cubicweb.devtools.fake import FakeConfig
+from cubicweb.devtools.fake import FakeConfig, FakeCWRegistryStore
from cubicweb.web.request import (CubicWebRequestBase, _parse_accept_header,
_mimetype_sort_key, _mimetype_parser, _charset_sort_key)
@@ -72,8 +72,7 @@
class WebRequestTC(unittest.TestCase):
def test_base_url(self):
- dummy_vreg = type('DummyVreg', (object,), {})()
- dummy_vreg.config = FakeConfig()
+ dummy_vreg = FakeCWRegistryStore(FakeConfig(), initlog=False)
dummy_vreg.config['base-url'] = 'http://babar.com/'
dummy_vreg.config['https-url'] = 'https://toto.com/'
@@ -88,8 +87,7 @@
self.assertEqual('https://toto.com/', req.base_url(True))
def test_negotiated_language(self):
- vreg = type('DummyVreg', (object,), {})()
- vreg.config = FakeConfig()
+ vreg = FakeCWRegistryStore(FakeConfig(), initlog=False)
vreg.config.translations = {'fr': (None, None), 'en': (None, None)}
headers = {
'Accept-Language': 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3',
@@ -98,7 +96,7 @@
self.assertEqual(req.negotiated_language(), 'fr')
def test_build_url_language_from_url(self):
- vreg = type('DummyVreg', (object,), {'config': FakeConfig()})()
+ vreg = FakeCWRegistryStore(FakeConfig(), initlog=False)
vreg.config['base-url'] = 'http://testing.fr/cubicweb/'
vreg.config['language-mode'] = 'url-prefix'
vreg.config.translations['fr'] = text_type, text_type
--- a/debian/changelog Thu Nov 17 11:00:01 2016 +0100
+++ b/debian/changelog Fri Nov 18 15:42:10 2016 +0100
@@ -1,3 +1,20 @@
+cubicweb (3.24.1-1) unstable; urgency=medium
+
+ * New upstream release.
+
+ * Ship the CubicWeb library in a single binary package python-cubicweb. Yet
+ keep meta packages for dependencies on the HTTP server (Pyramid or
+ Twisted) and the database backend.
+
+ * Remove cubicweb-mysql-support.
+
+ * Use dh_python and pybuild.
+
+ * Remove all daemon-related stuff from cubicweb-ctl package (since a
+ CubicWeb application should now be managed by a WSGI server).
+
+ -- David Douard <david.douard@logilab.fr> Fri, 18 Nov 2016 14:58:28 +0100
+
cubicweb (3.24.0-1) unstable; urgency=medium
* New upstream release.
--- a/debian/compat Thu Nov 17 11:00:01 2016 +0100
+++ b/debian/compat Fri Nov 18 15:42:10 2016 +0100
@@ -1,1 +1,1 @@
-7
+9
--- a/debian/control Thu Nov 17 11:00:01 2016 +0100
+++ b/debian/control Fri Nov 18 15:42:10 2016 +0100
@@ -3,12 +3,15 @@
Priority: optional
Maintainer: Logilab S.A. <contact@logilab.fr>
Uploaders: Sylvain Thenault <sylvain.thenault@logilab.fr>,
- Adrien Di Mascio <Adrien.DiMascio@logilab.fr>,
- Nicolas Chauvat <nicolas.chauvat@logilab.fr>
+ David Douard <david.douard@logilab.fr>,
Build-Depends:
- debhelper (>= 7),
- python (>= 2.6),
+ debhelper (>= 9),
+ dh-python,
+ dh-systemd,
+ python-all,
+ python-setuptools,
python-six (>= 1.4.0),
+ python-docutils,
python-sphinx,
python-logilab-common (>= 1.2.2),
python-unittest2,
@@ -20,22 +23,93 @@
python-lxml,
python-setuptools,
python-pyramid,
+ python-pyramid-multiauth,
python-waitress,
-Standards-Version: 3.9.1
+ python-passlib,
+ python-wsgicors,
+ sphinx-common,
+Standards-Version: 3.9.6
Homepage: https://www.cubicweb.org
-X-Python-Version: >= 2.6
+X-Python-Version: >= 2.7
-Package: cubicweb
+
+Package: python-cubicweb
Architecture: all
Depends:
${misc:Depends},
${python:Depends},
- cubicweb-server (= ${source:Version}),
- cubicweb-twisted (= ${source:Version})
+ python-six (>= 1.4.0),
+ python-logilab-mtconverter (>= 0.8.0),
+ python-logilab-common (>= 1.2.0),
+ python-logilab-database (>= 1.15.0),
+ python-yams (>= 0.44.0),
+ python-rql (>= 0.34.0),
+ python-lxml,
+ python-markdown,
+ python-passlib,
+ python-tz,
+ graphviz,
+ gettext,
Recommends:
- postgresql
- | mysql
- | sqlite3
+ cubicweb-ctl (= ${source:Version}),
+ python-cubicweb-postgresql-support (= ${source:Version})
+ | sqlite3,
+ python-cubicweb-pyramid (= ${source:Version}),
+# common recommends
+ python-simpletal (>= 4.0),
+ python-crypto,
+# web recommends (mostly)
+ python-docutils (>= 0.6),
+ python-vobject,
+ fckeditor,
+ python-fyzz,
+ python-imaging,
+ python-rdflib,
+ python-werkzeug,
+# dev recommends
+ python-unittest2 (>= 0.7.0),
+ python-pysqlite2,
+Suggests:
+ python-zmq,
+ python-cwclientlib (>= 0.4.0),
+ python-cubicweb-twisted (= ${source:Version}),
+ python-cubicweb-documentation (= ${source:Version}),
+ w3c-dtd-xhtml,
+ xvfb,
+Replaces:
+ cubicweb (<< 3.24.0-1~),
+ cubicweb-server (<< 3.24.0-1~),
+ cubicweb-twisted (<< 3.24.0-1~),
+ cubicweb-web (<< 3.24.0-1~),
+ cubicweb-core,
+ cubicweb-common (<< 3.24.0-1~),
+Breaks:
+ cubicweb (<< 3.24.0-1~),
+ cubicweb-server (<< 3.24.0-1~),
+ cubicweb-twisted (<< 3.24.0-1~),
+ cubicweb-inlinedit (<< 1.1.1),
+ cubicweb-bootstrap (<< 0.6.6),
+ cubicweb-folder (<< 1.10.0),
+ cubicweb-web (<< 3.24.0-1~),
+ cubicweb-comment (<< 1.9.1),
+ cubicweb-person (<< 1.8.0),
+ cubicweb-geocoding (<< 0.2.0),
+ cubicweb-invoice (<< 0.6.1),
+ cubicweb-mercurial-server (<< 0.4.2),
+ cubicweb-forgotpwd (<< 0.4.3),
+ cubicweb-registration (<< 0.4.3),
+ cubicweb-vcsfile (<< 1.15.0),
+ cubicweb-bootstrap (<< 0.6),
+ cubicweb-common (<< 3.24.0-1~),
+Provides:
+ cubicweb,
+ cubicweb-server,
+ cubicweb-web-frontend,
+ cubicweb-web,
+ cubicweb-common,
+Conflicts:
+ cubicweb-multisources,
+ cubicweb-core,
Description: the complete CubicWeb framework
CubicWeb is a semantic web application framework.
.
@@ -44,39 +118,13 @@
on different computers, in which case you need to install the corresponding
packages on the different hosts.
-Package: cubicweb-server
-Architecture: all
-Conflicts:
- cubicweb-multisources
-Replaces: cubicweb-multisources
-Provides: cubicweb-multisources
-Depends:
- ${misc:Depends},
- ${python:Depends},
- cubicweb-common (= ${source:Version}),
- cubicweb-ctl (= ${source:Version}),
- python-logilab-database (>= 1.15.0),
- cubicweb-postgresql-support
- | cubicweb-mysql-support
- | python-pysqlite2,
- python-passlib,
- python-tz,
-Recommends:
- cubicweb-documentation (= ${source:Version}),
-Suggests:
- python-zmq,
- python-cwclientlib (>= 0.4.0),
-Description: server part of the CubicWeb framework
- CubicWeb is a semantic web application framework.
- .
- This package provides the repository server part of the system.
- .
- This package provides the repository server part of the library and
- necessary shared data files such as the schema library.
-Package: cubicweb-postgresql-support
+Package: python-cubicweb-postgresql-support
Architecture: all
# postgresql-client packages for backup/restore of non local database
+Replaces: cubicweb-postgresql-support (<< 3.24.0-1~)
+Breaks: cubicweb-postgresql-support (<< 3.24.0-1~)
+Provides: cubicweb-postgresql-support
Depends:
${misc:Depends},
${python:Depends},
@@ -85,51 +133,26 @@
Description: postgres support for the CubicWeb framework
CubicWeb is a semantic web application framework.
.
- This virtual package provides dependencies to use postgres for the
- cubicweb repository.
-
-Package: cubicweb-mysql-support
-Architecture: all
-# mysql-client packages for backup/restore of non local database
-Depends:
- ${misc:Depends},
- ${python:Depends},
- python-mysqldb,
- mysql-client
-Description: mysql support for the CubicWeb framework
- CubicWeb is a semantic web application framework.
- .
- This virtual package provides dependencies to use mysql for the
+ This virtual package provides dependencies to use PostgreSQL for the
cubicweb repository.
-Package: cubicweb-twisted
+Package: python-cubicweb-twisted
Architecture: all
-Provides: cubicweb-web-frontend
Depends:
- ${misc:Depends},
- ${python:Depends},
- cubicweb-web (= ${source:Version}),
- cubicweb-ctl (= ${source:Version}),
+ python-cubicweb (= ${source:Version}),
python-twisted-web (<< 16.0.0),
-Recommends:
- cubicweb-documentation (= ${source:Version})
-Description: twisted-based web interface for the CubicWeb framework
+Description: meta package to use Twisted as HTTP server for CubicWeb
CubicWeb is a semantic web application framework.
.
- This package provides a twisted based HTTP server to serve
- the adaptative web interface (see cubicweb-web package).
- .
- This package provides only the twisted server part of the library.
+ This package includes dependencies to run a Twisted based HTTP server to serve
+ the adaptative web interface.
-Package: cubicweb-pyramid
+Package: python-cubicweb-pyramid
Architecture: all
Depends:
- ${misc:Depends},
- ${python:Depends},
- cubicweb-web (= ${source:Version}),
- cubicweb-ctl (= ${source:Version}),
+ python-cubicweb (= ${source:Version}),
python-pyramid (>= 1.5.0),
python-pyramid-multiauth,
python-waitress (>= 0.8.9),
@@ -140,76 +163,9 @@
pyramid-cubicweb
Replaces:
pyramid-cubicweb
-Description: Integrate CubicWeb with a Pyramid application
+Description: meta package to use Pyramid as HTTP server for CubicWeb
Provides pyramid extensions to load a CubicWeb instance and serve it through
the pyramid stack.
- .
- It prefigures what CubicWeb 4.0 will be.
-
-
-Package: cubicweb-web
-Architecture: all
-Depends:
- ${misc:Depends},
- ${python:Depends},
- cubicweb-common (= ${source:Version}),
-Recommends:
- python-docutils (>= 0.6),
- python-vobject,
- fckeditor,
- python-fyzz,
- python-imaging,
- python-rdflib,
- python-werkzeug,
-Breaks:
- cubicweb-inlinedit (<< 1.1.1),
- cubicweb-bootstrap (<< 0.6.6),
- cubicweb-folder (<< 1.10.0),
-Description: web interface library for the CubicWeb framework
- CubicWeb is a semantic web application framework.
- .
- This package provides an adaptative web interface to the CubicWeb server.
- It also ships a WSGI interface for CubicWeb instances.
- Install the cubicweb-twisted package to serve this interface via HTTP.
- .
- This package provides the web interface part of the library and
- necessary shared data files such as defaut views, images...
-
-
-Package: cubicweb-common
-Architecture: all
-Depends:
- ${misc:Depends},
- ${python:Depends},
- graphviz,
- gettext,
- python-six (>= 1.4.0),
- python-logilab-mtconverter (>= 0.8.0),
- python-logilab-common (>= 1.2.0),
- python-markdown,
- python-yams (>= 0.44.0),
- python-rql (>= 0.34.0),
- python-lxml
-Recommends:
- python-simpletal (>= 4.0),
- python-crypto
-Conflicts: cubicweb-core
-Replaces: cubicweb-core
-Breaks:
- cubicweb-comment (<< 1.9.1),
- cubicweb-person (<< 1.8.0),
- cubicweb-geocoding (<< 0.2.0),
- cubicweb-invoice (<< 0.6.1),
- cubicweb-mercurial-server (<< 0.4.2),
- cubicweb-forgotpwd (<< 0.4.3),
- cubicweb-registration (<< 0.4.3),
- cubicweb-vcsfile (<< 1.15.0),
- cubicweb-bootstrap (<< 0.6),
-Description: common library for the CubicWeb framework
- CubicWeb is a semantic web application framework.
- .
- This package provides the common parts of the library used by both server
- code and web application code.
Package: cubicweb-ctl
@@ -217,7 +173,7 @@
Depends:
${misc:Depends},
${python:Depends},
- cubicweb-common (= ${source:Version})
+ python-cubicweb (= ${source:Version})
Description: tool to manage the CubicWeb framework
CubicWeb is a semantic web application framework.
.
@@ -226,33 +182,100 @@
to automatically start and stop CubicWeb applications on boot or shutdown.
-Package: cubicweb-dev
+Package: python-cubicweb-documentation
Architecture: all
+Section: doc
+Replaces: cubicweb-documentation (<< 3.24.0-1~)
+Breaks: cubicweb-documentation (<< 3.24.0-1~)
+Provides: cubicweb-documentation
Depends:
${misc:Depends},
- ${python:Depends},
- cubicweb-server (= ${source:Version}),
- cubicweb-web (= ${source:Version}),
- cubicweb-twisted (= ${source:Version}),
- python-unittest2 (>= 0.7.0),
- python-pysqlite2
-Suggests:
- w3c-dtd-xhtml,
- xvfb
-Description: tests suite and development tools for the CubicWeb framework
- CubicWeb is a semantic web application framework.
- .
- This package provides the CubicWeb tests suite and some development tools
- helping in the creation of application.
-
-
-Package: cubicweb-documentation
-Architecture: all
-Depends:
- ${misc:Depends},
+ ${sphinxdoc:Depends},
Recommends:
doc-base
Description: documentation for the CubicWeb framework
CubicWeb is a semantic web application framework.
.
This package provides the system's documentation.
+
+
+# Transitional packages after renaming of (most) binary packages
+
+Package: cubicweb
+Architecture: all
+Priority: extra
+Section: oldlibs
+Depends:
+ python-cubicweb, ${misc:Depends}
+Description: transitional package
+ This is a transitional package. It can safely be removed.
+
+
+Package: cubicweb-server
+Architecture: all
+Priority: extra
+Section: oldlibs
+Depends:
+ python-cubicweb, ${misc:Depends}
+Description: transitional package
+ This is a transitional package. It can safely be removed.
+
+
+Package: cubicweb-postgresql-support
+Architecture: all
+Priority: extra
+Section: oldlibs
+Depends:
+ python-cubicweb-postgresql-support, ${misc:Depends}
+Description: transitional package
+ This is a transitional package. It can safely be removed.
+
+
+Package: cubicweb-twisted
+Architecture: all
+Priority: extra
+Section: oldlibs
+Depends:
+ python-cubicweb-twisted, ${misc:Depends}
+Description: transitional package
+ This is a transitional package. It can safely be removed.
+
+
+Package: cubicweb-web
+Architecture: all
+Priority: extra
+Section: oldlibs
+Depends:
+ python-cubicweb, ${misc:Depends}
+Description: transitional package
+ This is a transitional package. It can safely be removed.
+
+
+Package: cubicweb-common
+Architecture: all
+Priority: extra
+Section: oldlibs
+Depends:
+ python-cubicweb, ${misc:Depends}
+Description: transitional package
+ This is a transitional package. It can safely be removed.
+
+
+Package: cubicweb-dev
+Architecture: all
+Priority: extra
+Section: oldlibs
+Depends:
+ python-cubicweb, ${misc:Depends}
+Description: transitional package
+ This is a transitional package. It can safely be removed.
+
+
+Package: cubicweb-documentation
+Architecture: all
+Priority: extra
+Section: oldlibs
+Depends:
+ python-cubicweb-documentation, ${misc:Depends}
+Description: transitional package
+ This is a transitional package. It can safely be removed.
--- a/debian/cubicweb-common.install Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-usr/lib/python2*/*-packages/cubicweb/entities/
-usr/lib/python2*/*-packages/cubicweb/ext/
-usr/share/cubicweb/cubes/
-usr/lib/python2*/*-packages/cubicweb/*.py
--- a/debian/cubicweb-ctl.bash_completion Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-# -*- shell-script -*-
-
-_ec_commands()
-{
- local commands
- commands="$("$ec" listcommands 2>/dev/null)" || commands=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur"))
-}
-
-_ec()
-{
- local cur prev cmd cmd_index opts i
- local ec="$1"
-
- COMPREPLY=()
- cur="$2"
- prev="$3"
-
- # searching for the command
- # (first non-option argument that doesn't follow a global option that
- # receives an argument)
- for ((i=1; $i<=$COMP_CWORD; i++)); do
- if [[ ${COMP_WORDS[i]} != -* ]]; then
- cmd="${COMP_WORDS[i]}"
- cmd_index=$i
- break
- fi
- done
-
- if [[ "$cur" == -* ]]; then
- if [ -z "$cmd" ]; then
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '--help' -- "$cur"))
- else
- options="$("$ec" listcommands "$cmd" 2>/dev/null)" || commands=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options' -- "$cur"))
- fi
- return
- fi
-
- if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then
- _ec_commands
- return
- fi
-
- # try to generate completion candidates for whatever command the user typed
- if _ec_command_specific; then
- return
- fi
-}
-
-_ec_command_specific()
-{
- if [ "$(type -t "_ec_cmd_$cmd")" = function ]; then
- "_ec_cmd_$cmd"
- return 0
- fi
-
- case "$cmd" in
- client)
- if [ "$prev" == "-b" ] || [ "$prev" == "--batch" ]; then
- COMPREPLY=( $( compgen -o filenames -G "$cur*" ) )
- return
- fi
- options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
- instances="$("$ec" listinstances 2>/dev/null)" || instances=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
- ;;
- db-dump)
- if [ "$prev" == "-o" ] || [ "$prev" == "--output" ]; then
- COMPREPLY=( $( compgen -o filenames -G "$cur*" ) )
- return
- fi
- options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
- instances="$("$ec" listinstances 2>/dev/null)" || instances=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
- ;;
- # commands with template as argument
- i18ncube)
- cubes="$("$ec" listcubes 2>/dev/null)" || cubes=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $cubes' -- "$cur"))
- ;;
- # generic commands with instance as argument
- start|stop|reload|restart|upgrade|start-repository|db-create|db-init|db-check|db-grant-user)
- options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
- instances="$("$ec" listinstances 2>/dev/null)" || instances=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
- ;;
- # generic commands without argument
- list|newtemplate|i18ncubicweb|live-server)
- options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
- ;;
- # generic commands without option
- shell|i18ninstance|delete|status|schema-sync)
- instances="$("$ec" listinstances 2>/dev/null)" || instances=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
- ;;
- # XXX should do better
- create)
- options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
- ;;
- db-copy,db-restore,mboximport)
- instances="$("$ec" listinstances 2>/dev/null)" || instances=""
- COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
- ;;
- *)
- return 1
- ;;
- esac
-
- return 0
-}
-
-complete -o bashdefault -o default -F _ec cubicweb-ctl 2>/dev/null \
- || complete -o default -F _ec cubicweb-ctl
--- a/debian/cubicweb-ctl.cubicweb.init Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-#!/bin/sh -e
-
-### BEGIN INIT INFO
-# Provides: cubicweb
-# Required-Start: $remote_fs $syslog $local_fs $network
-# Required-Stop: $remote_fs $syslog $local_fs $network
-# Should-Start: postgresql
-# Should-Stop: postgresql
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: Start cubicweb application at boot time
-### END INIT INFO
-
-# FIXME Seems to be inadequate here
-cd /tmp
-
-# FIXME Work-around about the following lintian error
-# E: cubicweb-ctl: init.d-script-does-not-implement-required-option /etc/init.d/cubicweb start
-#
-# Check if we are sure to not want the start-stop-daemon machinery here
-# Refer to Debian Policy Manual section 9.3.2 (Writing the scripts) for details.
-
-case $1 in
- force-reload)
- python -W ignore /usr/bin/cubicweb-ctl reload --force
- ;;
- status)
- python -W ignore /usr/bin/cubicweb-ctl status
- ;;
- start|stop|restart|*)
- python -W ignore /usr/bin/cubicweb-ctl $1 --force
- ;;
-esac
--- a/debian/cubicweb-ctl.install Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-usr/bin/cubicweb-ctl usr/bin/
-usr/lib/python2*/*-packages/cubicweb/cwctl.py
-../cubicweb-ctl.bash_completion etc/bash_completion.d/cubicweb-ctl
--- a/debian/cubicweb-ctl.logrotate Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-/var/log/cubicweb/*.log {
- weekly
- missingok
- rotate 10
- compress
- delaycompress
- notifempty
- create 640 root adm
- sharedscripts
- postrotate
- if [ -x /usr/sbin/invoke-rc.d ]; then \
- invoke-rc.d cubicweb reload > /dev/null 2>&1; \
- else \
- /etc/init.d/cubicweb reload > /dev/null 2>&1; \
- fi; \
- endscript
-}
--- a/debian/cubicweb-ctl.postinst Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#! /bin/sh -e
-
-case "$1" in
- configure|abort-upgrade|abort-remove|abort-deconfigure)
- update-rc.d cubicweb defaults 99 >/dev/null
- ;;
- *)
- echo "postinst called with unknown argument \`$1'" >&2
- exit 1
- ;;
-esac
-
-#DEBHELPER#
-
-exit 0
--- a/debian/cubicweb-ctl.postrm Thu Nov 17 11:00:01 2016 +0100
+++ b/debian/cubicweb-ctl.postrm Fri Nov 18 15:42:10 2016 +0100
@@ -1,9 +1,5 @@
#!/bin/sh -e
-if [ "$1" = "remove" ]; then
- update-rc.d cubicweb remove >/dev/null
-fi
-
if [ "$1" = "purge" ] ; then
rm -rf /etc/cubicweb.d/
rm -rf /var/log/cubicweb/
--- a/debian/cubicweb-dev.install Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-usr/lib/python2*/*-packages/cubicweb/devtools/
-usr/lib/python2*/*-packages/cubicweb/skeleton/
-usr/lib/python2*/*-packages/cubicweb/test
-usr/lib/python2*/*-packages/cubicweb/dataimport/test
-usr/lib/python2*/*-packages/cubicweb/entities/test
-usr/lib/python2*/*-packages/cubicweb/ext/test
-usr/lib/python2*/*-packages/cubicweb/server/test
-usr/lib/python2*/*-packages/cubicweb/sobjects/test
-usr/lib/python2*/*-packages/cubicweb/hooks/test
-usr/lib/python2*/*-packages/cubicweb/web/test
-usr/lib/python2*/*-packages/cubicweb/etwist/test
--- a/debian/cubicweb-dev.lintian-overrides Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-missing-dep-for-interpreter make => make | build-essential | dpkg-dev (usr/*/cubicweb/skeleton/debian/rules)
--- a/debian/cubicweb-documentation.doc-base Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-Document: cubicweb-doc
-Title: CubicWeb documentation
-Author: Logilab
-Abstract: Some base documentation for CubicWeb users and developpers
-Section: Apps/Programming
-
-Format: HTML
-Index: /usr/share/doc/cubicweb-documentation/html/index.html
-Files: /usr/share/doc/cubicweb-documentation/html/*
--- a/debian/cubicweb-documentation.install Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-../../doc/book usr/share/doc/cubicweb-documentation
-../../doc/_build/html usr/share/doc/cubicweb-documentation
--- a/debian/cubicweb-server.install Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-usr/lib/python2*/*-packages/cubicweb/dataimport/
-usr/lib/python2*/*-packages/cubicweb/server/
-usr/lib/python2*/*-packages/cubicweb/hooks/
-usr/lib/python2*/*-packages/cubicweb/sobjects/
-usr/lib/python2*/*-packages/cubicweb/schemas/
-usr/share/cubicweb/migration/
--- a/debian/cubicweb-server.postinst Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-#! /bin/sh -e
-
-if [ -x "/etc/init.d/cubicweb-ctl" ]; then
- invoke-rc.d cubicweb-ctl restart || true
-fi
-
-
-#DEBHELPER#
-
-exit 0
--- a/debian/cubicweb-server.prerm Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-#! /bin/sh -e
-
-case "$1" in
- remove)
- if [ -x "/etc/init.d/cubicweb-ctl" ]; then
- invoke-rc.d cubicweb-ctl stop || true
- fi
- ;;
-esac
-
-#DEBHELPER#
-
-exit 0
--- a/debian/cubicweb-twisted.install Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-usr/lib/python2*/*-packages/cubicweb/etwist/
--- a/debian/cubicweb-twisted.postinst Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-#! /bin/sh -e
-
-if [ -x "/etc/init.d/cubicweb-ctl" ]; then
- invoke-rc.d cubicweb-ctl restart || true
-fi
-
-
-#DEBHELPER#
-
-exit 0
--- a/debian/cubicweb-twisted.prerm Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-#! /bin/sh -e
-
-case "$1" in
- remove)
- if [ -x "/etc/init.d/cubicweb-ctl" ]; then
- invoke-rc.d cubicweb-ctl stop || true
- fi
- ;;
-esac
-
-#DEBHELPER#
-
-exit 0
--- a/debian/cubicweb-web.install Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-usr/lib/python2*/*-packages/cubicweb/web
-usr/lib/python2*/*-packages/cubicweb/wsgi
-usr/share/cubicweb/cubes/shared/data
-usr/share/cubicweb/cubes/shared/wdoc
--- a/debian/cubicweb-web.lintian-overrides Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-cubicweb-web: embedded-javascript-library usr/share/cubicweb/cubes/shared/data/jquery.js
--- a/debian/pydist-overrides Thu Nov 17 11:00:01 2016 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-cubicweb cubicweb-common
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/python-cubicweb-documentation.doc-base Fri Nov 18 15:42:10 2016 +0100
@@ -0,0 +1,9 @@
+Document: cubicweb-doc
+Title: CubicWeb Documentation
+Author: Logilab
+Abstract: Some base documentation for CubicWeb users and developpers
+Section: Apps/Programming
+
+Format: HTML
+Index: /usr/share/doc/python-cubicweb-documentation/html/index.html
+Files: /usr/share/doc/python-cubicweb-documentation/html/*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/python-cubicweb-documentation.docs Fri Nov 18 15:42:10 2016 +0100
@@ -0,0 +1,2 @@
+debian/cubicweb-doc/html
+doc/book
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/python-cubicweb.lintian-overrides Fri Nov 18 15:42:10 2016 +0100
@@ -0,0 +1,2 @@
+missing-dep-for-interpreter make => make | build-essential | dpkg-dev (usr/*/cubicweb/skeleton/debian/rules)
+embedded-javascript-library usr/share/cubicweb/cubes/shared/data/jquery.js
--- a/debian/rules Thu Nov 17 11:00:01 2016 +0100
+++ b/debian/rules Fri Nov 18 15:42:10 2016 +0100
@@ -3,82 +3,27 @@
# GNU copyright 1997 to 1999 by Joey Hess.
# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-build: build-stamp
-build-stamp:
- dh_testdir
- python setup.py build
- # cubicweb.foo needs to be importable by sphinx, so create a cubicweb symlink to the source dir
- mkdir -p debian/pythonpath
- ln -sf $(CURDIR)/cubicweb debian/pythonpath
- # documentation build is now made optional since it can break for old
- # distributions and we don't want to block a new release of Cubicweb
- # because of documentation issues.
- -PYTHONPATH=$${PYTHONPATH:+$${PYTHONPATH}:}$(CURDIR)/debian/pythonpath $(MAKE) -C doc all
- rm -rf debian/pythonpath
- touch build-stamp
+# export DH_VERBOSE=1
-clean:
- dh_testdir
- rm -f build-stamp configure-stamp
- rm -rf build
- #rm -rf debian/cubicweb-*/
- find . -name "*.pyc" -delete
- -$(MAKE) -C doc clean
- dh_clean
+export PYBUILD_NAME=cubicweb
+export PYBUILD_DISABLE_python2=test
-install: build
- dh_testdir
- dh_testroot
- dh_clean
- dh_installdirs
-
- python setup.py -q install --no-compile --prefix=debian/tmp/usr
+%:
+ dh $@ --with python2,sphinxdoc --buildsystem=pybuild
- # Put all the python library and data in cubicweb-common
- # and scripts in cubicweb-server
- dh_install -vi --sourcedir=debian/tmp
- # cwctl in the cubicweb-ctl package
- rm -f debian/cubicweb-common/usr/lib/python*/*/cubicweb/cwctl.py
- # wdoc in the cubicweb-web package
- rm -rf debian/cubicweb-common/usr/share/cubicweb/cubes/shared/wdoc
- rm -rf debian/cubicweb-common/usr/share/cubicweb/cubes/shared/data
- dh_lintian
-
- # Remove unittests directory (should be available in cubicweb-dev only)
- rm -rf debian/cubicweb-server/usr/lib/python2*/*-packages/cubicweb/dataimport/test
- rm -rf debian/cubicweb-server/usr/lib/python2*/*-packages/cubicweb/server/test
- rm -rf debian/cubicweb-server/usr/lib/python2*/*-packages/cubicweb/hooks/test
- rm -rf debian/cubicweb-server/usr/lib/python2*/*-packages/cubicweb/sobjects/test
- rm -rf debian/cubicweb-web/usr/lib/python2*/*-packages/cubicweb/web/test
- rm -rf debian/cubicweb-twisted/usr/lib/python2*/*-packages/cubicweb/etwist/test
- rm -rf debian/cubicweb-common/usr/lib/python2*/*-packages/cubicweb/ext/test
- rm -rf debian/cubicweb-common/usr/lib/python2*/*-packages/cubicweb/entities/test
- rm -rf debian/cubicweb-pyramid/usr/lib/python2*/*-packages/cubicweb/pyramid/tests
-
+override_dh_auto_build: export http_proxy=127.0.0.1:9
+override_dh_auto_build: export https_proxy=127.0.0.1:9
+override_dh_auto_build:
+ dh_auto_build
+ifeq (,$(findstring nodocs, $(DEB_BUILD_OPTIONS)))
+ PYTHONPATH=. sphinx-build -N -bhtml doc/ debian/cubicweb-doc/html
+endif
-# Build architecture-independent files here.
-binary-indep: build install
- dh_testdir
- dh_testroot -i
- dh_python2 -i
- dh_python2 -i /usr/share/cubicweb
- dh_installinit -i -n --name cubicweb -u"defaults 99"
- dh_installlogrotate -i
- dh_installdocs -i -A README
- dh_installman -i
- dh_installchangelogs -i -Xdoc/changes
- dh_link -i
- dh_compress -i -X.py -X.ini -X.xml -X.js -X.rst -X.txt -Xchangelog.html
- dh_fixperms -i
- dh_installdeb -i
- dh_gencontrol -i
- dh_md5sums -i
- dh_builddeb -i
+override_dh_auto_install:
+ dh_auto_install
+ mv debian/python-${PYBUILD_NAME}/usr/bin/cubicweb-ctl \
+ debian/cubicweb-ctl/usr/bin/cubicweb-ctl
-binary-arch:
+override_dh_installchangelogs:
+ dh_installchangelogs -Xdoc/changes
-binary: binary-indep
-.PHONY: build clean binary binary-indep binary-arch
-
--- a/doc/changes/3.24.rst Thu Nov 17 11:00:01 2016 +0100
+++ b/doc/changes/3.24.rst Fri Nov 18 15:42:10 2016 +0100
@@ -1,5 +1,5 @@
-3.34 (UNRELEASED)
-=================
+3.24
+====
New features
------------
@@ -13,3 +13,85 @@
discovery by CubicWeb is handled by a new setuptools entry point
``cubicweb.cubes``. A backward compatibility layer is kept for "legacy"
cubes.
+
+* Pyramid support made it into CubicWeb core. Applications that use it
+ should now declare the `cubicweb[pyramid]` dependency instead of
+ `cubicweb-pyramid`.
+
+* New `NullStore` class in ``cubicweb.dataimport.stores`` as new base class for
+ every store, and allowing to test your dataimport chain without actually
+ importing anything.
+
+
+Major changes
+-------------
+
+There has been several important changes to the core internals of CubicWeb:
+
+* Dropped `asource` and `extid` columns from the `entities` table as well as the
+ index on the `type` column, for a sensible optimization on both massive data
+ insertion and database size / index rebuilding.
+
+* Dropped the `moved_entities` table and related mecanism to remember that an
+ entity has been moved from a source to the system database - this is now the
+ responsability of source's parser to detect this (usually by remembering its
+ original external id as `cwuri`).
+
+* Dropped the original 'give me an eid for this extid, but call me back on
+ another line if it has to be created' mecanism on which the ``cwxmlparser`` was
+ relying, in favor of parsers using the dataimport API. This includes dropping
+ the ``cwxmlparser``. If you're using it, you'll have to write a specific
+ parser, examples to come.
+
+* Dropped source mapping handling (schema, views, logic) with its client
+ the ``cwxmlparser``. This is not worth the burden, specific parsers should be
+ preferred.
+
+The above changes lead to the following API changes:
+
+* `req.entity_metas(eid)` doesn't return anymore a 'type' nor 'source' keys, use
+ `req.entity_type(eid)` instead or 'cw_source' relation to get those
+ information,
+
+* deprecated `entity.cw_metainformation()`, which doesn't return anymore it's
+ 'source' key,
+
+* dropped `repository.type_and_source_from_eid(eid, cnx)`,
+ `repository.extid2eid(...)` and `source.eid_type_source(cnx, eid)`,
+
+* dropped `source.support_entity(etype)` and `source.support_relation(rtype)`,
+
+* dropped 'cw_source' key from default JSON representation of an entity,
+
+* dropped `source_uris()` and `handle_deletion(...)` method from datafeed parser
+ base class, deletion of entities is now the responsability of specific
+ implementation (see ``ldapparser`` for example),
+
+* entities from external source are always displayed in the UI with a link
+ to the local entity, not the original one simplifying `entity.absolute_url()`
+ implementation and allowing to drop `use_ext_eid` argument of
+ `entity.rest_path()` (though it's still supported for backward compat).
+
+
+Changes to the massive store
+-----------------------------
+
+Several improvments have been done to ``cubicweb.dataimport.massive_store``,
+with among the more important ones:
+
+* Extended store API to provide more control to end-users:
+ `fill_entities_table`, `fill_relation_table`, `fill_meta_relation_table`.
+
+* Dropped `on_commit` / `on_rollback` arguments of the constructor.
+
+* Use a slave specific temporary table for entities insertion as for relations
+ (should improve concurrency when using in master/slaves mode).
+
+* Delay dropping of constraint to the `finish` method, avoiding performance
+ problem that was occuring because indexes were dropped at store creation time.
+
+* Consider the given metadata generator when looking for which metadata tables
+ should have their constraints dropped.
+
+* Don't drop index on `entities.eid`, it's too costly to rebuild on database
+ with some million of entities.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/cubicweb-ctl.bash_completion Fri Nov 18 15:42:10 2016 +0100
@@ -0,0 +1,116 @@
+# -*- shell-script -*-
+
+_ec_commands()
+{
+ local commands
+ commands="$("$ec" listcommands 2>/dev/null)" || commands=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur"))
+}
+
+_ec()
+{
+ local cur prev cmd cmd_index opts i
+ local ec="$1"
+
+ COMPREPLY=()
+ cur="$2"
+ prev="$3"
+
+ # searching for the command
+ # (first non-option argument that doesn't follow a global option that
+ # receives an argument)
+ for ((i=1; $i<=$COMP_CWORD; i++)); do
+ if [[ ${COMP_WORDS[i]} != -* ]]; then
+ cmd="${COMP_WORDS[i]}"
+ cmd_index=$i
+ break
+ fi
+ done
+
+ if [[ "$cur" == -* ]]; then
+ if [ -z "$cmd" ]; then
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '--help' -- "$cur"))
+ else
+ options="$("$ec" listcommands "$cmd" 2>/dev/null)" || commands=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options' -- "$cur"))
+ fi
+ return
+ fi
+
+ if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then
+ _ec_commands
+ return
+ fi
+
+ # try to generate completion candidates for whatever command the user typed
+ if _ec_command_specific; then
+ return
+ fi
+}
+
+_ec_command_specific()
+{
+ if [ "$(type -t "_ec_cmd_$cmd")" = function ]; then
+ "_ec_cmd_$cmd"
+ return 0
+ fi
+
+ case "$cmd" in
+ client)
+ if [ "$prev" == "-b" ] || [ "$prev" == "--batch" ]; then
+ COMPREPLY=( $( compgen -o filenames -G "$cur*" ) )
+ return
+ fi
+ options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
+ instances="$("$ec" listinstances 2>/dev/null)" || instances=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
+ ;;
+ db-dump)
+ if [ "$prev" == "-o" ] || [ "$prev" == "--output" ]; then
+ COMPREPLY=( $( compgen -o filenames -G "$cur*" ) )
+ return
+ fi
+ options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
+ instances="$("$ec" listinstances 2>/dev/null)" || instances=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
+ ;;
+ # commands with template as argument
+ i18ncube)
+ cubes="$("$ec" listcubes 2>/dev/null)" || cubes=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $cubes' -- "$cur"))
+ ;;
+ # generic commands with instance as argument
+ start|stop|reload|restart|upgrade|start-repository|db-create|db-init|db-check|db-grant-user)
+ options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
+ instances="$("$ec" listinstances 2>/dev/null)" || instances=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
+ ;;
+ # generic commands without argument
+ list|newtemplate|i18ncubicweb|live-server)
+ options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
+ ;;
+ # generic commands without option
+ shell|i18ninstance|delete|status|schema-sync)
+ instances="$("$ec" listinstances 2>/dev/null)" || instances=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
+ ;;
+ # XXX should do better
+ create)
+ options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
+ ;;
+ db-copy,db-restore,mboximport)
+ instances="$("$ec" listinstances 2>/dev/null)" || instances=""
+ COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+
+ return 0
+}
+
+complete -o bashdefault -o default -F _ec cubicweb-ctl 2>/dev/null \
+ || complete -o default -F _ec cubicweb-ctl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flake8-ok-files.txt Fri Nov 18 15:42:10 2016 +0100
@@ -0,0 +1,105 @@
+cubicweb/dataimport/csv.py
+cubicweb/dataimport/importer.py
+cubicweb/dataimport/massive_store.py
+cubicweb/dataimport/stores.py
+cubicweb/dataimport/test/data-massimport/schema.py
+cubicweb/dataimport/test/data/schema.py
+cubicweb/dataimport/test/test_csv.py
+cubicweb/dataimport/test/test_pgstore.py
+cubicweb/dataimport/test/test_massive_store.py
+cubicweb/dataimport/test/test_stores.py
+cubicweb/dataimport/test/unittest_importer.py
+cubicweb/devtools/test/data/cubes/i18ntestcube/__init__.py
+cubicweb/devtools/test/data/cubes/__init__.py
+cubicweb/devtools/test/data/schema.py
+cubicweb/devtools/testlib.py
+cubicweb/devtools/test/unittest_devctl.py
+cubicweb/devtools/test/unittest_i18n.py
+cubicweb/devtools/test/unittest_webtest.py
+cubicweb/devtools/webtest.py
+cubicweb/entities/adapters.py
+cubicweb/entities/test/unittest_base.py
+cubicweb/etwist/__init__.py
+cubicweb/ext/__init__.py
+cubicweb/hooks/test/data/hooks.py
+cubicweb/hooks/test/unittest_notification.py
+cubicweb/hooks/test/unittest_security.py
+cubicweb/hooks/test/unittest_syncsession.py
+cubicweb/__init__.py
+cubicweb/__main__.py
+cubicweb/pylintext.py
+cubicweb/server/repository.py
+cubicweb/server/rqlannotation.py
+cubicweb/server/schema2sql.py
+cubicweb/server/session.py
+cubicweb/server/sqlutils.py
+cubicweb/server/test/datacomputed/migratedapp/schema.py
+cubicweb/server/test/datacomputed/schema.py
+cubicweb/server/test/data/entities.py
+cubicweb/server/test/data-migractions/cubes/fakecustomtype/__init__.py
+cubicweb/server/test/data-migractions/cubes/fakeemail/__init__.py
+cubicweb/server/test/data-migractions/cubes/__init__.py
+cubicweb/server/test/data-migractions/migratedapp/__init__.py
+cubicweb/server/test/data-schema2sql/__init__.py
+cubicweb/server/test/unittest_checkintegrity.py
+cubicweb/server/test/unittest_ldapsource.py
+cubicweb/skeleton/test/pytestconf.py
+cubicweb/sobjects/test/unittest_notification.py
+cubicweb/sobjects/test/unittest_register_user.py
+cubicweb/sobjects/textparsers.py
+cubicweb/test/data/cubes/comment/__init__.py
+cubicweb/test/data/cubes/comment/__pkginfo__.py
+cubicweb/test/data/cubes/email/entities.py
+cubicweb/test/data/cubes/email/hooks.py
+cubicweb/test/data/cubes/email/__init__.py
+cubicweb/test/data/cubes/email/__pkginfo__.py
+cubicweb/test/data/cubes/email/views/__init__.py
+cubicweb/test/data/cubes/file/entities/__init__.py
+cubicweb/test/data/cubes/file/hooks/__init__.py
+cubicweb/test/data/cubes/file/__init__.py
+cubicweb/test/data/cubes/file/__pkginfo__.py
+cubicweb/test/data/cubes/file/views.py
+cubicweb/test/data/cubes/forge/__init__.py
+cubicweb/test/data/cubes/forge/__pkginfo__.py
+cubicweb/test/data/cubes/mycube/__init__.py
+cubicweb/test/data/cubes/mycube/__pkginfo__.py
+cubicweb/test/data/migration/0.1.0_common.py
+cubicweb/test/data/migration/0.1.0_repository.py
+cubicweb/test/data_schemareader/schema.py
+cubicweb/test/data/server_migration/bootstrapmigration_repository.py
+cubicweb/test/data/views.py
+cubicweb/test/unittest_binary.py
+cubicweb/test/unittest_mail.py
+cubicweb/test/unittest_repoapi.py
+cubicweb/test/unittest_schema.py
+cubicweb/test/unittest_toolsutils.py
+cubicweb/test/unittest_utils.py
+cubicweb/web/formwidgets.py
+cubicweb/web/test/data/entities.py
+cubicweb/web/test/unittest_http_headers.py
+cubicweb/web/test/unittest_views_basetemplates.py
+cubicweb/web/test/unittest_views_cwsources.py
+cubicweb/web/test/unittest_views_json.py
+cubicweb/web/views/json.py
+cubicweb/web/views/searchrestriction.py
+cubicweb/xy.py
+cubicweb/pyramid/auth.py
+cubicweb/pyramid/bwcompat.py
+cubicweb/pyramid/core.py
+cubicweb/pyramid/defaults.py
+cubicweb/pyramid/init_instance.py
+cubicweb/pyramid/__init__.py
+cubicweb/pyramid/login.py
+cubicweb/pyramid/predicates.py
+cubicweb/pyramid/profile.py
+cubicweb/pyramid/resources.py
+cubicweb/pyramid/rest_api.py
+cubicweb/pyramid/session.py
+cubicweb/pyramid/tools.py
+cubicweb/pyramid/test/__init__.py
+cubicweb/pyramid/test/test_bw_request.py
+cubicweb/pyramid/test/test_core.py
+cubicweb/pyramid/test/test_login.py
+cubicweb/pyramid/test/test_rest_api.py
+cubicweb/pyramid/test/test_tools.py
+cubicweb/pyramid/pyramidctl.py
--- a/setup.py Thu Nov 17 11:00:01 2016 +0100
+++ b/setup.py Fri Nov 18 15:42:10 2016 +0100
@@ -228,7 +228,7 @@
'Markdown',
'unittest2 >= 0.7.0',
],
- extra_requires={
+ extras_require={
'captcha': [
'Pillow',
],
--- a/tox.ini Thu Nov 17 11:00:01 2016 +0100
+++ b/tox.ini Fri Nov 18 15:42:10 2016 +0100
@@ -25,8 +25,9 @@
skip_install = true
deps =
flake8 >= 3
-commands =
- flake8 {toxinidir}
+whitelist_externals =
+ /bin/sh
+commands = /bin/sh -c "flake8 `xargs -a {toxinidir}/flake8-ok-files.txt`"
[testenv:doc]
changedir = doc
@@ -40,7 +41,7 @@
deps =
check-manifest
commands =
- check-manifest {toxinidir} \
+ {envpython} -m check_manifest {toxinidir} \
# ignore symlinks that are not recognized by check-manifest, see
# https://github.com/mgedmin/check-manifest/issues/69
--ignore cubicweb/devtools/test/data/cubes/i18ntestcube*,cubicweb/test/data/legacy_cubes*
@@ -53,112 +54,6 @@
ignore = W503
max-line-length = 100
exclude = setup.py,doc/*,cubicweb/misc/*,cubicweb/test/*,cubicweb/*/test/*,.tox/*
-filename=
- cubicweb/dataimport/csv.py,
- cubicweb/dataimport/importer.py,
- cubicweb/dataimport/massive_store.py,
- cubicweb/dataimport/stores.py,
- cubicweb/dataimport/test/data-massimport/schema.py,
- cubicweb/dataimport/test/data/schema.py,
- cubicweb/dataimport/test/test_csv.py,
- cubicweb/dataimport/test/test_pgstore.py,
- cubicweb/dataimport/test/test_massive_store.py,
- cubicweb/dataimport/test/test_stores.py,
- cubicweb/dataimport/test/unittest_importer.py,
- cubicweb/devtools/test/data/cubes/i18ntestcube/__init__.py,
- cubicweb/devtools/test/data/cubes/__init__.py,
- cubicweb/devtools/test/data/schema.py,
- cubicweb/devtools/testlib.py,
- cubicweb/devtools/test/unittest_devctl.py,
- cubicweb/devtools/test/unittest_i18n.py,
- cubicweb/devtools/test/unittest_webtest.py,
- cubicweb/devtools/webtest.py,
- cubicweb/entities/adapters.py,
- cubicweb/entities/test/unittest_base.py,
- cubicweb/etwist/__init__.py,
- cubicweb/ext/__init__.py,
- cubicweb/hooks/test/data/hooks.py,
- cubicweb/hooks/test/unittest_notification.py,
- cubicweb/hooks/test/unittest_security.py,
- cubicweb/hooks/test/unittest_syncsession.py,
- cubicweb/__init__.py,
- cubicweb/__main__.py,
- cubicweb/pylintext.py,
- cubicweb/server/repository.py,
- cubicweb/server/rqlannotation.py,
- cubicweb/server/schema2sql.py,
- cubicweb/server/session.py,
- cubicweb/server/sqlutils.py,
- cubicweb/server/test/datacomputed/migratedapp/schema.py,
- cubicweb/server/test/datacomputed/schema.py,
- cubicweb/server/test/data/entities.py,
- cubicweb/server/test/data-migractions/cubes/fakecustomtype/__init__.py,
- cubicweb/server/test/data-migractions/cubes/fakeemail/__init__.py,
- cubicweb/server/test/data-migractions/cubes/__init__.py,
- cubicweb/server/test/data-migractions/migratedapp/__init__.py,
- cubicweb/server/test/data-schema2sql/__init__.py,
- cubicweb/server/test/unittest_checkintegrity.py,
- cubicweb/server/test/unittest_ldapsource.py,
- cubicweb/skeleton/test/pytestconf.py,
- cubicweb/sobjects/test/unittest_notification.py,
- cubicweb/sobjects/test/unittest_register_user.py,
- cubicweb/sobjects/textparsers.py,
- cubicweb/test/data/cubes/comment/__init__.py,
- cubicweb/test/data/cubes/comment/__pkginfo__.py,
- cubicweb/test/data/cubes/email/entities.py,
- cubicweb/test/data/cubes/email/hooks.py,
- cubicweb/test/data/cubes/email/__init__.py,
- cubicweb/test/data/cubes/email/__pkginfo__.py,
- cubicweb/test/data/cubes/email/views/__init__.py,
- cubicweb/test/data/cubes/file/entities/__init__.py,
- cubicweb/test/data/cubes/file/hooks/__init__.py,
- cubicweb/test/data/cubes/file/__init__.py,
- cubicweb/test/data/cubes/file/__pkginfo__.py,
- cubicweb/test/data/cubes/file/views.py,
- cubicweb/test/data/cubes/forge/__init__.py,
- cubicweb/test/data/cubes/forge/__pkginfo__.py,
- cubicweb/test/data/cubes/mycube/__init__.py,
- cubicweb/test/data/cubes/mycube/__pkginfo__.py,
- cubicweb/test/data/migration/0.1.0_common.py,
- cubicweb/test/data/migration/0.1.0_repository.py,
- cubicweb/test/data_schemareader/schema.py,
- cubicweb/test/data/server_migration/bootstrapmigration_repository.py,
- cubicweb/test/data/views.py,
- cubicweb/test/unittest_binary.py,
- cubicweb/test/unittest_mail.py,
- cubicweb/test/unittest_repoapi.py,
- cubicweb/test/unittest_schema.py,
- cubicweb/test/unittest_toolsutils.py,
- cubicweb/test/unittest_utils.py,
- cubicweb/web/formwidgets.py,
- cubicweb/web/test/data/entities.py,
- cubicweb/web/test/unittest_http_headers.py,
- cubicweb/web/test/unittest_views_basetemplates.py,
- cubicweb/web/test/unittest_views_cwsources.py,
- cubicweb/web/test/unittest_views_json.py,
- cubicweb/web/views/json.py,
- cubicweb/web/views/searchrestriction.py,
- cubicweb/xy.py,
- cubicweb/pyramid/auth.py,
- cubicweb/pyramid/bwcompat.py,
- cubicweb/pyramid/core.py,
- cubicweb/pyramid/defaults.py,
- cubicweb/pyramid/init_instance.py,
- cubicweb/pyramid/__init__.py,
- cubicweb/pyramid/login.py,
- cubicweb/pyramid/predicates.py,
- cubicweb/pyramid/profile.py,
- cubicweb/pyramid/resources.py,
- cubicweb/pyramid/rest_api.py,
- cubicweb/pyramid/session.py,
- cubicweb/pyramid/tools.py,
- cubicweb/pyramid/test/__init__.py,
- cubicweb/pyramid/test/test_bw_request.py,
- cubicweb/pyramid/test/test_core.py,
- cubicweb/pyramid/test/test_login.py,
- cubicweb/pyramid/test/test_rest_api.py,
- cubicweb/pyramid/test/test_tools.py,
- cubicweb/pyramid/pyramidctl.py,
# vim: wrap sts=2 sw=2