Skip to content
Snippets Groups Projects
Commit 906996d3 authored by Holger Nahrstaedt's avatar Holger Nahrstaedt
Browse files

Sell and Buy in cli improved

CLI
* market adapted on asset for buy and sell
market
* quote and base asset can be set
unit test
* more unit tests for buy and sell
parent cd4aaf22
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,7 @@ from beem.comment import Comment
from beem.market import Market
from beem.block import Block
from beem.profile import Profile
from beem.asset import Asset
from beem.witness import Witness, WitnessesRankedByVote, WitnessesVotedByAccount
from beem.blockchain import Blockchain
from beem.utils import formatTimeString
......@@ -981,16 +982,21 @@ def buy(amount, asset, price, account, orderid):
Limit buy price denoted in (SBD per STEEM)
"""
stm = shared_steem_instance()
market = Market(steem_instance=stm)
if not account:
account = stm.config["default_account"]
if asset == "SBD":
market = Market(base=Asset("STEEM"), quote=Asset("SBD"), steem_instance=stm)
else:
market = Market(base=Asset("SBD"), quote=Asset("STEEM"), steem_instance=stm)
if not price:
orderbook = market.orderbook(limit=1, raw_data=False)
if asset == "STEEM" and len(orderbook["bids"]) > 0:
p = Price(orderbook["bids"][0]["base"], orderbook["bids"][0]["quote"], steem_instance=stm).invert()
p_show = p
else:
p = Price(orderbook["asks"][0]["base"], orderbook["asks"][0]["quote"], steem_instance=stm).invert()
price_ok = click.prompt("Is the following Price ok: %s [y/n]" % (str(p)))
p_show = p
price_ok = click.prompt("Is the following Price ok: %s [y/n]" % (str(p_show)))
if price_ok not in ["y", "ye", "yes"]:
return
else:
......@@ -1017,16 +1023,21 @@ def sell(amount, asset, price, account, orderid):
Limit sell price denoted in (SBD per STEEM)
"""
stm = shared_steem_instance()
market = Market(steem_instance=stm)
if asset == "SBD":
market = Market(base=Asset("STEEM"), quote=Asset("SBD"), steem_instance=stm)
else:
market = Market(base=Asset("SBD"), quote=Asset("STEEM"), steem_instance=stm)
if not account:
account = stm.config["default_account"]
if not price:
orderbook = market.orderbook(limit=1, raw_data=False)
if asset == "SBD" and len(orderbook["bids"]) > 0:
p = Price(orderbook["bids"][0]["base"], orderbook["bids"][0]["quote"], steem_instance=stm).invert()
p_show = p
else:
p = Price(orderbook["asks"][0]["base"], orderbook["asks"][0]["quote"], steem_instance=stm).invert()
price_ok = click.prompt("Is the following Price ok: %s [y/n]" % (str(p)))
p_show = p
price_ok = click.prompt("Is the following Price ok: %s [y/n]" % (str(p_show)))
if price_ok not in ["y", "ye", "yes"]:
return
else:
......
......@@ -19,9 +19,9 @@ import random
class Market(dict):
""" This class allows to easily access Markets on the blockchain for trading, etc.
:param steem.steem.Steem steem_instance: Steem instance
:param steem.asset.Asset base: Base asset
:param steem.asset.Asset quote: Quote asset
:param beem.steem.Steem steem_instance: Steem instance
:param beem.asset.Asset base: Base asset
:param beem.asset.Asset quote: Quote asset
:returns: Blockchain Market
:rtype: dictionary with overloaded methods
......@@ -50,14 +50,20 @@ class Market(dict):
def __init__(
self,
steem_instance=None,
*args,
**kwargs
):
"""
Init Market
:param beem.steem.Steem steem_instance: Steem instance
:param beem.asset.Asset base: Base asset
:param beem.asset.Asset quote: Quote asset
"""
self.steem = steem_instance or shared_steem_instance()
base = kwargs.get("base", Asset("SBD", steem_instance=self.steem))
quote = kwargs.get("quote", Asset("STEEM", steem_instance=self.steem))
quote = Asset("STEEM", steem_instance=self.steem)
base = Asset("SBD", steem_instance=self.steem)
super(Market, self).__init__({"base": base, "quote": quote})
def get_string(self, separator=":"):
......
......@@ -265,13 +265,21 @@ class Testcases(unittest.TestCase):
self.assertEqual(result.exit_code, 0)
result = runner.invoke(cli, ['-d', 'buy', '1', 'STEEM'], input="y\ntest\n")
self.assertEqual(result.exit_code, 0)
result = runner.invoke(cli, ['-d', 'buy', '1', 'SBD', '2.2'], input="test\n")
self.assertEqual(result.exit_code, 0)
result = runner.invoke(cli, ['-d', 'buy', '1', 'SBD'], input="y\ntest\n")
self.assertEqual(result.exit_code, 0)
def test_sell(self):
runner = CliRunner()
result = runner.invoke(cli, ['-d', 'sell', '1', 'STEEM', '2.2'], input="test\n")
self.assertEqual(result.exit_code, 0)
result = runner.invoke(cli, ['-d', 'sell', '1', 'SBD', '2.2'], input="test\n")
self.assertEqual(result.exit_code, 0)
result = runner.invoke(cli, ['-d', 'sell', '1', 'STEEM'], input="y\ntest\n")
self.assertEqual(result.exit_code, 0)
result = runner.invoke(cli, ['-d', 'sell', '1', 'SBD'], input="y\ntest\n")
self.assertEqual(result.exit_code, 0)
def test_cancel(self):
runner = CliRunner()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment