From e7daa0fa31a98c8e41527c512ff1002d271a0792 Mon Sep 17 00:00:00 2001
From: inso <insomniak.fr@gmaiL.com>
Date: Sat, 1 Oct 2016 01:46:43 +0200
Subject: [PATCH] Reorganizing packages

---
 src/sakia/{core => }/app.py                   | 26 +++++++++----------
 src/sakia/core/__init__.py                    |  5 ++--
 src/sakia/core/account.py                     | 24 ++++++++---------
 src/sakia/data/connectors/node.py             | 21 +++++++--------
 .../{core/graph => data/graphs}/__init__.py   |  0
 .../{core/graph => data/graphs}/base_graph.py |  0
 .../{core/graph => data/graphs}/constants.py  |  0
 .../graph => data/graphs}/explorer_graph.py   |  2 +-
 .../{core/graph => data/graphs}/wot_graph.py  |  0
 src/sakia/{tools => }/decorators.py           |  0
 .../gui/dialogs/account_cfg/controller.py     | 14 +++++-----
 .../gui/dialogs/certification/controller.py   | 14 +++++-----
 .../gui/dialogs/community_cfg/controller.py   | 15 ++++++-----
 .../gui/dialogs/revocation/controller.py      |  9 ++++---
 src/sakia/gui/dialogs/revocation/view.py      |  8 +++---
 src/sakia/gui/dialogs/transfer/controller.py  | 14 +++++-----
 src/sakia/gui/main_window/status_bar/model.py |  5 ++--
 .../gui/main_window/toolbar/controller.py     | 18 +++++++------
 .../gui/navigation/graphs/base/controller.py  |  8 +++---
 src/sakia/gui/navigation/graphs/base/node.py  |  7 ++---
 .../navigation/graphs/explorer/controller.py  | 11 ++++----
 .../gui/navigation/graphs/explorer/edge.py    |  8 +++---
 .../gui/navigation/graphs/explorer/model.py   |  5 ++--
 .../gui/navigation/graphs/explorer/node.py    |  8 +++---
 .../gui/navigation/graphs/wot/controller.py   | 11 ++++----
 src/sakia/gui/navigation/graphs/wot/edge.py   |  6 +++--
 src/sakia/gui/navigation/graphs/wot/model.py  |  2 +-
 src/sakia/gui/navigation/graphs/wot/node.py   |  5 ++--
 .../gui/navigation/identities/controller.py   | 18 +++++++------
 .../gui/navigation/informations/controller.py | 10 ++++---
 .../gui/navigation/informations/model.py      | 11 ++++----
 .../gui/navigation/network/table_model.py     |  8 +++---
 .../gui/navigation/txhistory/controller.py    |  6 ++---
 .../gui/navigation/txhistory/table_model.py   | 13 +++++-----
 {res/ui => src/sakia/gui}/password_asker.ui   |  0
 src/sakia/gui/preferences.py                  |  2 +-
 src/sakia/gui/sub/search_user/controller.py   |  5 ++--
 .../gui/sub/user_information/controller.py    |  9 ++++---
 src/sakia/gui/sub/user_information/model.py   |  8 +++---
 src/sakia/gui/widgets/context_menu.py         | 19 +++++++-------
 src/sakia/main.py                             | 19 +++++---------
 src/sakia/models/certifications.py            |  8 +++---
 src/sakia/{core => }/money/__init__.py        |  0
 .../{core => }/money/base_referential.py      |  0
 .../{core => }/money/dividend_per_day.py      |  0
 src/sakia/{core => }/money/quant_zerosum.py   |  0
 src/sakia/{core => }/money/quantitative.py    |  0
 src/sakia/{core => }/money/relative.py        |  0
 .../{core => }/money/relative_to_past.py      |  0
 .../{core => }/money/relative_zerosum.py      |  0
 src/sakia/{core => }/money/udd_to_past.py     |  0
 src/sakia/services/network.py                 | 16 +++++++-----
 .../certification/test_certification.py       | 22 ++++++++--------
 .../identities_tab/test_identities_table.py   | 19 +++++++-------
 .../main_window/test_main_window_dialogs.py   | 10 ++++---
 .../main_window/test_main_window_menus.py     | 11 ++++----
 .../preferences/test_preferences_dialog.py    |  9 +++----
 .../process_cfg_account/test_add_account.py   | 15 +++++------
 .../test_add_community.py                     | 17 ++++++------
 .../functional/transfer/test_transfer.py      | 21 +++++++--------
 .../tests/functional/wot_tab/test_wot_tab.py  | 10 +++----
 .../tests/unit/core/graph/test_base_graph.py  | 10 +++----
 .../unit/core/graph/test_explorer_graph.py    |  9 ++++---
 .../tests/unit/core/graph/test_wot_graph.py   |  9 +++----
 .../unit/core/money/test_quantitative.py      |  6 +++--
 .../unit/core/money/test_quantitative_zsum.py |  6 +++--
 .../tests/unit/core/money/test_relative.py    |  6 +++--
 .../unit/core/money/test_relative_to_past.py  |  6 +++--
 .../unit/core/money/test_relative_zsum.py     |  6 +++--
 .../core/txhistory/test_txhistory_loading.py  | 21 +++++++--------
 .../tests/unit/data/test_connections_repo.py  |  2 --
 .../tests/unit/{tools => }/test_decorators.py |  6 +++--
 src/sakia/tests/unit/tools/__init__.py        |  0
 src/sakia/tools/__init__.py                   |  0
 74 files changed, 326 insertions(+), 293 deletions(-)
 rename src/sakia/{core => }/app.py (99%)
 rename src/sakia/{core/graph => data/graphs}/__init__.py (100%)
 rename src/sakia/{core/graph => data/graphs}/base_graph.py (100%)
 rename src/sakia/{core/graph => data/graphs}/constants.py (100%)
 rename src/sakia/{core/graph => data/graphs}/explorer_graph.py (98%)
 rename src/sakia/{core/graph => data/graphs}/wot_graph.py (100%)
 rename src/sakia/{tools => }/decorators.py (100%)
 rename {res/ui => src/sakia/gui}/password_asker.ui (100%)
 rename src/sakia/{core => }/money/__init__.py (100%)
 rename src/sakia/{core => }/money/base_referential.py (100%)
 rename src/sakia/{core => }/money/dividend_per_day.py (100%)
 rename src/sakia/{core => }/money/quant_zerosum.py (100%)
 rename src/sakia/{core => }/money/quantitative.py (100%)
 rename src/sakia/{core => }/money/relative.py (100%)
 rename src/sakia/{core => }/money/relative_to_past.py (100%)
 rename src/sakia/{core => }/money/relative_zerosum.py (100%)
 rename src/sakia/{core => }/money/udd_to_past.py (100%)
 rename src/sakia/tests/unit/{tools => }/test_decorators.py (98%)
 delete mode 100644 src/sakia/tests/unit/tools/__init__.py
 delete mode 100644 src/sakia/tools/__init__.py

diff --git a/src/sakia/core/app.py b/src/sakia/app.py
similarity index 99%
rename from src/sakia/core/app.py
rename to src/sakia/app.py
index 0895cb60..af47f214 100644
--- a/src/sakia/core/app.py
+++ b/src/sakia/app.py
@@ -4,26 +4,26 @@ Created on 1 févr. 2014
 @author: inso
 """
 
-import os
+import asyncio
+import datetime
+import json
 import logging
-import tarfile
+import os
 import shutil
-import json
-import datetime
+import tarfile
+
 import aiohttp
-import asyncio
+from PyQt5.QtCore import QObject, pyqtSignal, QTranslator, QCoreApplication, QLocale
+from aiohttp.connector import ProxyConnector
 from pkg_resources import parse_version
 
-from PyQt5.QtCore import QObject, pyqtSignal, QTranslator, QCoreApplication, QLocale
 from duniterpy.api.bma import API
-from aiohttp.connector import ProxyConnector
-from . import config
-from .account import Account
-from .registry import IdentitiesRegistry, Identity
-from .. import __version__
+from sakia.decorators import asyncify
+from sakia.core import config
+from sakia.core.account import Account
+from sakia.core.registry import IdentitiesRegistry, Identity
+from sakia import __version__
 from ..tools.exceptions import NameAlreadyExists, BadAccountFile
-from ..tools.decorators import asyncify
-import i18n_rc
 
 
 class Application(QObject):
diff --git a/src/sakia/core/__init__.py b/src/sakia/core/__init__.py
index 6de4a62c..2f6aeb79 100644
--- a/src/sakia/core/__init__.py
+++ b/src/sakia/core/__init__.py
@@ -1,4 +1,3 @@
-from .community import Community
-from .wallet import Wallet
 from .account import Account
-from .app import Application
\ No newline at end of file
+from .wallet import Wallet
+
diff --git a/src/sakia/core/account.py b/src/sakia/core/account.py
index cbb395e8..4b68f8eb 100644
--- a/src/sakia/core/account.py
+++ b/src/sakia/core/account.py
@@ -4,24 +4,24 @@ Created on 1 févr. 2014
 @author: inso
 """
 
