changeset dcc8d636faeb in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=dcc8d636faeb
description:
        Follow isort formatting

        issue10928
diffstat:

 .isort.cfg                                 |   3 +
 bin/trytond                                |   4 +-
 bin/trytond-admin                          |   2 +-
 bin/trytond-console                        |   2 +-
 bin/trytond-cron                           |   4 +-
 bin/trytond-stat                           |   1 -
 bin/trytond-worker                         |   4 +-
 setup.py                                   |   7 ++-
 trytond/admin.py                           |  12 +++---
 trytond/application.py                     |   2 +-
 trytond/backend/__init__.py                |   1 +
 trytond/backend/database.py                |   1 +
 trytond/backend/postgresql/database.py     |  24 ++++++-------
 trytond/backend/postgresql/table.py        |   6 +-
 trytond/backend/sqlite/database.py         |   9 +++-
 trytond/backend/sqlite/table.py            |   5 +-
 trytond/bus.py                             |  15 ++++----
 trytond/cache.py                           |   2 +-
 trytond/commandline.py                     |   2 +-
 trytond/config.py                          |   3 +-
 trytond/convert.py                         |   7 +--
 trytond/cron.py                            |   2 +-
 trytond/filestore.py                       |   2 +-
 trytond/i18n.py                            |   2 +-
 trytond/ir/__init__.py                     |  29 +++--------------
 trytond/ir/action.py                       |  11 +++---
 trytond/ir/attachment.py                   |   3 +-
 trytond/ir/avatar.py                       |   4 +-
 trytond/ir/calendar_.py                    |   2 +-
 trytond/ir/configuration.py                |   2 +-
 trytond/ir/cron.py                         |   5 +-
 trytond/ir/email_.py                       |  12 +++---
 trytond/ir/error.py                        |   4 +-
 trytond/ir/exceptions.py                   |  14 +++----
 trytond/ir/export.py                       |   2 +-
 trytond/ir/lang.py                         |   8 ++--
 trytond/ir/message.py                      |   2 +-
 trytond/ir/model.py                        |  16 ++++----
 trytond/ir/module.py                       |  12 +++---
 trytond/ir/note.py                         |   3 +-
 trytond/ir/queue.py                        |   2 +-
 trytond/ir/routes.py                       |   7 ++-
 trytond/ir/rule.py                         |   2 +-
 trytond/ir/sequence.py                     |  10 +++---
 trytond/ir/session.py                      |   3 +-
 trytond/ir/translation.py                  |  21 ++++++------
 trytond/ir/trigger.py                      |   6 +-
 trytond/ir/ui/__init__.py                  |   4 +-
 trytond/ir/ui/icon.py                      |   4 +-
 trytond/ir/ui/menu.py                      |   6 +-
 trytond/ir/ui/view.py                      |  14 ++++----
 trytond/model/__init__.py                  |  28 ++++++++--------
 trytond/model/active.py                    |   5 ++-
 trytond/model/avatar.py                    |   2 +-
 trytond/model/dictschema.py                |   2 +-
 trytond/model/exceptions.py                |   9 +++--
 trytond/model/fields/__init__.py           |  30 +++++++++---------
 trytond/model/fields/binary.py             |   1 +
 trytond/model/fields/char.py               |   3 +-
 trytond/model/fields/date.py               |   3 +-
 trytond/model/fields/dict.py               |   7 ++-
 trytond/model/fields/field.py              |   9 +++--
 trytond/model/fields/float.py              |   3 +-
 trytond/model/fields/function.py           |   2 +-
 trytond/model/fields/many2many.py          |   8 +++-
 trytond/model/fields/many2one.py           |   8 +++-
 trytond/model/fields/multiselection.py     |   3 +-
 trytond/model/fields/numeric.py            |   4 +-
 trytond/model/fields/one2many.py           |   9 +++-
 trytond/model/fields/reference.py          |  10 +++--
 trytond/model/fields/selection.py          |   1 +
 trytond/model/fields/text.py               |   6 +-
 trytond/model/model.py                     |   6 +-
 trytond/model/modelsingleton.py            |   3 +-
 trytond/model/modelsql.py                  |  34 +++++++++++---------
 trytond/model/modelstorage.py              |  32 +++++++++---------
 trytond/model/modelview.py                 |  16 +++++----
 trytond/model/multivalue.py                |   3 +-
 trytond/model/tree.py                      |   1 +
 trytond/model/union.py                     |   2 +-
 trytond/modules/__init__.py                |  12 +++---
 trytond/pool.py                            |   8 +++-
 trytond/protocols/dispatcher.py            |  18 +++++-----
 trytond/protocols/jsonrpc.py               |  14 ++++----
 trytond/protocols/wrappers.py              |  15 +++++---
 trytond/protocols/xmlrpc.py                |  15 ++++----
 trytond/pyson.py                           |   5 +-
 trytond/report/report.py                   |  17 +++++----
 trytond/res/__init__.py                    |   5 +--
 trytond/res/exceptions.py                  |   2 +-
 trytond/res/group.py                       |   4 +-
 trytond/res/ir.py                          |   2 +-
 trytond/res/routes.py                      |   8 ++--
 trytond/res/user.py                        |  37 +++++++++++-----------
 trytond/security.py                        |   6 +-
 trytond/sendmail.py                        |   2 +-
 trytond/tests/__init__.py                  |  49 +++++------------------------
 trytond/tests/export_data.py               |   2 +-
 trytond/tests/field_context.py             |   2 +-
 trytond/tests/field_dict.py                |   2 +-
 trytond/tests/field_many2one.py            |   2 +-
 trytond/tests/model.py                     |   4 +-
 trytond/tests/modelsql.py                  |   2 +-
 trytond/tests/modelstorage.py              |   6 ++-
 trytond/tests/modelview.py                 |   4 +-
 trytond/tests/mptt.py                      |   2 +-
 trytond/tests/path.py                      |   2 +-
 trytond/tests/resource.py                  |   3 +-
 trytond/tests/run-tests.py                 |   6 ++-
 trytond/tests/test_access.py               |   2 +-
 trytond/tests/test_backend.py              |   3 +-
 trytond/tests/test_bus.py                  |   6 +-
 trytond/tests/test_cache.py                |  10 +++---
 trytond/tests/test_copy.py                 |   2 +-
 trytond/tests/test_descriptors.py          |   2 +-
 trytond/tests/test_exportdata.py           |   5 +-
 trytond/tests/test_field_binary.py         |   2 +-
 trytond/tests/test_field_char.py           |   6 +-
 trytond/tests/test_field_context.py        |   2 +-
 trytond/tests/test_field_dict.py           |   4 +-
 trytond/tests/test_field_float.py          |   2 +-
 trytond/tests/test_field_integer.py        |   2 +-
 trytond/tests/test_field_multiselection.py |   2 +-
 trytond/tests/test_field_numeric.py        |   2 +-
 trytond/tests/test_field_one2one.py        |   2 +-
 trytond/tests/test_field_selection.py      |   2 +-
 trytond/tests/test_history.py              |   6 +-
 trytond/tests/test_i18n.py                 |   3 +-
 trytond/tests/test_importdata.py           |   6 +-
 trytond/tests/test_ir.py                   |   3 +-
 trytond/tests/test_mixins.py               |   8 ++--
 trytond/tests/test_model.py                |   3 +-
 trytond/tests/test_modelsingleton.py       |   3 +-
 trytond/tests/test_modelsql.py             |   8 ++--
 trytond/tests/test_modelstorage.py         |   4 +-
 trytond/tests/test_modelview.py            |   6 +-
 trytond/tests/test_mptt.py                 |   2 +-
 trytond/tests/test_multivalue.py           |   2 +-
 trytond/tests/test_order.py                |   2 +-
 trytond/tests/test_protocols.py            |   8 ++--
 trytond/tests/test_pyson.py                |   4 +-
 trytond/tests/test_report.py               |   4 +-
 trytond/tests/test_resource.py             |   2 +-
 trytond/tests/test_routes.py               |   2 +-
 trytond/tests/test_rpc.py                  |   4 +-
 trytond/tests/test_sendmail.py             |   7 ++-
 trytond/tests/test_sequence.py             |   7 ++-
 trytond/tests/test_tools.py                |  18 +++++-----
 trytond/tests/test_transaction.py          |   2 +-
 trytond/tests/test_tree.py                 |   2 +-
 trytond/tests/test_trigger.py              |   9 ++---
 trytond/tests/test_tryton.py               |  18 +++++-----
 trytond/tests/test_union.py                |   2 +-
 trytond/tests/test_user.py                 |   6 +-
 trytond/tests/test_wizard.py               |   2 +-
 trytond/tests/test_workflow.py             |   2 +-
 trytond/tests/test_wsgi.py                 |   5 +-
 trytond/tests/tools.py                     |   5 +-
 trytond/tests/tree.py                      |   2 +-
 trytond/tests/wizard.py                    |   6 +-
 trytond/tools/__init__.py                  |  11 +++---
 trytond/tools/decimal_.py                  |   2 +-
 trytond/tools/domain_inversion.py          |   6 +-
 trytond/tools/multivalue.py                |   2 +-
 trytond/tools/string_.py                   |   3 +-
 trytond/transaction.py                     |   3 +-
 trytond/url.py                             |   2 +-
 trytond/wizard/__init__.py                 |   5 +-
 trytond/wizard/wizard.py                   |  10 +++---
 trytond/worker.py                          |   3 +-
 trytond/wsgi.py                            |  10 +++--
 171 files changed, 561 insertions(+), 561 deletions(-)

diffs (3489 lines):

diff -r 8cd6dd7196eb -r dcc8d636faeb .isort.cfg
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/.isort.cfg        Sat Dec 11 17:58:45 2021 +0100
@@ -0,0 +1,3 @@
+[settings]
+multi_line_output=4
+known_first_party=trytond
diff -r 8cd6dd7196eb -r dcc8d636faeb bin/trytond
--- a/bin/trytond       Sun Nov 28 14:31:45 2021 +0100
+++ b/bin/trytond       Sat Dec 11 17:58:45 2021 +0100
@@ -25,10 +25,10 @@
     from gevent import monkey
     monkey.patch_all()
 
+from trytond.modules import get_module_info, get_module_list
+from trytond.pool import Pool
 # Import trytond things after it is configured
 from trytond.wsgi import app
-from trytond.pool import Pool
-from trytond.modules import get_module_list, get_module_info
 
 with commandline.pidfile(options):
     Pool.start()
diff -r 8cd6dd7196eb -r dcc8d636faeb bin/trytond-admin
--- a/bin/trytond-admin Sun Nov 28 14:31:45 2021 +0100
+++ b/bin/trytond-admin Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 #!/usr/bin/env python3
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import os
 import sys
-import os
 
 DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
     '..', '..', 'trytond')))
diff -r 8cd6dd7196eb -r dcc8d636faeb bin/trytond-console
--- a/bin/trytond-console       Sun Nov 28 14:31:45 2021 +0100
+++ b/bin/trytond-console       Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 #!/usr/bin/env python3
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import os
 import sys
-import os
 
 DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
     '..', '..', 'trytond')))
diff -r 8cd6dd7196eb -r dcc8d636faeb bin/trytond-cron
--- a/bin/trytond-cron  Sun Nov 28 14:31:45 2021 +0100
+++ b/bin/trytond-cron  Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 #!/usr/bin/env python3
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import os
 import sys
-import os
 
 DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
     '..', '..', 'trytond')))
@@ -17,9 +17,9 @@
 config.update_etc(options.configfile)
 commandline.config_log(options)
 
+import trytond.cron as cron
 # Import after application is configured
 from trytond.pool import Pool
-import trytond.cron as cron
 
 with commandline.pidfile(options):
     Pool.start()
diff -r 8cd6dd7196eb -r dcc8d636faeb bin/trytond-stat
--- a/bin/trytond-stat  Sun Nov 28 14:31:45 2021 +0100
+++ b/bin/trytond-stat  Sat Dec 11 17:58:45 2021 +0100
@@ -6,7 +6,6 @@
 import math
 import os
 import sys
-
 from collections import defaultdict
 
 DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
diff -r 8cd6dd7196eb -r dcc8d636faeb bin/trytond-worker
--- a/bin/trytond-worker        Sun Nov 28 14:31:45 2021 +0100
+++ b/bin/trytond-worker        Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 #!/usr/bin/env python3
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import os
 import sys
-import os
 
 DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
     '..', '..', 'trytond')))
@@ -17,9 +17,9 @@
 config.update_etc(options.configfile)
 commandline.config_log(options)
 
+import trytond.worker as worker
 # Import after application is configured
 from trytond.pool import Pool
-import trytond.worker as worker
 
 with commandline.pidfile(options):
     Pool.start()
diff -r 8cd6dd7196eb -r dcc8d636faeb setup.py
--- a/setup.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/setup.py  Sat Dec 11 17:58:45 2021 +0100
@@ -2,14 +2,15 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from setuptools import setup, find_packages, Command
 import glob
+import io
 import os
+import platform
 import re
-import io
-import platform
 import subprocess
 
+from setuptools import Command, find_packages, setup
+
 
 def read(fname):
     return io.open(
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/admin.py
--- a/trytond/admin.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/admin.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,18 +1,18 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-import sys
+import logging
 import os
-import logging
 import random
+import sys
 from getpass import getpass
 
-from sql import Table, Literal
+from sql import Literal, Table
 
 from trytond import backend
-from trytond.transaction import Transaction
+from trytond.config import config
 from trytond.pool import Pool
-from trytond.config import config
 from trytond.sendmail import send_test_email
+from trytond.transaction import Transaction
 
 __all__ = ['run']
 logger = logging.getLogger(__name__)
@@ -128,7 +128,7 @@
 
 
 def validate(models, percentage=100):
-    from trytond.model import ModelStorage, ModelSingleton
+    from trytond.model import ModelSingleton, ModelStorage
     from trytond.model.exceptions import ValidationError
     logger = logging.getLogger('validate')
     pool = Pool()
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/application.py
--- a/trytond/application.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/application.py    Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 import csv
+import logging.config
 import os
-import logging.config
 import threading
 from io import StringIO
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/backend/__init__.py
--- a/trytond/backend/__init__.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/backend/__init__.py       Sat Dec 11 17:58:45 2021 +0100
@@ -2,6 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 import importlib
 import urllib.parse
+
 try:
     import pkg_resources
 except ImportError:
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/backend/database.py
--- a/trytond/backend/database.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/backend/database.py       Sat Dec 11 17:58:45 2021 +0100
@@ -1,6 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 from collections import namedtuple
+
 from sql import For
 
 DatabaseIntegrityError = None
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/backend/postgresql/database.py
--- a/trytond/backend/postgresql/database.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/backend/postgresql/database.py    Sat Dec 11 17:58:45 2021 +0100
@@ -1,11 +1,11 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from collections import defaultdict
-import time
+import json
 import logging
 import os
-import json
+import time
 import warnings
+from collections import defaultdict
 from datetime import datetime
 from decimal import Decimal
 from itertools import chain, repeat
@@ -16,24 +16,22 @@
     compat.register()
 except ImportError:
     pass
-from psycopg2 import connect, Binary
+from psycopg2 import Binary, connect
+from psycopg2.extensions import (
+    ISOLATION_LEVEL_AUTOCOMMIT, ISOLATION_LEVEL_REPEATABLE_READ, UNICODE, AsIs,
+    cursor, register_adapter, register_type)
+from psycopg2.pool import PoolError, ThreadedConnectionPool
 from psycopg2.sql import SQL, Identifier
-from psycopg2.pool import ThreadedConnectionPool, PoolError
-from psycopg2.extensions import cursor
-from psycopg2.extensions import ISOLATION_LEVEL_REPEATABLE_READ
-from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
-from psycopg2.extensions import register_type, register_adapter
-from psycopg2.extensions import UNICODE, AsIs
+
 try:
-    from psycopg2.extensions import PYDATE, PYDATETIME, PYTIME, PYINTERVAL
+    from psycopg2.extensions import PYDATE, PYDATETIME, PYINTERVAL, PYTIME
 except ImportError:
     PYDATE, PYDATETIME, PYTIME, PYINTERVAL = None, None, None, None
 from psycopg2 import IntegrityError as DatabaseIntegrityError
 from psycopg2 import OperationalError as DatabaseOperationalError
 from psycopg2 import ProgrammingError
 from psycopg2.extras import register_default_json, register_default_jsonb
-
-from sql import Flavor, Cast, For, Table
+from sql import Cast, Flavor, For, Table
 from sql.conditionals import Coalesce
 from sql.functions import Function
 from sql.operators import BinaryOperator, Concat
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/backend/postgresql/table.py
--- a/trytond/backend/postgresql/table.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/backend/postgresql/table.py       Sat Dec 11 17:58:45 2021 +0100
@@ -1,12 +1,12 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import logging
 import re
-import logging
 
-from psycopg2.sql import SQL, Identifier, Composed
+from psycopg2.sql import SQL, Composed, Identifier
 
+from trytond.backend.table import TableHandlerInterface
 from trytond.transaction import Transaction
-from trytond.backend.table import TableHandlerInterface
 
 __all__ = ['TableHandler']
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/backend/sqlite/database.py
--- a/trytond/backend/sqlite/database.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/backend/sqlite/database.py        Sat Dec 11 17:58:45 2021 +0100
@@ -11,6 +11,7 @@
 import warnings
 from decimal import Decimal
 from weakref import WeakKeyDictionary
+
 from werkzeug.security import safe_join
 
 try:
@@ -21,10 +22,12 @@
     import sqlite3 as sqlite
     from sqlite3 import IntegrityError as DatabaseIntegrityError
     from sqlite3 import OperationalError as DatabaseOperationalError
-from sql import Flavor, Table, Query, Expression, Literal, Null
+
+from sql import Expression, Flavor, Literal, Null, Query, Table
 from sql.conditionals import NullIf
-from sql.functions import (Function, Extract, Position, Substring,
-    Overlay, CharLength, CurrentTimestamp, Trim)
+from sql.functions import (
+    CharLength, CurrentTimestamp, Extract, Function, Overlay, Position,
+    Substring, Trim)
 
 from trytond.backend.database import DatabaseInterface, SQLType
 from trytond.config import config, parse_uri
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/backend/sqlite/table.py
--- a/trytond/backend/sqlite/table.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/backend/sqlite/table.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,12 +1,13 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from trytond.transaction import Transaction
-from trytond.backend.table import TableHandlerInterface
 import logging
 import re
 import warnings
 
+from trytond.backend.table import TableHandlerInterface
+from trytond.transaction import Transaction
+
 from .database import sqlite
 
 __all__ = ['TableHandler']
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/bus.py
--- a/trytond/bus.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/bus.py    Sat Dec 11 17:58:45 2021 +0100
@@ -9,24 +9,25 @@
 import threading
 import time
 import uuid
+
 try:
     from http import HTTPStatus
 except ImportError:
     from http import client as HTTPStatus
+
 from urllib.parse import urljoin
 
+from werkzeug.exceptions import BadRequest
+from werkzeug.exceptions import NotImplemented as NotImplementedException
 from werkzeug.utils import redirect
 from werkzeug.wrappers import Response
-from werkzeug.exceptions import (
-    NotImplemented as NotImplementedException, BadRequest)
 
 from trytond import backend
-from trytond.wsgi import app
+from trytond.config import config
+from trytond.protocols.jsonrpc import JSONDecoder, JSONEncoder
+from trytond.tools import resolve
 from trytond.transaction import Transaction
-from trytond.protocols.jsonrpc import JSONEncoder, JSONDecoder
-from trytond.config import config
-from trytond.tools import resolve
-
+from trytond.wsgi import app
 
 logger = logging.getLogger(__name__)
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/cache.py
--- a/trytond/cache.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/cache.py  Sat Dec 11 17:58:45 2021 +0100
@@ -17,8 +17,8 @@
 from trytond import backend
 from trytond.config import config
 from trytond.pool import Pool
+from trytond.tools import grouped_slice, resolve
 from trytond.transaction import Transaction
-from trytond.tools import resolve, grouped_slice
 
 __all__ = ['BaseCache', 'Cache', 'LRUDict', 'LRUDictTransaction']
 _clear_timeout = config.getint('cache', 'clean_timeout', default=5 * 60)
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/commandline.py
--- a/trytond/commandline.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/commandline.py    Sat Dec 11 17:58:45 2021 +0100
@@ -2,10 +2,10 @@
 # this repository contains the full copyright notices and license terms.
 import argparse
 import csv
-import os
 import logging
 import logging.config
 import logging.handlers
+import os
 from contextlib import contextmanager
 from io import StringIO
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/config.py
--- a/trytond/config.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/config.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,11 +1,12 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-import __main__ as main
 import configparser
 import logging
 import os
 import urllib.parse
 
+import __main__ as main
+
 from . import status
 
 __all__ = ['config', 'get_hostname', 'get_port', 'split_netloc',
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/convert.py
--- a/trytond/convert.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/convert.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,16 +1,15 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-import time
 import datetime
-from xml import sax
 import logging
 import re
-
+import time
 from collections import defaultdict
 from decimal import Decimal
+from xml import sax
 
 from trytond import __version__
-from trytond.pyson import PYSONEncoder, CONTEXT
+from trytond.pyson import CONTEXT, PYSONEncoder
 from trytond.tools import grouped_slice
 from trytond.transaction import Transaction
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/cron.py
--- a/trytond/cron.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/cron.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import logging
 import threading
 import time
-import logging
 
 from trytond.pool import Pool
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/filestore.py
--- a/trytond/filestore.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/filestore.py      Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import hashlib
 import os
-import hashlib
 
 from trytond.config import config
 from trytond.tools import resolve
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/i18n.py
--- a/trytond/i18n.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/i18n.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+from trytond.pool import Pool
 from trytond.tools.string_ import LazyString
 from trytond.transaction import Transaction
-from trytond.pool import Pool
 
 
 def gettext(message_id, *args, **variables):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/__init__.py
--- a/trytond/ir/__init__.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/__init__.py    Sat Dec 11 17:58:45 2021 +0100
@@ -1,30 +1,11 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 from trytond.pool import Pool
-from . import configuration
-from . import translation
-from . import sequence
-from . import ui
-from . import action
-from . import model
-from . import attachment
-from . import note
-from . import avatar
-from . import cron
-from . import lang
-from . import export
-from . import rule
-from . import module
-from . import cache
-from . import date
-from . import trigger
-from . import session
-from . import queue
-from . import calendar_
-from . import message
-from . import email_
-from . import routes
-from . import error
+
+from . import (
+    action, attachment, avatar, cache, calendar_, configuration, cron, date,
+    email_, error, export, lang, message, model, module, note, queue, routes,
+    rule, sequence, session, translation, trigger, ui)
 
 __all__ = ['register', 'routes']
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/action.py
--- a/trytond/ir/action.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/action.py      Sat Dec 11 17:58:45 2021 +0100
@@ -1,23 +1,22 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 import os
-from operator import itemgetter
 from collections import defaultdict
 from functools import partial
+from operator import itemgetter
 
+from genshi.template.text import TextTemplate
 from sql import Null
-from genshi.template.text import TextTemplate
 
 from trytond.cache import Cache, MemoryCache
 from trytond.config import config
 from trytond.i18n import gettext
 from trytond.model import (
-    ModelView, ModelStorage, ModelSQL, DeactivableMixin, fields,
-    sequence_ordered, ModelSingleton)
+    DeactivableMixin, ModelSingleton, ModelSQL, ModelStorage, ModelView,
+    fields, sequence_ordered)
 from trytond.model.exceptions import ValidationError
 from trytond.pool import Pool
-from trytond.pyson import PYSONDecoder, PYSON, Eval
-from trytond.pyson import PYSONEncoder
+from trytond.pyson import PYSON, Eval, PYSONDecoder, PYSONEncoder
 from trytond.rpc import RPC
 from trytond.tools import file_open
 from trytond.transaction import Transaction
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/attachment.py
--- a/trytond/ir/attachment.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/attachment.py  Sat Dec 11 17:58:45 2021 +0100
@@ -5,11 +5,12 @@
 
 from trytond.config import config
 from trytond.i18n import lazy_gettext
-from trytond.model import ModelView, ModelSQL, fields
+from trytond.model import ModelSQL, ModelView, fields
 from trytond.pool import Pool
 from trytond.pyson import Eval
 from trytond.tools import firstline
 from trytond.transaction import Transaction
+
 from .resource import ResourceMixin, resource_copy
 
 __all__ = ['AttachmentCopyMixin']
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/avatar.py
--- a/trytond/ir/avatar.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/avatar.py      Sat Dec 11 17:58:45 2021 +0100
@@ -5,7 +5,7 @@
 import os
 import uuid
 from random import Random
-from urllib.parse import urljoin, quote
+from urllib.parse import quote, urljoin
 
 try:
     import PIL
@@ -14,7 +14,7 @@
     PIL = None
 
 from trytond.config import config
-from trytond.model import ModelSQL, fields, Unique
+from trytond.model import ModelSQL, Unique, fields
 from trytond.pool import Pool
 from trytond.transaction import Transaction
 from trytond.wsgi import Base64Converter
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/calendar_.py
--- a/trytond/ir/calendar_.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/calendar_.py   Sat Dec 11 17:58:45 2021 +0100
@@ -2,7 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 
 from trytond.cache import Cache
-from trytond.model import ModelSQL, fields, Unique
+from trytond.model import ModelSQL, Unique, fields
 from trytond.rpc import RPC
 from trytond.transaction import Transaction
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/configuration.py
--- a/trytond/ir/configuration.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/configuration.py       Sat Dec 11 17:58:45 2021 +0100
@@ -2,7 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 from trytond.cache import Cache
 from trytond.config import config
-from trytond.model import ModelSQL, ModelSingleton, fields
+from trytond.model import ModelSingleton, ModelSQL, fields
 
 
 class Configuration(ModelSingleton, ModelSQL):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/cron.py
--- a/trytond/ir/cron.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/cron.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,15 +1,16 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 import datetime
+import logging
 import time
+
 from dateutil.relativedelta import relativedelta
-import logging
 
 from trytond import backend
 from trytond.config import config
 from trytond.exceptions import UserError, UserWarning
 from trytond.model import (
-    ModelView, ModelSQL, DeactivableMixin, fields, dualmethod)
+    DeactivableMixin, ModelSQL, ModelView, dualmethod, fields)
 from trytond.pool import Pool
 from trytond.pyson import Eval
 from trytond.status import processing
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/email_.py
--- a/trytond/ir/email_.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/email_.py      Sat Dec 11 17:58:45 2021 +0100
@@ -17,18 +17,18 @@
     html2text = None
 from genshi.template import TextTemplate
 
+from trytond.config import config
 from trytond.i18n import gettext
-from trytond.config import config
-from trytond.model import ModelSQL, ModelView, fields, EvalEnvironment
-from trytond.model.exceptions import ValidationError, AccessError
+from trytond.model import EvalEnvironment, ModelSQL, ModelView, fields
+from trytond.model.exceptions import AccessError, ValidationError
 from trytond.pool import Pool
-from trytond.pyson import Eval, Bool, PYSONDecoder
+from trytond.pyson import Bool, Eval, PYSONDecoder
 from trytond.report import Report
 from trytond.rpc import RPC
-from trytond.sendmail import sendmail_transactional, SMTPDataManager
+from trytond.sendmail import SMTPDataManager, sendmail_transactional
 from trytond.tools import escape_wildcard
+from trytond.tools.email_ import set_from_header
 from trytond.tools.string_ import StringMatcher
-from trytond.tools.email_ import set_from_header
 from trytond.transaction import Transaction
 
 from .resource import ResourceAccessMixin
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/error.py
--- a/trytond/ir/error.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/error.py       Sat Dec 11 17:58:45 2021 +0100
@@ -7,10 +7,10 @@
 from trytond.config import config
 from trytond.exceptions import UserError, UserWarning
 from trytond.model import ModelSQL, ModelView, Workflow, fields
+from trytond.pool import Pool
+from trytond.pyson import Eval
 from trytond.tools import firstline
 from trytond.transaction import Transaction
-from trytond.pool import Pool
-from trytond.pyson import Eval
 
 logger = logging.getLogger(__name__)
 clean_days = config.getint('error', 'clean_days', default=90)
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/exceptions.py
--- a/trytond/ir/exceptions.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/exceptions.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,15 +1,13 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from .lang import (
-    GroupingError as LanguageGroupingError,
-    DateError as LanguageDateError,
-    TranslatableError as LanguageTranslatableError,
-    DeleteDefaultError as LanguageDeleteDefaultError)
+from .lang import DateError as LanguageDateError
+from .lang import DeleteDefaultError as LanguageDeleteDefaultError
+from .lang import GroupingError as LanguageGroupingError
+from .lang import TranslatableError as LanguageTranslatableError
 from .module import DeactivateDependencyError
-from .sequence import (
-    AffixError as SequenceAffixError,
-    MissingError as SequenceMissingError)
+from .sequence import AffixError as SequenceAffixError
+from .sequence import MissingError as SequenceMissingError
 from .translation import OverriddenError as TranslationOverriddenError
 from .trigger import ConditionError as TriggerConditionError
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/export.py
--- a/trytond/ir/export.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/export.py      Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 "Exports"
-from trytond.model import ModelView, ModelSQL, fields
+from trytond.model import ModelSQL, ModelView, fields
 from trytond.pool import Pool
 from trytond.rpc import RPC
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/lang.py
--- a/trytond/ir/lang.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/lang.py        Sat Dec 11 17:58:45 2021 +0100
@@ -2,22 +2,22 @@
 # this repository contains the full copyright notices and license terms.
 
 import datetime
+from ast import literal_eval
+from decimal import Decimal
 from locale import CHAR_MAX
-from ast import literal_eval
 
-from decimal import Decimal
 from sql import Table
 
 from trytond.cache import Cache
 from trytond.exceptions import UserError
 from trytond.i18n import gettext
 from trytond.model import (
-    ModelView, ModelSQL, DeactivableMixin, fields, Check, Unique)
+    Check, DeactivableMixin, ModelSQL, ModelView, Unique, fields)
 from trytond.modules import create_graph, load_translations
 from trytond.pool import Pool
 from trytond.pyson import Eval
 from trytond.transaction import Transaction
-from trytond.wizard import Wizard, StateView, Button, StateTransition
+from trytond.wizard import Button, StateTransition, StateView, Wizard
 
 Transaction.cache_keys.add('translate_name')
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/message.py
--- a/trytond/ir/message.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/message.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from trytond.model import ModelView, ModelSQL, fields
 from trytond.cache import Cache
+from trytond.model import ModelSQL, ModelView, fields
 from trytond.pool import Pool
 from trytond.transaction import Transaction
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/model.py
--- a/trytond/ir/model.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/model.py       Sat Dec 11 17:58:45 2021 +0100
@@ -4,28 +4,28 @@
 import json
 import logging
 import re
+from collections import defaultdict
+from itertools import groupby
 
-from sql import Null, Literal
+from sql import Literal, Null
 from sql.aggregate import Max
 from sql.conditionals import Case
-from collections import defaultdict
-from itertools import groupby
 
 from trytond.cache import Cache
 from trytond.i18n import gettext
 from trytond.model import (
-    ModelView, ModelSQL, Workflow, DeactivableMixin, fields, Unique,
-    EvalEnvironment)
+    DeactivableMixin, EvalEnvironment, ModelSQL, ModelView, Unique, Workflow,
+    fields)
 from trytond.model.exceptions import AccessError, ValidationError
 from trytond.pool import Pool
 from trytond.protocols.jsonrpc import JSONDecoder, JSONEncoder
 from trytond.pyson import Bool, Eval, PYSONDecoder
 from trytond.report import Report
 from trytond.rpc import RPC
-from trytond.tools import is_instance_method, cursor_dict, grouped_slice
+from trytond.tools import cursor_dict, grouped_slice, is_instance_method
 from trytond.tools.string_ import StringMatcher
 from trytond.transaction import Transaction
-from trytond.wizard import Wizard, StateView, StateAction, Button
+from trytond.wizard import Button, StateAction, StateView, Wizard
 
 logger = logging.getLogger(__name__)
 
@@ -1295,8 +1295,8 @@
             return dict(json.loads(values, object_hook=JSONDecoder()))
         except ValueError:
             # Migration from 3.2
+            import datetime
             from decimal import Decimal
-            import datetime
             return eval(values, {
                     'Decimal': Decimal,
                     'datetime': datetime,
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/module.py
--- a/trytond/ir/module.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/module.py      Sat Dec 11 17:58:45 2021 +0100
@@ -5,19 +5,19 @@
 
 from sql.operators import NotIn
 
+from trytond import backend
 from trytond.cache import Cache
 from trytond.exceptions import UserError
 from trytond.i18n import gettext
-from trytond.model import ModelView, ModelSQL, fields, Unique, sequence_ordered
+from trytond.model import ModelSQL, ModelView, Unique, fields, sequence_ordered
 from trytond.model.exceptions import AccessError
-from trytond.modules import get_module_list, get_module_info
-from trytond.wizard import Wizard, StateView, Button, StateTransition, \
-    StateAction
-from trytond import backend
+from trytond.modules import get_module_info, get_module_list
 from trytond.pool import Pool
-from trytond.transaction import Transaction
 from trytond.pyson import Eval
 from trytond.rpc import RPC
+from trytond.transaction import Transaction
+from trytond.wizard import (
+    Button, StateAction, StateTransition, StateView, Wizard)
 
 
 class DeactivateDependencyError(UserError):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/note.py
--- a/trytond/ir/note.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/note.py        Sat Dec 11 17:58:45 2021 +0100
@@ -6,11 +6,12 @@
 from sql.conditionals import Case
 
 from trytond.i18n import lazy_gettext
-from trytond.model import ModelView, ModelSQL, ModelStorage, fields
+from trytond.model import ModelSQL, ModelStorage, ModelView, fields
 from trytond.pool import Pool
 from trytond.pyson import Eval
 from trytond.tools import grouped_slice, reduce_ids
 from trytond.transaction import Transaction
+
 from .resource import ResourceMixin, resource_copy
 
 __all__ = ['NoteCopyMixin']
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/queue.py
--- a/trytond/ir/queue.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/queue.py       Sat Dec 11 17:58:45 2021 +0100
@@ -2,7 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 import datetime
 
-from sql import With, Literal, Null
+from sql import Literal, Null, With
 from sql.aggregate import Min
 from sql.functions import CurrentTimestamp, Extract
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/routes.py
--- a/trytond/ir/routes.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/routes.py      Sat Dec 11 17:58:45 2021 +0100
@@ -2,9 +2,10 @@
 # this repository contains the full copyright notices and license terms.
 import csv
 import datetime as dt
+import io
 import json
-import io
 from numbers import Number
+
 try:
     from http import HTTPStatus
 except ImportError:
@@ -14,13 +15,13 @@
 from werkzeug.utils import redirect
 from werkzeug.wrappers import Response
 
+from trytond.config import config
 from trytond.i18n import gettext
-from trytond.config import config
-from trytond.wsgi import app
 from trytond.protocols.jsonrpc import JSONDecoder
 from trytond.protocols.wrappers import with_pool, with_transaction
 from trytond.tools import slugify
 from trytond.transaction import Transaction
+from trytond.wsgi import app
 
 SOURCE = config.get(
     'html', 'src', default='https://cloud.tinymce.com/stable/tinymce.min.js')
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/rule.py
--- a/trytond/ir/rule.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/rule.py        Sat Dec 11 17:58:45 2021 +0100
@@ -6,7 +6,7 @@
 
 from trytond.cache import Cache
 from trytond.i18n import gettext
-from trytond.model import ModelView, ModelSQL, fields, EvalEnvironment, Check
+from trytond.model import Check, EvalEnvironment, ModelSQL, ModelView, fields
 from trytond.model.exceptions import ValidationError
 from trytond.pool import Pool
 from trytond.pyson import PYSONDecoder
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/sequence.py
--- a/trytond/ir/sequence.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/sequence.py    Sat Dec 11 17:58:45 2021 +0100
@@ -1,17 +1,17 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import time
 from string import Template
-import time
 
-from sql import Literal, For
+from sql import For, Literal
 
 from trytond import backend
 from trytond.exceptions import UserError
 from trytond.i18n import gettext
-from trytond.model import ModelView, ModelSQL, DeactivableMixin, fields, Check
-from trytond.model.exceptions import ValidationError, AccessError
+from trytond.model import Check, DeactivableMixin, ModelSQL, ModelView, fields
+from trytond.model.exceptions import AccessError, ValidationError
 from trytond.pool import Pool
-from trytond.pyson import Eval, And
+from trytond.pyson import And, Eval
 from trytond.transaction import Transaction
 
 sql_sequence = backend.Database.has_sequence()
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/session.py
--- a/trytond/ir/session.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/session.py     Sat Dec 11 17:58:45 2021 +0100
@@ -4,6 +4,7 @@
 import datetime
 import json
 import os
+
 try:
     from secrets import token_hex
 except ImportError:
@@ -12,8 +13,8 @@
             nbytes = 32
         return binascii.hexlify(os.urandom(nbytes)).decode('ascii')
 
+from trytond.config import config
 from trytond.model import ModelSQL, fields
-from trytond.config import config
 
 
 class Session(ModelSQL):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/translation.py
--- a/trytond/ir/translation.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/translation.py Sat Dec 11 17:58:45 2021 +0100
@@ -2,33 +2,32 @@
 # this repository contains the full copyright notices and license terms.
 import os
 import xml.dom.minidom
+from collections import defaultdict
 from difflib import SequenceMatcher
-from collections import defaultdict
 from io import BytesIO
-from lxml import etree
 
 import polib
-from sql import Column, Null, Literal
-from sql.functions import Substring, Position
-from sql.conditionals import Case
-from sql.aggregate import Max
-
 from genshi.filters.i18n import extract as genshi_extract
+from lxml import etree
 from relatorio.reporting import MIMETemplateLoader
 from relatorio.templates.opendocument import get_zip_file
+from sql import Column, Literal, Null
+from sql.aggregate import Max
+from sql.conditionals import Case
+from sql.functions import Position, Substring
 
 from trytond.cache import Cache
 from trytond.config import config
 from trytond.exceptions import UserError
 from trytond.i18n import gettext
-from trytond.model import ModelView, ModelSQL, fields
+from trytond.model import ModelSQL, ModelView, fields
 from trytond.pool import Pool
-from trytond.pyson import PYSONEncoder, Eval
-from trytond.tools import file_open, grouped_slice, cursor_dict
+from trytond.pyson import Eval, PYSONEncoder
+from trytond.tools import cursor_dict, file_open, grouped_slice
 from trytond.tools.string_ import LazyString, StringPartitioned
 from trytond.transaction import Transaction
 from trytond.wizard import (
-    Wizard, StateView, StateTransition, StateAction, Button)
+    Button, StateAction, StateTransition, StateView, Wizard)
 
 from .lang import get_parent_language as get_parent
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/trigger.py
--- a/trytond/ir/trigger.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/trigger.py     Sat Dec 11 17:58:45 2021 +0100
@@ -2,6 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 import datetime
 import time
+
 from sql import Literal, Null, Select
 from sql.aggregate import Count, Max
 from sql.functions import CurrentTimestamp
@@ -10,12 +11,11 @@
 from trytond.cache import Cache
 from trytond.i18n import gettext
 from trytond.model import (
-    ModelView, ModelSQL, DeactivableMixin, fields, EvalEnvironment, Check)
+    Check, DeactivableMixin, EvalEnvironment, ModelSQL, ModelView, fields)
 from trytond.model.exceptions import ValidationError
 from trytond.pool import Pool
 from trytond.pyson import Eval, PYSONDecoder
-from trytond.tools import grouped_slice
-from trytond.tools import reduce_ids
+from trytond.tools import grouped_slice, reduce_ids
 from trytond.transaction import Transaction
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/ui/__init__.py
--- a/trytond/ir/ui/__init__.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/ui/__init__.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,5 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from . import menu
-from . import view
-from . import icon
+from . import icon, menu, view
 
 __all__ = ['menu', 'view', 'icon']
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/ui/icon.py
--- a/trytond/ir/ui/icon.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/ui/icon.py     Sat Dec 11 17:58:45 2021 +0100
@@ -3,10 +3,10 @@
 
 import os
 
-from trytond.model import ModelView, ModelSQL, fields, sequence_ordered
+from trytond.model import ModelSQL, ModelView, fields, sequence_ordered
+from trytond.rpc import RPC
 from trytond.tools import file_open
 from trytond.transaction import Transaction
-from trytond.rpc import RPC
 
 
 class Icon(sequence_ordered(), ModelSQL, ModelView):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/ui/menu.py
--- a/trytond/ir/ui/menu.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/ui/menu.py     Sat Dec 11 17:58:45 2021 +0100
@@ -4,11 +4,11 @@
 from itertools import groupby
 
 from trytond.model import (
-    ModelView, ModelSQL, DeactivableMixin, fields, sequence_ordered, tree)
-from trytond.transaction import Transaction
-from trytond.tools import grouped_slice
+    DeactivableMixin, ModelSQL, ModelView, fields, sequence_ordered, tree)
 from trytond.pool import Pool
 from trytond.rpc import RPC
+from trytond.tools import grouped_slice
+from trytond.transaction import Transaction
 
 
 def one_in(i, j):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/ir/ui/view.py
--- a/trytond/ir/ui/view.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/ir/ui/view.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,20 +1,20 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import json
 import os
-import json
 
 from lxml import etree
 
+from trytond.cache import Cache
 from trytond.i18n import gettext
-from trytond.model import ModelView, ModelSQL, fields
+from trytond.model import ModelSQL, ModelView, fields
 from trytond.model.exceptions import ValidationError
-from trytond.pyson import Eval, Bool, PYSONDecoder, If
+from trytond.pool import Pool
+from trytond.pyson import Bool, Eval, If, PYSONDecoder
+from trytond.rpc import RPC
 from trytond.tools import file_open
 from trytond.transaction import Transaction
-from trytond.wizard import Wizard, StateView, Button
-from trytond.pool import Pool
-from trytond.cache import Cache
-from trytond.rpc import RPC
+from trytond.wizard import Button, StateView, Wizard
 
 
 class XMLError(ValidationError):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/__init__.py
