Skip to content
Snippets Groups Projects
Commit 824b4ecb authored by inso's avatar inso
Browse files

Loading of files with versioning

parent 3c17ee16
Branches
Tags
No related merge requests found
__version_info__ = ('0', '11', '5')
__version_info__ = ('0', '12', '0')
__version__ = '.'.join(__version_info__)
......@@ -20,6 +20,7 @@ from .wallet import Wallet
from .community import Community
from .registry import LocalState
from ..tools.exceptions import ContactAlreadyExists
from .. import __version__
from ucoinpy.api import bma
from ucoinpy.api.bma import PROTOCOL_VERSION
from aiohttp.errors import ClientError
......@@ -103,10 +104,10 @@ class Account(QObject):
"""
salt = json_data['salt']
pubkey = json_data['pubkey']
if 'version' in json_data:
version = StrictVersion(json_data['version'])
if 'file_version' in json_data:
file_version = StrictVersion(json_data['file_version'])
else:
version = StrictVersion('0.11.5')
file_version = StrictVersion('0.11.5')
name = json_data['name']
contacts = []
......@@ -120,7 +121,7 @@ class Account(QObject):
communities = []
for data in json_data['communities']:
community = Community.load(data, version)
community = Community.load(data, file_version)
communities.append(community)
account = cls(salt, pubkey, name, communities, wallets,
......@@ -582,5 +583,6 @@ class Account(QObject):
'pubkey': self.pubkey,
'communities': data_communities,
'wallets': data_wallets,
'contacts': self.contacts}
'contacts': self.contacts,
'file_version': __version__}
return data
......@@ -57,15 +57,15 @@ class Community(QObject):
return community
@classmethod
def load(cls, json_data, version):
def load(cls, json_data, file_version):
"""
Load a community from json
:param dict json_data: The community as a dict in json format
:param distutils.version.StrictVersion version: the file sakia version
:param distutils.version.StrictVersion file_version: the file sakia version
"""
currency = json_data['currency']
network = Network.from_json(currency, json_data['peers'], version)
network = Network.from_json(currency, json_data['peers'], file_version)
bma_access = BmaAccess.create(network)
community = cls(currency, network, bma_access)
return community
......
......@@ -88,17 +88,17 @@ class Network(QObject):
other_node.state = node.state
@classmethod
def from_json(cls, currency, json_data, version):
def from_json(cls, currency, json_data, file_version):
"""
Load a network from a configured community
:param str currency: The currency name of a community
:param dict json_data: A json_data view of a network
:param distutils.version.StrictVersion version: the version of the json file
:param distutils.version.StrictVersion file_version: the version of the json file
"""
nodes = []
for data in json_data:
node = Node.from_json(currency, data, version)
node = Node.from_json(currency, data, file_version)
nodes.append(node)
network = cls(currency, nodes)
return network
......@@ -345,6 +345,8 @@ class Network(QObject):
logging.debug(str(e))
else:
node = [n for n in self.nodes if n.pubkey == pubkey][0]
if BlockId.from_str(node.peer.blockid).number < BlockId.from_str(peer.blockid).number:
node.peer = peer
@pyqtSlot()
def handle_identity_change(self):
......
......@@ -5,7 +5,7 @@ Created on 21 févr. 2015
"""
from ucoinpy.documents.peer import Peer, Endpoint, BMAEndpoint
from ucoinpy.documents import Block
from ucoinpy.documents import Block, BlockId
from ...tools.exceptions import InvalidNodeCurrency
from ...tools.decorators import asyncify
from ucoinpy.api import bma as bma
......@@ -163,7 +163,7 @@ class Node(QObject):
if currency in data:
currency = data['currency']
peer = Peer("1", currency, pubkey, "0-{0}".format(Block.Empty_Hash), endpoints, "SOMEFAKESIGNATURE")
peer = Peer("1", currency, pubkey, BlockId(0, Block.Empty_Hash), endpoints, "SOMEFAKESIGNATURE")
else:
if 'peer' in data:
peer = Peer.from_signed_raw(data['peer'])
......@@ -180,7 +180,6 @@ class Node(QObject):
logging.debug("Saving root node : {:}".format(str(self)))
data = {'pubkey': self._pubkey,
'uid': self._uid,
'currency': self._currency,
'peer': self._peer.signed_raw()}
return data
......@@ -241,6 +240,12 @@ class Node(QObject):
def peer(self):
return self._peer
@peer.setter
def peer(self, new_peer):
if self._peer != new_peer:
self._peer = new_peer
self.changed.emit()
@software.setter
def software(self, new_soft):
if self._software != new_soft:
......
import unittest
from asynctest import CoroutineMock, patch
from ucoinpy.documents import Peer, BlockId
from PyQt5.QtCore import QLocale
from sakia.core.net import Node
from sakia.tests import QuamashTest
from sakia.tests.mocks.bma import nice_blockchain
from distutils.version import StrictVersion
class TestNode(unittest.TestCase, QuamashTest):
def setUp(self):
self.setUpQuamash()
QLocale.setDefault(QLocale("en_GB"))
def tearDown(self):
self.tearDownQuamash()
def test_from_peer(self):
peer = Peer.from_signed_raw("""Version: 1
Type: Peer
Currency: meta_brouzouf
PublicKey: 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU
Block: 48698-000005E0F228038E4DDD4F6CA4ACB01EC88FBAF8
Endpoints:
BASIC_MERKLED_API ucoin.inso.ovh 80
82o1sNCh1bLpUXU6nacbK48HBcA9Eu2sPkL1/3c2GtDPxBUZd2U2sb7DxwJ54n6ce9G0Oy7nd1hCxN3fS0oADw==
""")
node = Node.from_peer('meta_brouzouf', peer, "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU")
self.assertEqual(node.pubkey, "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU")
self.assertEqual(node.endpoint.inline(), "BASIC_MERKLED_API ucoin.inso.ovh 80")
self.assertEqual(node.currency, "meta_brouzouf")
@patch('ucoinpy.api.bma.network.Peering')
def test_from_address(self, peering):
peering.return_value.get = CoroutineMock(return_value={
"version": 1,
"currency": "meta_brouzouf",
"endpoints": [
"BASIC_MERKLED_API ucoin.inso.ovh 80"
],
"block": "48698-000005E0F228038E4DDD4F6CA4ACB01EC88FBAF8",
"signature": "82o1sNCh1bLpUXU6nacbK48HBcA9Eu2sPkL1/3c2GtDPxBUZd2U2sb7DxwJ54n6ce9G0Oy7nd1hCxN3fS0oADw==",
"raw": "Version: 1\nType: Peer\nCurrency: meta_brouzouf\nPublicKey: 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU\nBlock: 48698-000005E0F228038E4DDD4F6CA4ACB01EC88FBAF8\nEndpoints:\nBASIC_MERKLED_API ucoin.inso.ovh 80\n",
"pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU"
})
async def exec_test():
node = await Node.from_address("meta_brouzouf", "127.0.0.1", 9000)
self.assertEqual(node.pubkey, "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU")
self.assertEqual(node.endpoint.inline(), "BASIC_MERKLED_API ucoin.inso.ovh 80")
self.assertEqual(node.currency, "meta_brouzouf")
self.lp.run_until_complete(exec_test())
def test_from_json_011(self):
json_data = {"version": "0.12.0", "state": 1, "fork_window": 0, "uid": "cgeek",
"block": nice_blockchain.bma_blockchain_current,
"endpoints": ["BASIC_MERKLED_API metab.ucoin.io 88.174.120.187 9201"],
"pubkey": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk",
"last_change": 1448199706.6561477, "currency": "meta_brouzouf", "sofware": "ucoin"}
node = Node.from_json("meta_brouzouf", json_data, StrictVersion('0.11.5'))
self.assertEqual(node.version, "0.12.0")
self.assertEqual(node.state, 1)
self.assertEqual(node.fork_window, 0)
self.assertEqual(node.uid, "cgeek")
self.assertEqual(node.block, nice_blockchain.bma_blockchain_current)
self.assertEqual(node.endpoint.inline(), "BASIC_MERKLED_API metab.ucoin.io 88.174.120.187 9201")
self.assertEqual(node.pubkey, "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk")
self.assertEqual(node.last_change, 1448199706.6561477)
self.assertEqual(node.currency, "meta_brouzouf")
self.assertEqual(node.peer.pubkey, "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk")
self.assertEqual(node.peer.blockid.number, 0)
def test_from_json_to_json(self):
json_data = {"version": "0.12.0", "state": 1, "fork_window": 0, "uid": "inso",
"block": nice_blockchain.bma_blockchain_current,
"peer": """Version: 1
Type: Peer
Currency: meta_brouzouf
PublicKey: 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU
Block: 48698-000005E0F228038E4DDD4F6CA4ACB01EC88FBAF8
Endpoints:
BASIC_MERKLED_API ucoin.inso.ovh 80
82o1sNCh1bLpUXU6nacbK48HBcA9Eu2sPkL1/3c2GtDPxBUZd2U2sb7DxwJ54n6ce9G0Oy7nd1hCxN3fS0oADw==
""",
"pubkey": "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU",
"last_change": 1448199706.6561477, "software": "ucoin"}
node = Node.from_json("meta_brouzouf", json_data, StrictVersion('0.12.0'))
self.assertEqual(node.version, "0.12.0")
self.assertEqual(node.state, 1)
self.assertEqual(node.fork_window, 0)
self.assertEqual(node.uid, "inso")
self.assertEqual(node.block, nice_blockchain.bma_blockchain_current)
self.assertEqual(node.endpoint.inline(), "BASIC_MERKLED_API ucoin.inso.ovh 80")
self.assertEqual(node.pubkey, "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU")
self.assertEqual(node.last_change, 1448199706.6561477)
self.assertEqual(node.currency, "meta_brouzouf")
self.assertEqual(node.peer.pubkey, "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU")
self.assertEqual(BlockId.from_str(node.peer.blockid).number, 48698)
self.assertEqual(BlockId.from_str(node.peer.blockid).sha_hash, "000005E0F228038E4DDD4F6CA4ACB01EC88FBAF8")
result = node.jsonify()
for key in result:
self.assertEqual(result[key], json_data[key], "Error with key {0}".format(key))
def test_jsonify_root_node(self):
peer = Peer.from_signed_raw("""Version: 1
Type: Peer
Currency: meta_brouzouf
PublicKey: 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU
Block: 48698-000005E0F228038E4DDD4F6CA4ACB01EC88FBAF8
Endpoints:
BASIC_MERKLED_API ucoin.inso.ovh 80
82o1sNCh1bLpUXU6nacbK48HBcA9Eu2sPkL1/3c2GtDPxBUZd2U2sb7DxwJ54n6ce9G0Oy7nd1hCxN3fS0oADw==
""")
node = Node(peer, "inso", "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU", nice_blockchain.bma_blockchain_current,
Node.ONLINE, 1111111111, {}, "ucoin", "0.12", 0)
result = node.jsonify_root_node()
self.assertEqual(result['pubkey'], "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU")
self.assertEqual(result['uid'], "inso")
self.assertEqual(result['peer'], peer.signed_raw())
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment