Drop more deprecated code
authorDenis Laxalde <denis.laxalde@logilab.fr>
Fri, 22 Mar 2019 17:42:36 +0100
changeset 12542 85194bd49119
parent 12541 bbbccb0b3a66
child 12543 71aa20cb43f2
Drop more deprecated code This follows up on changeset a8c1ea390400, in which code deprecated using logilab.common.deprecation got dropped. Now we also drop code deprecated using stdlib's warn(<msg>, DeprecationWarning). Notice that, as a consequence of dropping old/new etypes aliases in cubicweb/schema.py, we drop the import ETYPE_NAME_MAP (no longer needed); but since other modules imported that name from cubicweb.schema, we need to update the import statement to use "cubicweb" directly.
cubicweb/dataimport/stores.py
cubicweb/devtools/dataimport.py
cubicweb/entity.py
cubicweb/hooks/syncschema.py
cubicweb/predicates.py
cubicweb/pyramid/core.py
cubicweb/schema.py
cubicweb/server/migractions.py
cubicweb/server/repository.py
cubicweb/server/schemaserial.py
cubicweb/server/session.py
cubicweb/utils.py
cubicweb/vregistry.py
cubicweb/web/application.py
cubicweb/web/facet.py
cubicweb/web/form.py
cubicweb/web/request.py
cubicweb/web/uicfg.py
cubicweb/web/views/ajaxcontroller.py
cubicweb/web/views/baseviews.py
cubicweb/web/views/tableview.py
cubicweb/web/webconfig.py
--- a/cubicweb/dataimport/stores.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/dataimport/stores.py	Fri Mar 22 17:42:36 2019 +0100
@@ -58,7 +58,6 @@
 .. autoclass:: cubicweb.dataimport.stores.MetadataGenerator
 """
 import inspect
-import warnings
 from datetime import datetime
 from copy import copy
 from itertools import count
@@ -115,13 +114,9 @@
     """Store that works by making RQL queries, hence with all the cubicweb's machinery activated.
     """
 
-    def __init__(self, cnx, commit=None):
-        if commit is not None:
-            warnings.warn('[3.19] commit argument should not be specified '
-                          'as the cnx object already provides it.',
-                          DeprecationWarning, stacklevel=2)
+    def __init__(self, cnx):
         self._cnx = cnx
-        self._commit = commit or cnx.commit
+        self._commit = cnx.commit
         # XXX 3.21 deprecated attributes
         self.eids = {}
         self.types = {}
--- a/cubicweb/devtools/dataimport.py	Tue Mar 26 13:08:13 2019 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-# pylint: disable=W0614,W0401
-# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
-# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
-#
-# This file is part of CubicWeb.
-#
-# CubicWeb is free software: you can redistribute it and/or modify it under the
-# terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation, either version 2.1 of the License, or (at your option)
-# any later version.
-#
-# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Lesser General Public License along
-# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
-from warnings import warn
-warn('moved to cubicweb.dataimport', DeprecationWarning, stacklevel=2)
-from cubicweb.dataimport import *
--- a/cubicweb/entity.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/entity.py	Fri Mar 22 17:42:36 2019 +0100
@@ -17,8 +17,6 @@
 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
 """Base class for entity objects manipulated in clients"""
 
-from warnings import warn
-
 from six import text_type, string_types, integer_types
 from six.moves import range
 
@@ -363,34 +361,8 @@
                 etypecls._fetch_restrictions(var, select, fetchattrs,
                                              user, None, visited=visited)
             if ordermethod is not None:
-                try:
-                    cmeth = getattr(cls, ordermethod)
-                    warn('[3.14] %s %s class method should be renamed to cw_%s'
-                         % (cls.__regid__, ordermethod, ordermethod),
-                         DeprecationWarning)
-                except AttributeError:
-                    cmeth = getattr(cls, 'cw_' + ordermethod)
-                if support_args(cmeth, 'select'):
-                    cmeth(select, attr, var)
-                else:
-                    warn('[3.14] %s should now take (select, attr, var) and '
-                         'modify the syntax tree when desired instead of '
-                         'returning something' % cmeth, DeprecationWarning)
-                    orderterm = cmeth(attr, var.name)
-                    if orderterm is not None:
-                        try:
-                            var, order = orderterm.split()
-                        except ValueError:
-                            if '(' in orderterm:
-                                cls.error('ignore %s until %s is upgraded',
-                                          orderterm, cmeth)
-                                orderterm = None
-                            elif not ' ' in orderterm.strip():
-                                var = orderterm
-                                order = 'ASC'
-                        if orderterm is not None:
-                            select.add_sort_var(select.get_variable(var),
-                                                order=='ASC')
+                cmeth = getattr(cls, 'cw_' + ordermethod)
+                cmeth(select, attr, var)
 
     @classmethod
     @cached
@@ -640,10 +612,8 @@
             kwargs['rql'] = 'Any X WHERE X eid %s' % self.eid
         return self._cw.build_url(method, **kwargs)
 
-    def rest_path(self, *args, **kwargs): # XXX cw_rest_path
+    def rest_path(self): # XXX cw_rest_path
         """returns a REST-like (relative) path for this entity"""
-        if args or kwargs:
-            warn("[3.24] rest_path doesn't take parameters anymore", DeprecationWarning)
         mainattr, needcheck = self.cw_rest_attr_info()
         etype = str(self.e_schema)
         path = etype.lower()
--- a/cubicweb/hooks/syncschema.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/hooks/syncschema.py	Fri Mar 22 17:42:36 2019 +0100
@@ -33,10 +33,10 @@
 from logilab.common.decorators import clear_cache
 
 from cubicweb import _
-from cubicweb import validation_error
+from cubicweb import validation_error, ETYPE_NAME_MAP
 from cubicweb.predicates import is_instance
 from cubicweb.schema import (SCHEMA_TYPES, META_RTYPES, VIRTUAL_RTYPES,
-                             CONSTRAINTS, UNIQUE_CONSTRAINTS, ETYPE_NAME_MAP)
+                             CONSTRAINTS, UNIQUE_CONSTRAINTS)
 from cubicweb.schema import constraint_name_for
 from cubicweb.server import hook, schemaserial as ss, schema2sql as y2sql
 from cubicweb.server.sqlutils import SQL_PREFIX
--- a/cubicweb/predicates.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/predicates.py	Fri Mar 22 17:42:36 2019 +0100
@@ -1076,7 +1076,7 @@
                            ','.join(str(s) for s in self.expected))
 
 
-def on_fire_transition(etype, tr_names, from_state_name=None):
+def on_fire_transition(etype, tr_names):
     """Return 1 when entity of the type `etype` is going through transition of
     a name included in `tr_names`.
 
@@ -1088,8 +1088,6 @@
 
     See :class:`cubicweb.entities.wfobjs.TrInfo` for more information.
     """
-    if from_state_name is not None:
-        warn("on_fire_transition's from_state_name argument is unused", DeprecationWarning)
     if isinstance(tr_names, string_types):
         tr_names = set((tr_names,))
     def match_etype_and_transition(trinfo):
--- a/cubicweb/pyramid/core.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/pyramid/core.py	Fri Mar 22 17:42:36 2019 +0100
@@ -23,7 +23,6 @@
 import itertools
 
 from contextlib import contextmanager
-from warnings import warn
 from cgi import FieldStorage
 
 import rql
@@ -124,11 +123,6 @@
         assert 300 <= ex.status < 400
         raise httpexceptions.status_map[ex.status](
             ex.location, headers=cw_headers(request))
-    except cubicweb.web.StatusResponse as ex:
-        warn('[3.16] StatusResponse is deprecated use req.status_out',
-             DeprecationWarning, stacklevel=2)
-        request.body = ex.content
-        request.status_int = ex.status
     except cubicweb.web.Unauthorized:
         raise httpexceptions.HTTPForbidden(
             request.cw_request._(
--- a/cubicweb/schema.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/schema.py	Fri Mar 22 17:42:36 2019 +0100
@@ -24,7 +24,6 @@
 from os.path import join
 from hashlib import md5
 from logging import getLogger
-from warnings import warn
 
 from six import PY2, text_type, string_types, add_metaclass
 from six.moves import range
@@ -44,12 +43,12 @@
                          cleanup_sys_modules, fill_schema_from_namespace)
 from yams.buildobjs import _add_relation as yams_add_relation
 
-from rql import parse, nodes, stmts, RQLSyntaxError, TypeResolverException
+from rql import parse, nodes, RQLSyntaxError, TypeResolverException
 from rql.analyze import ETypeResolver
 
 import cubicweb
 from cubicweb import server
-from cubicweb import ETYPE_NAME_MAP, ValidationError, Unauthorized, _
+from cubicweb import ValidationError, Unauthorized, _
 
 
 PURE_VIRTUAL_RTYPES = set(('identity', 'has_text',))
@@ -569,15 +568,6 @@
     return eschemas
 
 
-def bw_normalize_etype(etype):
-    if etype in ETYPE_NAME_MAP:
-        msg = '%s has been renamed to %s, please update your code' % (
-            etype, ETYPE_NAME_MAP[etype])
-        warn(msg, DeprecationWarning, stacklevel=4)
-        etype = ETYPE_NAME_MAP[etype]
-    return etype
-
-
 def display_name(req, key, form='', context=None):
     """return a internationalized string for the key (schema entity or relation
     name) in a given form
@@ -1033,7 +1023,6 @@
 
     def add_entity_type(self, edef):
         edef.name = str(edef.name)
-        edef.name = bw_normalize_etype(edef.name)
         if not re.match(self.etype_name_re, edef.name):
             raise BadSchemaDefinition(
                 '%r is not a valid name for an entity type. It should start '
@@ -1079,8 +1068,6 @@
         :param: the newly created or just completed relation schema
         """
         rdef.name = rdef.name.lower()
-        rdef.subject = bw_normalize_etype(rdef.subject)
-        rdef.object = bw_normalize_etype(rdef.object)
         rdefs = super(CubicWebSchema, self).add_relation_def(rdef)
         if rdefs:
             try:
@@ -1457,27 +1444,3 @@
         if hasperm:
             return self.regular_formats + tuple(NEED_PERM_FORMATS)
     return self.regular_formats
-
-
-# XXX itou for some Statement methods
-
-@_override_method(stmts.ScopeNode, pass_original=True)
-def get_etype(self, name, _orig):
-    return _orig(self, bw_normalize_etype(name))
-
-
-@_override_method(stmts.Delete, method_name='add_main_variable',
-                  pass_original=True)
-def _add_main_variable_delete(self, etype, vref, _orig):
-    return _orig(self, bw_normalize_etype(etype), vref)
-
-
-@_override_method(stmts.Insert, method_name='add_main_variable',
-                  pass_original=True)
-def _add_main_variable_insert(self, etype, vref, _orig):
-    return _orig(self, bw_normalize_etype(etype), vref)
-
-
-@_override_method(stmts.Select, pass_original=True)
-def set_statement_type(self, etype, _orig):
-    return _orig(self, bw_normalize_etype(etype))
--- a/cubicweb/server/migractions.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/server/migractions.py	Fri Mar 22 17:42:36 2019 +0100
@@ -49,9 +49,9 @@
 from yams.constraints import SizeConstraint
 from yams.schema import RelationDefinitionSchema
 
-from cubicweb import CW_SOFTWARE_ROOT, AuthenticationError, ExecutionError
+from cubicweb import CW_SOFTWARE_ROOT, ETYPE_NAME_MAP, AuthenticationError, ExecutionError
 from cubicweb.predicates import is_instance
-from cubicweb.schema import (ETYPE_NAME_MAP, META_RTYPES, VIRTUAL_RTYPES,
+from cubicweb.schema import (META_RTYPES, VIRTUAL_RTYPES,
                              PURE_VIRTUAL_RTYPES,
                              CubicWebRelationSchema, order_eschemas)
 from cubicweb.cwvreg import CW_EVENT_MANAGER
--- a/cubicweb/server/repository.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/server/repository.py	Fri Mar 22 17:42:36 2019 +0100
@@ -28,7 +28,6 @@
 
 from __future__ import print_function
 
-from warnings import warn
 from itertools import chain
 from contextlib import contextmanager
 from logging import getLogger
@@ -824,10 +823,6 @@
         # operation (register pending eids before actual deletion to avoid
         # multiple call to glob_delete_entities)
         op = hook.CleanupDeletedEidsCacheOp.get_instance(cnx)
-        if not isinstance(eids, (set, frozenset)):
-            warn('[3.13] eids should be given as a set', DeprecationWarning,
-                 stacklevel=2)
-            eids = frozenset(eids)
         eids = eids - op._container
         op._container |= eids
         data_by_etype = {}  # values are [list of entities]
--- a/cubicweb/server/schemaserial.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/server/schemaserial.py	Fri Mar 22 17:42:36 2019 +0100
@@ -29,8 +29,8 @@
 
 from yams import BadSchemaDefinition, schema as schemamod, buildobjs as ybo, constraints
 
-from cubicweb import Binary
-from cubicweb.schema import (KNOWN_RPROPERTIES, CONSTRAINTS, ETYPE_NAME_MAP,
+from cubicweb import Binary, ETYPE_NAME_MAP
+from cubicweb.schema import (KNOWN_RPROPERTIES, CONSTRAINTS,
                              VIRTUAL_RTYPES)
 from cubicweb.server import sqlutils, schema2sql as y2sql
 
--- a/cubicweb/server/session.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/server/session.py	Fri Mar 22 17:42:36 2019 +0100
@@ -22,7 +22,6 @@
 import functools
 import sys
 from uuid import uuid4
-from warnings import warn
 from contextlib import contextmanager
 from logging import getLogger
 
@@ -676,14 +675,8 @@
         return rset
 
     @_open_only
-    def rollback(self, free_cnxset=None, reset_pool=None):
+    def rollback(self):
         """rollback the current transaction"""
-        if free_cnxset is not None:
-            warn('[3.21] free_cnxset is now unneeded',
-                 DeprecationWarning, stacklevel=2)
-        if reset_pool is not None:
-            warn('[3.13] reset_pool is now unneeded',
-                 DeprecationWarning, stacklevel=2)
         cnxset = self.cnxset
         assert cnxset is not None
         try:
@@ -702,14 +695,8 @@
             self.clear()
 
     @_open_only
-    def commit(self, free_cnxset=None, reset_pool=None):
+    def commit(self):
         """commit the current session's transaction"""
-        if free_cnxset is not None:
-            warn('[3.21] free_cnxset is now unneeded',
-                 DeprecationWarning, stacklevel=2)
-        if reset_pool is not None:
-            warn('[3.13] reset_pool is now unneeded',
-                 DeprecationWarning, stacklevel=2)
         assert self.cnxset is not None
         cstate = self.commit_state
         if cstate == 'uncommitable':
--- a/cubicweb/utils.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/utils.py	Fri Mar 22 17:42:36 2019 +0100
@@ -35,7 +35,6 @@
     from inspect import getargspec
 from itertools import repeat
 from uuid import uuid4
-from warnings import warn
 from threading import Lock
 from logging import getLogger
 
@@ -447,11 +446,8 @@
     def set_htmlattrs(self, attrs):
         self._htmlattrs = attrs
 
-    def set_doctype(self, doctype, reset_xmldecl=None):
+    def set_doctype(self, doctype):
         self.doctype = doctype
-        if reset_xmldecl is not None:
-            warn('[3.17] xhtml is no more supported',
-                 DeprecationWarning, stacklevel=2)
 
     @property
     def htmltag(self):
--- a/cubicweb/vregistry.py	Tue Mar 26 13:08:13 2019 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
-# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
-#
-# This file is part of CubicWeb.
-#
-# CubicWeb is free software: you can redistribute it and/or modify it under the
-# terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation, either version 2.1 of the License, or (at your option)
-# any later version.
-#
-# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Lesser General Public License along
-# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
-from warnings import warn
-from logilab.common.deprecation import class_moved
-warn('[3.15] moved to logilab.common.registry', DeprecationWarning, stacklevel=2)
-from logilab.common.registry import *
-
-VRegistry = class_moved(RegistryStore, old_name='VRegistry', message='[3.15] VRegistry moved to logilab.common.registry as RegistryStore')
--- a/cubicweb/web/application.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/web/application.py	Fri Mar 22 17:42:36 2019 +0100
@@ -23,7 +23,6 @@
 import sys
 from time import clock, time
 from contextlib import contextmanager
-from warnings import warn
 
 from six import text_type, binary_type
 from six.moves import http_client
@@ -37,7 +36,7 @@
 from cubicweb.repoapi import anonymous_cnx
 from cubicweb.web import cors
 from cubicweb.web import (
-    LOGGER, StatusResponse, DirectResponse, Redirect, NotFound, LogOut,
+    LOGGER, DirectResponse, Redirect, NotFound, LogOut,
     RemoteCallFailed, InvalidSession, RequestError, PublishException)
 
 # make session manager available through a global variable so the debug view can
@@ -357,11 +356,6 @@
                 # Return directly an empty 200
                 req.status_out = 200
                 result = b''
-            except StatusResponse as ex:
-                warn('[3.16] StatusResponse is deprecated use req.status_out',
-                     DeprecationWarning, stacklevel=2)
-                result = ex.content
-                req.status_out = ex.status
             except Redirect as ex:
                 # Redirect may be raised by edit controller when everything went
                 # fine, so attempt to commit
--- a/cubicweb/web/facet.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/web/facet.py	Fri Mar 22 17:42:36 2019 +0100
@@ -53,7 +53,6 @@
 from cubicweb import _
 
 from functools import reduce
-from warnings import warn
 from copy import deepcopy
 from datetime import datetime, timedelta
 
@@ -717,15 +716,6 @@
 
     # internal utilities #######################################################
 
-    @cached
-    def _support_and_compat(self):
-        support = self.support_and
-        if callable(support):
-            warn('[3.13] %s.support_and is now a property' % self.__class__,
-                 DeprecationWarning)
-            support = support()
-        return support
-
     def value_restriction(self, restrvar, rel, value):
         # XXX handle rel is None case in RQLPathFacet?
         if self.restr_attr != 'eid':
@@ -740,7 +730,7 @@
                 rel.parent.replace(rel, nodes.Not(rel))
         elif self.operator == 'OR':
             # set_distinct only if rtype cardinality is > 1
-            if self._support_and_compat():
+            if self.support_and:
                 self.select.set_distinct(True)
             # multiple ORed values: using IN is fine
             if '' in value:
@@ -1516,7 +1506,7 @@
     def height(self):
         """ title, optional and/or dropdown, len(items) or upper limit """
         return (1.5 + # title + small magic constant
-                int(self.facet._support_and_compat() +
+                int(self.facet.support_and +
                     min(len(self.items), self.css_overflow_limit)))
 
     @property
@@ -1536,14 +1526,14 @@
             cssclass += ' hideFacetBody'
         w(u'<div class="%s" cubicweb:facetName="%s">%s</div>\n' %
           (cssclass, xml_escape(self.facet.__regid__), title))
-        if self.facet._support_and_compat():
+        if self.facet.support_and:
             self._render_and_or(w)
         cssclass = 'facetBody vocabularyFacet'
         if not self.facet.start_unfolded:
             cssclass += ' hidden'
         overflow = self.overflows
         if overflow:
-            if self.facet._support_and_compat():
+            if self.facet.support_and:
                 cssclass += ' vocabularyFacetBodyWithLogicalSelector'
             else:
                 cssclass += ' vocabularyFacetBody'
--- a/cubicweb/web/form.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/web/form.py	Fri Mar 22 17:42:36 2019 +0100
@@ -18,8 +18,6 @@
 """abstract form classes for CubicWeb web client"""
 
 
-from warnings import warn
-
 from six import add_metaclass
 
 from logilab.common.decorators import iclassmethod
@@ -273,10 +271,7 @@
             try:
                 return self.form_valerror.errors.pop(field.role_name())
             except KeyError:
-                if field.role and field.name in self.form_valerror:
-                    warn('%s: errors key of attribute/relation should be suffixed by "-<role>"'
-                         % self.form_valerror.__class__, DeprecationWarning)
-                    return self.form_valerror.errors.pop(field.name)
+                pass
         return None
 
     def remaining_errors(self):
--- a/cubicweb/web/request.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/web/request.py	Fri Mar 22 17:42:36 2019 +0100
@@ -23,7 +23,6 @@
 from hashlib import sha1  # pylint: disable=E0611
 from calendar import timegm
 from datetime import date, datetime
-from warnings import warn
 from io import BytesIO
 
 from six import PY2, text_type, string_types
@@ -461,12 +460,6 @@
         Give maxage = None to have a "session" cookie expiring when the
         client close its browser
         """
-        if isinstance(name, SimpleCookie):
-            warn('[3.13] set_cookie now takes name and value as two first '
-                 'argument, not anymore cookie object and name',
-                 DeprecationWarning, stacklevel=2)
-            secure = name[value]['secure']
-            name, value = value, name[value].value
         if maxage: # don't check is None, 0 may be specified
             assert expires is None, 'both max age and expires cant be specified'
             expires = maxage + time.time()
@@ -483,12 +476,8 @@
                         expires=expires, secure=secure, httponly=httponly)
         self.headers_out.addHeader('Set-cookie', cookie)
 
-    def remove_cookie(self, name, bwcompat=None):
+    def remove_cookie(self, name):
         """remove a cookie by expiring it"""
-        if bwcompat is not None:
-            warn('[3.13] remove_cookie now take only a name as argument',
-                 DeprecationWarning, stacklevel=2)
-            name = bwcompat
         self.set_cookie(name, '', maxage=0, expires=date(2000, 1, 1))
 
     def set_content_type(self, content_type, filename=None, encoding=None,
--- a/cubicweb/web/uicfg.py	Tue Mar 26 13:08:13 2019 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
-# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
-#
-# This file is part of CubicWeb.
-#
-# CubicWeb is free software: you can redistribute it and/or modify it under the
-# terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation, either version 2.1 of the License, or (at your option)
-# any later version.
-#
-# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Lesser General Public License along
-# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
-"""
-This module has been moved to web.views.uicfg.
-"""
-
-
-from warnings import warn
-from cubicweb.web.views.uicfg import *
-
-
-warn('[3.16] moved to cubicweb.web.views.uicfg',
-     DeprecationWarning, stacklevel=2)
--- a/cubicweb/web/views/ajaxcontroller.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/web/views/ajaxcontroller.py	Fri Mar 22 17:42:36 2019 +0100
@@ -63,7 +63,6 @@
 
 
 
-from warnings import warn
 from functools import partial
 
 from six import PY2, text_type
@@ -118,23 +117,11 @@
         except KeyError:
             raise RemoteCallFailed('no method specified',
                                    status=http_client.BAD_REQUEST)
-        # 1/ check first for old-style (JSonController) ajax func for bw compat
         try:
-            func = getattr(basecontrollers.JSonController, 'js_%s' % fname)
-            if PY2:
-                func = func.__func__
-            func = partial(func, self)
-        except AttributeError:
-            # 2/ check for new-style (AjaxController) ajax func
-            try:
-                func = self._cw.vreg['ajax-func'].select(fname, self._cw)
-            except ObjectNotFound:
-                raise RemoteCallFailed('no %s method' % fname,
-                                       status=http_client.BAD_REQUEST)
-        else:
-            warn('[3.15] remote function %s found on JSonController, '
-                 'use AjaxFunction / @ajaxfunc instead' % fname,
-                 DeprecationWarning, stacklevel=2)
+            func = self._cw.vreg['ajax-func'].select(fname, self._cw)
+        except ObjectNotFound:
+            raise RemoteCallFailed('no %s method' % fname,
+                                   status=http_client.BAD_REQUEST)
         debug_mode = self._cw.vreg.config.debugmode
         # no <arg> attribute means the callback takes no argument
         args = self._cw.form.get('arg', ())
--- a/cubicweb/web/views/baseviews.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/web/views/baseviews.py	Fri Mar 22 17:42:36 2019 +0100
@@ -77,8 +77,6 @@
 
 from cubicweb import _
 
-from warnings import warn
-
 from six.moves import range
 
 from logilab.mtconverter import TransformError, xml_escape
@@ -368,11 +366,8 @@
 
         :param listid: the DOM id to use for the root element
         """
-        if subvid is None and 'vid' in kwargs:
-            warn("should give a 'subvid' argument instead of 'vid'",
-                 DeprecationWarning, stacklevel=2)
-        else:
-            kwargs['vid'] = subvid
+        assert 'vid' not in kwargs
+        kwargs['vid'] = subvid
         return super(SimpleListView, self).call(**kwargs)
 
 
--- a/cubicweb/web/views/tableview.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/web/views/tableview.py	Fri Mar 22 17:42:36 2019 +0100
@@ -63,7 +63,6 @@
 
 from cubicweb import _
 
-from warnings import warn
 from copy import copy
 from types import MethodType
 
@@ -605,7 +604,7 @@
         return self.__regid__ == 'table'
 
     def call(self, headers=None, displaycols=None, cellvids=None,
-             paginate=None, **kwargs):
+             paginate=None):
         if self.headers:
             self.headers = [h and self._cw._(h) for h in self.headers]
         if (headers or displaycols or cellvids or paginate):
@@ -617,15 +616,7 @@
                 self.cellvids = cellvids
             if paginate is not None:
                 self.paginable = paginate
-        if kwargs:
-            # old table view arguments that we can safely ignore thanks to
-            # selectors
-            if len(kwargs) > 1:
-                msg = '[3.14] %s arguments are deprecated' % ', '.join(kwargs)
-            else:
-                msg = '[3.14] %s argument is deprecated' % ', '.join(kwargs)
-            warn(msg, DeprecationWarning, stacklevel=2)
-        super(RsetTableView, self).call(**kwargs)
+        super(RsetTableView, self).call()
 
     def main_var_index(self):
         """returns the index of the first non-attribute variable among the RQL
--- a/cubicweb/web/webconfig.py	Tue Mar 26 13:08:13 2019 +0100
+++ b/cubicweb/web/webconfig.py	Fri Mar 22 17:42:36 2019 +0100
@@ -24,7 +24,6 @@
 import hmac
 from uuid import uuid4
 from os.path import dirname, join, exists, split, isdir
-from warnings import warn
 
 from six import text_type
 
@@ -339,11 +338,6 @@
         if directory is None:
             return None, None
         if self['use-uicache'] and rdirectory == 'data' and rid.endswith('.css'):
-            if rid == 'cubicweb.old.css':
-                # @import('cubicweb.css') in css
-                warn('[3.20] cubicweb.old.css has been renamed back to cubicweb.css',
-                     DeprecationWarning)
-                rid = 'cubicweb.css'
             return self.ensure_uid_directory(
                 self.uiprops.process_resource(
                     join(directory, rdirectory), rid)), rid
@@ -404,14 +398,6 @@
             self._load_ui_properties_file(uiprops, path)
         self._load_ui_properties_file(uiprops, self.apphome)
         datadir_url = uiprops.context['datadir_url']
-        if (datadir_url + '/cubicweb.old.css') in uiprops['STYLESHEETS']:
-            warn('[3.20] cubicweb.old.css has been renamed back to cubicweb.css',
-                 DeprecationWarning)
-            idx = uiprops['STYLESHEETS'].index(datadir_url + '/cubicweb.old.css')
-            uiprops['STYLESHEETS'][idx] = datadir_url + '/cubicweb.css'
-        if datadir_url + '/cubicweb.reset.css' in uiprops['STYLESHEETS']:
-            warn('[3.20] cubicweb.reset.css is obsolete', DeprecationWarning)
-            uiprops['STYLESHEETS'].remove(datadir_url + '/cubicweb.reset.css')
         cubicweb_js_url = datadir_url + '/cubicweb.js'
         if cubicweb_js_url not in uiprops['JAVASCRIPTS']:
             uiprops['JAVASCRIPTS'].insert(0, cubicweb_js_url)