From b00cd0efcea57da02429e93a865bb7520d328556 Mon Sep 17 00:00:00 2001 From: Inso <insomniak.fr@gmail.com> Date: Fri, 16 May 2014 11:20:51 +0200 Subject: [PATCH] Adapting to new ucoin API --- lib/ucoin/__init__.py | 1 + lib/ucoin/registry/__init__.py | 3 + src/cutecoin/core/config.py | 2 +- src/cutecoin/models/account/__init__.py | 60 ++++-------------- .../models/account/communities/__init__.py | 2 +- src/cutecoin/models/community/__init__.py | 20 +++--- src/cutecoin/models/community/network.py | 17 ++--- src/cutecoin/models/node/__init__.py | 8 +-- src/cutecoin/models/person/__init__.py | 2 +- src/cutecoin/models/transaction/__init__.py | 63 +++++++------------ src/cutecoin/models/transaction/factory.py | 33 ---------- .../models/transaction/receivedListModel.py | 2 +- .../models/transaction/sentListModel.py | 2 +- src/cutecoin/models/wallet/__init__.py | 2 +- 14 files changed, 70 insertions(+), 147 deletions(-) delete mode 100644 src/cutecoin/models/transaction/factory.py diff --git a/lib/ucoin/__init__.py b/lib/ucoin/__init__.py index 0e26924d..c4f2b0fd 100644 --- a/lib/ucoin/__init__.py +++ b/lib/ucoin/__init__.py @@ -209,3 +209,4 @@ from . import pks from . import hdc from . import wrappers from . import network +from . import registry diff --git a/lib/ucoin/registry/__init__.py b/lib/ucoin/registry/__init__.py index c3793a48..1445f929 100644 --- a/lib/ucoin/registry/__init__.py +++ b/lib/ucoin/registry/__init__.py @@ -36,3 +36,6 @@ class Amendment(Registry): def __get__(self, **kwargs): return self.requests_get('/amendment', **kwargs).json() + +from . import amendment +from . import community \ No newline at end of file diff --git a/src/cutecoin/core/config.py b/src/cutecoin/core/config.py index 4055be75..e2b90517 100644 --- a/src/cutecoin/core/config.py +++ b/src/cutecoin/core/config.py @@ -8,7 +8,7 @@ import logging from optparse import OptionParser import os.path import gnupg -import ucoinpy as ucoin +import ucoin home = os.path.expanduser("~") diff --git a/src/cutecoin/models/account/__init__.py b/src/cutecoin/models/account/__init__.py index 9228e18e..ad99bf5b 100644 --- a/src/cutecoin/models/account/__init__.py +++ b/src/cutecoin/models/account/__init__.py @@ -4,14 +4,14 @@ Created on 1 févr. 2014 @author: inso ''' -import ucoinpy as ucoin +import ucoin import gnupg import logging import json from cutecoin.models.account.wallets import Wallets from cutecoin.models.account.communities import Communities from cutecoin.models.community import Community -from cutecoin.models.transaction import factory +from cutecoin.models.transaction import Transaction from cutecoin.models.person import Person from cutecoin.core.exceptions import CommunityNotFoundError @@ -94,7 +94,7 @@ class Account(object): self.fingerprint())) for trx_data in transactions_data: received.append( - factory.create_transaction( + Transaction.create( trx_data['value']['transaction']['sender'], trx_data['value']['transaction']['number'], community)) @@ -111,50 +111,12 @@ class Account(object): # Small bug in ucoinpy library if not isinstance(trx_data, str): sent.append( - factory.create_transaction( + Transaction.create( trx_data['value']['transaction']['sender'], trx_data['value']['transaction']['number'], community)) return sent - def last_issuances(self, community): - issuances = [] - if community in self.communities.communities_list: - issuances_data = community.network.request( - ucoin.hdc.transactions.sender.Issuance( - self.fingerprint())) - for issuance in issuances_data: - logging.debug(issuance) - issuances.append( - factory.create_transaction( - issuance['value']['transaction']['sender'], - issuance['value']['transaction']['number'], - community)) - return issuances - - def issued_last_dividend(self, community): - current_amendment_number = community.amendment_number() - if community in self.communities.communities_list: - dividends_data = community.network.request( - ucoin.hdc.transactions.sender.issuance.Dividend( - self.fingerprint(), - current_amendment_number)) - for dividend in dividends_data: - # Small bug in ucoinpy library - if not isinstance(dividend, str): - return True - return False - - def issue_dividend(self, community, coins): - if community in self.communities.communities_list: - logging.debug(coins) - issuance = ucoin.wrappers.transactions.Issue( - self.fingerprint(), - community.amendment_number(), - coins, - keyid=self.keyid) - return issuance() - def transfer_coins(self, node, recipient, coins, message): transfer = ucoin.wrappers.transactions.RawTransfer( self.fingerprint(), @@ -166,10 +128,12 @@ class Account(object): port=node.port) return transfer() + #TODO: Adapt to new WHT def tht(self, community): if community in self.communities.communities_list: - tht = community.ucoinRequest(ucoin.ucg.tht(self.fingerprint())) - return tht['entries'] + #tht = community.ucoinRequest(ucoin.wallets.tht(self.fingerprint())) + #return tht['entries'] + return None return None def push_tht(self, community): @@ -201,10 +165,10 @@ class Account(object): 'signature': str(signature) } - community.network.post( - ucoin.ucg.THT( - pgp_fingerprint=self.fingerprint()), - dataPost) + #community.network.post( + # ucoin.ucg.THT( + # pgp_fingerprint=self.fingerprint()), + # dataPost) else: raise CommunityNotFoundError(self.keyid, community.amendment_id()) diff --git a/src/cutecoin/models/account/communities/__init__.py b/src/cutecoin/models/account/communities/__init__.py index 62f205e9..201265d8 100644 --- a/src/cutecoin/models/account/communities/__init__.py +++ b/src/cutecoin/models/account/communities/__init__.py @@ -5,7 +5,7 @@ Created on 5 févr. 2014 ''' from cutecoin.models.community import Community from cutecoin.core.exceptions import NotMemberOfCommunityError -import ucoinpy as ucoin +import ucoin import logging diff --git a/src/cutecoin/models/community/__init__.py b/src/cutecoin/models/community/__init__.py index ed9a30c3..83a2d88b 100644 --- a/src/cutecoin/models/community/__init__.py +++ b/src/cutecoin/models/community/__init__.py @@ -4,7 +4,7 @@ Created on 1 févr. 2014 @author: inso ''' -import ucoinpy as ucoin +import ucoin import hashlib import json import logging @@ -26,7 +26,7 @@ class Community(object): An account is a member of a community if he is a member of the current amendment. ''' self.network = network - current_amendment = self.network.request(ucoin.hdc.amendments.Current()) + current_amendment = self.network.request(ucoin.hdc.amendments.Promoted()) self.currency = current_amendment['currency'] @classmethod @@ -58,29 +58,29 @@ class Community(object): return self.currency def __eq__(self, other): - current_amendment = self.network.request(ucoin.hdc.amendments.Current()) + current_amendment = self.network.request(ucoin.hdc.amendments.Promoted()) current_amendment_hash = hashlib.sha1( current_amendment['raw'].encode('utf-8')).hexdigest().upper() - other_amendment = other.network.request(ucoin.hdc.amendments.Current()) + other_amendment = other.network.request(ucoin.hdc.amendments.Promoted()) other_amendment_hash = hashlib.sha1( other_amendment['raw'].encode('utf-8')).hexdigest().upper() return (other_amendment_hash == current_amendment_hash) def dividend(self): - current_amendment = self.network.request(ucoin.hdc.amendments.Current()) + current_amendment = self.network.request(ucoin.hdc.amendments.Promoted()) return int(current_amendment['dividend']) def coin_minimal_power(self): - current_amendment = self.network.request(ucoin.hdc.amendments.Current()) + current_amendment = self.network.request(ucoin.hdc.amendments.Promoted()) if 'coinMinimalPower' in current_amendment.keys(): return int(current_amendment['coinMinimalPower']) else: return 0 def amendment_id(self): - current_amendment = self.network.request(ucoin.hdc.amendments.Current()) + current_amendment = self.network.request(ucoin.hdc.amendments.Promoted()) current_amendment_hash = hashlib.sha1( current_amendment['raw'].encode('utf-8')).hexdigest().upper() amendment_id = str( @@ -89,7 +89,7 @@ class Community(object): return amendment_id def amendment_number(self): - current_amendment = self.network.request(ucoin.hdc.amendments.Current()) + current_amendment = self.network.request(ucoin.hdc.amendments.Promoted()) return int(current_amendment['number']) def person_quality(self, fingerprint): @@ -105,7 +105,7 @@ class Community(object): Listing members of a community ''' fingerprints = self.network.request( - ucoin.hdc.amendments.view.Members( + ucoin.registry.community.Members( amendment_id=self.amendment_id())) members = [] for f in fingerprints: @@ -117,7 +117,7 @@ class Community(object): Listing members of a community ''' fingerprints = self.network.request( - ucoin.hdc.amendments.view.Voters( + ucoin.registry.community.Voters( amendment_id=self.amendment_id())) voters = [] for f in fingerprints: diff --git a/src/cutecoin/models/community/network.py b/src/cutecoin/models/community/network.py index e8425b96..a2e87e22 100644 --- a/src/cutecoin/models/community/network.py +++ b/src/cutecoin/models/community/network.py @@ -4,7 +4,7 @@ Created on 27 mars 2014 @author: inso ''' from cutecoin.models.node import Node -import ucoinpy as ucoin +import ucoin import logging class CommunityNetwork(object): @@ -60,6 +60,14 @@ class CommunityNetwork(object): self.trusts()[0])) return nodes + def trusts(self): + return [node for node in self.nodes if node.trust] + + def hosters(self): + return [node for node in self.nodes if node.hoster] + +#TODO: Manager in Wallets +""" def pull_tht(self, fingerprint): tht = self.network.request(ucoin.ucg.THT(fingerprint)) nodes = [] @@ -87,9 +95,4 @@ class CommunityNetwork(object): self._search_node_by_fingerprint( node_fg, self.trusts()[0])) - - def trusts(self): - return [node for node in self.nodes if node.trust] - - def hosters(self): - return [node for node in self.nodes if node.hoster] +""" diff --git a/src/cutecoin/models/node/__init__.py b/src/cutecoin/models/node/__init__.py index fdac61d8..2de0ebf3 100644 --- a/src/cutecoin/models/node/__init__.py +++ b/src/cutecoin/models/node/__init__.py @@ -4,7 +4,7 @@ Created on 1 févr. 2014 @author: inso ''' -import ucoinpy as ucoin +import ucoin class Node(object): @@ -38,19 +38,19 @@ class Node(object): ucoin.settings['port'] = self.port peers = [] - for peer in ucoin.ucg.peering.peers.DownStream().get()['peers']: + for peer in ucoin.network.peering.peers.DownStream().get()['peers']: node = Node(peer['ipv4'], peer['port']) peers.append(node) return peers def peering(self): - request = ucoin.ucg.peering.Peer() + request = ucoin.network.Peering() self.use(request) return request.get() def peers(self): - request = ucoin.ucg.peering.Peers() + request = ucoin.network.peering.Peers() self.use(request) return request.get() diff --git a/src/cutecoin/models/person/__init__.py b/src/cutecoin/models/person/__init__.py index 5d6ad21e..cd6ff8b6 100644 --- a/src/cutecoin/models/person/__init__.py +++ b/src/cutecoin/models/person/__init__.py @@ -4,7 +4,7 @@ Created on 11 févr. 2014 @author: inso ''' -import ucoinpy as ucoin +import ucoin from cutecoin.core.exceptions import PersonNotFoundError diff --git a/src/cutecoin/models/transaction/__init__.py b/src/cutecoin/models/transaction/__init__.py index 43f173d0..60b369f8 100644 --- a/src/cutecoin/models/transaction/__init__.py +++ b/src/cutecoin/models/transaction/__init__.py @@ -4,8 +4,9 @@ Created on 1 févr. 2014 @author: inso ''' -import ucoinpy as ucoin +import ucoin from cutecoin.models.coin import Coin +from cutecoin.models.person import Person class Transaction(object): @@ -15,56 +16,40 @@ class Transaction(object): At the moment the difference is not made ''' - def __init__(self): - self.increment = 0 - self.community = "" - self.sender = None - self.recipient = None + def __init__(self, sender, tx_number, community, recipient): + self.tx_number = tx_number + self.community = community + self.sender = sender + self.recipient = recipient + + @classmethod + def create(cls, pgp_fingerprint, tx_number, community): + transaction_view = community.network.request( + ucoin.hdc.transactions.sender.View(pgp_fingerprint, tx_number)) + transaction_data = transaction_view['transaction'] + + sender = Person.lookup(pgp_fingerprint, community) + recipient = Person.lookup( + transaction_data['recipient'], + community) + + return cls(Transaction(sender, tx_number, community, recipient)) def value(self): value = 0 trx_data = self.community.network.request( - ucoin.hdc.transactions.View(self.sender.fingerprint + "-" + str(self.increment))) + ucoin.hdc.transactions.sender.View(self.sender.fingerprint, + self.tx_number)) for coin in trx_data['transaction']['coins']: value += Coin.from_id(coin['id']).value() return value def currency(self): trx_data = self.community.network.request( - ucoin.hdc.transactions.View(self.sender.fingerprint + "-" + str(self.increment))) + ucoin.hdc.transactions.sender.View(self.sender.fingerprint, + self.tx_number)) currency = trx_data['transaction']['currency'] return currency def transaction_id(self): return self.sender_fingerprint + "-" + self.increment - - -class Transfer(Transaction): - - ''' - A received transaction - ''' - - def __init__(self): - super(Transfer).__init__() - - def get_text(self): - return str(self.value()) + " " + self.currency() + \ - " from " + self.sender.name - - -class Issuance(Transaction): - - ''' - An issuance - ''' - - def __init__(self): - super(Issuance).__init__() - - def amendment_number(self): - self.community.network.request( - ucoin.hdc.transactions.View(self.sender.fingerprint + "-" + str(self.increment))) - - def get_text(self): - return str(self.value()) + " " + self.currency() diff --git a/src/cutecoin/models/transaction/factory.py b/src/cutecoin/models/transaction/factory.py deleted file mode 100644 index f5f40ece..00000000 --- a/src/cutecoin/models/transaction/factory.py +++ /dev/null @@ -1,33 +0,0 @@ -''' -Created on 12 févr. 2014 - -@author: inso -''' -import ucoinpy as ucoin - -from cutecoin.models.person import Person -from cutecoin.models.transaction import Transfer, Issuance - -# TODO: Passer par des factory + pythonic - - -def create_transaction(sender_fingerprint, increment, community): - transaction_id = sender_fingerprint + "-" + str(increment) - transaction_view = community.network.request( - ucoin.hdc.transactions.View(transaction_id)) - transaction_data = transaction_view['transaction'] - transaction = None - if transaction_data['type'] == 'TRANSFER': - transaction = Transfer() - elif transaction_data['type'] == 'ISSUANCE': - transaction = Issuance() - - if transaction is not None: - transaction.increment = increment - transaction.community = community - transaction.sender = Person.lookup(sender_fingerprint, community) - transaction.recipient = Person.lookup( - transaction_data['recipient'], - community) - - return transaction diff --git a/src/cutecoin/models/transaction/receivedListModel.py b/src/cutecoin/models/transaction/receivedListModel.py index c46930d2..a40d3acd 100644 --- a/src/cutecoin/models/transaction/receivedListModel.py +++ b/src/cutecoin/models/transaction/receivedListModel.py @@ -4,7 +4,7 @@ Created on 5 févr. 2014 @author: inso ''' -import ucoinpy as ucoin +import ucoin import logging from PyQt5.QtCore import QAbstractListModel, Qt diff --git a/src/cutecoin/models/transaction/sentListModel.py b/src/cutecoin/models/transaction/sentListModel.py index 27a1c00d..dc767c2a 100644 --- a/src/cutecoin/models/transaction/sentListModel.py +++ b/src/cutecoin/models/transaction/sentListModel.py @@ -4,7 +4,7 @@ Created on 5 févr. 2014 @author: inso ''' -import ucoinpy as ucoin +import ucoin import logging from PyQt5.QtCore import QAbstractListModel, Qt diff --git a/src/cutecoin/models/wallet/__init__.py b/src/cutecoin/models/wallet/__init__.py index 20da778f..8eeca0ea 100644 --- a/src/cutecoin/models/wallet/__init__.py +++ b/src/cutecoin/models/wallet/__init__.py @@ -4,7 +4,7 @@ Created on 1 févr. 2014 @author: inso ''' -import ucoinpy as ucoin +import ucoin import gnupg from cutecoin.models.coin import Coin -- GitLab