-from duniterpy.documents import Membership, SelfCertification, Certification, Revocation, BlockUID, Block
-from duniterpy.key import SigningKey
-from duniterpy.api import bma
-from duniterpy.api.bma import PROTOCOL_VERSION
-from duniterpy.api import errors
-
-import logging
 import asyncio
-from pkg_resources import parse_version
-from aiohttp.errors import ClientError
+import logging
+
 from PyQt5.QtCore import QObject, pyqtSignal
+from aiohttp.errors import ClientError
+from pkg_resources import parse_version
 
-from . import money
-from .wallet import Wallet
+from duniterpy.api import bma
+from duniterpy.api import errors
+from duniterpy.api.bma import PROTOCOL_VERSION
+from duniterpy.documents import Membership, SelfCertification, Certification, Revocation, BlockUID, Block
+from duniterpy.key import SigningKey
+from sakia import money
 from .community import Community
 from .registry import LocalState
-from ..tools.exceptions import ContactAlreadyExists, LookupFailureError
+from .wallet import Wallet
 from .. import __version__
+from ..tools.exceptions import ContactAlreadyExists, LookupFailureError
 
 
 class Account(QObject):
diff --git a/src/sakia/data/connectors/node.py b/src/sakia/data/connectors/node.py
index f859aacb..943fe2a6 100644
--- a/src/sakia/data/connectors/node.py
+++ b/src/sakia/data/connectors/node.py
@@ -1,19 +1,18 @@
-from duniterpy.documents.peer import Peer
-from duniterpy.documents import BlockUID, MalformedDocumentError, BMAEndpoint, block_uid
-from ...tools.decorators import asyncify
-from duniterpy.api import bma, errors
-
-from aiohttp.errors import WSClientDisconnectedError, WSServerHandshakeError, ClientResponseError
-from aiohttp.errors import ClientError, DisconnectedError
-from asyncio import TimeoutError
-import logging
-import jsonschema
 import asyncio
-import aiohttp
+import logging
+from asyncio import TimeoutError
 from socket import gaierror
 
+import aiohttp
+import jsonschema
 from PyQt5.QtCore import QObject, pyqtSignal
+from aiohttp.errors import ClientError, DisconnectedError
+from aiohttp.errors import WSClientDisconnectedError, WSServerHandshakeError, ClientResponseError
 
+from duniterpy.api import bma, errors
+from duniterpy.documents import BlockUID, MalformedDocumentError, BMAEndpoint
+from duniterpy.documents.peer import Peer
+from sakia.decorators import asyncify
 from sakia.errors import InvalidNodeCurrency
 from ..entities.node import Node
 
diff --git a/src/sakia/core/graph/__init__.py b/src/sakia/data/graphs/__init__.py
similarity index 100%
rename from src/sakia/core/graph/__init__.py
rename to src/sakia/data/graphs/__init__.py
diff --git a/src/sakia/core/graph/base_graph.py b/src/sakia/data/graphs/base_graph.py
similarity index 100%
rename from src/sakia/core/graph/base_graph.py
rename to src/sakia/data/graphs/base_graph.py
diff --git a/src/sakia/core/graph/constants.py b/src/sakia/data/graphs/constants.py
similarity index 100%
rename from src/sakia/core/graph/constants.py
rename to src/sakia/data/graphs/constants.py
diff --git a/src/sakia/core/graph/explorer_graph.py b/src/sakia/data/graphs/explorer_graph.py
similarity index 98%
rename from src/sakia/core/graph/explorer_graph.py
rename to src/sakia/data/graphs/explorer_graph.py
index 856ae22f..43a99c4e 100644
--- a/src/sakia/core/graph/explorer_graph.py
+++ b/src/sakia/data/graphs/explorer_graph.py
@@ -3,7 +3,7 @@ import networkx
 import asyncio
 from PyQt5.QtCore import pyqtSignal
 from .base_graph import BaseGraph
-from ..graph.constants import EdgeStatus, NodeStatus
+from ..graphs.constants import EdgeStatus, NodeStatus
 
 
 class ExplorerGraph(BaseGraph):
diff --git a/src/sakia/core/graph/wot_graph.py b/src/sakia/data/graphs/wot_graph.py
similarity index 100%
rename from src/sakia/core/graph/wot_graph.py
rename to src/sakia/data/graphs/wot_graph.py
diff --git a/src/sakia/tools/decorators.py b/src/sakia/decorators.py
similarity index 100%
rename from src/sakia/tools/decorators.py
rename to src/sakia/decorators.py
diff --git a/src/sakia/gui/dialogs/account_cfg/controller.py b/src/sakia/gui/dialogs/account_cfg/controller.py
index f55b5573..ebc74d1c 100644
--- a/src/sakia/gui/dialogs/account_cfg/controller.py
+++ b/src/sakia/gui/dialogs/account_cfg/controller.py
@@ -1,14 +1,14 @@
+import asyncio
+import logging
+
 from PyQt5.QtWidgets import QDialog
 
-from sakia.gui.password_asker import PasswordAskerDialog, detect_non_printable
+from sakia.decorators import asyncify
 from sakia.gui.component.controller import ComponentController
-from ..community_cfg.controller import CommunityConfigController
-from .view import AccountConfigView
+from sakia.gui.password_asker import PasswordAskerDialog, detect_non_printable
 from .model import AccountConfigModel
-from sakia.tools.decorators import asyncify
-
-import logging
-import asyncio
+from .view import AccountConfigView
+from ..community_cfg.controller import CommunityConfigController
 
 
 class AccountConfigController(ComponentController):
diff --git a/src/sakia/gui/dialogs/certification/controller.py b/src/sakia/gui/dialogs/certification/controller.py
index b6d8b6ef..7172b613 100644
--- a/src/sakia/gui/dialogs/certification/controller.py
+++ b/src/sakia/gui/dialogs/certification/controller.py
@@ -1,12 +1,14 @@
+import asyncio
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QApplication
+
+from sakia.decorators import asyncify, once_at_a_time
 from sakia.gui.component.controller import ComponentController
-from .view import CertificationView
-from .model import CertificationModel
 from sakia.gui.sub.search_user.controller import SearchUserController
 from sakia.gui.sub.user_information.controller import UserInformationController
-from PyQt5.QtWidgets import QApplication
-from PyQt5.QtCore import Qt
-from sakia.tools.decorators import asyncify, once_at_a_time
-import asyncio
+from .model import CertificationModel
+from .view import CertificationView
 
 
 class CertificationController(ComponentController):
diff --git a/src/sakia/gui/dialogs/community_cfg/controller.py b/src/sakia/gui/dialogs/community_cfg/controller.py
index 0ff5b795..d009f236 100644
--- a/src/sakia/gui/dialogs/community_cfg/controller.py
+++ b/src/sakia/gui/dialogs/community_cfg/controller.py
@@ -1,14 +1,15 @@
-from PyQt5.QtWidgets import QDialog, QApplication, QMenu
+import logging
+
 from PyQt5.QtGui import QCursor
-from sakia.gui.component.controller import ComponentController
-from .view import CommunityConfigView
-from .model import CommunityConfigModel
-from sakia.tools.decorators import asyncify
+from PyQt5.QtWidgets import QDialog, QApplication, QMenu
 from aiohttp.errors import DisconnectedError, ClientError, TimeoutError
-from duniterpy.documents import MalformedDocumentError
 from sakia.tools.exceptions import NoPeerAvailable
 
-import logging
+from duniterpy.documents import MalformedDocumentError
+from sakia.decorators import asyncify
+from sakia.gui.component.controller import ComponentController
+from .model import CommunityConfigModel
+from .view import CommunityConfigView
 
 
 class CommunityConfigController(ComponentController):
diff --git a/src/sakia/gui/dialogs/revocation/controller.py b/src/sakia/gui/dialogs/revocation/controller.py
index e8294ed6..9dd31568 100644
--- a/src/sakia/gui/dialogs/revocation/controller.py
+++ b/src/sakia/gui/dialogs/revocation/controller.py
@@ -1,9 +1,10 @@
+import asyncio
+
+from duniterpy.documents import MalformedDocumentError
+from sakia.decorators import asyncify
 from sakia.gui.component.controller import ComponentController
-from .view import RevocationView
 from .model import RevocationModel
-from duniterpy.documents import MalformedDocumentError
-from sakia.tools.decorators import asyncify
-import asyncio
+from .view import RevocationView
 
 
 class RevocationController(ComponentController):
diff --git a/src/sakia/gui/dialogs/revocation/view.py b/src/sakia/gui/dialogs/revocation/view.py
index d296bf4e..25a37640 100644
--- a/src/sakia/gui/dialogs/revocation/view.py
+++ b/src/sakia/gui/dialogs/revocation/view.py
@@ -1,8 +1,10 @@
-from PyQt5.QtWidgets import QDialog, QFileDialog, QMessageBox
-from .revocation_uic import Ui_RevocationDialog
 from enum import Enum
+
+from PyQt5.QtWidgets import QDialog, QFileDialog, QMessageBox
+
+from sakia.decorators import asyncify
 from sakia.gui.widgets.dialogs import QAsyncMessageBox
-from sakia.tools.decorators import asyncify
+from .revocation_uic import Ui_RevocationDialog
 
 
 class RevocationView(QDialog, Ui_RevocationDialog):
diff --git a/src/sakia/gui/dialogs/transfer/controller.py b/src/sakia/gui/dialogs/transfer/controller.py
index e9cf85c0..18c18980 100644
--- a/src/sakia/gui/dialogs/transfer/controller.py
+++ b/src/sakia/gui/dialogs/transfer/controller.py
@@ -1,13 +1,15 @@
+import asyncio
+import logging
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QApplication
+
+from sakia.decorators import asyncify
 from sakia.gui.component.controller import ComponentController
 from sakia.gui.sub.search_user.controller import SearchUserController
 from sakia.gui.sub.user_information.controller import UserInformationController
-from .view import TransferView
 from .model import TransferModel
-from sakia.tools.decorators import asyncify
-from PyQt5.QtWidgets import QApplication
-from PyQt5.QtCore import Qt
-import logging
-import asyncio
+from .view import TransferView
 
 
 class TransferController(ComponentController):
diff --git a/src/sakia/gui/main_window/status_bar/model.py b/src/sakia/gui/main_window/status_bar/model.py
index cd3649ca..9d46f3ed 100644
--- a/src/sakia/gui/main_window/status_bar/model.py
+++ b/src/sakia/gui/main_window/status_bar/model.py
@@ -1,7 +1,8 @@
-from sakia.gui.component.model import ComponentModel
-from sakia.core.money import Referentials
 import logging
 
+from sakia.gui.component.model import ComponentModel
+from sakia.money import Referentials
+
 
 class StatusBarModel(ComponentModel):
     """
diff --git a/src/sakia/gui/main_window/toolbar/controller.py b/src/sakia/gui/main_window/toolbar/controller.py
index b4d7c069..efa61f73 100644
--- a/src/sakia/gui/main_window/toolbar/controller.py
+++ b/src/sakia/gui/main_window/toolbar/controller.py
@@ -1,15 +1,17 @@
+import logging
+
+from PyQt5.QtCore import Qt
 from PyQt5.QtWidgets import QDialog, QMessageBox
-from PyQt5.QtCore import QT_TRANSLATE_NOOP, Qt
+
+from sakia.decorators import asyncify, once_at_a_time
 from sakia.gui.component.controller import ComponentController
-from .model import ToolbarModel
-from .view import ToolbarView
-from sakia.tools.decorators import asyncify, once_at_a_time, cancel_once_task
-from sakia.gui.widgets.dialogs import QAsyncMessageBox, QAsyncFileDialog, dialog_async_exec
-from sakia.gui.widgets import toast
+from sakia.gui.dialogs.account_cfg.controller import AccountConfigController
 from sakia.gui.dialogs.certification.controller import CertificationController
 from sakia.gui.dialogs.transfer.controller import TransferController
-from sakia.gui.dialogs.account_cfg.controller import AccountConfigController
-import logging
+from sakia.gui.widgets import toast
+from sakia.gui.widgets.dialogs import QAsyncMessageBox, QAsyncFileDialog, dialog_async_exec
+from .model import ToolbarModel
+from .view import ToolbarView
 
 
 class ToolbarController(ComponentController):
diff --git a/src/sakia/gui/navigation/graphs/base/controller.py b/src/sakia/gui/navigation/graphs/base/controller.py
index 45e547cc..9417e02b 100644
--- a/src/sakia/gui/navigation/graphs/base/controller.py
+++ b/src/sakia/gui/navigation/graphs/base/controller.py
@@ -1,9 +1,11 @@
-from sakia.gui.component.controller import ComponentController
+import asyncio
+
 from PyQt5.QtCore import pyqtSlot
 from PyQt5.QtGui import QCursor
-from sakia.tools.decorators import asyncify, once_at_a_time
+
+from sakia.decorators import asyncify, once_at_a_time
+from sakia.gui.component.controller import ComponentController
 from sakia.gui.widgets.context_menu import ContextMenu
-import asyncio
 
 
 class BaseGraphController(ComponentController):
diff --git a/src/sakia/gui/navigation/graphs/base/node.py b/src/sakia/gui/navigation/graphs/base/node.py
index 332a859d..33362993 100644
--- a/src/sakia/gui/navigation/graphs/base/node.py
+++ b/src/sakia/gui/navigation/graphs/base/node.py
@@ -1,8 +1,9 @@
-from PyQt5.QtWidgets import QGraphicsEllipseItem, QGraphicsSceneHoverEvent, \
-    QGraphicsSceneContextMenuEvent
 from PyQt5.QtCore import Qt
 from PyQt5.QtGui import QMouseEvent
-from sakia.core.graph.constants import NodeStatus
+from PyQt5.QtWidgets import QGraphicsEllipseItem, QGraphicsSceneHoverEvent, \
+    QGraphicsSceneContextMenuEvent
+
+from sakia.data.graphs.constants import NodeStatus
 
 
 class BaseNode(QGraphicsEllipseItem):
diff --git a/src/sakia/gui/navigation/graphs/explorer/controller.py b/src/sakia/gui/navigation/graphs/explorer/controller.py
index 9445148d..5124dfaf 100644
--- a/src/sakia/gui/navigation/graphs/explorer/controller.py
+++ b/src/sakia/gui/navigation/graphs/explorer/controller.py
@@ -1,10 +1,11 @@
-from ..base.controller import BaseGraphController
-from sakia.tools.decorators import asyncify, once_at_a_time
-from .view import ExplorerView
-from .model import ExplorerModel
-from sakia.gui.sub.search_user.controller import SearchUserController
 import asyncio
 
+from sakia.decorators import asyncify, once_at_a_time
+from sakia.gui.sub.search_user.controller import SearchUserController
+from .model import ExplorerModel
+from .view import ExplorerView
+from ..base.controller import BaseGraphController
+
 
 class ExplorerController(BaseGraphController):
     """
diff --git a/src/sakia/gui/navigation/graphs/explorer/edge.py b/src/sakia/gui/navigation/graphs/explorer/edge.py
index 0af1f027..085538aa 100644
--- a/src/sakia/gui/navigation/graphs/explorer/edge.py
+++ b/src/sakia/gui/navigation/graphs/explorer/edge.py
@@ -1,9 +1,11 @@
+import math
+
 from PyQt5.QtCore import Qt, QRectF, QLineF, QPointF, QSizeF, \
-                        qFuzzyCompare, QTimeLine
+                        qFuzzyCompare
 from PyQt5.QtGui import QColor, QPen, QPolygonF
-import math
+
+from sakia.data.graphs.constants import EdgeStatus
 from ..base.edge import BaseEdge
-from sakia.core.graph.constants import EdgeStatus
 
 
 class ExplorerEdge(BaseEdge):
diff --git a/src/sakia/gui/navigation/graphs/explorer/model.py b/src/sakia/gui/navigation/graphs/explorer/model.py
index d7d4d4ff..81063f57 100644
--- a/src/sakia/gui/navigation/graphs/explorer/model.py
+++ b/src/sakia/gui/navigation/graphs/explorer/model.py
@@ -1,7 +1,8 @@
-from ..base.model import BaseGraphModel
-from sakia.core.graph import ExplorerGraph
 from sakia.tools.exceptions import NoPeerAvailable
 
+from sakia.data.graphs import ExplorerGraph
+from ..base.model import BaseGraphModel
+
 
 class ExplorerModel(BaseGraphModel):
     """
diff --git a/src/sakia/gui/navigation/graphs/explorer/node.py b/src/sakia/gui/navigation/graphs/explorer/node.py
index 58b578de..19dda987 100644
--- a/src/sakia/gui/navigation/graphs/explorer/node.py
+++ b/src/sakia/gui/navigation/graphs/explorer/node.py
@@ -1,9 +1,11 @@
-from PyQt5.QtWidgets import QGraphicsSimpleTextItem
+import math
+
 from PyQt5.QtCore import Qt, QPointF, QTimeLine, QTimer
 from PyQt5.QtGui import QTransform, QColor, QPen, QBrush, QRadialGradient
-from sakia.core.graph.constants import NodeStatus
+from PyQt5.QtWidgets import QGraphicsSimpleTextItem
+
+from sakia.data.graphs.constants import NodeStatus
 from ..base.node import BaseNode
-import math
 
 
 class ExplorerNode(BaseNode):
diff --git a/src/sakia/gui/navigation/graphs/wot/controller.py b/src/sakia/gui/navigation/graphs/wot/controller.py
index bd6cdc3f..3dae41d1 100644
--- a/src/sakia/gui/navigation/graphs/wot/controller.py
+++ b/src/sakia/gui/navigation/graphs/wot/controller.py
@@ -1,10 +1,11 @@
-from ..base.controller import BaseGraphController
-from sakia.tools.decorators import asyncify, once_at_a_time
-from .view import WotView
-from .model import WotModel
-from sakia.gui.sub.search_user.controller import SearchUserController
 import asyncio
 
+from sakia.decorators import asyncify, once_at_a_time
+from sakia.gui.sub.search_user.controller import SearchUserController
+from .model import WotModel
+from .view import WotView
+from ..base.controller import BaseGraphController
+
 
 class WotController(BaseGraphController):
     """
diff --git a/src/sakia/gui/navigation/graphs/wot/edge.py b/src/sakia/gui/navigation/graphs/wot/edge.py
index 04f31d5c..29053a06 100644
--- a/src/sakia/gui/navigation/graphs/wot/edge.py
+++ b/src/sakia/gui/navigation/graphs/wot/edge.py
@@ -1,9 +1,11 @@
+import math
+
 from PyQt5.QtCore import Qt, QRectF, QLineF, QPointF, QSizeF, \
                         qFuzzyCompare
 from PyQt5.QtGui import QColor, QPen, QPolygonF
-import math
+
+from sakia.data.graphs.constants import EdgeStatus
 from ..base.edge import BaseEdge
-from sakia.core.graph.constants import EdgeStatus
 
 
 class WotEdge(BaseEdge):
diff --git a/src/sakia/gui/navigation/graphs/wot/model.py b/src/sakia/gui/navigation/graphs/wot/model.py
index 56981afc..d6c0440e 100644
--- a/src/sakia/gui/navigation/graphs/wot/model.py
+++ b/src/sakia/gui/navigation/graphs/wot/model.py
@@ -1,5 +1,5 @@
+from sakia.data.graphs import WoTGraph
 from ..base.model import BaseGraphModel
-from sakia.core.graph import WoTGraph
 
 
 class WotModel(BaseGraphModel):
diff --git a/src/sakia/gui/navigation/graphs/wot/node.py b/src/sakia/gui/navigation/graphs/wot/node.py
index 51a673a9..0d99b01e 100644
--- a/src/sakia/gui/navigation/graphs/wot/node.py
+++ b/src/sakia/gui/navigation/graphs/wot/node.py
@@ -1,7 +1,8 @@
-from PyQt5.QtWidgets import QGraphicsSimpleTextItem
 from PyQt5.QtCore import Qt, QPointF
 from PyQt5.QtGui import QTransform, QColor, QPen, QBrush, QRadialGradient
-from sakia.core.graph.constants import NodeStatus
+from PyQt5.QtWidgets import QGraphicsSimpleTextItem
+
+from sakia.data.graphs.constants import NodeStatus
 from ..base.node import BaseNode
 
 
diff --git a/src/sakia/gui/navigation/identities/controller.py b/src/sakia/gui/navigation/identities/controller.py
index 7722bfbb..719514a4 100644
--- a/src/sakia/gui/navigation/identities/controller.py
+++ b/src/sakia/gui/navigation/identities/controller.py
@@ -1,14 +1,16 @@
+import logging
+
+from PyQt5.QtGui import QCursor
+from sakia.tools.exceptions import NoPeerAvailable
+
+from duniterpy.api import bma, errors
+from duniterpy.documents.block import BlockUID
+from sakia.core.registry import Identity, BlockchainState
+from sakia.decorators import once_at_a_time, asyncify
 from sakia.gui.component.controller import ComponentController
+from sakia.gui.widgets.context_menu import ContextMenu
 from .model import IdentitiesModel
 from .view import IdentitiesView
-from sakia.tools.decorators import once_at_a_time, asyncify
-from sakia.gui.widgets.context_menu import ContextMenu
-from PyQt5.QtGui import QCursor
-from sakia.core.registry import Identity, BlockchainState
-from duniterpy.documents.block import BlockUID
-from duniterpy.api import bma, errors
-from sakia.tools.exceptions import NoPeerAvailable
-import logging
 
 
 class IdentitiesController(ComponentController):
diff --git a/src/sakia/gui/navigation/informations/controller.py b/src/sakia/gui/navigation/informations/controller.py
index 206c7246..ff466be1 100644
--- a/src/sakia/gui/navigation/informations/controller.py
+++ b/src/sakia/gui/navigation/informations/controller.py
@@ -1,10 +1,12 @@
+import logging
+
+from sakia.tools.exceptions import NoPeerAvailable
+
+from duniterpy.api import errors
+from sakia.decorators import asyncify
 from sakia.gui.component.controller import ComponentController
 from .model import InformationsModel
 from .view import InformationsView
-from sakia.tools.decorators import asyncify
-from sakia.tools.exceptions import NoPeerAvailable
-from duniterpy.api import errors
-import logging
 
 
 class InformationsController(ComponentController):
diff --git a/src/sakia/gui/navigation/informations/model.py b/src/sakia/gui/navigation/informations/model.py
index f7272c1d..819296f9 100644
--- a/src/sakia/gui/navigation/informations/model.py
+++ b/src/sakia/gui/navigation/informations/model.py
@@ -1,11 +1,12 @@
-from sakia.gui.component.model import ComponentModel
-from sakia.tools.exceptions import NoPeerAvailable
-from PyQt5.QtCore import QLocale, QDateTime, pyqtSignal
-from sakia.core.money import Referentials
-
 import logging
 import math
 
+from PyQt5.QtCore import QLocale, QDateTime, pyqtSignal
+from sakia.tools.exceptions import NoPeerAvailable
+
+from sakia.gui.component.model import ComponentModel
+from sakia.money import Referentials
+
 
 class InformationsModel(ComponentModel):
     """
diff --git a/src/sakia/gui/navigation/network/table_model.py b/src/sakia/gui/navigation/network/table_model.py
index 6d698795..07e0f822 100644
--- a/src/sakia/gui/navigation/network/table_model.py
+++ b/src/sakia/gui/navigation/network/table_model.py
@@ -4,15 +4,15 @@ Created on 5 févr. 2014
 @author: inso
 """
 
-import logging
 import asyncio
+import logging
 
 from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant, QSortFilterProxyModel, QDateTime, QLocale
 from PyQt5.QtGui import QColor, QFont, QIcon
-
-from sakia.tools.exceptions import NoPeerAvailable
-from sakia.tools.decorators import asyncify, once_at_a_time, cancel_once_task
 from sakia.core.net.node import Node
+from sakia.tools.exceptions import NoPeerAvailable
+
+from sakia.decorators import asyncify, once_at_a_time
 
 
 class NetworkFilterProxyModel(QSortFilterProxyModel):
diff --git a/src/sakia/gui/navigation/txhistory/controller.py b/src/sakia/gui/navigation/txhistory/controller.py
index 92920fad..c6f02e11 100644
--- a/src/sakia/gui/navigation/txhistory/controller.py
+++ b/src/sakia/gui/navigation/txhistory/controller.py
@@ -3,12 +3,12 @@ import logging
 from PyQt5.QtCore import QTime, pyqtSignal
 from PyQt5.QtGui import QCursor
 
+from sakia.decorators import asyncify, once_at_a_time
 from sakia.gui.component.controller import ComponentController
-from .view import TxHistoryView
-from .model import TxHistoryModel
-from sakia.tools.decorators import asyncify, once_at_a_time
 from sakia.gui.widgets import toast
 from sakia.gui.widgets.context_menu import ContextMenu
+from .model import TxHistoryModel
+from .view import TxHistoryView
 
 
 class TxHistoryController(ComponentController):
diff --git a/src/sakia/gui/navigation/txhistory/table_model.py b/src/sakia/gui/navigation/txhistory/table_model.py
index 969a7250..c6c106a7 100644
--- a/src/sakia/gui/navigation/txhistory/table_model.py
+++ b/src/sakia/gui/navigation/txhistory/table_model.py
@@ -4,18 +4,19 @@ Created on 5 févr. 2014
 @author: inso
 """
 
+import asyncio
 import datetime
 import logging
-import asyncio
 import math
-from sakia.core.transfer import Transfer, TransferState
+
+from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant, QSortFilterProxyModel, \
+    QDateTime, QLocale
+from PyQt5.QtGui import QFont, QColor, QIcon
 from sakia.core.net.network import MAX_CONFIRMATIONS
 from sakia.tools.exceptions import NoPeerAvailable
-from sakia.tools.decorators import asyncify, once_at_a_time, cancel_once_task
-from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant, QSortFilterProxyModel, \
-    QDateTime, QLocale, QModelIndex
 
-from PyQt5.QtGui import QFont, QColor, QIcon
+from sakia.core.transfer import Transfer, TransferState
+from sakia.decorators import asyncify, once_at_a_time, cancel_once_task
 
 
 class TxFilterProxyModel(QSortFilterProxyModel):
diff --git a/res/ui/password_asker.ui b/src/sakia/gui/password_asker.ui
similarity index 100%
rename from res/ui/password_asker.ui
rename to src/sakia/gui/password_asker.ui
diff --git a/src/sakia/gui/preferences.py b/src/sakia/gui/preferences.py
index 9d00fc55..90fa1ca4 100644
--- a/src/sakia/gui/preferences.py
+++ b/src/sakia/gui/preferences.py
@@ -7,7 +7,7 @@ Created on 11 mai 2015
 from PyQt5.QtCore import QCoreApplication
 from PyQt5.QtWidgets import QDialog
 
-from ..core import money
+from sakia import money
 from ..presentation.preferences_uic import Ui_PreferencesDialog
 
 
diff --git a/src/sakia/gui/sub/search_user/controller.py b/src/sakia/gui/sub/search_user/controller.py
index 7dcd7d42..ceab618e 100644
--- a/src/sakia/gui/sub/search_user/controller.py
+++ b/src/sakia/gui/sub/search_user/controller.py
@@ -1,9 +1,10 @@
 from PyQt5.QtCore import pyqtSignal
+
+from sakia.core.registry import Identity
+from sakia.decorators import asyncify
 from sakia.gui.component.controller import ComponentController
 from .model import SearchUserModel
 from .view import SearchUserView
-from sakia.tools.decorators import asyncify
-from sakia.core.registry import Identity
 
 
 class SearchUserController(ComponentController):
diff --git a/src/sakia/gui/sub/user_information/controller.py b/src/sakia/gui/sub/user_information/controller.py
index 080326d6..55d5349a 100644
--- a/src/sakia/gui/sub/user_information/controller.py
+++ b/src/sakia/gui/sub/user_information/controller.py
@@ -1,9 +1,10 @@
+from PyQt5.QtWidgets import QDialog
+
+from sakia.core.registry import LocalState
+from sakia.decorators import asyncify
 from sakia.gui.component.controller import ComponentController
-from .view import UserInformationView
 from .model import UserInformationModel
-from sakia.tools.decorators import asyncify
-from sakia.core.registry import LocalState
-from PyQt5.QtWidgets import QDialog
+from .view import UserInformationView
 
 
 class UserInformationController(ComponentController):
diff --git a/src/sakia/gui/sub/user_information/model.py b/src/sakia/gui/sub/user_information/model.py
index d75b7b5c..324060ed 100644
--- a/src/sakia/gui/sub/user_information/model.py
+++ b/src/sakia/gui/sub/user_information/model.py
@@ -1,8 +1,10 @@
-from sakia.gui.component.model import ComponentModel
-from sakia.tools.exceptions import MembershipNotFoundError, LookupFailureError, NoPeerAvailable
-from sakia.core.graph import WoTGraph
 import logging
 
+from sakia.tools.exceptions import MembershipNotFoundError, LookupFailureError, NoPeerAvailable
+
+from sakia.data.graphs import WoTGraph
+from sakia.gui.component.model import ComponentModel
+
 
 class UserInformationModel(ComponentModel):
     """
diff --git a/src/sakia/gui/widgets/context_menu.py b/src/sakia/gui/widgets/context_menu.py
index 7aa990c8..ea5a154b 100644
--- a/src/sakia/gui/widgets/context_menu.py
+++ b/src/sakia/gui/widgets/context_menu.py
@@ -1,16 +1,17 @@
-from PyQt5.QtWidgets import QMenu, QAction, QApplication, QMessageBox
-from PyQt5.QtCore import QObject, pyqtSignal
-from duniterpy.documents import Block, Membership
 import logging
 
-from sakia.gui.sub.user_information.controller import UserInformationController
+from PyQt5.QtCore import QObject, pyqtSignal
+from PyQt5.QtWidgets import QMenu, QAction, QApplication, QMessageBox
+from sakia.tools.exceptions import MembershipNotFoundError
+
+from duniterpy.documents import Block
+from sakia.core.registry import Identity
+from sakia.core.transfer import Transfer, TransferState
+from sakia.decorators import asyncify
 from sakia.gui.contact import ConfigureContactDialog
-from sakia.gui.dialogs.transfer.controller import TransferController
 from sakia.gui.dialogs.certification.controller import CertificationController
-from sakia.tools.decorators import asyncify
-from sakia.core.transfer import Transfer, TransferState
-from sakia.core.registry import Identity
-from sakia.tools.exceptions import MembershipNotFoundError
+from sakia.gui.dialogs.transfer.controller import TransferController
+from sakia.gui.sub.user_information.controller import UserInformationController
 
 
 class ContextMenu(QObject):
diff --git a/src/sakia/main.py b/src/sakia/main.py
index 89a7871e..f06c5278 100755
--- a/src/sakia/main.py
+++ b/src/sakia/main.py
@@ -3,26 +3,19 @@ Created on 1 févr. 2014
 
 @author: inso
 """
-import signal
-import sys
 import asyncio
 import logging
-import os
-import traceback
-
-# To debug missing spec
-import jsonschema
+import signal
+import sys
 import traceback
 
-# To force cx_freeze import
-import PyQt5.QtSvg
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QApplication, QMessageBox
 
 from quamash import QSelectorEventLoop
-from PyQt5.QtWidgets import QApplication, QMessageBox
-from PyQt5.QtCore import Qt
-from sakia.gui.main_window.controller import MainWindowController
+from sakia.app import Application
 from sakia.gui.dialogs.account_cfg.controller import AccountConfigController
-from sakia.core.app import Application
+from sakia.gui.main_window.controller import MainWindowController
 
 
 def async_exception_handler(loop, context):
diff --git a/src/sakia/models/certifications.py b/src/sakia/models/certifications.py
index 72bbf697..17c9f81a 100644
--- a/src/sakia/models/certifications.py
+++ b/src/sakia/models/certifications.py
@@ -6,13 +6,13 @@ Created on 5 févr. 2014
 
 import datetime
 import logging
-import asyncio
-from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task
-from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant, QSortFilterProxyModel, \
-    QDateTime, QLocale, QModelIndex
 
+from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant, QSortFilterProxyModel, \
+    QDateTime, QLocale
 from PyQt5.QtGui import QFont, QColor
 
+from sakia.decorators import asyncify, once_at_a_time, cancel_once_task
+
 
 class CertsFilterProxyModel(QSortFilterProxyModel):
     def __init__(self, ts_from, ts_to, parent=None):
diff --git a/src/sakia/core/money/__init__.py b/src/sakia/money/__init__.py
similarity index 100%
rename from src/sakia/core/money/__init__.py
rename to src/sakia/money/__init__.py
diff --git a/src/sakia/core/money/base_referential.py b/src/sakia/money/base_referential.py
similarity index 100%
rename from src/sakia/core/money/base_referential.py
rename to src/sakia/money/base_referential.py
diff --git a/src/sakia/core/money/dividend_per_day.py b/src/sakia/money/dividend_per_day.py
similarity index 100%
rename from src/sakia/core/money/dividend_per_day.py
rename to src/sakia/money/dividend_per_day.py
diff --git a/src/sakia/core/money/quant_zerosum.py b/src/sakia/money/quant_zerosum.py
similarity index 100%
rename from src/sakia/core/money/quant_zerosum.py
rename to src/sakia/money/quant_zerosum.py
diff --git a/src/sakia/core/money/quantitative.py b/src/sakia/money/quantitative.py
similarity index 100%
rename from src/sakia/core/money/quantitative.py
rename to src/sakia/money/quantitative.py
diff --git a/src/sakia/core/money/relative.py b/src/sakia/money/relative.py
similarity index 100%
rename from src/sakia/core/money/relative.py
rename to src/sakia/money/relative.py
diff --git a/src/sakia/core/money/relative_to_past.py b/src/sakia/money/relative_to_past.py
similarity index 100%
rename from src/sakia/core/money/relative_to_past.py
rename to src/sakia/money/relative_to_past.py
diff --git a/src/sakia/core/money/relative_zerosum.py b/src/sakia/money/relative_zerosum.py
similarity index 100%
rename from src/sakia/core/money/relative_zerosum.py
rename to src/sakia/money/relative_zerosum.py
diff --git a/src/sakia/core/money/udd_to_past.py b/src/sakia/money/udd_to_past.py
similarity index 100%
rename from src/sakia/core/money/udd_to_past.py
rename to src/sakia/money/udd_to_past.py
diff --git a/src/sakia/services/network.py b/src/sakia/services/network.py
index 9f12bbe1..7cfac5f2 100644
--- a/src/sakia/services/network.py
+++ b/src/sakia/services/network.py
@@ -1,14 +1,16 @@
-from sakia.data.connectors import NodeConnector
-from sakia.data.entities import Node
-from sakia.errors import InvalidNodeCurrency
-from sakia.tools.decorators import asyncify
+import asyncio
 import logging
 import time
-import asyncio
-from duniterpy.key import VerifyingKey
-from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject
 from collections import Counter
 
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject
+
+from duniterpy.key import VerifyingKey
+from sakia.data.connectors import NodeConnector
+from sakia.data.entities import Node
+from sakia.decorators import asyncify
+from sakia.errors import InvalidNodeCurrency
+
 
 class NetworkService(QObject):
     """
diff --git a/src/sakia/tests/functional/certification/test_certification.py b/src/sakia/tests/functional/certification/test_certification.py
index b836a9b8..ea22b614 100644
--- a/src/sakia/tests/functional/certification/test_certification.py
+++ b/src/sakia/tests/functional/certification/test_certification.py
@@ -1,22 +1,22 @@
-import sys
-import unittest
 import asyncio
 import time
-import logging
+import unittest
+
 import aiohttp
-from duniterpy.documents.peer import BMAEndpoint
-from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMessageBox, QApplication
 from PyQt5.QtCore import QLocale, Qt
 from PyQt5.QtTest import QTest
-from sakia.tests.mocks.bma import init_new_community
-from sakia.core.registry.identities import IdentitiesRegistry
-from sakia.gui.certification import CertificationDialog, Ui_CertificationDialog
-from sakia.gui.password_asker import PasswordAskerDialog
-from sakia.core.app import Application
-from sakia.core import Account, Community, Wallet
+from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMessageBox, QApplication
 from sakia.core.net import Network, Node
 from sakia.core.net.api.bma.access import BmaAccess
+from sakia.gui.certification import CertificationDialog, Ui_CertificationDialog
+
+from duniterpy.documents.peer import BMAEndpoint
+from sakia.app import Application
+from sakia.core import Account, Community, Wallet
+from sakia.core.registry.identities import IdentitiesRegistry
+from sakia.gui.password_asker import PasswordAskerDialog
 from sakia.tests import QuamashTest
