From 9adf970522fe265e46439a532e182c7fde8dac93 Mon Sep 17 00:00:00 2001
From: vtexier <vit@free.fr>
Date: Wed, 25 Mar 2020 17:43:02 +0100
Subject: [PATCH] [enh] #798 add used_by property in sources table

---
 src/sakia/data/entities/source.py                  |  3 ++-
 .../007_add_sources_used_by_property.sql           |  5 +++++
 src/sakia/data/repositories/meta.py                | 14 +++++++++++++-
 src/sakia/services/sources.py                      |  1 +
 tests/unit/data/test_sources_repo.py               |  3 +++
 5 files changed, 24 insertions(+), 2 deletions(-)
 create mode 100644 src/sakia/data/repositories/007_add_sources_used_by_property.sql

diff --git a/src/sakia/data/entities/source.py b/src/sakia/data/entities/source.py
index 007b94df..8c5c0b1c 100644
--- a/src/sakia/data/entities/source.py
+++ b/src/sakia/data/entities/source.py
@@ -10,4 +10,5 @@ class Source:
     type = attr.ib(converter=str, validator=lambda i, a, s: s == "T" or s == "D")
     amount = attr.ib(converter=int, hash=False)
     base = attr.ib(converter=int, hash=False)
-    conditions = attr.ib(converter=str)
+    conditions = attr.ib(converter=str, hash=False)
+    used_by = attr.ib(converter=str, hash=False, default=None)
diff --git a/src/sakia/data/repositories/007_add_sources_used_by_property.sql b/src/sakia/data/repositories/007_add_sources_used_by_property.sql
new file mode 100644
index 00000000..18c783a2
--- /dev/null
+++ b/src/sakia/data/repositories/007_add_sources_used_by_property.sql
@@ -0,0 +1,5 @@
+BEGIN TRANSACTION;
+
+ALTER TABLE sources ADD COLUMN used_by VARCHAR(255) default null;
+
+COMMIT;
diff --git a/src/sakia/data/repositories/meta.py b/src/sakia/data/repositories/meta.py
index 1c25c9d8..3f932843 100644
--- a/src/sakia/data/repositories/meta.py
+++ b/src/sakia/data/repositories/meta.py
@@ -7,7 +7,7 @@ from .connections import ConnectionsRepo
 from .identities import IdentitiesRepo
 from .blockchains import BlockchainsRepo
 from .certifications import CertificationsRepo
-from .transactions import TransactionsRepo, Transaction
+from .transactions import TransactionsRepo
 from .dividends import DividendsRepo
 from .nodes import NodesRepo, Node
 from .sources import SourcesRepo
@@ -90,6 +90,7 @@ class SakiaDatabase:
             self.drop_incorrect_nodes,
             self.insert_last_mass_attribute,
             self.add_sources_conditions_property,
+            self.add_sources_used_by_property,
         ]
 
     def upgrade_database(self, to=0):
@@ -223,6 +224,17 @@ class SakiaDatabase:
         with self.conn:
             self.conn.executescript(sql_file.read())
 
+    def add_sources_used_by_property(self):
+        self._logger.debug("Add sources used_by property")
+        sql_file = open(
+            os.path.join(
+                os.path.dirname(__file__), "007_add_sources_used_by_property.sql"
+            ),
+            "r",
+        )
+        with self.conn:
+            self.conn.executescript(sql_file.read())
+
     def version(self):
         with self.conn:
             c = self.conn.execute("SELECT * FROM meta WHERE id=1")
diff --git a/src/sakia/services/sources.py b/src/sakia/services/sources.py
index 23a5a3c5..993706fa 100644
--- a/src/sakia/services/sources.py
+++ b/src/sakia/services/sources.py
@@ -267,6 +267,7 @@ class SourcesServices(QObject):
                 amount=source["amount"],
                 base=source["base"],
                 conditions=source["conditions"],
+                used_by=None,
             )
             self._sources_processor.insert(entity)
         except AttributeError as e:
diff --git a/tests/unit/data/test_sources_repo.py b/tests/unit/data/test_sources_repo.py
index a1f43c0e..5bc58cbe 100644
--- a/tests/unit/data/test_sources_repo.py
+++ b/tests/unit/data/test_sources_repo.py
@@ -14,6 +14,7 @@ def test_add_get_drop_source(meta_repo):
             1565,
             1,
             "SIG(FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn)",
+            None,
         )
     )
     source = sources_repo.get_one(
@@ -45,6 +46,7 @@ def test_add_get_multiple_source(meta_repo):
             1565,
             1,
             "SIG(FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn)",
+            None,
         )
     )
     sources_repo.insert(
@@ -57,6 +59,7 @@ def test_add_get_multiple_source(meta_repo):
             726946,
             1,
             "SIG(FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn)",
+            None,
         )
     )
     sources = sources_repo.get_all(
-- 
GitLab