Skip to content
Snippets Groups Projects
Commit 2ede0179 authored by Caner Candan's avatar Caner Candan
Browse files

* wrappers/__init__.py: created monotransaction abstract class + fusion class,...

* wrappers/__init__.py: created monotransaction abstract class + fusion class, fixed an issue on coinsget class
parent b2d66dcb
No related branches found
No related tags found
No related merge requests found
...@@ -31,6 +31,7 @@ class Transaction(Wrapper): ...@@ -31,6 +31,7 @@ class Transaction(Wrapper):
self.pgp_fingerprint = pgp_fingerprint self.pgp_fingerprint = pgp_fingerprint
self.message = message self.message = message
self.type = type self.type = type
self.error = None
def __call__(self): def __call__(self):
try: try:
...@@ -66,6 +67,8 @@ Comment: ...@@ -66,6 +67,8 @@ Comment:
tx = tx.replace("\n", "\r\n") tx = tx.replace("\n", "\r\n")
txs = settings['gpg'].sign(tx, detach=True) txs = settings['gpg'].sign(tx, detach=True)
if self.error: return False
return self.process(tx, txs) return self.process(tx, txs)
def get_context_data(self): def get_context_data(self):
...@@ -74,11 +77,14 @@ Comment: ...@@ -74,11 +77,14 @@ Comment:
def get_message(self, context_data, tx=''): def get_message(self, context_data, tx=''):
return tx return tx
def get_error(self):
return self.error
def process(self, tx, txs): def process(self, tx, txs):
try: try:
hdc.transactions.Process().post(transaction=tx, signature=txs) hdc.transactions.Process().post(transaction=tx, signature=txs)
except ValueError as e: except ValueError as e:
print(e) self.error = str(e)
else: else:
return True return True
...@@ -108,12 +114,7 @@ Coins: ...@@ -108,12 +114,7 @@ Coins:
return tx return tx
class Issue(Transaction): class MonoTransaction(Transaction):
def __init__(self, pgp_fingerprint, amendment, coins, message=''):
super().__init__('ISSUANCE', pgp_fingerprint, message)
self.amendment = amendment
self.coins = coins
def get_next_coin_number(self, coins): def get_next_coin_number(self, coins):
number = 0 number = 0
for c in coins: for c in coins:
...@@ -122,8 +123,6 @@ class Issue(Transaction): ...@@ -122,8 +123,6 @@ class Issue(Transaction):
return number+1 return number+1
def get_message(self, context_data, tx=''): def get_message(self, context_data, tx=''):
context_data['amendment'] = self.amendment
tx += """\ tx += """\
Recipient: %(fingerprint)s Recipient: %(fingerprint)s
Type: %(type)s Type: %(type)s
...@@ -135,15 +134,66 @@ Coins: ...@@ -135,15 +134,66 @@ Coins:
except ValueError: except ValueError:
last_issuance = None last_issuance = None
previous_idx = 0 if not last_issuance else self.get_next_coin_number(last_issuance['transaction']['coins']) context_data['previous_idx'] = 0 if not last_issuance else self.get_next_coin_number(last_issuance['transaction']['coins'])
tx += self.get_mono_message(context_data)
return tx
def get_mono_message(self, context_data, tx=''):
return tx
class Issue(MonoTransaction):
def __init__(self, pgp_fingerprint, amendment, coins, message=''):
super().__init__('ISSUANCE', pgp_fingerprint, message)
self.amendment = amendment
self.coins = coins
def get_mono_message(self, context_data, tx=''):
context_data['amendment'] = self.amendment
for idx, coin in enumerate(self.coins): for idx, coin in enumerate(self.coins):
context_data['idx'] = idx+previous_idx context_data['idx'] = idx + context_data['previous_idx']
context_data['base'], context_data['power'] = [int(x) for x in coin.split(',')] context_data['base'], context_data['power'] = [int(x) for x in coin.split(',')]
tx += '%(fingerprint)s-%(idx)d-%(base)d-%(power)d-A-%(amendment)d\n' % context_data tx += '%(fingerprint)s-%(idx)d-%(base)d-%(power)d-A-%(amendment)d\n' % context_data
return tx return tx
class Fusion(MonoTransaction):
def __init__(self, pgp_fingerprint, coins, message=''):
super().__init__('FUSION', pgp_fingerprint, message)
self.coins = coins
def get_mono_message(self, context_data, tx=''):
context_data['coins'] = self.coins
coins = []
for coin in context_data['coins'].split(','):
data = coin.split(':')
issuer, numbers = data[0], data[1:]
for number in numbers:
coins.append(ucoin.hdc.coins.View(issuer, int(number)).get())
__sum = 0
for coin in coins:
base, power = coin['id'].split('-')[2:4]
__sum += int(base) * 10**int(power)
m = re.match(r'^(\d)(0*)$', str(__sum))
if not m:
self.error = 'bad sum value %d' % __sum
return tx
context_data['base'], context_data['power'] = int(m.groups()[0]), len(m.groups()[1])
tx += '%(fingerprint)s-%(previous_idx)d-%(base)d-%(power)d-F-%(number)d\n' % context_data
for coin in coins:
context_data.update(coin)
tx += '%(id)s, %(transaction)s\n' % context_data
return tx
class CoinsWrapper(Wrapper): class CoinsWrapper(Wrapper):
def __init__(self, pgp_fingerprint): def __init__(self, pgp_fingerprint):
self.pgp_fingerprint = pgp_fingerprint self.pgp_fingerprint = pgp_fingerprint
...@@ -160,12 +210,13 @@ class CoinsGet(CoinsWrapper): ...@@ -160,12 +210,13 @@ class CoinsGet(CoinsWrapper):
for id in c['ids']: for id in c['ids']:
n,b,p,t,i = id.split('-') n,b,p,t,i = id.split('-')
amount = int(b) * 10**int(p) amount = int(b) * 10**int(p)
coins[amount] = {'issuer': c['issuer'], 'number': int(n), 'base': int(b), 'power': int(p), 'type': t, 'type_number': int(i), 'amount': amount} if amount not in coins: coins[amount] = []
coins[amount].append({'issuer': c['issuer'], 'number': int(n), 'base': int(b), 'power': int(p), 'type': t, 'type_number': int(i), 'amount': amount})
issuers = {} issuers = {}
for v in self.values: for v in self.values:
if v in coins: if v in coins and coins[v]:
c = coins[v] c = coins[v].pop()
issuers[c['issuer']] = issuers.get(c['issuer']) or [] issuers[c['issuer']] = issuers.get(c['issuer']) or []
issuers[c['issuer']].append(c) issuers[c['issuer']].append(c)
else: else:
...@@ -181,15 +232,23 @@ class CoinsGet(CoinsWrapper): ...@@ -181,15 +232,23 @@ class CoinsGet(CoinsWrapper):
return res return res
class CoinsList(CoinsWrapper): class CoinsList(CoinsWrapper):
def __init__(self, pgp_fingerprint, limit=None):
super().__init__(pgp_fingerprint)
self.limit = limit
def __call__(self): def __call__(self):
__list = hdc.coins.List(self.pgp_fingerprint).get() __list = hdc.coins.List(self.pgp_fingerprint).get()
coins = [] coins = []
__sum = 0 __sum = 0
for c in __list['coins']: for c in __list['coins']:
for id in c['ids']: for id in c['ids']:
n,b,p,t,i = id.split('-') n,b,p,t,i = id.split('-')
amount = int(b) * 10**int(p) amount = int(b) * 10**int(p)
__dict = {'issuer': c['issuer'], 'number': int(n), 'base': int(b), 'power': int(p), 'type': t, 'type_number': int(i), 'amount': amount} __dict = {'issuer': c['issuer'], 'number': int(n), 'base': int(b), 'power': int(p), 'type': t, 'type_number': int(i), 'amount': amount}
coins.append(__dict)
__sum += amount if not self.limit or self.limit >= amount:
coins.append(__dict)
__sum += amount
return __sum, coins return __sum, coins
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment