From 02e292c83a2f9b6e7a8f6006ab3c7a6a51f9d223 Mon Sep 17 00:00:00 2001
From: inso <insomniak.fr@gmaiL.com>
Date: Fri, 22 Jun 2018 18:51:35 +0200
Subject: [PATCH] Parse sources using URL instead of manually
---
src/sakia/gui/dialogs/connection_cfg/model.py | 3 +-
src/sakia/services/sources.py | 40 ++++++++++++++-----
2 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/src/sakia/gui/dialogs/connection_cfg/model.py b/src/sakia/gui/dialogs/connection_cfg/model.py
index 6ce21f73..95f320c7 100644
--- a/src/sakia/gui/dialogs/connection_cfg/model.py
+++ b/src/sakia/gui/dialogs/connection_cfg/model.py
@@ -81,8 +81,7 @@ class ConnectionConfigModel(QObject):
:return:
"""
log_stream("Parsing sources...")
- await self.app.sources_service.refresh_sources_of_pubkey(self.connection.pubkey, transactions, dividends,
- None, log_stream, progress)
+ await self.app.sources_service.initialize_sources(self.connection.pubkey, log_stream, progress)
log_stream("Sources parsed succefully !")
async def initialize_identity(self, identity, log_stream, progress):
diff --git a/src/sakia/services/sources.py b/src/sakia/services/sources.py
index 32f25f52..f8f336cc 100644
--- a/src/sakia/services/sources.py
+++ b/src/sakia/services/sources.py
@@ -1,8 +1,10 @@
from PyQt5.QtCore import QObject
from duniterpy.api import bma, errors
from duniterpy.documents import Transaction as TransactionDoc
+from duniterpy.grammars.output import Condition
from duniterpy.documents import BlockUID
import logging
+import pypeg2
from sakia.data.entities import Source, Transaction,Dividend
import hashlib
@@ -43,15 +45,14 @@ class SourcesServices(QObject):
"""
txdoc = TransactionDoc.from_signed_raw(transaction.raw)
for offset, output in enumerate(txdoc.outputs):
- if output.conditions.left.pubkey == pubkey:
- source = Source(currency=self.currency,
- pubkey=pubkey,
- identifier=txdoc.sha_hash,
- type='T',
- noffset=offset,
- amount=output.amount,
- base=output.base)
- self._sources_processor.insert(source)
+ source = Source(currency=self.currency,
+ pubkey=pubkey,
+ identifier=txdoc.sha_hash,
+ type='T',
+ noffset=offset,
+ amount=output.amount,
+ base=output.base)
+ self._sources_processor.insert(source)
def parse_transaction_inputs(self, pubkey, transaction):
"""
@@ -85,6 +86,27 @@ class SourcesServices(QObject):
base=dividend.base)
self._sources_processor.insert(source)
+ async def initialize_sources(self, pubkey, log_stream, progress):
+ sources_data = await self._bma_connector.get(self.currency, bma.tx.sources, req_args={'pubkey': pubkey})
+ nb_sources = len(sources_data["sources"])
+ for i, s in enumerate(sources_data["sources"]):
+ log_stream("Parsing source ud/tx {:}/{:}".format(i, nb_sources))
+ progress(1/nb_sources)
+ conditions = pypeg2.parse(s["conditions"], Condition)
+ if conditions.left.pubkey == pubkey:
+ try:
+ if conditions.left.pubkey == pubkey:
+ source = Source(currency=self.currency,
+ pubkey=pubkey,
+ identifier=s["identifier"],
+ type=s["type"],
+ noffset=s["noffset"],
+ amount=s["amount"],
+ base=s["base"])
+ self._sources_processor.insert(source)
+ except AttributeError as e:
+ self._logger.error(str(e))
+
async def check_destruction(self, pubkey, block_number, unit_base):
amount = self._sources_processor.amount(self.currency, pubkey)
if amount < 100 * 10 ** unit_base:
--
GitLab