+from sakia.tests.mocks.bma import init_new_community
 
 
 class TestCertificationDialog(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/functional/identities_tab/test_identities_table.py b/src/sakia/tests/functional/identities_tab/test_identities_table.py
index c88876b6..d64481fa 100644
--- a/src/sakia/tests/functional/identities_tab/test_identities_table.py
+++ b/src/sakia/tests/functional/identities_tab/test_identities_table.py
@@ -1,21 +1,20 @@
-import sys
-import unittest
 import asyncio
-import aiohttp
-import logging
 import time
+import unittest
+
+import aiohttp
 from PyQt5.QtCore import QLocale, Qt
 from PyQt5.QtTest import QTest
+from sakia.core.net import Network, Node
+from sakia.core.net.api.bma.access import BmaAccess
+from sakia.gui.identities_tab import IdentitiesTabWidget
 
-from sakia.tests.mocks.bma import nice_blockchain
+from sakia.app import Application
+from sakia.core import Account, Community, Wallet
 from sakia.core.registry.identities import IdentitiesRegistry
-from sakia.gui.identities_tab import IdentitiesTabWidget
 from sakia.gui.password_asker import PasswordAskerDialog
-from sakia.core.app import Application
-from sakia.core import Account, Community, Wallet
-from sakia.core.net import Network, Node
-from sakia.core.net.api.bma.access import BmaAccess
 from sakia.tests import QuamashTest
+from sakia.tests.mocks.bma import nice_blockchain
 
 
 class TestIdentitiesTable(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/functional/main_window/test_main_window_dialogs.py b/src/sakia/tests/functional/main_window/test_main_window_dialogs.py
index ed9157a9..d57d65c2 100644
--- a/src/sakia/tests/functional/main_window/test_main_window_dialogs.py
+++ b/src/sakia/tests/functional/main_window/test_main_window_dialogs.py
@@ -1,11 +1,13 @@
-import unittest
 import asyncio
+import unittest
+
+from PyQt5.QtCore import QLocale
 from PyQt5.QtWidgets import QDialog, QFileDialog
-from PyQt5.QtCore import QLocale, QTimer
 from sakia.gui.mainwindow import MainWindow
-from sakia.core.app import Application
-from sakia.tests import QuamashTest
+
+from sakia.app import Application
 from sakia.core.registry.identities import IdentitiesRegistry
+from sakia.tests import QuamashTest
 
 
 class MainWindowDialogsTest(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/functional/main_window/test_main_window_menus.py b/src/sakia/tests/functional/main_window/test_main_window_menus.py
index 7022217d..45c78647 100644
--- a/src/sakia/tests/functional/main_window/test_main_window_menus.py
+++ b/src/sakia/tests/functional/main_window/test_main_window_menus.py
@@ -1,14 +1,13 @@
-import sys
 import unittest
-import os
-import asyncio
-import quamash
-from PyQt5.QtWidgets import QMenu
+
 from PyQt5.QtCore import QLocale
+from PyQt5.QtWidgets import QMenu
 from sakia.gui.mainwindow import MainWindow
-from sakia.core.app import Application
+
+from sakia.app import Application
 from sakia.tests import QuamashTest
 
+
 class MainWindowMenusTest(unittest.TestCase, QuamashTest):
     def setUp(self):
         self.setUpQuamash()
diff --git a/src/sakia/tests/functional/preferences/test_preferences_dialog.py b/src/sakia/tests/functional/preferences/test_preferences_dialog.py
index f2f1ce3b..2b29295a 100644
--- a/src/sakia/tests/functional/preferences/test_preferences_dialog.py
+++ b/src/sakia/tests/functional/preferences/test_preferences_dialog.py
@@ -1,14 +1,13 @@
+import logging
 import sys
 import unittest
-import asyncio
-import quamash
-import logging
+
 from PyQt5.QtCore import QLocale
+
+from sakia.app import Application
 from sakia.core.registry.identities import IdentitiesRegistry
 from sakia.gui.preferences import PreferencesDialog
-from sakia.core.app import Application
 from sakia.tests import QuamashTest
-from duniterpy.api import bma
 
 
 class TestPreferencesDialog(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/functional/process_cfg_account/test_add_account.py b/src/sakia/tests/functional/process_cfg_account/test_add_account.py
index 91bdaee0..44c37041 100644
--- a/src/sakia/tests/functional/process_cfg_account/test_add_account.py
+++ b/src/sakia/tests/functional/process_cfg_account/test_add_account.py
@@ -1,17 +1,16 @@
-import sys
-import unittest
 import asyncio
-import quamash
 import logging
-from PyQt5.QtWidgets import QDialog
+import sys
+import unittest
+
 from PyQt5.QtCore import QLocale, Qt
 from PyQt5.QtTest import QTest
-from sakia.tests.mocks.bma import new_blockchain
-from sakia.core.registry.identities import IdentitiesRegistry
 from sakia.gui.process_cfg_account import ProcessConfigureAccount
-from sakia.gui.password_asker import PasswordAskerDialog
-from sakia.core.app import Application
+
+from sakia.app import Application
 from sakia.core.account import Account
+from sakia.core.registry.identities import IdentitiesRegistry
+from sakia.gui.password_asker import PasswordAskerDialog
 from sakia.tests import QuamashTest
 
 
diff --git a/src/sakia/tests/functional/process_cfg_community/test_add_community.py b/src/sakia/tests/functional/process_cfg_community/test_add_community.py
index 28b6da2b..25bb02af 100644
--- a/src/sakia/tests/functional/process_cfg_community/test_add_community.py
+++ b/src/sakia/tests/functional/process_cfg_community/test_add_community.py
@@ -1,19 +1,18 @@
-import sys
-import unittest
 import asyncio
-import quamash
-import logging
 import time
-from PyQt5.QtWidgets import QDialog
+import unittest
+
 from PyQt5.QtCore import QLocale, Qt
 from PyQt5.QtTest import QTest
-from sakia.tests.mocks.bma import new_blockchain, nice_blockchain
-from sakia.core.registry.identities import IdentitiesRegistry
+from PyQt5.QtWidgets import QDialog
 from sakia.gui.process_cfg_community import ProcessConfigureCommunity
-from sakia.gui.password_asker import PasswordAskerDialog
-from sakia.core.app import Application
+
+from sakia.app import Application
 from sakia.core.account import Account
+from sakia.core.registry.identities import IdentitiesRegistry
+from sakia.gui.password_asker import PasswordAskerDialog
 from sakia.tests import QuamashTest
+from sakia.tests.mocks.bma import new_blockchain, nice_blockchain
 
 
 class ProcessAddCommunity(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/functional/transfer/test_transfer.py b/src/sakia/tests/functional/transfer/test_transfer.py
index ad8df3cf..087bb872 100644
--- a/src/sakia/tests/functional/transfer/test_transfer.py
+++ b/src/sakia/tests/functional/transfer/test_transfer.py
@@ -1,22 +1,21 @@
-import sys
-import unittest
 import asyncio
-import aiohttp
 import time
-import logging
-from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMessageBox, QApplication
+import unittest
+
+import aiohttp
 from PyQt5.QtCore import QLocale, Qt
 from PyQt5.QtTest import QTest
+from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMessageBox, QApplication
+from sakia.core.net import Network, Node
+from sakia.core.net.api.bma.access import BmaAccess
+from sakia.gui.transfer import TransferMoneyDialog
 
-from sakia.tests.mocks.bma import nice_blockchain
+from sakia.app import Application
+from sakia.core import Account, Community, Wallet
 from sakia.core.registry.identities import IdentitiesRegistry
-from sakia.gui.transfer import TransferMoneyDialog
 from sakia.gui.password_asker import PasswordAskerDialog
-from sakia.core.app import Application
-from sakia.core import Account, Community, Wallet
-from sakia.core.net import Network, Node
-from sakia.core.net.api.bma.access import BmaAccess
 from sakia.tests import QuamashTest
+from sakia.tests.mocks.bma import nice_blockchain
 
 
 class TestTransferDialog(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/functional/wot_tab/test_wot_tab.py b/src/sakia/tests/functional/wot_tab/test_wot_tab.py
index 3eb15fc3..1909885a 100644
--- a/src/sakia/tests/functional/wot_tab/test_wot_tab.py
+++ b/src/sakia/tests/functional/wot_tab/test_wot_tab.py
@@ -2,17 +2,17 @@ import asyncio
 import logging
 import sys
 import time
-import aiohttp
 import unittest
 
+import aiohttp
 from PyQt5.QtCore import QLocale
-
-from sakia.core import Account, Community, Wallet
-from sakia.core.app import Application
 from sakia.core.net import Network, Node
 from sakia.core.net.api.bma.access import BmaAccess
-from sakia.core.registry.identities import IdentitiesRegistry
 from sakia.gui.graphs.wot_tab import WotTabWidget
+
+from sakia.app import Application
+from sakia.core import Account, Community, Wallet
+from sakia.core.registry.identities import IdentitiesRegistry
 from sakia.gui.password_asker import PasswordAskerDialog
 from sakia.tests import QuamashTest
 from sakia.tests.mocks.bma import nice_blockchain
diff --git a/src/sakia/tests/unit/core/graph/test_base_graph.py b/src/sakia/tests/unit/core/graph/test_base_graph.py
index f7a3bbdd..193d715c 100644
--- a/src/sakia/tests/unit/core/graph/test_base_graph.py
+++ b/src/sakia/tests/unit/core/graph/test_base_graph.py
@@ -1,11 +1,11 @@
-import sys
 import unittest
-import logging
-from asynctest.mock import Mock, CoroutineMock, patch
+
 from PyQt5.QtCore import QLocale
-from sakia.tests import QuamashTest
+from asynctest.mock import Mock, CoroutineMock, patch
 from sakia.core.graph import BaseGraph
-from sakia.core.graph.constants import EdgeStatus, NodeStatus
+
+from sakia.data.graphs.constants import EdgeStatus, NodeStatus
+from sakia.tests import QuamashTest
 
 
 class TestBaseGraph(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/core/graph/test_explorer_graph.py b/src/sakia/tests/unit/core/graph/test_explorer_graph.py
index e3c99600..5f1f5e54 100644
--- a/src/sakia/tests/unit/core/graph/test_explorer_graph.py
+++ b/src/sakia/tests/unit/core/graph/test_explorer_graph.py
@@ -1,10 +1,11 @@
-import sys
-import unittest
 import asyncio
-from asynctest.mock import Mock, CoroutineMock, patch
+import unittest
+
 from PyQt5.QtCore import QLocale
+from asynctest.mock import Mock, CoroutineMock, patch
+
+from sakia.data.graphs import ExplorerGraph
 from sakia.tests import QuamashTest
-from sakia.core.graph import ExplorerGraph
 
 
 class TestExplorerGraph(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/core/graph/test_wot_graph.py b/src/sakia/tests/unit/core/graph/test_wot_graph.py
index e0e355a2..4ce68939 100644
--- a/src/sakia/tests/unit/core/graph/test_wot_graph.py
+++ b/src/sakia/tests/unit/core/graph/test_wot_graph.py
@@ -1,11 +1,10 @@
-import sys
 import unittest
-import logging
-from asynctest.mock import Mock, CoroutineMock, patch
+
 from PyQt5.QtCore import QLocale
-from sakia.tests import QuamashTest
+from asynctest.mock import Mock, CoroutineMock, patch
 from sakia.core.graph import WoTGraph
-from sakia.core.graph.constants import EdgeStatus, NodeStatus
+
+from sakia.tests import QuamashTest
 
 
 class TestWotGraph(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/core/money/test_quantitative.py b/src/sakia/tests/unit/core/money/test_quantitative.py
index dd32a301..b0b00bed 100644
--- a/src/sakia/tests/unit/core/money/test_quantitative.py
+++ b/src/sakia/tests/unit/core/money/test_quantitative.py
@@ -1,8 +1,10 @@
 import unittest
-from asynctest.mock import Mock, CoroutineMock, patch, PropertyMock
+
 from PyQt5.QtCore import QLocale
+from asynctest.mock import patch, PropertyMock
+
+from sakia.money import Quantitative
 from sakia.tests import QuamashTest
-from sakia.core.money import Quantitative
 
 
 class TestQuantitative(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/core/money/test_quantitative_zsum.py b/src/sakia/tests/unit/core/money/test_quantitative_zsum.py
index 68ecaad7..7c530c5b 100644
--- a/src/sakia/tests/unit/core/money/test_quantitative_zsum.py
+++ b/src/sakia/tests/unit/core/money/test_quantitative_zsum.py
@@ -1,8 +1,10 @@
 import unittest
-from asynctest.mock import Mock, CoroutineMock, patch, PropertyMock
+
 from PyQt5.QtCore import QLocale
+from asynctest.mock import CoroutineMock, patch, PropertyMock
+
+from sakia.money import QuantitativeZSum
 from sakia.tests import QuamashTest
-from sakia.core.money import QuantitativeZSum
 
 
 class TestQuantitativeZSum(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/core/money/test_relative.py b/src/sakia/tests/unit/core/money/test_relative.py
index ae542b05..38b8fbf0 100644
--- a/src/sakia/tests/unit/core/money/test_relative.py
+++ b/src/sakia/tests/unit/core/money/test_relative.py
@@ -1,8 +1,10 @@
 import unittest
-from asynctest.mock import Mock, CoroutineMock, patch, PropertyMock
+
 from PyQt5.QtCore import QLocale
+from asynctest.mock import CoroutineMock, patch, PropertyMock
+
+from sakia.money import Relative
 from sakia.tests import QuamashTest
-from sakia.core.money import Relative
 
 
 class TestRelative(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/core/money/test_relative_to_past.py b/src/sakia/tests/unit/core/money/test_relative_to_past.py
index 61d6b055..2d52d700 100644
--- a/src/sakia/tests/unit/core/money/test_relative_to_past.py
+++ b/src/sakia/tests/unit/core/money/test_relative_to_past.py
@@ -1,8 +1,10 @@
 import unittest
-from asynctest.mock import Mock, CoroutineMock, patch, PropertyMock
+
 from PyQt5.QtCore import QLocale, QDateTime
+from asynctest.mock import CoroutineMock, patch, PropertyMock
+
+from sakia.money import RelativeToPast
 from sakia.tests import QuamashTest
-from sakia.core.money.relative_to_past import RelativeToPast
 
 
 class TestRelativeToPast(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/core/money/test_relative_zsum.py b/src/sakia/tests/unit/core/money/test_relative_zsum.py
index caf0d439..7c32b99d 100644
--- a/src/sakia/tests/unit/core/money/test_relative_zsum.py
+++ b/src/sakia/tests/unit/core/money/test_relative_zsum.py
@@ -1,8 +1,10 @@
 import unittest
-from asynctest.mock import Mock, CoroutineMock, patch, PropertyMock
+
 from PyQt5.QtCore import QLocale
+from asynctest.mock import CoroutineMock, patch, PropertyMock
+
+from sakia.money import RelativeZSum
 from sakia.tests import QuamashTest
-from sakia.core.money import RelativeZSum
 
 
 class TestRelativeZSum(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/core/txhistory/test_txhistory_loading.py b/src/sakia/tests/unit/core/txhistory/test_txhistory_loading.py
index 9f4ef8c0..e6d69cf1 100644
--- a/src/sakia/tests/unit/core/txhistory/test_txhistory_loading.py
+++ b/src/sakia/tests/unit/core/txhistory/test_txhistory_loading.py
@@ -1,18 +1,17 @@
-import sys
-import unittest
-import asyncio
-import quamash
-import time
 import logging
-from PyQt5.QtCore import QLocale, Qt
-from sakia.tests.mocks.bma import nice_blockchain
-from sakia.core.registry.identities import IdentitiesRegistry
-from sakia.core.app import Application
-from sakia.core import Account, Community, Wallet
+import time
+import unittest
+
+from PyQt5.QtCore import QLocale
 from sakia.core.net import Network, Node
 from sakia.core.net.api.bma.access import BmaAccess
-from sakia.tests import QuamashTest
+
 from duniterpy.documents.peer import BMAEndpoint
+from sakia.app import Application
+from sakia.core import Account, Community, Wallet
+from sakia.core.registry.identities import IdentitiesRegistry
+from sakia.tests import QuamashTest
+from sakia.tests.mocks.bma import nice_blockchain
 
 
 class TestTxHistory(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/data/test_connections_repo.py b/src/sakia/tests/unit/data/test_connections_repo.py
index b70d4164..777ba5da 100644
--- a/src/sakia/tests/unit/data/test_connections_repo.py
+++ b/src/sakia/tests/unit/data/test_connections_repo.py
@@ -1,8 +1,6 @@
 from sakia.data.repositories import ConnectionsRepo, MetaDatabase
 from sakia.data.entities import Connection
-from duniterpy.documents import BlockUID
 import unittest
-import sqlite3
 
 
 class TestConnectionsRepo(unittest.TestCase):
diff --git a/src/sakia/tests/unit/tools/test_decorators.py b/src/sakia/tests/unit/test_decorators.py
similarity index 98%
rename from src/sakia/tests/unit/tools/test_decorators.py
rename to src/sakia/tests/unit/test_decorators.py
index 89b37390..2e635884 100644
--- a/src/sakia/tests/unit/tools/test_decorators.py
+++ b/src/sakia/tests/unit/test_decorators.py
@@ -1,8 +1,10 @@
-import unittest
 import asyncio
+import unittest
+
 from PyQt5.QtCore import QLocale
+
+from sakia.decorators import asyncify, once_at_a_time, cancel_once_task
 from sakia.tests import QuamashTest
-from sakia.tools.decorators import asyncify, once_at_a_time, cancel_once_task
 
 
 class TestDecorators(unittest.TestCase, QuamashTest):
diff --git a/src/sakia/tests/unit/tools/__init__.py b/src/sakia/tests/unit/tools/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/sakia/tools/__init__.py b/src/sakia/tools/__init__.py
deleted file mode 100644
index e69de29b..00000000
-- 
GitLab