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

        issue10928
diffstat:

 .isort.cfg                                                  |   3 +
 bin/tryton                                                  |   4 +-
 setup-freeze.py                                             |   4 +-
 setup.py                                                    |   3 +-
 tryton/__init__.py                                          |   3 +-
 tryton/action/main.py                                       |   4 +-
 tryton/bus.py                                               |   5 +-
 tryton/client.py                                            |   6 +-
 tryton/common/__init__.py                                   |  27 +++---
 tryton/common/cellrendererbinary.py                         |   2 +-
 tryton/common/cellrendererbutton.py                         |   2 +-
 tryton/common/cellrendererclickablepixbuf.py                |   2 +-
 tryton/common/cellrenderertext.py                           |   2 +-
 tryton/common/common.py                                     |  34 ++++---
 tryton/common/completion.py                                 |   6 +-
 tryton/common/datetime_.py                                  |   7 +-
 tryton/common/domain_inversion.py                           |   6 +-
 tryton/common/domain_parser.py                              |  18 ++--
 tryton/common/htmltextbuffer.py                             |   6 +-
 tryton/common/popup_menu.py                                 |   8 +-
 tryton/common/richtext.py                                   |   7 +-
 tryton/common/selection.py                                  |   5 +-
 tryton/config.py                                            |   6 +-
 tryton/device_cookie.py                                     |   4 +-
 tryton/gui/main.py                                          |   8 +-
 tryton/gui/window/about.py                                  |   9 +-
 tryton/gui/window/attachment.py                             |   8 +-
 tryton/gui/window/board.py                                  |   4 +-
 tryton/gui/window/dblogin.py                                |  10 +-
 tryton/gui/window/email_.py                                 |  11 +-
 tryton/gui/window/form.py                                   |  20 ++--
 tryton/gui/window/limit.py                                  |   6 +-
 tryton/gui/window/preference.py                             |   4 +-
 tryton/gui/window/revision.py                               |   4 +-
 tryton/gui/window/tabcontent.py                             |   3 +-
 tryton/gui/window/view_board/action.py                      |  11 +-
 tryton/gui/window/view_board/view_board.py                  |   3 +-
 tryton/gui/window/view_form/model/field.py                  |  27 +++---
 tryton/gui/window/view_form/model/group.py                  |  11 +-
 tryton/gui/window/view_form/model/record.py                 |   7 +-
 tryton/gui/window/view_form/screen/screen.py                |  27 +++---
 tryton/gui/window/view_form/view/__init__.py                |   4 +-
 tryton/gui/window/view_form/view/calendar_.py               |   4 +-
 tryton/gui/window/view_form/view/calendar_gtk/calendar_.py  |   4 +-
 tryton/gui/window/view_form/view/calendar_gtk/toolbar.py    |   6 +-
 tryton/gui/window/view_form/view/form.py                    |  50 ++++++------
 tryton/gui/window/view_form/view/form_gtk/binary.py         |   7 +-
 tryton/gui/window/view_form/view/form_gtk/calendar_.py      |   9 +-
 tryton/gui/window/view_form/view/form_gtk/char.py           |   5 +-
 tryton/gui/window/view_form/view/form_gtk/dictionary.py     |  20 ++--
 tryton/gui/window/view_form/view/form_gtk/document.py       |   5 +-
 tryton/gui/window/view_form/view/form_gtk/image.py          |   5 +-
 tryton/gui/window/view_form/view/form_gtk/integer.py        |   1 +
 tryton/gui/window/view_form/view/form_gtk/many2many.py      |   5 +-
 tryton/gui/window/view_form/view/form_gtk/many2one.py       |  13 +-
 tryton/gui/window/view_form/view/form_gtk/multiselection.py |   3 +-
 tryton/gui/window/view_form/view/form_gtk/one2many.py       |   9 +-
 tryton/gui/window/view_form/view/form_gtk/pyson.py          |   5 +-
 tryton/gui/window/view_form/view/form_gtk/reference.py      |   5 +-
 tryton/gui/window/view_form/view/form_gtk/richtextbox.py    |   5 +-
 tryton/gui/window/view_form/view/form_gtk/selection.py      |   5 +-
 tryton/gui/window/view_form/view/form_gtk/textbox.py        |   5 +-
 tryton/gui/window/view_form/view/form_gtk/timedelta.py      |   1 +
 tryton/gui/window/view_form/view/form_gtk/url.py            |   9 +-
 tryton/gui/window/view_form/view/form_gtk/widget.py         |   3 +-
 tryton/gui/window/view_form/view/graph.py                   |  16 ++--
 tryton/gui/window/view_form/view/graph_gtk/bar.py           |   5 +-
 tryton/gui/window/view_form/view/graph_gtk/graph.py         |   4 +-
 tryton/gui/window/view_form/view/graph_gtk/line.py          |   5 +-
 tryton/gui/window/view_form/view/graph_gtk/pie.py           |   7 +-
 tryton/gui/window/view_form/view/list.py                    |  23 +++--
 tryton/gui/window/view_form/view/list_form.py               |   3 +-
 tryton/gui/window/view_form/view/list_gtk/editabletree.py   |   2 +-
 tryton/gui/window/view_form/view/list_gtk/widget.py         |  31 +++----
 tryton/gui/window/view_form/view/screen_container.py        |   4 +-
 tryton/gui/window/win_csv.py                                |   2 +-
 tryton/gui/window/win_export.py                             |   8 +-
 tryton/gui/window/win_form.py                               |   7 +-
 tryton/gui/window/win_import.py                             |   2 +-
 tryton/gui/window/win_search.py                             |   2 +-
 tryton/gui/window/window.py                                 |   3 +-
 tryton/gui/window/wizard.py                                 |  17 ++--
 tryton/jsonrpc.py                                           |  23 ++---
 tryton/plugins/__init__.py                                  |   6 +-
 tryton/plugins/translation/__init__.py                      |   2 +-
 tryton/pyson.py                                             |   5 +-
 tryton/rpc.py                                               |   8 +-
 tryton/tests/test_common_domain_parser.py                   |   5 +-
 tryton/tests/test_common_timedelta.py                       |   2 +-
 tryton/translate.py                                         |   4 +-
 90 files changed, 387 insertions(+), 344 deletions(-)

diffs (1987 lines):

diff -r 0b650604f921 -r dde55da3a6ba .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 0b650604f921 -r dde55da3a6ba bin/tryton
--- a/bin/tryton        Wed Dec 08 00:38:55 2021 +0100
+++ b/bin/tryton        Sat Dec 11 17:58:45 2021 +0100
@@ -1,6 +1,7 @@
 #!/usr/bin/env python3
+import os
 import sys
-import os
+
 try:
     DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
         '..', '..', 'tryton')))
@@ -51,4 +52,5 @@
 os.environ['LIBOVERLAY_SCROLLBAR'] = '0'
 
 from tryton.client import main
+
 main()
diff -r 0b650604f921 -r dde55da3a6ba setup-freeze.py
--- a/setup-freeze.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/setup-freeze.py   Sat Dec 11 17:58:45 2021 +0100
@@ -8,9 +8,9 @@
 import ssl
 import sys
 import tempfile
-from subprocess import Popen, PIPE, check_call
+from subprocess import PIPE, Popen, check_call
 
-from cx_Freeze import setup, Executable
+from cx_Freeze import Executable, setup
 
 home = os.path.expanduser('~/')
 pythonrc = os.path.join(home, '.pythonrc.py')
diff -r 0b650604f921 -r dde55da3a6ba setup.py
--- a/setup.py  Wed Dec 08 00:38:55 2021 +0100
+++ b/setup.py  Sat Dec 11 17:58:45 2021 +0100
@@ -2,11 +2,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 setuptools import setup, find_packages
 import io
 import os
 import re
 
+from setuptools import find_packages, setup
+
 
 def read(fname):
     return io.open(
diff -r 0b650604f921 -r dde55da3a6ba tryton/__init__.py
--- a/tryton/__init__.py        Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/__init__.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.
 __version__ = "6.3.0"
+import locale
+
 import gi
-import locale
 
 gi.require_version('Gtk', '3.0')
 gi.require_version('Gdk', '3.0')
diff -r 0b650604f921 -r dde55da3a6ba tryton/action/main.py
--- a/tryton/action/main.py     Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/action/main.py     Sat Dec 11 17:58:45 2021 +0100
@@ -4,8 +4,8 @@
 import webbrowser
 
 import tryton.rpc as rpc
-from tryton.common import RPCExecute, RPCException
-from tryton.common import message, selection, file_write, file_open
+from tryton.common import (
+    RPCException, RPCExecute, file_open, file_write, message, selection)
 from tryton.config import CONFIG
 from tryton.pyson import PYSONDecoder
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/bus.py
--- a/tryton/bus.py     Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/bus.py     Sat Dec 11 17:58:45 2021 +0100
@@ -7,14 +7,13 @@
 import threading
 import time
 import uuid
+from urllib.error import HTTPError
 from urllib.request import Request, urlopen
-from urllib.error import HTTPError
 
 from gi.repository import GLib
 
+from tryton.config import CONFIG
 from tryton.jsonrpc import object_hook
-from tryton.config import CONFIG
-
 
 logger = logging.getLogger(__name__)
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/client.py
--- a/tryton/client.py  Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/client.py  Sat Dec 11 17:58:45 2021 +0100
@@ -6,11 +6,9 @@
 import traceback
 from urllib.parse import urlparse
 
-from gi.repository import Gdk, Gtk, Gio
+from gi.repository import Gdk, Gio, Gtk
 
-from tryton import common
-from tryton import gui
-from tryton import translate
+from tryton import common, gui, translate
 from tryton.config import CONFIG, get_config_dir
 from tryton.gui.window.dblogin import DBLogin
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/__init__.py
--- a/tryton/common/__init__.py Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/__init__.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,21 +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 . import timedelta
 from .common import (
-    IconFactory, MODELACCESS, MODELHISTORY, MODELNAME, VIEW_SEARCH,
-    get_toplevel_window, get_sensible_widget, selection, file_selection,
-    slugify, file_write, file_open, mailto, message, warning, userwarning, sur,
-    sur_3b, ask, concurrency, error, to_xml, process_exception, Login, Logout,
-    node_attributes, hex2rgb, highlight_rgb, generateColorscheme, RPCException,
-    RPCProgress, RPCExecute, RPCContextReload, Tooltips, COLOR_SCHEMES,
-    filter_domain, timezoned_date, untimezoned_date, humanize, get_hostname,
-    get_port, resize_pixbuf, data2pixbuf, apply_label_attributes, ellipsize,
-    get_align, date_format, idle_add, check_version, TRYTON_ICON, setup_window)
+    COLOR_SCHEMES, MODELACCESS, MODELHISTORY, MODELNAME, TRYTON_ICON,
+    VIEW_SEARCH, IconFactory, Login, Logout, RPCContextReload, RPCException,
+    RPCExecute, RPCProgress, Tooltips, apply_label_attributes, ask,
+    check_version, concurrency, data2pixbuf, date_format, ellipsize, error,
+    file_open, file_selection, file_write, filter_domain, generateColorscheme,
+    get_align, get_hostname, get_port, get_sensible_widget,
+    get_toplevel_window, hex2rgb, highlight_rgb, humanize, idle_add, mailto,
+    message, node_attributes, process_exception, resize_pixbuf, selection,
+    setup_window, slugify, sur, sur_3b, timezoned_date, to_xml,
+    untimezoned_date, userwarning, warning)
 from .domain_inversion import (
-    domain_inversion, eval_domain, localize_domain, merge, inverse_leaf,
-    filter_leaf, prepare_reference_domain, extract_reference_models, concat,
-    simplify, unique_value)
+    concat, domain_inversion, eval_domain, extract_reference_models,
+    filter_leaf, inverse_leaf, localize_domain, merge,
+    prepare_reference_domain, simplify, unique_value)
 from .environment import EvalEnvironment
-from . import timedelta
 
 __all__ = [
     IconFactory, MODELACCESS, MODELHISTORY, MODELNAME, VIEW_SEARCH,
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/cellrendererbinary.py
--- a/tryton/common/cellrendererbinary.py       Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/cellrendererbinary.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 gi.repository import Gtk, Gdk, GObject, Pango
+from gi.repository import Gdk, GObject, Gtk, Pango
 
 from .common import IconFactory
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/cellrendererbutton.py
--- a/tryton/common/cellrendererbutton.py       Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/cellrendererbutton.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 gi.repository import Gtk, GObject, Pango
+from gi.repository import GObject, Gtk, Pango
 
 
 class CellRendererButton(Gtk.CellRenderer):
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/common/cellrendererclickablepixbuf.py
--- a/tryton/common/cellrendererclickablepixbuf.py      Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/common/cellrendererclickablepixbuf.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 gi.repository import Gtk, GObject
+from gi.repository import GObject, Gtk
 
 
 class CellRendererClickablePixbuf(Gtk.CellRendererPixbuf):
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/cellrenderertext.py
--- a/tryton/common/cellrenderertext.py Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/cellrenderertext.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 gi.repository import Gtk, GObject
+from gi.repository import GObject, Gtk
 
 
 class CellRendererText(Gtk.CellRendererText):
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/common.py
--- a/tryton/common/common.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/common.py   Sat Dec 11 17:58:45 2021 +0100
@@ -1,36 +1,39 @@
 # 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 colorsys
 import gettext
+import logging
 import os
 import platform
+import re
 import subprocess
 import tempfile
-import re
-import logging
 import unicodedata
-import colorsys
 import xml.etree.ElementTree as ET
 from collections import defaultdict
 from decimal import Decimal
+
 try:
     from http import HTTPStatus
 except ImportError:
     from http import client as HTTPStatus
-from functools import wraps, lru_cache
-from tryton.config import CONFIG
-from tryton.config import TRYTON_ICON, PIXMAPS_DIR
+
+import _thread
+import shlex
+import socket
 import sys
+import traceback
+import urllib.error
+import urllib.parse
+import urllib.request
 import webbrowser
-import traceback
+from functools import lru_cache, wraps
+from string import Template
+
 import tryton.rpc as rpc
-import socket
-import _thread
-import urllib.request
-import urllib.parse
-import urllib.error
-from string import Template
-import shlex
+from tryton.config import CONFIG, PIXMAPS_DIR, TRYTON_ICON
+
 try:
     import ssl
 except ImportError:
@@ -41,8 +44,9 @@
 from gi.repository import Gdk, GdkPixbuf, GLib, GObject, Gtk
 
 from tryton import __version__
-from tryton.exceptions import TrytonServerError, TrytonError
+from tryton.exceptions import TrytonError, TrytonServerError
 from tryton.pyson import PYSONEncoder
+
 from .underline import set_underline
 from .widget_style import widget_class
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/completion.py
--- a/tryton/common/completion.py       Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/completion.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 gettext
 import logging
-import gettext
 
 from gi.repository import GLib, Gtk
 
-from tryton.config import CONFIG
 from tryton.common import RPCExecute
 from tryton.common.domain_parser import likify
-from tryton.exceptions import TrytonServerError, TrytonError
+from tryton.config import CONFIG
+from tryton.exceptions import TrytonError, TrytonServerError
 
 _ = gettext.gettext
 logger = logging.getLogger(__name__)
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/datetime_.py
--- a/tryton/common/datetime_.py        Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/datetime_.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,13 +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 datetime
 import gettext
-import datetime
 
+from dateutil.parser import parse
+from dateutil.relativedelta import relativedelta
 from gi.repository import Gdk, GObject, Gtk
 
-from dateutil.relativedelta import relativedelta
-from dateutil.parser import parse
-
 from .common import IconFactory
 
 __all__ = ['Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime']
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/domain_inversion.py
--- a/tryton/common/domain_inversion.py Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/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 0b650604f921 -r dde55da3a6ba tryton/common/domain_parser.py
--- a/tryton/common/domain_parser.py    Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/domain_parser.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 datetime
+import decimal
+import gettext
+import io
+import locale
+from collections import OrderedDict
+from decimal import Decimal
 from shlex import shlex
 from types import GeneratorType
-import gettext
-import locale
-import decimal
-from decimal import Decimal
-import datetime
-import io
-from collections import OrderedDict
 
-from tryton.common import untimezoned_date, timezoned_date, date_format
+from tryton.common import date_format, timezoned_date, untimezoned_date
 from tryton.common.datetime_ import date_parse
+from tryton.common.timedelta import format as timedelta_format
 from tryton.common.timedelta import parse as timedelta_parse
-from tryton.common.timedelta import format as timedelta_format
 from tryton.pyson import PYSONDecoder
 
 __all__ = ['DomainParser']
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/htmltextbuffer.py
--- a/tryton/common/htmltextbuffer.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/htmltextbuffer.py   Sat Dec 11 17:58:45 2021 +0100
@@ -2,12 +2,12 @@
 # this repository contains the full copyright notices and license terms.
 
 import sys
+import xml.etree.ElementTree as ET
+from html.parser import HTMLParser
 from io import StringIO
-import xml.etree.ElementTree as ET
 from xml.sax.saxutils import escape, unescape
-from html.parser import HTMLParser
 
-from gi.repository import Gtk, Gdk, Pango
+from gi.repository import Gdk, Gtk, Pango
 
 
 def guess_decode(bytes, errors='strict'):
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/popup_menu.py
--- a/tryton/common/popup_menu.py       Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/popup_menu.py       Sat Dec 11 17:58:45 2021 +0100
@@ -2,16 +2,16 @@
 # this repository contains the full copyright notices and license terms.
 import gettext
 
-from gi.repository import Gtk, Gdk
+from gi.repository import Gdk, Gtk
 
-from tryton.common import RPCExecute, RPCException
+from tryton.action import Action
+from tryton.common import RPCException, RPCExecute
 from tryton.common.common import selection
-from tryton.gui.window.view_form.screen import Screen
-from tryton.action import Action
 from tryton.gui.window import Window
 from tryton.gui.window.attachment import Attachment
 from tryton.gui.window.email_ import Email
 from tryton.gui.window.note import Note
+from tryton.gui.window.view_form.screen import Screen
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/richtext.py
--- a/tryton/common/richtext.py Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/richtext.py Sat Dec 11 17:58:45 2021 +0100
@@ -3,13 +3,12 @@
 import gettext
 from contextlib import contextmanager
 
-from gi.repository import Gtk, Gdk
+from gi.repository import Gdk, Gtk
 
 from tryton.common import IconFactory
 from tryton.common.htmltextbuffer import (
-    serialize, deserialize,
-    setup_tags, register_foreground, remove_tags,
-    FAMILIES, SIZE2SCALE, MIME, use_serialize_func)
+    FAMILIES, MIME, SIZE2SCALE, deserialize, register_foreground, remove_tags,
+    serialize, setup_tags, use_serialize_func)
 
 _ = gettext.gettext
 SIZES = sorted(SIZE2SCALE.keys())
diff -r 0b650604f921 -r dde55da3a6ba tryton/common/selection.py
--- a/tryton/common/selection.py        Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/common/selection.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,12 +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 math
 import operator
-import math
 
 from gi.repository import Gdk, GLib, GObject, Gtk
 
-from tryton.common import RPCExecute, RPCException
-from tryton.common import eval_domain
+from tryton.common import RPCException, RPCExecute, eval_domain
 
 
 class SelectionMixin(object):
diff -r 0b650604f921 -r dde55da3a6ba tryton/config.py
--- a/tryton/config.py  Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/config.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 configparser
+import gettext
+import locale
+import logging
 import optparse
 import os
-import gettext
-import logging
 import sys
-import locale
 
 from gi.repository import GdkPixbuf
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/device_cookie.py
--- a/tryton/device_cookie.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/device_cookie.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 os
 import json
 import logging
+import os
 from threading import Lock
 
-from tryton.config import get_config_dir, CONFIG
+from tryton.config import CONFIG, get_config_dir
 
 logger = logging.getLogger(__name__)
 COOKIES_PATH = os.path.join(get_config_dir(), 'device_cookies')
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/main.py
--- a/tryton/gui/main.py        Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/main.py        Sat Dec 11 17:58:45 2021 +0100
@@ -9,7 +9,7 @@
 import threading
 import traceback
 import webbrowser
-from urllib.parse import urlparse, parse_qsl, unquote
+from urllib.parse import parse_qsl, unquote, urlparse
 
 from gi.repository import Gdk, GdkPixbuf, Gio, GLib, Gtk
 
@@ -18,9 +18,9 @@
 import tryton.rpc as rpc
 import tryton.translate as translate
 from tryton.action import Action
-from tryton.common import RPCExecute, RPCException, RPCContextReload
-from tryton.common.cellrendererclickablepixbuf import \
-        CellRendererClickablePixbuf
+from tryton.common import RPCContextReload, RPCException, RPCExecute
+from tryton.common.cellrendererclickablepixbuf import (
+    CellRendererClickablePixbuf)
 from tryton.config import CONFIG, TRYTON_ICON, get_config_dir
 from tryton.exceptions import TrytonError, TrytonServerUnavailable
 from tryton.gui.window import Window
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/about.py
--- a/tryton/gui/window/about.py        Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/about.py        Sat Dec 11 17:58:45 2021 +0100
@@ -1,13 +1,14 @@
 # -*- 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 gettext
 import os
-import gettext
-from gi.repository import Gtk, GdkPixbuf
 
-from tryton.config import PIXMAPS_DIR, CONFIG
+from gi.repository import GdkPixbuf, Gtk
+
+from tryton import __version__
 from tryton.common import get_toplevel_window
-from tryton import __version__
+from tryton.config import CONFIG, PIXMAPS_DIR
 
 COPYRIGHT = '''\
 Copyright (C) 2004-2021 Tryton.
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/attachment.py
--- a/tryton/gui/window/attachment.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/attachment.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.
 "Attachment"
+import gettext
 import os
-from urllib.request import urlopen
-from urllib.parse import urlparse, unquote
-import gettext
 import webbrowser
 from functools import partial
+from urllib.parse import unquote, urlparse
+from urllib.request import urlopen
 
-from tryton.common import RPCExecute, RPCException, file_write, file_open
+from tryton.common import RPCException, RPCExecute, file_open, file_write
 from tryton.gui.window.view_form.screen import Screen
 from tryton.gui.window.win_form import WinForm
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/board.py
--- a/tryton/gui/window/board.py        Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/board.py        Sat Dec 11 17:58:45 2021 +0100
@@ -4,10 +4,10 @@
 import gettext
 import xml.dom.minidom
 
-from tryton.signal_event import SignalEvent
+from tryton.common import MODELNAME, RPCException, RPCExecute
 from tryton.gui import Main
 from tryton.gui.window.view_board import ViewBoard
-from tryton.common import RPCExecute, RPCException, MODELNAME
+from tryton.signal_event import SignalEvent
 
 from .tabcontent import TabContent
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/dblogin.py
--- a/tryton/gui/window/dblogin.py      Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/dblogin.py      Sat Dec 11 17:58:45 2021 +0100
@@ -2,18 +2,18 @@
 # this repository contains the full copyright notices and license terms.
 
 import configparser
+import gettext
+import logging
 import os
-import gettext
 import threading
-import logging
 
 from gi.repository import GLib, GObject, Gtk
 
+import tryton.common as common
+import tryton.rpc as rpc
 from tryton import __version__
-import tryton.common as common
-from tryton.config import CONFIG, TRYTON_ICON, PIXMAPS_DIR, get_config_dir
-import tryton.rpc as rpc
 from tryton.common.underline import set_underline
+from tryton.config import CONFIG, PIXMAPS_DIR, TRYTON_ICON, get_config_dir
 
 _ = gettext.gettext
 logger = logging.getLogger(__name__)
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/email_.py
--- a/tryton/gui/window/email_.py       Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/email_.py       Sat Dec 11 17:58:45 2021 +0100
@@ -4,20 +4,21 @@
 import logging
 import os
 
-from gi.repository import Gtk, GLib, GObject
+from gi.repository import GLib, GObject, Gtk
+
 try:
     from gi.repository import GtkSpell
 except ImportError:
     GtkSpell = None
 
-from tryton.common import IconFactory, Tooltips, RPCExecute, RPCException
+from tryton.common import IconFactory, RPCException, RPCExecute, Tooltips
 from tryton.common.richtext import (
-    register_format, add_toolbar, get_content, set_content)
+    add_toolbar, get_content, register_format, set_content)
 from tryton.common.treeviewcontrol import TreeViewControl
 from tryton.common.underline import set_underline
 from tryton.common.widget_style import widget_class
-from tryton.config import TRYTON_ICON, CONFIG
-from tryton.exceptions import TrytonServerError, TrytonError
+from tryton.config import CONFIG, TRYTON_ICON
+from tryton.exceptions import TrytonError, TrytonServerError
 from tryton.gui import Main
 from tryton.gui.window.nomodal import NoModal
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/form.py
--- a/tryton/gui/window/form.py Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/form.py Sat Dec 11 17:58:45 2021 +0100
@@ -11,23 +11,23 @@
 
 from gi.repository import Gdk, GLib, Gtk
 
-from tryton.gui.window.view_form.screen import Screen
+import tryton.common as common
+from tryton import plugins
 from tryton.action import Action
+from tryton.common import (
+    RPCException, RPCExecute, message, sur, sur_3b, timezoned_date)
+from tryton.common.common import selection as selection_
+from tryton.common.underline import set_underline
 from tryton.gui import Main
 from tryton.gui.window import Window
+from tryton.gui.window.attachment import Attachment
 from tryton.gui.window.email_ import Email
+from tryton.gui.window.note import Note
+from tryton.gui.window.revision import Revision
+from tryton.gui.window.view_form.screen import Screen
 from tryton.gui.window.win_export import WinExport
 from tryton.gui.window.win_import import WinImport
-from tryton.gui.window.attachment import Attachment
-from tryton.gui.window.note import Note
-from tryton.gui.window.revision import Revision
 from tryton.signal_event import SignalEvent
-from tryton.common import message, sur, sur_3b, timezoned_date
-import tryton.common as common
-from tryton.common import RPCExecute, RPCException
-from tryton.common.common import selection as selection_
-from tryton.common.underline import set_underline
-from tryton import plugins
 
 from .tabcontent import TabContent
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/limit.py
--- a/tryton/gui/window/limit.py        Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/limit.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 gettext
 import sys
-import gettext
 
 from gi.repository import Gtk
 
-from tryton.common import get_toplevel_window, IconFactory
+from tryton.common import IconFactory, get_toplevel_window
 from tryton.common.underline import set_underline
-from tryton.config import TRYTON_ICON, CONFIG
+from tryton.config import CONFIG, TRYTON_ICON
 from tryton.gui import Main
 
 _ = gettext.gettext
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/preference.py
--- a/tryton/gui/window/preference.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/preference.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.
 "Preference"
+import copy
 import gettext
-import copy
 
 from gi.repository import Gdk, Gtk
 
 import tryton.rpc as rpc
-from tryton.common import RPCExecute, RPCException, IconFactory
+from tryton.common import IconFactory, RPCException, RPCExecute
 from tryton.common.underline import set_underline
 from tryton.config import TRYTON_ICON
 from tryton.gui import Main
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/revision.py
--- a/tryton/gui/window/revision.py     Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/revision.py     Sat Dec 11 17:58:45 2021 +0100
@@ -4,8 +4,8 @@
 
 from gi.repository import Gtk
 
-from tryton.common import (get_toplevel_window, IconFactory,
-    timezoned_date, untimezoned_date)
+from tryton.common import (
+    IconFactory, get_toplevel_window, timezoned_date, untimezoned_date)
 from tryton.common.datetime_ import date_parse
 from tryton.common.underline import set_underline
 from tryton.config import TRYTON_ICON
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/tabcontent.py
--- a/tryton/gui/window/tabcontent.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/tabcontent.py   Sat Dec 11 17:58:45 2021 +0100
@@ -6,9 +6,10 @@
 from gi.repository import Gtk, Pango
 
 import tryton.common as common
+from tryton.common.widget_style import widget_class
 from tryton.config import CONFIG
-from tryton.common.widget_style import widget_class
 from tryton.gui import Main
+
 from .infobar import InfoBar
 
 _ = gettext.gettext
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/view_board/action.py
--- a/tryton/gui/window/view_board/action.py    Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/view_board/action.py    Sat Dec 11 17:58:45 2021 +0100
@@ -5,15 +5,16 @@
 
 from gi.repository import GLib, Gtk
 
-from tryton.gui.window.view_form.screen import Screen
+import tryton.common as common
 import tryton.rpc as rpc
-import tryton.common as common
+from tryton.action import Action as GenericAction
+from tryton.common import RPCException, RPCExecute
 from tryton.config import CONFIG
+from tryton.gui.window.view_form.screen import Screen
+from tryton.gui.window.win_form import WinForm
 from tryton.pyson import PYSONDecoder
 from tryton.signal_event import SignalEvent
-from tryton.gui.window.win_form import WinForm
-from tryton.common import RPCExecute, RPCException
-from tryton.action import Action as GenericAction
+
 _ = gettext.gettext
 
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/view_board/view_board.py
--- a/tryton/gui/window/view_board/view_board.py        Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_board/view_board.py        Sat Dec 11 17:58:45 
2021 +0100
@@ -2,8 +2,9 @@
 # this repository contains the full copyright notices and license terms.
 import gettext
 
+from tryton.common import node_attributes
 from tryton.gui.window.view_form.view.form import Container, FormXMLViewParser
-from tryton.common import node_attributes
+
 from .action import Action
 
 _ = gettext.gettext
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/view_form/model/field.py
--- a/tryton/gui/window/view_form/model/field.py        Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/model/field.py        Sat Dec 11 17:58:45 
2021 +0100
@@ -1,24 +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
-from itertools import chain
-import tempfile
-import logging
-import locale
-from tryton.common import \
-        domain_inversion, eval_domain, localize_domain, \
-        merge, inverse_leaf, filter_leaf, prepare_reference_domain, \
-        extract_reference_models, concat, simplify, unique_value, \
-        EvalEnvironment
-import tryton.common as common
 import datetime
 import decimal
-from decimal import Decimal
+import locale
+import logging
 import math
-from tryton.common import RPCExecute, RPCException
+import os
+import tempfile
+from decimal import Decimal
+from itertools import chain
+
+import tryton.common as common
+from tryton.common import (
+    EvalEnvironment, RPCException, RPCExecute, concat, domain_inversion,
+    eval_domain, extract_reference_models, filter_leaf, inverse_leaf,
+    localize_domain, merge, prepare_reference_domain, simplify, unique_value)
 from tryton.common.htmltextbuffer import guess_decode
+from tryton.config import CONFIG
 from tryton.pyson import PYSONDecoder
-from tryton.config import CONFIG
 
 logger = logging.getLogger(__name__)
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/view_form/model/group.py
--- a/tryton/gui/window/view_form/model/group.py        Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/model/group.py        Sat Dec 11 17:58:45 
2021 +0100
@@ -2,12 +2,13 @@
 # this repository contains the full copyright notices and license terms.
 import operator
 
-from .record import Record
+from tryton import rpc
+from tryton.common import MODELACCESS, RPCException, RPCExecute
+from tryton.common.domain_inversion import is_leaf
+from tryton.signal_event import SignalEvent
+
 from .field import Field, M2OField, ReferenceField
-from tryton import rpc
-from tryton.signal_event import SignalEvent
-from tryton.common.domain_inversion import is_leaf
-from tryton.common import RPCExecute, RPCException, MODELACCESS
+from .record import Record
 
 
 class Group(SignalEvent, list):
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/view_form/model/record.py
--- a/tryton/gui/window/view_form/model/record.py       Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/model/record.py       Sat Dec 11 17:58:45 
2021 +0100
@@ -2,12 +2,13 @@
 # this repository contains the full copyright notices and license terms.
 import logging
 
-from tryton.signal_event import SignalEvent
 import tryton.common as common
+from tryton.common import RPCException, RPCExecute
+from tryton.config import CONFIG
 from tryton.pyson import PYSONDecoder
+from tryton.signal_event import SignalEvent
+
 from . import field as fields
-from tryton.common import RPCExecute, RPCException
-from tryton.config import CONFIG
 
 logger = logging.getLogger(__name__)
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/screen/screen.py
--- a/tryton/gui/window/view_form/screen/screen.py      Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/screen/screen.py      Sat Dec 11 17:58:45 
2021 +0100
@@ -1,32 +1,33 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
 "Screen"
+import calendar
+import collections
 import copy
-import functools
 import datetime
-import calendar
+import functools
+import gettext
 import json
-import collections
+import logging
 import urllib.parse
 import xml.dom.minidom
-import gettext
-import logging
 from operator import itemgetter
 
 from gi.repository import GLib, Gtk
 
-from tryton.gui.window.view_form.model.group import Group
-from tryton.gui.window.view_form.view.screen_container import ScreenContainer
-from tryton.gui.window.view_form.view import View
-from tryton.signal_event import SignalEvent
+from tryton.action import Action
+from tryton.common import (
+    MODELACCESS, RPCContextReload, RPCException, RPCExecute, node_attributes,
+    sur, warning)
+from tryton.common.domain_parser import DomainParser
 from tryton.config import CONFIG
+from tryton.gui.window.view_form.model.group import Group
+from tryton.gui.window.view_form.view import View
+from tryton.gui.window.view_form.view.screen_container import ScreenContainer
 from tryton.jsonrpc import JSONEncoder
-from tryton.common.domain_parser import DomainParser
-from tryton.common import RPCExecute, RPCException, MODELACCESS, \
-    node_attributes, sur, RPCContextReload, warning
-from tryton.action import Action
 from tryton.pyson import PYSONDecoder
 from tryton.rpc import clear_cache
+from tryton.signal_event import SignalEvent
 
 _ = gettext.gettext
 logger = logging.getLogger(__name__)
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/__init__.py
--- a/tryton/gui/window/view_form/view/__init__.py      Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/view/__init__.py      Sat Dec 11 17:58:45 
2021 +0100
@@ -61,10 +61,10 @@
 
     @staticmethod
     def parse(screen, view_id, view_type, xml, children_field):
-        from .list import ViewTree
+        from .calendar_ import ViewCalendar
         from .form import ViewForm
         from .graph import ViewGraph
-        from .calendar_ import ViewCalendar
+        from .list import ViewTree
         from .list_form import ViewListForm
 
         root, = xml.childNodes
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/calendar_.py
--- a/tryton/gui/window/view_form/view/calendar_.py     Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/view/calendar_.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.
-from functools import wraps
-
 import datetime
 import gettext
+from functools import wraps
 
 from gi.repository import Gtk
 
 from . import View, XMLViewParser
+
 try:
     from .calendar_gtk.calendar_ import Calendar_
     from .calendar_gtk.toolbar import Toolbar
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
--- a/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py        Wed Dec 
08 00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py        Sat Dec 
11 17:58:45 2021 +0100
@@ -2,12 +2,14 @@
 # this repository contains the full copyright notices and license terms.
 import calendar
 import datetime
+
 import goocalendar
-from .dates_period import DatesPeriod
 
 from tryton.common import MODELACCESS
 from tryton.config import CONFIG
 
+from .dates_period import DatesPeriod
+
 _colors = CONFIG['calendar.colors'].split(',')
 
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/calendar_gtk/toolbar.py
--- a/tryton/gui/window/view_form/view/calendar_gtk/toolbar.py  Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/calendar_gtk/toolbar.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 calendar
 import datetime
-import calendar
 import gettext
 
 from gi.repository import Gdk, Gtk
 
+from tryton.common import IconFactory
+from tryton.common.datetime_ import popup_hide, popup_position, popup_show
 from tryton.gui import Main
-from tryton.common import IconFactory
-from tryton.common.datetime_ import popup_position, popup_show, popup_hide
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/view_form/view/form.py
--- a/tryton/gui/window/view_form/view/form.py  Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,41 +1,43 @@
 # 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 gettext
 import operator
-import gettext
 
 from gi.repository import Gtk
 
+from tryton.common import IconFactory, Tooltips, get_align, node_attributes
+from tryton.common.button import Button
+from tryton.common.focus import (
+    find_first_focus_widget, find_focusable_child, find_focused_child,
+    get_invisible_ancestor, next_focus_widget)
+from tryton.common.underline import set_underline
+from tryton.config import CONFIG
+
 from . import View, XMLViewParser
-from tryton.common.focus import (get_invisible_ancestor, find_focused_child,
-    next_focus_widget, find_focusable_child, find_first_focus_widget)
-from tryton.common import Tooltips, node_attributes, IconFactory, get_align
-from tryton.common.underline import set_underline
-from tryton.common.button import Button
-from tryton.config import CONFIG
-from .form_gtk.calendar_ import Date, Time, DateTime
+from .form_gtk.binary import Binary
+from .form_gtk.calendar_ import Date, DateTime, Time
+from .form_gtk.char import Char, Password
+from .form_gtk.checkbox import CheckBox
+from .form_gtk.dictionary import DictWidget
 from .form_gtk.document import Document
 from .form_gtk.float import Float
+from .form_gtk.image import Image as Image2
 from .form_gtk.integer import Integer
-from .form_gtk.selection import Selection
-from .form_gtk.char import Char, Password
-from .form_gtk.timedelta import TimeDelta
-from .form_gtk.checkbox import CheckBox
-from .form_gtk.reference import Reference
-from .form_gtk.binary import Binary
-from .form_gtk.textbox import TextBox
-from .form_gtk.one2many import One2Many
 from .form_gtk.many2many import Many2Many
 from .form_gtk.many2one import Many2One
-from .form_gtk.url import Email, URL, CallTo, SIP, HTML
-from .form_gtk.image import Image as Image2
+from .form_gtk.multiselection import MultiSelection
+from .form_gtk.one2many import One2Many
+from .form_gtk.one2one import One2One
 from .form_gtk.progressbar import ProgressBar
-from .form_gtk.one2one import One2One
+from .form_gtk.pyson import PYSON
+from .form_gtk.reference import Reference
 from .form_gtk.richtextbox import RichTextBox
-from .form_gtk.dictionary import DictWidget
-from .form_gtk.multiselection import MultiSelection
-from .form_gtk.pyson import PYSON
-from .form_gtk.state_widget import (Label, VBox, Image, Frame, ScrolledWindow,
-    Notebook, Expander, Link)
+from .form_gtk.selection import Selection
+from .form_gtk.state_widget import (
+    Expander, Frame, Image, Label, Link, Notebook, ScrolledWindow, VBox)
+from .form_gtk.textbox import TextBox
+from .form_gtk.timedelta import TimeDelta
+from .form_gtk.url import HTML, SIP, URL, CallTo, Email
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/binary.py
--- a/tryton/gui/window/view_form/view/form_gtk/binary.py       Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/binary.py       Sat Dec 11 
17:58:45 2021 +0100
@@ -2,14 +2,15 @@
 # this repository contains the full copyright notices and license terms.
 import gettext
 import os
+from urllib.parse import unquote, urlparse
 from urllib.request import urlopen
-from urllib.parse import urlparse, unquote
 
 from gi.repository import Gdk, Gtk
 
-from tryton.common import common
-from tryton.common import file_selection, Tooltips, file_open, file_write
+from tryton.common import (
+    Tooltips, common, file_open, file_selection, file_write)
 from tryton.common.entry_position import reset_position
+
 from .widget import Widget
 
 _ = gettext.gettext
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/calendar_.py
--- a/tryton/gui/window/view_form/view/form_gtk/calendar_.py    Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/calendar_.py    Sat Dec 11 
17:58:45 2021 +0100
@@ -5,10 +5,13 @@
 
 from gi.repository import GLib, Gtk
 
+from tryton import common
+from tryton.common.datetime_ import Date as DateEntry
+from tryton.common.datetime_ import DateTime as DateTimeEntry
+from tryton.common.datetime_ import Time as TimeEntry
+from tryton.common.datetime_ import add_operators
+
 from .widget import Widget
-from tryton import common
-from tryton.common.datetime_ import (Date as DateEntry, Time as TimeEntry,
-    DateTime as DateTimeEntry, add_operators)
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/char.py
--- a/tryton/gui/window/view_form/view/form_gtk/char.py Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/char.py Sat Dec 11 17:58:45 
2021 +0100
@@ -4,11 +4,12 @@
 
 from gi.repository import GLib, Gtk
 
-from .widget import Widget, TranslateMixin
-from tryton.common import Tooltips, IconFactory
+from tryton.common import IconFactory, Tooltips
 from tryton.common.entry_position import reset_position
 from tryton.common.selection import PopdownMixin, selection_shortcuts
 
+from .widget import TranslateMixin, Widget
+
 _ = gettext.gettext
 
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/dictionary.py
--- a/tryton/gui/window/view_form/view/form_gtk/dictionary.py   Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/dictionary.py   Sat Dec 11 
17:58:45 2021 +0100
@@ -1,31 +1,31 @@
 # 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 operator
-import locale
 import decimal
 import gettext
+import locale
+import operator
 from decimal import Decimal
 
 from gi.repository import GLib, GObject, Gtk
 
-from .widget import Widget
-
-from tryton.gui.window.win_search import WinSearch
-from tryton.common import Tooltips, timezoned_date, untimezoned_date, \
-        IconFactory
-from tryton.common.selection import selection_shortcuts
+from tryton.common import (
+    IconFactory, Tooltips, timezoned_date, untimezoned_date)
 from tryton.common.completion import get_completion, update_completion
 from tryton.common.datetime_ import Date, DateTime, add_operators
+from tryton.common.domain_inversion import eval_domain
 from tryton.common.domain_parser import quote
 from tryton.common.entry_position import reset_position
 from tryton.common.number_entry import NumberEntry
+from tryton.common.selection import selection_shortcuts
+from tryton.common.treeviewcontrol import TreeViewControl
 from tryton.common.underline import set_underline
-from tryton.common.domain_inversion import eval_domain
 from tryton.common.widget_style import widget_class
-from tryton.common.treeviewcontrol import TreeViewControl
+from tryton.gui.window.win_search import WinSearch
 from tryton.pyson import PYSONDecoder
 
+from .widget import Widget
+
 _ = gettext.gettext
 
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/document.py
--- a/tryton/gui/window/view_form/view/form_gtk/document.py     Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/document.py     Sat Dec 11 
17:58:45 2021 +0100
@@ -3,7 +3,8 @@
 from pathlib import Path
 from tempfile import NamedTemporaryFile
 
-from gi.repository import Gtk, Gdk, GLib
+from gi.repository import Gdk, GLib, Gtk
+
 try:
     from gi.repository import EvinceDocument, EvinceView
     EvinceDocument.init()
@@ -12,8 +13,8 @@
 
 from tryton.common import data2pixbuf, resize_pixbuf
 
+from .binary import BinaryMixin
 from .widget import Widget
-from .binary import BinaryMixin
 
 
 class Document(BinaryMixin, Widget):
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/image.py
--- a/tryton/gui/window/view_form/view/form_gtk/image.py        Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/image.py        Sat Dec 11 
17:58:45 2021 +0100
@@ -5,10 +5,11 @@
 
 from gi.repository import Gdk, Gtk
 
-from tryton.common import resize_pixbuf, data2pixbuf
+from tryton.common import data2pixbuf, resize_pixbuf
 from tryton.config import CONFIG
+
+from .binary import BinaryMixin
 from .widget import Widget
-from .binary import BinaryMixin
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/integer.py
--- a/tryton/gui/window/view_form/view/form_gtk/integer.py      Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/integer.py      Sat Dec 11 
17:58:45 2021 +0100
@@ -4,6 +4,7 @@
 
 from tryton.common.entry_position import reset_position
 from tryton.common.number_entry import NumberEntry
+
 from .widget import Widget
 
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/many2many.py
--- a/tryton/gui/window/view_form/view/form_gtk/many2many.py    Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py    Sat Dec 11 
17:58:45 2021 +0100
@@ -5,13 +5,14 @@
 from gi.repository import Gdk, Gtk
 
 import tryton.common as common
-from .widget import Widget
 from tryton.common.completion import get_completion, update_completion
 from tryton.common.domain_parser import quote
 from tryton.common.underline import set_underline
 from tryton.gui.window.view_form.screen import Screen
+from tryton.gui.window.win_form import WinForm
 from tryton.gui.window.win_search import WinSearch
-from tryton.gui.window.win_form import WinForm
+
+from .widget import Widget
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/many2one.py
--- a/tryton/gui/window/view_form/view/form_gtk/many2one.py     Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/many2one.py     Sat Dec 11 
17:58:45 2021 +0100
@@ -4,15 +4,16 @@
 
 from gi.repository import Gdk, GLib, Gtk
 
-from .widget import Widget
 import tryton.common as common
+from tryton.common.completion import get_completion, update_completion
+from tryton.common.domain_parser import quote
+from tryton.common.entry_position import reset_position
+from tryton.common.popup_menu import populate
 from tryton.gui.window.view_form.screen import Screen
-from tryton.gui.window.win_search import WinSearch
 from tryton.gui.window.win_form import WinForm
-from tryton.common.popup_menu import populate
-from tryton.common.completion import get_completion, update_completion
-from tryton.common.entry_position import reset_position
-from tryton.common.domain_parser import quote
+from tryton.gui.window.win_search import WinSearch
+
+from .widget import Widget
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/multiselection.py
--- a/tryton/gui/window/view_form/view/form_gtk/multiselection.py       Wed Dec 
08 00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/multiselection.py       Sat Dec 
11 17:58:45 2021 +0100
@@ -2,10 +2,11 @@
 # repository contains the full copyright notices and license terms.
 from gi.repository import GLib, GObject, Gtk
 
-from .widget import Widget
 from tryton.common.selection import SelectionMixin
 from tryton.common.treeviewcontrol import TreeViewControl
 
+from .widget import Widget
+
 
 class MultiSelection(Widget, SelectionMixin):
     expand = True
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/one2many.py
--- a/tryton/gui/window/view_form/view/form_gtk/one2many.py     Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py     Sat Dec 11 
17:58:45 2021 +0100
@@ -5,14 +5,15 @@
 
 from gi.repository import Gdk, Gtk
 
-from .widget import Widget
-from tryton.gui.window.view_form.screen import Screen
-from tryton.gui.window.win_search import WinSearch
-from tryton.gui.window.win_form import WinForm
 import tryton.common as common
 from tryton.common.completion import get_completion, update_completion
 from tryton.common.domain_parser import quote
 from tryton.common.underline import set_underline
+from tryton.gui.window.view_form.screen import Screen
+from tryton.gui.window.win_form import WinForm
+from tryton.gui.window.win_search import WinSearch
+
+from .widget import Widget
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/pyson.py
--- a/tryton/gui/window/view_form/view/form_gtk/pyson.py        Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/pyson.py        Sat Dec 11 
17:58:45 2021 +0100
@@ -2,9 +2,10 @@
 # this repository contains the full copyright notices and license terms.
 from gi.repository import Gtk
 
+from tryton.common import IconFactory
+from tryton.pyson import CONTEXT, PYSONDecoder, PYSONEncoder
+
 from .char import Char
-from tryton.common import IconFactory
-from tryton.pyson import CONTEXT, PYSONEncoder, PYSONDecoder
 
 
 class PYSON(Char):
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/reference.py
--- a/tryton/gui/window/view_form/view/form_gtk/reference.py    Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/reference.py    Sat Dec 11 
17:58:45 2021 +0100
@@ -4,9 +4,10 @@
 
 from gi.repository import Gtk
 
+from tryton.common.selection import (
+    PopdownMixin, SelectionMixin, selection_shortcuts)
+
 from .many2one import Many2One
-from tryton.common.selection import SelectionMixin, PopdownMixin, \
-        selection_shortcuts
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/richtextbox.py
--- a/tryton/gui/window/view_form/view/form_gtk/richtextbox.py  Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/richtextbox.py  Sat Dec 11 
17:58:45 2021 +0100
@@ -4,12 +4,13 @@
 
 from gi.repository import Gtk
 
-from .textbox import TextBox
 from tryton.common.htmltextbuffer import normalize_markup
 from tryton.common.richtext import (
-    register_format, set_content, get_content, add_toolbar)
+    add_toolbar, get_content, register_format, set_content)
 from tryton.config import CONFIG
 
+from .textbox import TextBox
+
 
 class RichTextBox(TextBox):
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/selection.py
--- a/tryton/gui/window/view_form/view/form_gtk/selection.py    Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/selection.py    Sat Dec 11 
17:58:45 2021 +0100
@@ -2,9 +2,10 @@
 # this repository contains the full copyright notices and license terms.
 from gi.repository import GLib, Gtk
 
+from tryton.common.selection import (
+    PopdownMixin, SelectionMixin, selection_shortcuts)
+
 from .widget import Widget
-from tryton.common.selection import SelectionMixin, selection_shortcuts, \
-    PopdownMixin
 
 
 class Selection(Widget, SelectionMixin, PopdownMixin):
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/textbox.py
--- a/tryton/gui/window/view_form/view/form_gtk/textbox.py      Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/textbox.py      Sat Dec 11 
17:58:45 2021 +0100
@@ -2,15 +2,16 @@
 # this repository contains the full copyright notices and license terms.
 import logging
 
-from gi.repository import Gtk, Gdk
+from gi.repository import Gdk, Gtk
+
 try:
     from gi.repository import GtkSpell
 except ImportError:
     GtkSpell = None
 
-from .widget import Widget, TranslateMixin
 from tryton.config import CONFIG
 
+from .widget import TranslateMixin, Widget
 
 logger = logging.getLogger(__name__)
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/timedelta.py
--- a/tryton/gui/window/view_form/view/form_gtk/timedelta.py    Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/timedelta.py    Sat Dec 11 
17:58:45 2021 +0100
@@ -3,6 +3,7 @@
 from gi.repository import Gtk
 
 from tryton.common.entry_position import reset_position
+
 from .widget import Widget
 
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/url.py
--- a/tryton/gui/window/view_form/view/form_gtk/url.py  Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/url.py  Sat Dec 11 17:58:45 
2021 +0100
@@ -2,18 +2,19 @@
 # this repository contains the full copyright notices and license terms.
 import gettext
 import webbrowser
-from urllib.parse import urljoin, urlencode
+from urllib.parse import urlencode, urljoin
 
 from gi.repository import Gtk
 
-from .char import Char
-from .widget import Widget, TranslateMixin
 import tryton.common as common
-from tryton.config import CONFIG
 from tryton.common.common import selection
 from tryton.common.underline import set_underline
+from tryton.config import CONFIG
 from tryton.rpc import CONNECTION
 
+from .char import Char
+from .widget import TranslateMixin, Widget
+
 _ = gettext.gettext
 
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/form_gtk/widget.py
--- a/tryton/gui/window/view_form/view/form_gtk/widget.py       Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/widget.py       Sat Dec 11 
17:58:45 2021 +0100
@@ -5,8 +5,7 @@
 from gi.repository import Gdk, GLib, Gtk
 
 import tryton.common as common
-from tryton.common import RPCExecute, RPCException
-from tryton.common import TRYTON_ICON
+from tryton.common import TRYTON_ICON, RPCException, RPCExecute
 from tryton.common.underline import set_underline
 from tryton.common.widget_style import widget_class
 from tryton.gui import Main
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/view_form/view/graph.py
--- a/tryton/gui/window/view_form/view/graph.py Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/graph.py Sat Dec 11 17:58:45 2021 +0100
@@ -1,21 +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 gettext
 import sys
 
-import gettext
-
 from gi.repository import Gtk
 
-from . import View, XMLViewParser
-from .graph_gtk.bar import VerticalBar, HorizontalBar
-from .graph_gtk.line import Line
-from .graph_gtk.pie import Pie
-from tryton.common import file_selection, IconFactory
-from tryton.common import node_attributes, get_toplevel_window, message
+from tryton.common import (
+    IconFactory, file_selection, get_toplevel_window, message, node_attributes)
 from tryton.common.underline import set_underline
 from tryton.config import TRYTON_ICON
 from tryton.gui import Main
 
+from . import View, XMLViewParser
+from .graph_gtk.bar import HorizontalBar, VerticalBar
+from .graph_gtk.line import Line
+from .graph_gtk.pie import Pie
+
 _ = gettext.gettext
 
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/graph_gtk/bar.py
--- a/tryton/gui/window/view_form/view/graph_gtk/bar.py Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/view/graph_gtk/bar.py Sat Dec 11 17:58:45 
2021 +0100
@@ -2,16 +2,17 @@
 # this repository contains the full copyright notices and license terms.
 # This code is inspired by the pycha project
 # (http://www.lorenzogil.com/projects/pycha/)
+import datetime
 import locale
 import math
-import datetime
 
 import cairo
 
-from .graph import Graph
 import tryton.common as common
 import tryton.rpc as rpc
 
+from .graph import Graph
+
 
 class Bar(Graph):
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/graph_gtk/graph.py
--- a/tryton/gui/window/view_form/view/graph_gtk/graph.py       Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/graph_gtk/graph.py       Sat Dec 11 
17:58:45 2021 +0100
@@ -5,15 +5,15 @@
 import datetime
 import locale
 import math
-from dateutil.relativedelta import relativedelta
 from functools import reduce
 
 import cairo
+from dateutil.relativedelta import relativedelta
 from gi.repository import Gdk, Gtk
 
 import tryton.rpc as rpc
 from tryton.action import Action
-from tryton.common import hex2rgb, generateColorscheme, COLOR_SCHEMES
+from tryton.common import COLOR_SCHEMES, generateColorscheme, hex2rgb
 from tryton.config import CONFIG
 from tryton.gui.window import Window
 from tryton.pyson import PYSONDecoder
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/graph_gtk/line.py
--- a/tryton/gui/window/view_form/view/graph_gtk/line.py        Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/graph_gtk/line.py        Sat Dec 11 
17:58:45 2021 +0100
@@ -2,16 +2,17 @@
 # this repository contains the full copyright notices and license terms.
 # This code is inspired by the pycha project
 # (http://www.lorenzogil.com/projects/pycha/)
+import datetime
 import locale
 import math
-import datetime
 
 import cairo
 
-from .graph import Graph
 import tryton.common as common
 import tryton.rpc as rpc
 
+from .graph import Graph
+
 
 class Line(Graph):
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/graph_gtk/pie.py
--- a/tryton/gui/window/view_form/view/graph_gtk/pie.py Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/view/graph_gtk/pie.py Sat Dec 11 17:58:45 
2021 +0100
@@ -2,16 +2,17 @@
 # this repository contains the full copyright notices and license terms.
 # This code is inspired by the pycha project
 # (http://www.lorenzogil.com/projects/pycha/)
-import math
+import datetime
 import locale
-import datetime
+import math
 
 import cairo
 
-from .graph import Graph, Area
 import tryton.common as common
 import tryton.rpc as rpc
 
+from .graph import Area, Graph
+
 
 class Pie(Graph):
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/view_form/view/list.py
--- a/tryton/gui/window/view_form/view/list.py  Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/list.py  Sat Dec 11 17:58:45 2021 +0100
@@ -1,27 +1,30 @@
 # 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 gettext
 import json
 import locale
-import gettext
+import sys
 from functools import wraps
 
 from gi.repository import Gdk, GLib, GObject, Gtk
 from pygtkcompat.generictreemodel import GenericTreeModel
 
-from tryton.config import CONFIG
+import tryton.common as common
+from tryton.common import (
+    RPCException, RPCExecute, Tooltips, domain_inversion, node_attributes,
+    simplify, unique_value)
 from tryton.common.cellrendererbutton import CellRendererButton
-from tryton.gui.window import Window
 from tryton.common.popup_menu import populate
-from tryton.common import RPCExecute, RPCException, node_attributes, Tooltips
-from tryton.common import domain_inversion, simplify, unique_value
+from tryton.config import CONFIG
+from tryton.gui.window import Window
 from tryton.pyson import PYSONDecoder
-import tryton.common as common
+
 from . import View, XMLViewParser
 from .list_gtk.editabletree import EditableTreeView, TreeView
-from .list_gtk.widget import (Affix, Char, Text, Int, Boolean, URL, Date,
-    Time, Float, TimeDelta, Binary, M2O, O2O, O2M, M2M, Selection,
-    MultiSelection, Reference, Dict, ProgressBar, Button, Image)
+from .list_gtk.widget import (
+    M2M, M2O, O2M, O2O, URL, Affix, Binary, Boolean, Button, Char, Date, Dict,
+    Float, Image, Int, MultiSelection, ProgressBar, Reference, Selection, Text,
+    Time, TimeDelta)
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/list_form.py
--- a/tryton/gui/window/view_form/view/list_form.py     Wed Dec 08 00:38:55 
2021 +0100
+++ b/tryton/gui/window/view_form/view/list_form.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 gi.repository import GObject, Gio, Gtk
+from gi.repository import Gio, GObject, Gtk
 
 from tryton.common import common
+
 from . import View
 from .form import ViewForm
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/list_gtk/editabletree.py
--- a/tryton/gui/window/view_form/view/list_gtk/editabletree.py Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/list_gtk/editabletree.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 gettext
-from itertools import islice, cycle, chain
+from itertools import chain, cycle, islice
 
 from gi.repository import Gdk, GLib, Gtk
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/list_gtk/widget.py
--- a/tryton/gui/window/view_form/view/list_gtk/widget.py       Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/list_gtk/widget.py       Sat Dec 11 
17:58:45 2021 +0100
@@ -1,34 +1,33 @@
 # 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 gettext
 import os
-import gettext
 import webbrowser
-from functools import wraps, partial
+from functools import partial, wraps
 
 from gi.repository import Gdk, GLib, Gtk
 
-from tryton.gui.window.win_search import WinSearch
-from tryton.gui.window.win_form import WinForm
-from tryton.gui.window.view_form.screen import Screen
-from tryton.common import file_selection, file_open, file_write
 import tryton.common as common
+from tryton.common import data2pixbuf, file_open, file_selection, file_write
 from tryton.common.cellrendererbutton import CellRendererButton
-from tryton.common.cellrenderertext import CellRendererText, \
-    CellRendererTextCompletion
+from tryton.common.cellrendererclickablepixbuf import (
+    CellRendererClickablePixbuf)
+from tryton.common.cellrenderercombo import CellRendererCombo
+from tryton.common.cellrendererfloat import CellRendererFloat
+from tryton.common.cellrendererinteger import CellRendererInteger
+from tryton.common.cellrenderertext import (
+    CellRendererText, CellRendererTextCompletion)
 from tryton.common.cellrenderertoggle import CellRendererToggle
-from tryton.common.cellrenderercombo import CellRendererCombo
-from tryton.common.cellrendererinteger import CellRendererInteger
-from tryton.common.cellrendererfloat import CellRendererFloat
-from tryton.common.cellrendererclickablepixbuf import \
-    CellRendererClickablePixbuf
-from tryton.common import data2pixbuf
 from tryton.common.completion import get_completion, update_completion
-from tryton.common.selection import (
-    SelectionMixin, PopdownMixin, selection_shortcuts)
 from tryton.common.datetime_ import CellRendererDate, CellRendererTime
 from tryton.common.domain_parser import quote
+from tryton.common.selection import (
+    PopdownMixin, SelectionMixin, selection_shortcuts)
 from tryton.config import CONFIG
+from tryton.gui.window.view_form.screen import Screen
+from tryton.gui.window.win_form import WinForm
+from tryton.gui.window.win_search import WinSearch
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba 
tryton/gui/window/view_form/view/screen_container.py
--- a/tryton/gui/window/view_form/view/screen_container.py      Wed Dec 08 
00:38:55 2021 +0100
+++ b/tryton/gui/window/view_form/view/screen_container.py      Sat Dec 11 
17:58:45 2021 +0100
@@ -6,10 +6,10 @@
 from gi.repository import Gdk, GLib, GObject, Gtk
 
 import tryton.common as common
+from tryton.common.datetime_ import Date, DateTime, Time, add_operators
 from tryton.common.domain_parser import quote
+from tryton.common.number_entry import NumberEntry
 from tryton.common.treeviewcontrol import TreeViewControl
-from tryton.common.datetime_ import Date, Time, DateTime, add_operators
-from tryton.common.number_entry import NumberEntry
 from tryton.pyson import PYSONDecoder
 
 _ = gettext.gettext
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/win_csv.py
--- a/tryton/gui/window/win_csv.py      Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/win_csv.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.
+import gettext
 import locale
 import os
 import sys
-import gettext
 
 from gi.repository import Gdk, GObject, Gtk
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/win_export.py
--- a/tryton/gui/window/win_export.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/win_export.py   Sat Dec 11 17:58:45 2021 +0100
@@ -3,11 +3,11 @@
 import base64
 import csv
 import datetime
-import os
-import tempfile
 import gettext
 import json
 import locale
+import os
+import tempfile
 import urllib.parse
 from itertools import zip_longest
 from numbers import Number
@@ -15,11 +15,11 @@
 from gi.repository import Gdk, GObject, Gtk
 
 import tryton.common as common
+from tryton.common import RPCException, RPCExecute
 from tryton.config import CONFIG
-from tryton.common import RPCExecute, RPCException
 from tryton.gui.window.win_csv import WinCSV
 from tryton.jsonrpc import JSONEncoder
-from tryton.rpc import clear_cache, CONNECTION
+from tryton.rpc import CONNECTION, clear_cache
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/win_form.py
--- a/tryton/gui/window/win_form.py     Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/win_form.py     Sat Dec 11 17:58:45 2021 +0100
@@ -1,19 +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 gettext
 from itertools import chain
-import gettext
 
 from gi.repository import Gdk, Gtk, Pango
 
-from .infobar import InfoBar
 import tryton.common as common
-from tryton.common import TRYTON_ICON, MODELNAME
+from tryton.common import MODELNAME, TRYTON_ICON
 from tryton.common.domain_parser import quote
 from tryton.common.underline import set_underline
 from tryton.common.widget_style import widget_class
 from tryton.gui import Main
 from tryton.gui.window.nomodal import NoModal
 
+from .infobar import InfoBar
+
 _ = gettext.gettext
 
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/win_import.py
--- a/tryton/gui/window/win_import.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/win_import.py   Sat Dec 11 17:58:45 2021 +0100
@@ -9,7 +9,7 @@
 from gi.repository import Gtk
 
 import tryton.common as common
-from tryton.common import RPCExecute, RPCException
+from tryton.common import RPCException, RPCExecute
 from tryton.common.datetime_ import date_parse
 from tryton.gui.window.win_csv import WinCSV
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/win_search.py
--- a/tryton/gui/window/win_search.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/win_search.py   Sat Dec 11 17:58:45 2021 +0100
@@ -2,7 +2,7 @@
 # this repository contains the full copyright notices and license terms.
 import gettext
 
-from gi.repository import Gtk, Gdk
+from gi.repository import Gdk, Gtk
 
 import tryton.common as common
 from tryton.common.underline import set_underline
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/window.py
--- a/tryton/gui/window/window.py       Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/window.py       Sat Dec 11 17:58:45 2021 +0100
@@ -40,7 +40,8 @@
     def create_wizard(action, data, direct_print=False, email_print=False,
             email=None, name='', context=None, icon=None, window=False):
         from tryton.gui import Main
-        from .wizard import WizardForm, WizardDialog
+
+        from .wizard import WizardDialog, WizardForm
         if window:
             win = WizardForm(name=name)
             win.icon = icon
diff -r 0b650604f921 -r dde55da3a6ba tryton/gui/window/wizard.py
--- a/tryton/gui/window/wizard.py       Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/gui/window/wizard.py       Sat Dec 11 17:58:45 2021 +0100
@@ -1,20 +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 gettext
 import logging
-import gettext
 
 from gi.repository import Gdk, Gtk, Pango
 
-from tryton.signal_event import SignalEvent
 import tryton.common as common
-from tryton.gui.window.view_form.screen import Screen
-from tryton.gui import Main
+from tryton.common import (
+    TRYTON_ICON, RPCContextReload, RPCException, RPCExecute)
+from tryton.common.button import Button
+from tryton.common.widget_style import widget_class
 from tryton.exceptions import TrytonServerError
+from tryton.gui import Main
 from tryton.gui.window.nomodal import NoModal
-from tryton.common.button import Button
-from tryton.common import RPCExecute, RPCException, RPCContextReload
-from tryton.common import TRYTON_ICON
-from tryton.common.widget_style import widget_class
+from tryton.gui.window.view_form.screen import Screen
+from tryton.signal_event import SignalEvent
+
 from .infobar import InfoBar
 from .tabcontent import TabContent
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/jsonrpc.py
--- a/tryton/jsonrpc.py Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/jsonrpc.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 base64
 import copy
-import xmlrpc.client
-import json
-import ssl
-import http.client
-from decimal import Decimal
 import datetime
-import socket
+import errno
 import hashlib
-import base64
+import http.client
+import json
+import logging
+import socket
+import ssl
 import threading
-import errno
-import logging
-from functools import partial
+import xmlrpc.client
 from collections import defaultdict
 from contextlib import contextmanager
-from functools import reduce
-from urllib.parse import urljoin, quote
+from decimal import Decimal
+from functools import partial, reduce
+from urllib.parse import quote, urljoin
 
 __all__ = ["ResponseError", "Fault", "ProtocolError", "Transport",
     "ServerProxy", "ServerPool"]
diff -r 0b650604f921 -r dde55da3a6ba tryton/plugins/__init__.py
--- a/tryton/plugins/__init__.py        Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/plugins/__init__.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 os
+import gettext
 import importlib
-import gettext
+import os
 
-from tryton.config import get_config_dir, CURRENT_DIR
+from tryton.config import CURRENT_DIR, get_config_dir
 
 __all__ = ['MODULES', 'register']
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/plugins/translation/__init__.py
--- a/tryton/plugins/translation/__init__.py    Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/plugins/translation/__init__.py    Sat Dec 11 17:58:45 2021 +0100
@@ -2,8 +2,8 @@
 # this repository contains the full copyright notices and license terms.
 import gettext
 
+from tryton.common import MODELACCESS
 from tryton.gui.window import Window
-from tryton.common import MODELACCESS
 
 _ = gettext.gettext
 
diff -r 0b650604f921 -r dde55da3a6ba tryton/pyson.py
--- a/tryton/pyson.py   Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/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 0b650604f921 -r dde55da3a6ba tryton/rpc.py
--- a/tryton/rpc.py     Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/rpc.py     Sat Dec 11 17:58:45 2021 +0100
@@ -2,8 +2,9 @@
 # this repository contains the full copyright notices and license terms.
 import http.client
 import logging
+import os
 import socket
-import os
+
 try:
     from http import HTTPStatus
 except ImportError:
@@ -12,10 +13,9 @@
 from functools import partial
 
 from tryton import bus, device_cookie, fingerprints
-from tryton.jsonrpc import ServerProxy, ServerPool, Fault
-from tryton.config import get_config_dir
+from tryton.config import CONFIG, get_config_dir
 from tryton.exceptions import TrytonServerError, TrytonServerUnavailable
-from tryton.config import CONFIG
+from tryton.jsonrpc import Fault, ServerPool, ServerProxy
 
 CONNECTION = None
 _USER = None
diff -r 0b650604f921 -r dde55da3a6ba tryton/tests/test_common_domain_parser.py
--- a/tryton/tests/test_common_domain_parser.py Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/tests/test_common_domain_parser.py Sat Dec 11 17:58:45 2021 +0100
@@ -6,9 +6,8 @@
 
 from tryton.common import untimezoned_date
 from tryton.common.domain_parser import (
-    group_operator, quote, split_target_value, convert_value, format_value,
-    complete_value, parenthesize, rlist, operatorize, DomainParser, udlex,
-    likify)
+    DomainParser, complete_value, convert_value, format_value, group_operator,
+    likify, operatorize, parenthesize, quote, rlist, split_target_value, udlex)
 
 
 class DomainParserTestCase(TestCase):
diff -r 0b650604f921 -r dde55da3a6ba tryton/tests/test_common_timedelta.py
--- a/tryton/tests/test_common_timedelta.py     Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/tests/test_common_timedelta.py     Sat Dec 11 17:58:45 2021 +0100
@@ -3,7 +3,7 @@
 import datetime as dt
 from unittest import TestCase
 
-from tryton.common.timedelta import format, parse, DEFAULT_CONVERTER
+from tryton.common.timedelta import DEFAULT_CONVERTER, format, parse
 
 
 class TimeDeltaTestCase(TestCase):
diff -r 0b650604f921 -r dde55da3a6ba tryton/translate.py
--- a/tryton/translate.py       Wed Dec 08 00:38:55 2021 +0100
+++ b/tryton/translate.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.
 "Translate"
-import os
+import gettext
 import locale
-import gettext
 import logging
+import os
 import sys
 
 from gi.repository import Gtk

Reply via email to