--- a/trytond/model/__init__.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/__init__.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,22 +1,22 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+from .active import DeactivableMixin
+from .avatar import avatar_mixin
+from .descriptors import dualmethod
+from .dictschema import DictSchemaMixin
+from .digits import DigitsMixin
+from .match import MatchMixin
 from .model import Model
-from .modelview import ModelView
-from .modelstorage import ModelStorage, EvalEnvironment
 from .modelsingleton import ModelSingleton
-from .modelsql import ModelSQL, Check, Unique, Exclude
-from .workflow import Workflow
-from .dictschema import DictSchemaMixin
-from .match import MatchMixin
+from .modelsql import Check, Exclude, ModelSQL, Unique
+from .modelstorage import EvalEnvironment, ModelStorage
+from .modelview import ModelView
+from .multivalue import MultiValueMixin, ValueMixin
+from .order import sequence_ordered
+from .symbol import SymbolMixin
+from .tree import tree
 from .union import UnionMixin
-from .symbol import SymbolMixin
-from .digits import DigitsMixin
-from .multivalue import MultiValueMixin, ValueMixin
-from .descriptors import dualmethod
-from .order import sequence_ordered
-from .active import DeactivableMixin
-from .tree import tree
-from .avatar import avatar_mixin
+from .workflow import Workflow
 
 __all__ = ['Model', 'ModelView', 'ModelStorage', 'ModelSingleton', 'ModelSQL',
     'Check', 'Unique', 'Exclude',
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/active.py
--- a/trytond/model/active.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/active.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,9 +1,12 @@
 # This file is part of Tryton.  The COPYRIGHT file at the toplevel of this
 # repository contains the full copyright notices and license terms.
 from trytond.i18n import lazy_gettext
-from trytond.model import Model, ModelView, fields
 from trytond.pyson import Eval
 
+from . import fields
+from .model import Model
+from .modelview import ModelView
+
 
 class DeactivableMixin(Model):
     "Mixin to allow to soft deletion of records"
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/avatar.py
--- a/trytond/model/avatar.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/avatar.py   Sat Dec 11 17:58:45 2021 +0100
@@ -55,7 +55,7 @@
 
         @classmethod
         def generate_avatar(cls, records, field='rec_name'):
-            from trytond.ir.avatar import generate, PIL
+            from trytond.ir.avatar import PIL, generate
             if not PIL:
                 return
             records = [r for r in records if not r.has_avatar]
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/dictschema.py
--- a/trytond/model/dictschema.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/dictschema.py       Sat Dec 11 17:58:45 2021 +0100
@@ -8,11 +8,11 @@
 from trytond.i18n import gettext, lazy_gettext
 from trytond.model import fields
 from trytond.model.exceptions import ValidationError
+from trytond.pool import Pool
 from trytond.pyson import Eval, PYSONDecoder
 from trytond.rpc import RPC
 from trytond.tools import slugify
 from trytond.transaction import Transaction
-from trytond.pool import Pool
 
 
 class DomainError(ValidationError):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/exceptions.py
--- a/trytond/model/exceptions.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/exceptions.py       Sat Dec 11 17:58:45 2021 +0100
@@ -1,11 +1,12 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from .modelstorage import (AccessError, ImportDataError, ValidationError,
-    DomainValidationError, RequiredValidationError, SizeValidationError,
-    DigitsValidationError, ForbiddenCharValidationError,
-    SelectionValidationError, TimeFormatValidationError)
 from .modelsql import ForeignKeyError, SQLConstraintError
+from .modelstorage import (
+    AccessError, DigitsValidationError, DomainValidationError,
+    ForbiddenCharValidationError, ImportDataError, RequiredValidationError,
+    SelectionValidationError, SizeValidationError, TimeFormatValidationError,
+    ValidationError)
 from .modelview import AccessButtonError
 from .tree import RecursionError
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/__init__.py
--- a/trytond/model/fields/__init__.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/__init__.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,26 +1,26 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from .field import (
-    depends, with_inactive_records, SQL_OPERATORS, on_change_result,
-    get_eval_fields, states_validate, domain_validate, context_validate, Field)
+from .binary import Binary
 from .boolean import Boolean
-from .integer import Integer, BigInteger
 from .char import Char
-from .text import Text, FullText
+from .date import Date, DateTime, Time, TimeDelta, Timestamp
+from .dict import Dict
+from .field import (
+    SQL_OPERATORS, Field, context_validate, depends, domain_validate,
+    get_eval_fields, on_change_result, states_validate, with_inactive_records)
 from .float import Float
+from .function import Function, MultiValue
+from .integer import BigInteger, Integer
+from .many2many import Many2Many
+from .many2one import Many2One
+from .multiselection import MultiSelection
 from .numeric import Numeric
-from .date import Date, Timestamp, DateTime, Time, TimeDelta
-from .binary import Binary
-from .selection import Selection
+from .one2many import One2Many
+from .one2one import One2One
 from .reference import Reference
-from .many2one import Many2One
-from .one2many import One2Many
-from .many2many import Many2Many
-from .function import Function, MultiValue
-from .one2one import One2One
-from .dict import Dict
-from .multiselection import MultiSelection
+from .selection import Selection
+from .text import FullText, Text
 
 __all__ = [
     depends, with_inactive_records, SQL_OPERATORS, on_change_result,
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/binary.py
--- a/trytond/model/fields/binary.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/binary.py    Sat Dec 11 17:58:45 2021 +0100
@@ -5,6 +5,7 @@
 from trytond.filestore import filestore
 from trytond.tools import grouped_slice, reduce_ids
 from trytond.transaction import Transaction
+
 from .field import Field
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/char.py
--- a/trytond/model/fields/char.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/char.py      Sat Dec 11 17:58:45 2021 +0100
@@ -6,8 +6,9 @@
 from sql.operators import Not
 
 from trytond.rpc import RPC
-from trytond.tools import unescape_wildcard, is_full_text
+from trytond.tools import is_full_text, unescape_wildcard
 from trytond.transaction import Transaction
+
 from .field import Field, FieldTranslate, size_validate
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/date.py
--- a/trytond/model/fields/date.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/date.py      Sat Dec 11 17:58:45 2021 +0100
@@ -2,10 +2,11 @@
 # this repository contains the full copyright notices and license terms.
 import datetime
 
-from sql.functions import Function, AtTimeZone
+from sql.functions import AtTimeZone, Function
 
 from trytond import backend
 from trytond.pyson import PYSONEncoder
+
 from .field import Field
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/dict.py
--- a/trytond/model/fields/dict.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/dict.py      Sat Dec 11 17:58:45 2021 +0100
@@ -1,9 +1,9 @@
 # This file is part of Tryton.  The COPYRIGHT file at the toplevel of this
 # repository contains the full copyright notices and license terms.
+import json
 from functools import partial
-import json
 
-from sql import operators, Literal, Select, CombiningQuery, Cast, Null
+from sql import Cast, CombiningQuery, Literal, Null, Select, operators
 
 from trytond import backend
 from trytond.pool import Pool
@@ -11,7 +11,8 @@
 from trytond.tools import grouped_slice
 from trytond.tools.immutabledict import ImmutableDict
 from trytond.transaction import Transaction
-from .field import Field, SQL_OPERATORS
+
+from .field import SQL_OPERATORS, Field
 
 # Use canonical form
 dumps = partial(
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/field.py
--- a/trytond/model/fields/field.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/field.py     Sat Dec 11 17:58:45 2021 +0100
@@ -4,8 +4,9 @@
 from functools import wraps
 
 import sql
-from sql import (operators, Column, Literal, Select, CombiningQuery, Null,
-    Query, Expression, Cast)
+from sql import (
+    Cast, Column, CombiningQuery, Expression, Literal, Null, Query, Select,
+    operators)
 from sql.aggregate import Min
 from sql.conditionals import Coalesce, NullIf
 from sql.operators import Concat
@@ -13,9 +14,9 @@
 from trytond import backend
 from trytond.const import OPERATORS
 from trytond.pool import Pool
-from trytond.pyson import PYSON, PYSONEncoder, PYSONDecoder, Eval
+from trytond.pyson import PYSON, Eval, PYSONDecoder, PYSONEncoder
 from trytond.rpc import RPC
-from trytond.tools.string_ import StringPartitioned, LazyString
+from trytond.tools.string_ import LazyString, StringPartitioned
 from trytond.transaction import Transaction
 
 _sql_version = tuple(map(int, sql.__version__.split('.')))
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/float.py
--- a/trytond/model/fields/float.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/float.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,6 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from trytond.pyson import PYSONEncoder, PYSON
+from trytond.pyson import PYSON, PYSONEncoder
+
 from .field import Field
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/function.py
--- a/trytond/model/fields/function.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/function.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
+import copy
 import inspect
-import copy
 from functools import wraps
 
 from trytond.i18n import gettext
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/many2many.py
--- a/trytond/model/fields/many2many.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/many2many.py Sat Dec 11 17:58:45 2021 +0100
@@ -4,15 +4,17 @@
 from itertools import chain
 
 from sql import Cast, Literal, Null
-from sql.functions import Substring, Position
 from sql.conditionals import Coalesce
+from sql.functions import Position, Substring
 
 from trytond.pool import Pool
 from trytond.pyson import PYSONEncoder
 from trytond.tools import grouped_slice
 from trytond.transaction import Transaction
-from .field import (Field, size_validate, instanciate_values, domain_validate,
-    search_order_validate, context_validate, instantiate_context)
+
+from .field import (
+    Field, context_validate, domain_validate, instanciate_values,
+    instantiate_context, search_order_validate, size_validate)
 from .function import Function
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/many2one.py
--- a/trytond/model/fields/many2one.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/many2one.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,6 +1,6 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from sql import Literal, Column, With, Query, Expression
+from sql import Column, Expression, Literal, Query, With
 from sql.aggregate import Max
 from sql.conditionals import Coalesce
 from sql.operators import Or
@@ -9,8 +9,10 @@
 from trytond.pyson import PYSONEncoder
 from trytond.tools import reduce_ids
 from trytond.transaction import Transaction
-from .field import (Field, search_order_validate, context_validate,
-    with_inactive_records, instantiate_context)
+
+from .field import (
+    Field, context_validate, instantiate_context, search_order_validate,
+    with_inactive_records)
 
 
 class Many2One(Field):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/multiselection.py
--- a/trytond/model/fields/multiselection.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/multiselection.py    Sat Dec 11 17:58:45 2021 +0100
@@ -3,10 +3,11 @@
 import json
 from functools import partial
 
-from sql import operators, Literal
+from sql import Literal, operators
 
 from trytond.rpc import RPC
 from trytond.transaction import Transaction
+
 from .field import Field
 from .selection import SelectionMixin
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/numeric.py
--- a/trytond/model/fields/numeric.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/numeric.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,9 +1,11 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 from decimal import Decimal
-from sql import Cast, Literal, Select, CombiningQuery, As
+
+from sql import As, Cast, CombiningQuery, Literal, Select
 
 from trytond import backend
+
 from .float import Float
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/one2many.py
--- a/trytond/model/fields/one2many.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/one2many.py  Sat Dec 11 17:58:45 2021 +0100
@@ -2,16 +2,19 @@
 # this repository contains the full copyright notices and license terms.
 from collections import defaultdict
 from itertools import chain
+
 from sql import Cast, Literal
-from sql.functions import Substring, Position
 from sql.conditionals import Coalesce
+from sql.functions import Position, Substring
 
 from trytond.pool import Pool
 from trytond.pyson import PYSONEncoder
 from trytond.tools import grouped_slice
 from trytond.transaction import Transaction
-from .field import (Field, size_validate, instanciate_values, domain_validate,
-    search_order_validate, context_validate, instantiate_context)
+
+from .field import (
+    Field, context_validate, domain_validate, instanciate_values,
+    instantiate_context, search_order_validate, size_validate)
 from .function import Function
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/reference.py
--- a/trytond/model/fields/reference.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/reference.py Sat Dec 11 17:58:45 2021 +0100
@@ -2,16 +2,18 @@
 # this repository contains the full copyright notices and license terms.
 import warnings
 
-from sql import Cast, Literal, Query, Expression
-from sql.functions import Substring, Position
+from sql import Cast, Expression, Literal, Query
+from sql.functions import Position, Substring
 
 from trytond.pool import Pool
 from trytond.pyson import PYSONEncoder
 from trytond.rpc import RPC
 from trytond.transaction import Transaction
+
+from .field import (
+    Field, context_validate, instantiate_context, search_order_validate,
+    with_inactive_records)
 from .selection import SelectionMixin
-from .field import (Field, search_order_validate, context_validate,
-    with_inactive_records, instantiate_context)
 
 
 class Reference(SelectionMixin, Field):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/selection.py
--- a/trytond/model/fields/selection.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/selection.py Sat Dec 11 17:58:45 2021 +0100
@@ -10,6 +10,7 @@
 from trytond.tools import is_instance_method
 from trytond.tools.string_ import LazyString
 from trytond.transaction import Transaction
+
 from .field import Field
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/fields/text.py
--- a/trytond/model/fields/text.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/fields/text.py      Sat Dec 11 17:58:45 2021 +0100
@@ -1,12 +1,12 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from sql import Query, Expression, Null, Literal
-from sql.operators import ILike, Not, In, NotIn
+from sql import Expression, Literal, Null, Query
+from sql.operators import ILike, In, Not, NotIn
 
 from trytond.transaction import Transaction
 
-from .field import Field, SQL_OPERATORS
 from .char import Char
+from .field import SQL_OPERATORS, Field
 
 
 class Text(Char):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/model.py
--- a/trytond/model/model.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/model.py    Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,8 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
+import collections.abc
 import copy
-import collections.abc
 import sys
 from collections import defaultdict
 from functools import total_ordering
@@ -11,10 +11,10 @@
 from trytond.i18n import lazy_gettext
 from trytond.model import fields
 from trytond.pool import Pool, PoolBase, PoolMeta
-from trytond.pyson import PYSONEncoder, PYSONDecoder
+from trytond.pyson import PYSONDecoder, PYSONEncoder
+from trytond.rpc import RPC
 from trytond.transaction import Transaction
 from trytond.url import URLMixin
-from trytond.rpc import RPC
 
 __all__ = ['Model']
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/modelsingleton.py
--- a/trytond/model/modelsingleton.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/modelsingleton.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,9 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from trytond.model import ModelStorage
 from trytond.transaction import Transaction
 
+from .modelstorage import ModelStorage
+
 
 class ModelSingleton(ModelStorage):
     """
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/modelsql.py
--- a/trytond/model/modelsql.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/modelsql.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,33 +1,35 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 import datetime
-from itertools import islice, chain, product, groupby, repeat
 from collections import OrderedDict, defaultdict
 from functools import wraps
+from itertools import chain, groupby, islice, product, repeat
 
-from sql import (Table, Column, Literal, Desc, Asc, Expression, Null,
-    NullsFirst, NullsLast, For, Union, With)
-from sql.functions import CurrentTimestamp, Extract, Substring
+from sql import (
+    Asc, Column, Desc, Expression, For, Literal, Null, NullsFirst, NullsLast,
+    Table, Union, With)
+from sql.aggregate import Count, Max
 from sql.conditionals import Coalesce
-from sql.operators import Or, And, Operator, Equal, Concat
-from sql.aggregate import Count, Max
+from sql.functions import CurrentTimestamp, Extract, Substring
+from sql.operators import And, Concat, Equal, Operator, Or
 
-from trytond.i18n import gettext
-from trytond.model import ModelStorage, ModelView
-from trytond.model import fields
 from trytond import backend
-from trytond.tools import reduce_ids, grouped_slice, cursor_dict
-from trytond.transaction import Transaction, record_cache_size
-from trytond.pool import Pool
-from trytond.pyson import PYSONEncoder, PYSONDecoder
 from trytond.cache import freeze
+from trytond.config import config
 from trytond.exceptions import ConcurrencyException
+from trytond.i18n import gettext
+from trytond.pool import Pool
+from trytond.pyson import PYSONDecoder, PYSONEncoder
 from trytond.rpc import RPC
-from trytond.config import config
+from trytond.tools import cursor_dict, grouped_slice, reduce_ids
+from trytond.transaction import Transaction, record_cache_size
 
-from .modelstorage import (is_leaf,
-    ValidationError, RequiredValidationError, AccessError)
+from . import fields
 from .descriptors import dualmethod
+from .modelstorage import (
+    AccessError, ModelStorage, RequiredValidationError, ValidationError,
+    is_leaf)
+from .modelview import ModelView
 
 
 class ForeignKeyError(ValidationError):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/modelstorage.py
--- a/trytond/model/modelstorage.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/modelstorage.py     Sat Dec 11 17:58:45 2021 +0100
@@ -2,32 +2,32 @@
 # this repository contains the full copyright notices and license terms.
 
 import base64
+import csv
 import datetime
+import random
 import time
-import csv
-import random
-
+from collections import defaultdict
 from decimal import Decimal
-from itertools import islice, chain
 from functools import lru_cache, wraps
+from itertools import chain, islice
 from operator import itemgetter
-from collections import defaultdict
 
+from trytond.cache import Cache, LRUDictTransaction, freeze, unfreeze
+from trytond.config import config
+from trytond.const import OPERATORS
 from trytond.exceptions import UserError
-from trytond.model import Model
-from trytond.model import fields
-from trytond.tools import reduce_domain, is_instance_method, grouped_slice
-from trytond.tools.domain_inversion import (
-    domain_inversion, eval_domain, parse as domain_parse)
-from trytond.pyson import PYSONEncoder, PYSONDecoder, PYSON
-from trytond.const import OPERATORS
-from trytond.config import config
 from trytond.i18n import gettext, lazy_gettext
+from trytond.pool import Pool
+from trytond.pyson import PYSON, PYSONDecoder, PYSONEncoder
+from trytond.rpc import RPC
+from trytond.tools import grouped_slice, is_instance_method, reduce_domain
+from trytond.tools.domain_inversion import domain_inversion, eval_domain
+from trytond.tools.domain_inversion import parse as domain_parse
 from trytond.transaction import Transaction, record_cache_size
-from trytond.pool import Pool
-from trytond.cache import Cache, LRUDictTransaction, freeze, unfreeze
-from trytond.rpc import RPC
+
+from . import fields
 from .descriptors import dualmethod
+from .model import Model
 
 __all__ = ['ModelStorage', 'EvalEnvironment']
 _cache_field = config.getint('cache', 'field')
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/modelview.py
--- a/trytond/model/modelview.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/modelview.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,20 +1,22 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from lxml import etree
+import collections
 from functools import wraps
-import collections
 
+from lxml import etree
+
+from trytond.cache import Cache
 from trytond.exceptions import UserError
 from trytond.i18n import gettext
-from trytond.model import Model, fields
+from trytond.pool import Pool
+from trytond.pyson import PYSONDecoder, PYSONEncoder
+from trytond.rpc import RPC
 from trytond.tools import ClassProperty, is_instance_method
-from trytond.pyson import PYSONDecoder, PYSONEncoder
 from trytond.transaction import Transaction
-from trytond.cache import Cache
-from trytond.pool import Pool
-from trytond.rpc import RPC
 
+from . import fields
 from .fields import on_change_result
+from .model import Model
 
 __all__ = ['ModelView']
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/multivalue.py
--- a/trytond/model/multivalue.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/multivalue.py       Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,9 @@
 # This file is part of Tryton.  The COPYRIGHT file at the toplevel of this
 # repository contains the full copyright notices and license terms.
 from trytond.pool import Pool
+
+from .match import MatchMixin
 from .model import Model
-from .match import MatchMixin
 
 
 class MultiValueMixin(object):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/tree.py
--- a/trytond/model/tree.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/tree.py     Sat Dec 11 17:58:45 2021 +0100
@@ -3,6 +3,7 @@
 from itertools import chain
 
 from trytond.i18n import gettext
+
 from .modelstorage import ValidationError
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/model/union.py
--- a/trytond/model/union.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/model/union.py    Sat Dec 11 17:58:45 2021 +0100
@@ -1,6 +1,6 @@
 # This file is part of Tryton.  The COPYRIGHT file at the toplevel of this
 # repository contains the full copyright notices and license terms.
-from sql import Union, Column, Literal
+from sql import Column, Literal, Union
 
 from trytond.model import fields
 from trytond.pool import Pool
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/modules/__init__.py
--- a/trytond/modules/__init__.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/modules/__init__.py       Sat Dec 11 17:58:45 2021 +0100
@@ -1,23 +1,23 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-import os
-import sys
+import configparser
 import importlib
 import itertools
 import logging
-import configparser
+import os
+import sys
+from collections import defaultdict
 from glob import iglob
-from collections import defaultdict
-from importlib.machinery import FileFinder, SourceFileLoader, SOURCE_SUFFIXES
+from importlib.machinery import SOURCE_SUFFIXES, FileFinder, SourceFileLoader
 
 from sql import Table
 from sql.functions import CurrentTimestamp
 
+import trytond.convert as convert
 import trytond.tools as tools
 from trytond.config import config
 from trytond.exceptions import MissingDependenciesException
 from trytond.transaction import Transaction
-import trytond.convert as convert
 
 logger = logging.getLogger(__name__)
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/pool.py
--- a/trytond/pool.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/pool.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,11 +1,12 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from collections import defaultdict, OrderedDict
+import builtins
+import logging
+from collections import OrderedDict, defaultdict
 from threading import RLock
-import logging
+
 from trytond.modules import load_modules, register_classes
 from trytond.transaction import Transaction
-import builtins
 
 __all__ = ['Pool', 'PoolMeta', 'PoolBase', 'isregisteredby']
 
@@ -188,6 +189,7 @@
         except KeyError:
             if type == 'report':
                 from trytond.report import Report
+
                 # Keyword argument 'type' conflicts with builtin function
                 cls = builtins.type(name, (Report,), {'__slots__': ()})
                 cls.__setup__()
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/protocols/dispatcher.py
--- a/trytond/protocols/dispatcher.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/protocols/dispatcher.py   Sat Dec 11 17:58:45 2021 +0100
@@ -4,26 +4,26 @@
 import logging
 import pydoc
 import time
+
 try:
     from http import HTTPStatus
 except ImportError:
     from http import client as HTTPStatus
 
+from sql import Table
 from werkzeug.exceptions import abort
 from werkzeug.wrappers import Response
-from sql import Table
 
-from trytond import security
-from trytond import backend
+from trytond import __version__, backend, security
 from trytond.config import config, get_hostname
-from trytond import __version__
+from trytond.exceptions import (
+    ConcurrencyException, LoginException, RateLimitException, UserError,
+    UserWarning)
+from trytond.tools import is_instance_method
 from trytond.transaction import Transaction
-from trytond.exceptions import (
-    UserError, UserWarning, ConcurrencyException, LoginException,
-    RateLimitException)
-from trytond.tools import is_instance_method
+from trytond.worker import run_task
 from trytond.wsgi import app
-from trytond.worker import run_task
+
 from .wrappers import with_pool
 
 logger = logging.getLogger(__name__)
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/protocols/jsonrpc.py
--- a/trytond/protocols/jsonrpc.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/protocols/jsonrpc.py      Sat Dec 11 17:58:45 2021 +0100
@@ -1,19 +1,19 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import base64
 import datetime
-from decimal import Decimal
 import json
-import base64
+from decimal import Decimal
 
-from werkzeug.wrappers import Response
 from werkzeug.exceptions import (
-    BadRequest, InternalServerError, Conflict, Forbidden, Locked,
+    BadRequest, Conflict, Forbidden, InternalServerError, Locked,
     TooManyRequests)
+from werkzeug.wrappers import Response
 
+from trytond.exceptions import (
+    ConcurrencyException, LoginException, MissingDependenciesException,
+    RateLimitException, TrytonException, UserWarning)
 from trytond.protocols.wrappers import Request
-from trytond.exceptions import (
-    TrytonException, UserWarning, LoginException, ConcurrencyException,
-    RateLimitException, MissingDependenciesException)
 from trytond.tools import cached_property
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/protocols/wrappers.py
--- a/trytond/protocols/wrappers.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/protocols/wrappers.py     Sat Dec 11 17:58:45 2021 +0100
@@ -4,23 +4,25 @@
 import gzip
 import logging
 import time
+from functools import wraps
 from io import BytesIO
-from functools import wraps
+
 try:
     from http import HTTPStatus
 except ImportError:
     from http import client as HTTPStatus
 
-from werkzeug.wrappers import Request as _Request, Response
 from werkzeug.datastructures import Authorization
-from werkzeug.exceptions import abort, HTTPException
+from werkzeug.exceptions import HTTPException, abort
+from werkzeug.wrappers import Request as _Request
+from werkzeug.wrappers import Response
 
-from trytond import security, backend
+from trytond import backend, security
+from trytond.config import config
 from trytond.exceptions import RateLimitException
 from trytond.pool import Pool
 from trytond.tools import cached_property
 from trytond.transaction import Transaction
-from trytond.config import config
 
 logger = logging.getLogger(__name__)
 
@@ -209,7 +211,8 @@
 
 
 def user_application(name, json=True):
-    from .jsonrpc import JSONEncoder, json as json_
+    from .jsonrpc import JSONEncoder
+    from .jsonrpc import json as json_
 
     def decorator(func):
         @wraps(func)
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/protocols/xmlrpc.py
--- a/trytond/protocols/xmlrpc.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/protocols/xmlrpc.py       Sat Dec 11 17:58:45 2021 +0100
@@ -1,22 +1,21 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-import xmlrpc.client as client
 import datetime
 import logging
-
+import xmlrpc.client as client
 # convert decimal to float before marshalling:
 from decimal import Decimal
 
+from werkzeug.exceptions import (
+    BadRequest, Conflict, Forbidden, InternalServerError, Locked,
+    TooManyRequests)
 from werkzeug.wrappers import Response
-from werkzeug.exceptions import (
-    BadRequest, InternalServerError, Conflict, Forbidden, Locked,
-    TooManyRequests)
 
+from trytond.exceptions import (
+    ConcurrencyException, LoginException, MissingDependenciesException,
+    RateLimitException, TrytonException, UserWarning)
 from trytond.model.fields.dict import ImmutableDict
 from trytond.protocols.wrappers import Request
-from trytond.exceptions import (
-    TrytonException, UserWarning, LoginException, ConcurrencyException,
-    RateLimitException, MissingDependenciesException)
 from trytond.tools import cached_property
 
 logger = logging.getLogger(__name__)
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/pyson.py
--- a/trytond/pyson.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/pyson.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,10 +1,11 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import datetime
 import json
-import datetime
 from decimal import Decimal
+from functools import reduce
+
 from dateutil.relativedelta import relativedelta
-from functools import reduce
 
 
 class PYSON(object):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/report/report.py
--- a/trytond/report/report.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/report/report.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,23 +1,23 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 import datetime
-import dateutil.tz
-import os
 import inspect
 import logging
 import math
+import operator
+import os
 import subprocess
 import tempfile
 import time
 import warnings
 import zipfile
-import operator
-
 from email.mime.multipart import MIMEMultipart
 from email.mime.text import MIMEText
 from io import BytesIO
 from itertools import groupby
 
+import dateutil.tz
+
 try:
     import html2text
 except ImportError:
@@ -31,19 +31,20 @@
 from genshi.filters import Translator
 from genshi.template.text import TextTemplate
 
+from trytond.exceptions import UserError
 from trytond.i18n import gettext
 from trytond.pool import Pool, PoolBase
+from trytond.rpc import RPC
+from trytond.tools import slugify
 from trytond.transaction import Transaction
-from trytond.tools import slugify
 from trytond.url import URLMixin
-from trytond.rpc import RPC
-from trytond.exceptions import UserError
 
 warnings.simplefilter("ignore")
 import relatorio.reporting  # noqa: E402
+
 warnings.resetwarnings()
 try:
-    from relatorio.templates.opendocument import Manifest, MANIFEST
+    from relatorio.templates.opendocument import MANIFEST, Manifest
 except ImportError:
     Manifest, MANIFEST = None, None
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/res/__init__.py
--- a/trytond/res/__init__.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/res/__init__.py   Sat Dec 11 17:58:45 2021 +0100
@@ -2,10 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 from trytond.pool import Pool
 
-from . import group
-from . import user
-from . import ir
-from . import routes
+from . import group, ir, routes, user
 
 __all__ = ['register', 'routes']
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/res/exceptions.py
--- a/trytond/res/exceptions.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/res/exceptions.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from .user import PasswordError, DeleteError
+from .user import DeleteError, PasswordError
 
 __all__ = [
     PasswordError,
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/res/group.py
--- a/trytond/res/group.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/res/group.py      Sat Dec 11 17:58:45 2021 +0100
@@ -4,8 +4,8 @@
 
 from sql import With
 
-from trytond.model import ModelView, ModelSQL, DeactivableMixin, tree, fields
-from trytond.model import Unique
+from trytond.model import (
+    DeactivableMixin, ModelSQL, ModelView, Unique, fields, tree)
 from trytond.pool import Pool
 from trytond.tools import grouped_slice
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/res/ir.py
--- a/trytond/res/ir.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/res/ir.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,6 +1,6 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from trytond.model import ModelSQL, DeactivableMixin, fields
+from trytond.model import DeactivableMixin, ModelSQL, fields
 from trytond.pool import Pool, PoolMeta
 from trytond.pyson import Eval
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/res/routes.py
--- a/trytond/res/routes.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/res/routes.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,16 +1,16 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 import logging
+import random
 import time
-import random
 
 from werkzeug.exceptions import abort
 
 from trytond.config import config
+from trytond.protocols.wrappers import (
+    allow_null_origin, with_pool, with_transaction)
+from trytond.transaction import Transaction
 from trytond.wsgi import app
-from trytond.protocols.wrappers import (
-    with_pool, with_transaction, allow_null_origin)
-from trytond.transaction import Transaction
 
 logger = logging.getLogger(__name__)
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/res/user.py
--- a/trytond/res/user.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/res/user.py       Sat Dec 11 17:58:45 2021 +0100
@@ -3,34 +3,34 @@
 "User"
 
 import copy
-import string
+import datetime
+import hashlib
+import logging
+import mmap
 import random
-import hashlib
+import re
+import string
 import time
-import datetime
-import logging
 import uuid
-import mmap
-import re
+
 try:
     import secrets
 except ImportError:
     secrets = None
 import ipaddress
 import warnings
+from ast import literal_eval
 from email.header import Header
 from functools import wraps
 from itertools import groupby
 from operator import attrgetter
-from ast import literal_eval
-
-from sql import Literal, Null
-from sql.functions import CurrentTimestamp
-from sql.conditionals import Coalesce, Case
-from sql.aggregate import Count
-from sql.operators import Concat
 
 from passlib.context import CryptContext
+from sql import Literal, Null
+from sql.aggregate import Count
+from sql.conditionals import Case, Coalesce
+from sql.functions import CurrentTimestamp
+from sql.operators import Concat
 
 try:
     import bcrypt
@@ -43,14 +43,13 @@
 
 from trytond.cache import Cache
 from trytond.config import config
-from trytond.exceptions import LoginException, RateLimitException
-from trytond.exceptions import UserError
+from trytond.exceptions import LoginException, RateLimitException, UserError
 from trytond.i18n import gettext
 from trytond.model import (
-    ModelView, ModelSQL, Workflow, DeactivableMixin, fields, Unique,
-    avatar_mixin)
+    DeactivableMixin, ModelSQL, ModelView, Unique, Workflow, avatar_mixin,
+    fields)
 from trytond.pool import Pool
-from trytond.pyson import PYSONEncoder, Eval, Bool
+from trytond.pyson import Bool, Eval, PYSONEncoder
 from trytond.report import Report, get_email
 from trytond.rpc import RPC
 from trytond.sendmail import sendmail_transactional
@@ -58,7 +57,7 @@
 from trytond.tools.email_ import set_from_header
 from trytond.transaction import Transaction
 from trytond.url import host, http_host
-from trytond.wizard import Wizard, StateView, Button, StateTransition
+from trytond.wizard import Button, StateTransition, StateView, Wizard
 
 logger = logging.getLogger(__name__)
 _has_password = 'password' in re.split('[,+]', config.get(
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/security.py
--- a/trytond/security.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/security.py       Sat Dec 11 17:58:45 2021 +0100
@@ -2,11 +2,11 @@
 # this repository contains the full copyright notices and license terms.
 import logging
 
+from trytond import backend
+from trytond.config import config
+from trytond.exceptions import LoginException, RateLimitException
 from trytond.pool import Pool
-from trytond.config import config
 from trytond.transaction import Transaction
-from trytond import backend
-from trytond.exceptions import LoginException, RateLimitException
 
 logger = logging.getLogger(__name__)
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/sendmail.py
--- a/trytond/sendmail.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/sendmail.py       Sat Dec 11 17:58:45 2021 +0100
@@ -3,8 +3,8 @@
 import logging
 import smtplib
 from email.message import Message
+from email.mime.text import MIMEText
 from email.utils import formatdate
-from email.mime.text import MIMEText
 from urllib.parse import parse_qs, unquote_plus
 
 from trytond.config import config, parse_uri
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/__init__.py
--- a/trytond/tests/__init__.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/__init__.py Sat Dec 11 17:58:45 2021 +0100
@@ -8,46 +8,15 @@
 
 
 def register():
-    from . import access
-    from . import copy_
-    from . import export_data
-    from . import field_binary
-    from . import field_boolean
-    from . import field_char
-    from . import field_context
-    from . import field_date
-    from . import field_datetime
-    from . import field_dict
-    from . import field_float
-    from . import field_function
-    from . import field_integer
-    from . import field_many2many
-    from . import field_many2one
-    from . import field_multiselection
-    from . import field_numeric
-    from . import field_one2many
-    from . import field_one2one
-    from . import field_reference
-    from . import field_selection
-    from . import field_text
-    from . import field_time
-    from . import field_timedelta
-    from . import history
-    from . import import_data
-    from . import mixin
-    from . import model
-    from . import modelsql
-    from . import modelstorage
-    from . import modelview
-    from . import mptt
-    from . import multivalue
-    from . import path
-    from . import resource
-    from . import rule
-    from . import tree
-    from . import trigger
-    from . import wizard
-    from . import workflow
+    from . import (
+        access, copy_, export_data, field_binary, field_boolean, field_char,
+        field_context, field_date, field_datetime, field_dict, field_float,
+        field_function, field_integer, field_many2many, field_many2one,
+        field_multiselection, field_numeric, field_one2many, field_one2one,
+        field_reference, field_selection, field_text, field_time,
+        field_timedelta, history, import_data, mixin, model, modelsql,
+        modelstorage, modelview, mptt, multivalue, path, resource, rule, tree,
+        trigger, wizard, workflow)
 
     access.register('tests')
     copy_.register('tests')
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/export_data.py
--- a/trytond/tests/export_data.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/export_data.py      Sat Dec 11 17:58:45 2021 +0100
@@ -2,7 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 "Test for export_data"
 from trytond.model import ModelSQL, fields
-from trytond.pool import PoolMeta, Pool
+from trytond.pool import Pool, PoolMeta
 
 
 class ExportDataTarget(ModelSQL):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/field_context.py
--- a/trytond/tests/field_context.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/field_context.py    Sat Dec 11 17:58:45 2021 +0100
@@ -2,8 +2,8 @@
 # this repository contains the full copyright notices and license terms.
 
 from trytond.model import ModelSQL, fields
+from trytond.pool import Pool
 from trytond.pyson import Eval
-from trytond.pool import Pool
 
 
 class FieldContextParent(ModelSQL):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/field_dict.py
--- a/trytond/tests/field_dict.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/field_dict.py       Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from trytond.model import ModelSQL, DictSchemaMixin, fields
+from trytond.model import DictSchemaMixin, ModelSQL, fields
 from trytond.pool import Pool
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/field_many2one.py
--- a/trytond/tests/field_many2one.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/field_many2one.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from trytond.model import ModelSQL, ModelStorage, DeactivableMixin, fields
+from trytond.model import DeactivableMixin, ModelSQL, ModelStorage, fields
 from trytond.pool import Pool
 from trytond.transaction import Transaction
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/model.py
--- a/trytond/tests/model.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/model.py    Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from trytond.model import (ModelSingleton, ModelSQL, UnionMixin, fields,
-    sequence_ordered)
+from trytond.model import (
+    ModelSingleton, ModelSQL, UnionMixin, fields, sequence_ordered)
 from trytond.pool import Pool
 from trytond.pyson import Eval
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/modelsql.py
--- a/trytond/tests/modelsql.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/modelsql.py Sat Dec 11 17:58:45 2021 +0100
@@ -4,7 +4,7 @@
 from sql.operators import Equal
 
 from trytond.model import (
-    ModelSQL, fields, Check, Unique, Exclude, DeactivableMixin)
+    Check, DeactivableMixin, Exclude, ModelSQL, Unique, fields)
 from trytond.pool import Pool
 from trytond.pyson import Eval
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/modelstorage.py
--- a/trytond/tests/modelstorage.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/modelstorage.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,9 +1,11 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from trytond.model import ModelSQL, ModelStorage as ModelStorage_, fields
+from trytond.model import ModelSQL
+from trytond.model import ModelStorage as ModelStorage_
+from trytond.model import fields
+from trytond.pool import Pool
 from trytond.pyson import Eval, If
 from trytond.transaction import Transaction
-from trytond.pool import Pool
 
 
 class ModelStorage(ModelSQL):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/modelview.py
--- a/trytond/tests/modelview.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/modelview.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,9 +1,9 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from trytond.model import ModelView, ModelSQL, DictSchemaMixin, fields
+from trytond.model import DictSchemaMixin, ModelSQL, ModelView, fields
 from trytond.pool import Pool
-from trytond.pyson import If, Eval
+from trytond.pyson import Eval, If
 
 
 class ModelViewChangedValues(ModelView):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/mptt.py
--- a/trytond/tests/mptt.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/mptt.py     Sat Dec 11 17:58:45 2021 +0100
@@ -4,7 +4,7 @@
 from sql import Null
 from sql.conditionals import Case
 
-from trytond.model import ModelView, ModelSQL, DeactivableMixin, tree, fields
+from trytond.model import DeactivableMixin, ModelSQL, ModelView, fields, tree
 from trytond.pool import Pool
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/path.py
--- a/trytond/tests/path.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/path.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,6 +1,6 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from trytond.model import ModelSQL, DeactivableMixin, tree, fields
+from trytond.model import DeactivableMixin, ModelSQL, fields, tree
 from trytond.pool import Pool
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/resource.py
--- a/trytond/tests/resource.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/resource.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,10 +1,9 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+from trytond.ir.note import NoteCopyMixin
 from trytond.model import ModelSQL
 from trytond.pool import Pool
 
-from trytond.ir.note import NoteCopyMixin
-
 
 class TestResource(ModelSQL, NoteCopyMixin):
     "Test Resource"
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/run-tests.py
--- a/trytond/tests/run-tests.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/run-tests.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,12 +1,12 @@
 #!/usr/bin/env python3
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import argparse
 import logging
-import argparse
 import os
+import sys
 import time
 import unittest
-import sys
 
 from trytond.config import config
 
@@ -36,6 +36,7 @@
 
 # Import after application is configured
 from trytond import backend  # noqa: E402
+
 if backend.name == 'sqlite':
     database_name = ':memory:'
 else:
@@ -43,6 +44,7 @@
 os.environ.setdefault('DB_NAME', database_name)
 
 from trytond.tests.test_tryton import all_suite, modules_suite  # noqa: E402
+
 if not opt.modules:
     suite = all_suite(opt.tests)
 else:
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_access.py
--- a/trytond/tests/test_access.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_access.py      Sat Dec 11 17:58:45 2021 +0100
@@ -4,9 +4,9 @@
 import unittest
 
 from trytond.model.exceptions import AccessError
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.pool import Pool
 
 _context = {'_check_access': True}
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_backend.py
--- a/trytond/tests/test_backend.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_backend.py     Sat Dec 11 17:58:45 2021 +0100
@@ -4,8 +4,7 @@
 import math
 import unittest
 
-from sql import Select
-from sql import functions, Literal
+from sql import Literal, Select, functions
 from sql.functions import CurrentTimestamp, ToChar
 
 from trytond.tests.test_tryton import activate_module, with_transaction
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_bus.py
--- a/trytond/tests/test_bus.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_bus.py Sat Dec 11 17:58:45 2021 +0100
@@ -5,10 +5,10 @@
 import unittest
 from unittest.mock import patch
 
-from trytond import bus, backend
-from trytond.bus import _MessageQueue, notify, Bus
+from trytond import backend, bus
+from trytond.bus import Bus, _MessageQueue, notify
 from trytond.tests.test_tryton import (
-    activate_module, with_transaction, DB_NAME)
+    DB_NAME, activate_module, with_transaction)
 from trytond.transaction import Transaction
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_cache.py
--- a/trytond/tests/test_cache.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_cache.py       Sat Dec 11 17:58:45 2021 +0100
@@ -4,14 +4,14 @@
 import time
 import unittest
 
-from trytond import backend, cache as cache_mod
+from trytond import backend
+from trytond import cache as cache_mod
 from trytond.cache import (
-    freeze, unfreeze, MemoryCache, LRUDict, LRUDictTransaction)
-from trytond.tests.test_tryton import with_transaction, activate_module
-from trytond.tests.test_tryton import DB_NAME, USER
+    LRUDict, LRUDictTransaction, MemoryCache, freeze, unfreeze)
+from trytond.tests.test_tryton import (
+    DB_NAME, USER, activate_module, with_transaction)
 from trytond.transaction import Transaction
 
-
 cache = MemoryCache('test.cache')
 cache_expire = MemoryCache('test.cache_expire', duration=1)
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_copy.py
--- a/trytond/tests/test_copy.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_copy.py        Sat Dec 11 17:58:45 2021 +0100
@@ -5,9 +5,9 @@
 
 from trytond.model import fields
 from trytond.model.exceptions import AccessError
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.pool import Pool
 
 from .test_modelsql import TranslationTestCase
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_descriptors.py
--- a/trytond/tests/test_descriptors.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_descriptors.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import doctest
 import unittest
-import doctest
 
 from trytond.model import descriptors
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_exportdata.py
--- a/trytond/tests/test_exportdata.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_exportdata.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,11 +1,12 @@
 # -*- coding: utf-8 -*-
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import datetime
 import unittest
 from decimal import Decimal
-import datetime
+
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.pool import Pool
 
 
 class ExportDataTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_binary.py
--- a/trytond/tests/test_field_binary.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_field_binary.py        Sat Dec 11 17:58:45 2021 +0100
@@ -7,8 +7,8 @@
 from sql import Literal
 
 from trytond.config import config
+from trytond.model import fields
 from trytond.model.exceptions import RequiredValidationError
-from trytond.model import fields
 from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_char.py
--- a/trytond/tests/test_field_char.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_field_char.py  Sat Dec 11 17:58:45 2021 +0100
@@ -7,10 +7,10 @@
 
 from trytond import backend
 from trytond.model.exceptions import (
-    RequiredValidationError, ForbiddenCharValidationError)
+    ForbiddenCharValidationError, RequiredValidationError)
 from trytond.pool import Pool
-from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.tests.test_tryton import ExtensionTestCase
+from trytond.tests.test_tryton import (
+    ExtensionTestCase, activate_module, with_transaction)
 from trytond.transaction import Transaction
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_context.py
--- a/trytond/tests/test_field_context.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_field_context.py       Sat Dec 11 17:58:45 2021 +0100
@@ -3,8 +3,8 @@
 
 import unittest
 
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.pool import Pool
 
 
 class FieldContextTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_dict.py
--- a/trytond/tests/test_field_dict.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_field_dict.py  Sat Dec 11 17:58:45 2021 +0100
@@ -6,8 +6,8 @@
 from trytond.model.dictschema import SelectionError
 from trytond.model.exceptions import RequiredValidationError
 from trytond.pool import Pool
-from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.tests.test_tryton import ExtensionTestCase
+from trytond.tests.test_tryton import (
+    ExtensionTestCase, activate_module, with_transaction)
 
 
 class FieldDictTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_float.py
--- a/trytond/tests/test_field_float.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_field_float.py Sat Dec 11 17:58:45 2021 +0100
@@ -5,7 +5,7 @@
 from sql import Literal
 
 from trytond.model.exceptions import (
-    RequiredValidationError, DigitsValidationError)
+    DigitsValidationError, RequiredValidationError)
 from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_integer.py
--- a/trytond/tests/test_field_integer.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_field_integer.py       Sat Dec 11 17:58:45 2021 +0100
@@ -5,7 +5,7 @@
 from sql import Literal
 
 from trytond.model.exceptions import (
-    RequiredValidationError, DomainValidationError)
+    DomainValidationError, RequiredValidationError)
 from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_multiselection.py
--- a/trytond/tests/test_field_multiselection.py        Sun Nov 28 14:31:45 
2021 +0100
+++ b/trytond/tests/test_field_multiselection.py        Sat Dec 11 17:58:45 
2021 +0100
@@ -4,7 +4,7 @@
 
 from trytond import backend
 from trytond.model.exceptions import (
-    SelectionValidationError, RequiredValidationError)
+    RequiredValidationError, SelectionValidationError)
 from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_numeric.py
--- a/trytond/tests/test_field_numeric.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_field_numeric.py       Sat Dec 11 17:58:45 2021 +0100
@@ -6,7 +6,7 @@
 from sql import Literal
 
 from trytond.model.exceptions import (
-    RequiredValidationError, DigitsValidationError)
+    DigitsValidationError, RequiredValidationError)
 from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_one2one.py
--- a/trytond/tests/test_field_one2one.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_field_one2one.py       Sat Dec 11 17:58:45 2021 +0100
@@ -3,7 +3,7 @@
 import unittest
 
 from trytond.model.exceptions import (
-    SQLConstraintError, RequiredValidationError, DomainValidationError)
+    DomainValidationError, RequiredValidationError, SQLConstraintError)
 from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_field_selection.py
--- a/trytond/tests/test_field_selection.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_field_selection.py     Sat Dec 11 17:58:45 2021 +0100
@@ -3,7 +3,7 @@
 import unittest
 
 from trytond.model.exceptions import (
-    SelectionValidationError, RequiredValidationError)
+    RequiredValidationError, SelectionValidationError)
 from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_history.py
--- a/trytond/tests/test_history.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_history.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,13 +1,13 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import datetime
 import unittest
-import datetime
 
+from trytond import backend
 from trytond.model.exceptions import AccessError
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.pool import Pool
-from trytond import backend
 
 
 class HistoryTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_i18n.py
--- a/trytond/tests/test_i18n.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_i18n.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,9 +1,10 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 import unittest
-from trytond.tests.test_tryton import activate_module, with_transaction
+
 from trytond.i18n import gettext, lazy_gettext
 from trytond.pool import Pool
+from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.tools.string_ import LazyString
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_importdata.py
--- a/trytond/tests/test_importdata.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_importdata.py  Sat Dec 11 17:58:45 2021 +0100
@@ -3,13 +3,13 @@
 # this repository contains the full copyright notices and license terms.
 import datetime
 import unittest
-from decimal import InvalidOperation, Decimal
+from decimal import Decimal, InvalidOperation
 
 from trytond.model.exceptions import (
-    RequiredValidationError, SelectionValidationError, ImportDataError)
+    ImportDataError, RequiredValidationError, SelectionValidationError)
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.pool import Pool
 
 
 class ImportDataTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_ir.py
--- a/trytond/tests/test_ir.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_ir.py  Sat Dec 11 17:58:45 2021 +0100
@@ -3,7 +3,7 @@
 import datetime
 import unittest
 from decimal import Decimal
-from unittest.mock import Mock, patch, ANY
+from unittest.mock import ANY, Mock, patch
 
 from dateutil.relativedelta import relativedelta
 
@@ -11,6 +11,7 @@
 from trytond.pool import Pool
 from trytond.pyson import Eval, If, PYSONEncoder
 from trytond.transaction import Transaction
+
 from .test_tryton import ModuleTestCase, with_transaction
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_mixins.py
--- a/trytond/tests/test_mixins.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_mixins.py      Sat Dec 11 17:58:45 2021 +0100
@@ -5,13 +5,13 @@
 import unittest
 import urllib.parse
 
-from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.transaction import Transaction
 from trytond.model import ModelView
 from trytond.pool import Pool
-from trytond.url import http_host, HOSTNAME
+from trytond.tests.test_tryton import activate_module, with_transaction
+from trytond.transaction import Transaction
+from trytond.url import HOSTNAME, http_host
 
-from .mixin import TestMixin, TestSecondMixin, NotMixin, ReportMixin
+from .mixin import NotMixin, ReportMixin, TestMixin, TestSecondMixin
 
 
 class UrlTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_model.py
--- a/trytond/tests/test_model.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_model.py       Sat Dec 11 17:58:45 2021 +0100
@@ -1,9 +1,8 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of this
 # repository contains the full copyright notices and license terms.
+import unittest
 from copy import copy
 
-import unittest
-
 from trytond.model.model import record
 from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_modelsingleton.py
--- a/trytond/tests/test_modelsingleton.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_modelsingleton.py      Sat Dec 11 17:58:45 2021 +0100
@@ -3,9 +3,10 @@
 # this repository contains the full copyright notices and license terms.
 import unittest
 from datetime import datetime
+
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.pool import Pool
 
 
 class ModelSingletonTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_modelsql.py
--- a/trytond/tests/test_modelsql.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_modelsql.py    Sat Dec 11 17:58:45 2021 +0100
@@ -3,18 +3,18 @@
 # repository contains the full copyright notices and license terms.
 
 import random
+import time
 import unittest
-import time
-from unittest.mock import patch, call
+from unittest.mock import call, patch
 
 from trytond import backend
 from trytond.exceptions import ConcurrencyException
 from trytond.model.exceptions import (
-    RequiredValidationError, SQLConstraintError, ForeignKeyError)
+    ForeignKeyError, RequiredValidationError, SQLConstraintError)
 from trytond.model.modelsql import split_subquery_domain
-from trytond.transaction import Transaction
 from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
+from trytond.transaction import Transaction
 
 
 class ModelSQLTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_modelstorage.py
--- a/trytond/tests/test_modelstorage.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_modelstorage.py        Sat Dec 11 17:58:45 2021 +0100
@@ -5,10 +5,10 @@
 
 from trytond.model import EvalEnvironment
 from trytond.model.exceptions import (
-    RequiredValidationError, DomainValidationError, AccessError)
+    AccessError, DomainValidationError, RequiredValidationError)
 from trytond.pool import Pool
+from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.tests.test_tryton import activate_module, with_transaction
 
 
 class ModelStorageTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_modelview.py
--- a/trytond/tests/test_modelview.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_modelview.py   Sat Dec 11 17:58:45 2021 +0100
@@ -6,10 +6,10 @@
 
 from lxml import etree
 
-from trytond.model.exceptions import AccessError, AccessButtonError
+from trytond.model.exceptions import AccessButtonError, AccessError
+from trytond.pool import Pool
+from trytond.pyson import Eval, PYSONDecoder, PYSONEncoder
 from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.pool import Pool
-from trytond.pyson import PYSONEncoder, PYSONDecoder, Eval
 
 
 class ModelView(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_mptt.py
--- a/trytond/tests/test_mptt.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_mptt.py        Sat Dec 11 17:58:45 2021 +0100
@@ -5,9 +5,9 @@
 import unittest
 from unittest.mock import patch
 
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.pool import Pool
 
 from .test_tree import TreeTestCaseMixin
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_multivalue.py
--- a/trytond/tests/test_multivalue.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_multivalue.py  Sat Dec 11 17:58:45 2021 +0100
@@ -2,8 +2,8 @@
 # this repository contains the full copyright notices and license terms.
 import unittest
 
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.pool import Pool
 
 
 class MultiValueTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_order.py
--- a/trytond/tests/test_order.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_order.py       Sat Dec 11 17:58:45 2021 +0100
@@ -2,8 +2,8 @@
 # this repository contains the full copyright notices and license terms.
 import unittest
 
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.pool import Pool
 
 
 class SequenceOrderedMixinTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_protocols.py
--- a/trytond/tests/test_protocols.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_protocols.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,14 +1,14 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-import unittest
+import datetime
 import json
-import datetime
+import unittest
 from decimal import Decimal
 
+from trytond.protocols.jsonrpc import JSONDecoder, JSONEncoder, JSONRequest
+from trytond.protocols.xmlrpc import XMLRequest, client
 from trytond.tools.immutabledict import ImmutableDict
-from trytond.protocols.jsonrpc import JSONEncoder, JSONDecoder, JSONRequest
-from trytond.protocols.xmlrpc import client, XMLRequest
 
 
 class DumpsLoadsMixin:
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_pyson.py
--- a/trytond/tests/test_pyson.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_pyson.py       Sat Dec 11 17:58:45 2021 +0100
@@ -2,11 +2,11 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-import unittest
 import datetime
 import sys
+import unittest
+from decimal import Decimal
 
-from decimal import Decimal
 from trytond import pyson
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_report.py
--- a/trytond/tests/test_report.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_report.py      Sat Dec 11 17:58:45 2021 +0100
@@ -1,10 +1,10 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import datetime
 import unittest
-import datetime
 
+from trytond.report.report import Report
 from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.report.report import Report
 
 
 class ReportTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_resource.py
--- a/trytond/tests/test_resource.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_resource.py    Sat Dec 11 17:58:45 2021 +0100
@@ -3,8 +3,8 @@
 import unittest
 
 from trytond.pool import Pool
+from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.tests.test_tryton import activate_module, with_transaction
 
 
 class ResourceTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_routes.py
--- a/trytond/tests/test_routes.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_routes.py      Sat Dec 11 17:58:45 2021 +0100
@@ -9,7 +9,7 @@
 from werkzeug.wrappers import BaseResponse
 
 from trytond.pool import Pool
-from trytond.tests.test_tryton import activate_module, DB_NAME, drop_db
+from trytond.tests.test_tryton import DB_NAME, activate_module, drop_db
 from trytond.transaction import Transaction
 from trytond.wsgi import app
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_rpc.py
--- a/trytond/tests/test_rpc.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_rpc.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,10 +1,10 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 import unittest
-from unittest.mock import Mock, DEFAULT, call
+from unittest.mock import DEFAULT, Mock, call
 
-from trytond.tests.test_tryton import with_transaction, activate_module
 from trytond.rpc import RPC
+from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_sendmail.py
--- a/trytond/tests/test_sendmail.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_sendmail.py    Sat Dec 11 17:58:45 2021 +0100
@@ -3,12 +3,13 @@
 import smtplib
 import unittest
 from email.message import Message
-from unittest.mock import Mock, MagicMock, patch, call
+from unittest.mock import MagicMock, Mock, call, patch
 
 from trytond.sendmail import (
-    sendmail_transactional, sendmail, SMTPDataManager, get_smtp_server)
+    SMTPDataManager, get_smtp_server, sendmail, sendmail_transactional)
 from trytond.transaction import Transaction
-from .test_tryton import with_transaction, activate_module
+
+from .test_tryton import activate_module, with_transaction
 
 
 class SendmailTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_sequence.py
--- a/trytond/tests/test_sequence.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_sequence.py    Sat Dec 11 17:58:45 2021 +0100
@@ -1,12 +1,13 @@
 # -*- coding: utf-8 -*-
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import datetime
 import unittest
-import datetime
+
+from trytond.ir.sequence import LastTimestampError
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.pool import Pool
-from trytond.ir.sequence import LastTimestampError
 
 
 class SequenceTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_tools.py
--- a/trytond/tests/test_tools.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_tools.py       Sat Dec 11 17:58:45 2021 +0100
@@ -3,24 +3,24 @@
 # this repository contains the full copyright notices and license terms.
 
 import datetime as dt
-import unittest
 import doctest
 import sys
+import unittest
 
 import sql
 import sql.operators
 
 from trytond.tools import (
-    reduce_ids, reduce_domain, decimal_, is_instance_method, file_open,
-    strip_wildcard, lstrip_wildcard, rstrip_wildcard, slugify, sortable_values,
-    escape_wildcard, unescape_wildcard, is_full_text, firstline,
-    remove_forbidden_chars)
-from trytond.tools.string_ import StringPartitioned, LazyString
+    decimal_, escape_wildcard, file_open, firstline, is_full_text,
+    is_instance_method, lstrip_wildcard, reduce_domain, reduce_ids,
+    remove_forbidden_chars, rstrip_wildcard, slugify, sortable_values,
+    strip_wildcard, unescape_wildcard)
 from trytond.tools.domain_inversion import (
-    domain_inversion, parse, simplify, merge, concat, unique_value,
-    eval_domain, localize_domain,
-    prepare_reference_domain, extract_reference_models)
+    concat, domain_inversion, eval_domain, extract_reference_models,
+    localize_domain, merge, parse, prepare_reference_domain, simplify,
+    unique_value)
 from trytond.tools.immutabledict import ImmutableDict
+from trytond.tools.string_ import LazyString, StringPartitioned
 
 
 class ToolsTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_transaction.py
--- a/trytond/tests/test_transaction.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_transaction.py Sat Dec 11 17:58:45 2021 +0100
@@ -3,7 +3,7 @@
 import unittest
 from unittest.mock import Mock
 
-from trytond.tests.test_tryton import DB_NAME, USER, CONTEXT, activate_module
+from trytond.tests.test_tryton import CONTEXT, DB_NAME, USER, activate_module
 from trytond.transaction import Transaction
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_tree.py
--- a/trytond/tests/test_tree.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_tree.py        Sat Dec 11 17:58:45 2021 +0100
@@ -4,8 +4,8 @@
 import unittest
 
 from trytond.model.exceptions import DomainValidationError, RecursionError
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.pool import Pool
 
 
 class TreeTestCaseMixin:
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_trigger.py
--- a/trytond/tests/test_trigger.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_trigger.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,18 +1,17 @@
 # -*- coding: utf-8 -*-
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import datetime
 import unittest
-import datetime
 from itertools import combinations
 
+from trytond.ir.exceptions import TriggerConditionError
 from trytond.model.exceptions import SQLConstraintError
+from trytond.pool import Pool
+from trytond.pyson import Eval, PYSONEncoder
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.tests.trigger import TRIGGER_LOGS
 from trytond.transaction import Transaction
-from trytond.pool import Pool
-from trytond.pyson import PYSONEncoder, Eval
-
-from trytond.ir.exceptions import TriggerConditionError
 
 
 class TriggerTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_tryton.py
--- a/trytond/tests/test_tryton.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_tryton.py      Sat Dec 11 17:58:45 2021 +0100
@@ -11,9 +11,9 @@
 import unittest
 import unittest.mock
 from configparser import ConfigParser
-from functools import reduce
-from functools import wraps
+from functools import reduce, wraps
 from itertools import chain
+
 try:
     import pkg_resources
 except ImportError:
@@ -22,17 +22,17 @@
 from lxml import etree
 from sql import Table
 
-from trytond.pool import Pool, isregisteredby
 from trytond import backend
-from trytond.model import (
-    Workflow, ModelSQL, ModelStorage, ModelSingleton, ModelView, fields)
-from trytond.model.fields import get_eval_fields, Function
-from trytond.tools import is_instance_method, file_open
-from trytond.transaction import Transaction
 from trytond.cache import Cache
 from trytond.config import config, parse_uri
-from trytond.wizard import StateView, StateAction
+from trytond.model import (
+    ModelSingleton, ModelSQL, ModelStorage, ModelView, Workflow, fields)
+from trytond.model.fields import Function, get_eval_fields
+from trytond.pool import Pool, isregisteredby
 from trytond.pyson import PYSONDecoder, PYSONEncoder
+from trytond.tools import file_open, is_instance_method
+from trytond.transaction import Transaction
+from trytond.wizard import StateAction, StateView
 
 __all__ = ['DB_NAME', 'USER', 'CONTEXT',
     'activate_module', 'ModuleTestCase', 'with_transaction',
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_union.py
--- a/trytond/tests/test_union.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_union.py       Sat Dec 11 17:58:45 2021 +0100
@@ -2,8 +2,8 @@
 # this repository contains the full copyright notices and license terms.
 import unittest
 
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.pool import Pool
 
 
 class UnionMixinTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_user.py
--- a/trytond/tests/test_user.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_user.py        Sat Dec 11 17:58:45 2021 +0100
@@ -4,13 +4,13 @@
 import os
 import unittest
 from contextlib import contextmanager
-from unittest.mock import patch, ANY, Mock
+from unittest.mock import ANY, Mock, patch
 
-from trytond.tests.test_tryton import activate_module, with_transaction
+from trytond.config import config
 from trytond.pool import Pool
-from trytond.config import config
 from trytond.res import user as user_module
 from trytond.res.user import PasswordError
+from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
 
 FROM = '[email protected]'
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_wizard.py
--- a/trytond/tests/test_wizard.py      Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_wizard.py      Sat Dec 11 17:58:45 2021 +0100
@@ -3,9 +3,9 @@
 import unittest
 
 from trytond.model.exceptions import AccessError
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
 from trytond.transaction import Transaction
-from trytond.pool import Pool
 
 
 class WizardTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_workflow.py
--- a/trytond/tests/test_workflow.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_workflow.py    Sat Dec 11 17:58:45 2021 +0100
@@ -3,8 +3,8 @@
 
 import unittest
 
+from trytond.pool import Pool
 from trytond.tests.test_tryton import activate_module, with_transaction
-from trytond.pool import Pool
 
 
 class WorkflowTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/test_wsgi.py
--- a/trytond/tests/test_wsgi.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/test_wsgi.py        Sat Dec 11 17:58:45 2021 +0100
@@ -4,10 +4,11 @@
 import unittest
 from unittest.mock import Mock, sentinel
 
+from werkzeug.test import Client
 from werkzeug.wrappers import Response
-from werkzeug.test import Client
+
+from trytond.exceptions import TrytonException
 from trytond.wsgi import TrytondWSGI
-from trytond.exceptions import TrytonException
 
 
 class WSGIAppTestCase(unittest.TestCase):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/tools.py
--- a/trytond/tests/tools.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/tools.py    Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,9 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from proteus import config as pconfig, Model, Wizard
+from proteus import Model, Wizard
+from proteus import config as pconfig
 
-from .test_tryton import restore_db_cache, backup_db_cache, drop_create
+from .test_tryton import backup_db_cache, drop_create, restore_db_cache
 
 __all__ = ['activate_modules', 'set_user']
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/tree.py
--- a/trytond/tests/tree.py     Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/tree.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-from trytond.model import ModelSQL, tree, fields
+from trytond.model import ModelSQL, fields, tree
 from trytond.pool import Pool
 
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tests/wizard.py
--- a/trytond/tests/wizard.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tests/wizard.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,10 +1,10 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from trytond.model import ModelView, ModelSQL, fields
+from trytond.model import ModelSQL, ModelView, fields
 from trytond.pool import Pool
 from trytond.transaction import Transaction
-from trytond.wizard import Wizard, StateView, StateTransition, StateAction, \
-    Button
+from trytond.wizard import (
+    Button, StateAction, StateTransition, StateView, Wizard)
 
 
 class TestWizardStart(ModelSQL, ModelView):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tools/__init__.py
--- a/trytond/tools/__init__.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tools/__init__.py Sat Dec 11 17:58:45 2021 +0100
@@ -5,13 +5,12 @@
 except ImportError:
     from werkzeug.utils import cached_property
 
+from .decimal_ import decistmt
 from .misc import (
-    file_open, get_smtp_server, reduce_ids, reduce_domain,
-    grouped_slice, is_instance_method, resolve, strip_wildcard,
-    lstrip_wildcard, rstrip_wildcard, slugify, sortable_values,
-    escape_wildcard, unescape_wildcard, is_full_text, sql_pairing, firstline,
-    remove_forbidden_chars)
-from .decimal_ import decistmt
+    escape_wildcard, file_open, firstline, get_smtp_server, grouped_slice,
+    is_full_text, is_instance_method, lstrip_wildcard, reduce_domain,
+    reduce_ids, remove_forbidden_chars, resolve, rstrip_wildcard, slugify,
+    sortable_values, sql_pairing, strip_wildcard, unescape_wildcard)
 
 __all__ = ['file_open', 'get_smtp_server', 'reduce_ids',
     'reduce_domain', 'grouped_slice', 'is_instance_method', 'resolve',
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tools/decimal_.py
--- a/trytond/tools/decimal_.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tools/decimal_.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,7 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from tokenize import tokenize, untokenize, NUMBER, NAME, OP, STRING
 from io import BytesIO
+from tokenize import NAME, NUMBER, OP, STRING, tokenize, untokenize
 
 # code snippet taken from http://docs.python.org/library/tokenize.html
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tools/domain_inversion.py
--- a/trytond/tools/domain_inversion.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tools/domain_inversion.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,11 +1,11 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 
-import re
+import datetime
 import operator
-import datetime
+import re
 from collections import defaultdict
-from functools import reduce, partial
+from functools import partial, reduce
 
 
 def sql_like(value, pattern, ignore_case=True):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tools/multivalue.py
--- a/trytond/tools/multivalue.py       Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tools/multivalue.py       Sat Dec 11 17:58:45 2021 +0100
@@ -2,7 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 from decimal import Decimal
 
-from sql import Table, Column, Literal, Union, Null
+from sql import Column, Literal, Null, Table, Union
 from sql.aggregate import Max
 
 from trytond import backend
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/tools/string_.py
--- a/trytond/tools/string_.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/tools/string_.py  Sat Dec 11 17:58:45 2021 +0100
@@ -6,8 +6,9 @@
 __all__ = ['StringMatcher', 'StringPartitioned', 'LazyString']
 
 from warnings import warn
+
 try:
-    from Levenshtein import opcodes, editops, matching_blocks, ratio, distance
+    from Levenshtein import distance, editops, matching_blocks, opcodes, ratio
 
     class StringMatcher:
         """A SequenceMatcher-like class built on the top of Levenshtein"""
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/transaction.py
--- a/trytond/transaction.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/transaction.py    Sat Dec 11 17:58:45 2021 +0100
@@ -4,6 +4,7 @@
 import time
 from collections import defaultdict
 from threading import local
+
 from sql import Flavor
 
 from trytond.config import config
@@ -65,8 +66,8 @@
     started_at = None
 
     def __new__(cls, new=False):
+        from trytond.cache import LRUDict
         from trytond.pool import Pool
-        from trytond.cache import LRUDict
         transactions = cls._local.transactions
         if new or not transactions:
             instance = super(Transaction, cls).__new__(cls)
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/url.py
--- a/trytond/url.py    Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/url.py    Sat Dec 11 17:58:45 2021 +0100
@@ -62,8 +62,8 @@
 
     def __get__(self, inst, cls):
         from trytond.model import Model
+        from trytond.report import Report
         from trytond.wizard import Wizard
-        from trytond.report import Report
 
         url_part = {}
         if issubclass(cls, Model):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/wizard/__init__.py
--- a/trytond/wizard/__init__.py        Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/wizard/__init__.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,8 +1,7 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
-from .wizard import Wizard
-from .wizard import StateView, StateTransition, StateAction, StateReport
-from .wizard import Button
+from .wizard import (
+    Button, StateAction, StateReport, StateTransition, StateView, Wizard)
 
 __all__ = ['Wizard',
     'StateView', 'StateTransition', 'StateAction', 'StateReport',
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/wizard/wizard.py
--- a/trytond/wizard/wizard.py  Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/wizard/wizard.py  Sat Dec 11 17:58:45 2021 +0100
@@ -5,20 +5,20 @@
     'StateView', 'StateTransition', 'StateAction', 'StateReport',
     'Button']
 
+import copy
 import json
-import copy
 
 from trytond.i18n import gettext
-from trytond.pool import Pool, PoolBase
-from trytond.transaction import Transaction
-from trytond.url import URLMixin
-from trytond.protocols.jsonrpc import JSONDecoder, JSONEncoder
 from trytond.model import ModelSQL
 from trytond.model.exceptions import AccessError
 from trytond.model.fields import states_validate
+from trytond.pool import Pool, PoolBase
+from trytond.protocols.jsonrpc import JSONDecoder, JSONEncoder
 from trytond.pyson import PYSONEncoder
 from trytond.rpc import RPC
 from trytond.tools import cached_property
+from trytond.transaction import Transaction
+from trytond.url import URLMixin
 
 
 class Button(object):
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/worker.py
--- a/trytond/worker.py Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/worker.py Sat Dec 11 17:58:45 2021 +0100
@@ -6,7 +6,8 @@
 import select
 import signal
 import time
-from multiprocessing import Pool as MPool, cpu_count
+from multiprocessing import Pool as MPool
+from multiprocessing import cpu_count
 
 from sql import Flavor
 
diff -r 8cd6dd7196eb -r dcc8d636faeb trytond/wsgi.py
--- a/trytond/wsgi.py   Sun Nov 28 14:31:45 2021 +0100
+++ b/trytond/wsgi.py   Sat Dec 11 17:58:45 2021 +0100
@@ -8,14 +8,16 @@
 import sys
 import traceback
 import urllib.parse
+
 try:
     from http import HTTPStatus
 except ImportError:
     from http import client as HTTPStatus
 
+from werkzeug.exceptions import HTTPException, InternalServerError, abort
+from werkzeug.routing import BaseConverter, Map, Rule
 from werkzeug.wrappers import Response
-from werkzeug.routing import Map, Rule, BaseConverter
-from werkzeug.exceptions import abort, HTTPException, InternalServerError
+
 try:
     from werkzeug.middleware.proxy_fix import ProxyFix
 
@@ -37,8 +39,8 @@
 import wrapt
 
 from trytond.config import config
+from trytond.protocols.jsonrpc import JSONProtocol
 from trytond.protocols.wrappers import Request
-from trytond.protocols.jsonrpc import JSONProtocol
 from trytond.protocols.xmlrpc import XMLProtocol
 from trytond.status import processing
 from trytond.tools import resolve
@@ -250,5 +252,5 @@
                 kwargs = eval(config.get(section, 'kwargs'))
         app.wsgi_app = Middleware(app.wsgi_app, *args, **kwargs)
 
+import trytond.bus  # noqa: E402,F401
 import trytond.protocols.dispatcher  # noqa: E402,F401
-import trytond.bus  # noqa: E402,F401

Reply via email to