From a4f4a411a9cb8075fce06e3a9ff8636360c1bc93 Mon Sep 17 00:00:00 2001 From: tecnovert Date: Wed, 5 Oct 2022 19:30:52 +0200 Subject: [PATCH] refactor: Move bid page logic --- basicswap/http_server.py | 167 ++-------------------------------- basicswap/ui/page_bids.py | 174 ++++++++++++++++++++++++++++++++++++ basicswap/ui/page_offers.py | 1 - 3 files changed, 182 insertions(+), 160 deletions(-) create mode 100644 basicswap/ui/page_bids.py diff --git a/basicswap/http_server.py b/basicswap/http_server.py index 66ebc84..d9ff918 100644 --- a/basicswap/http_server.py +++ b/basicswap/http_server.py @@ -17,7 +17,6 @@ from . import __version__ from .util import ( dumpj, ensure, - toBool, format_timestamp, ) from .chainparams import ( @@ -25,9 +24,6 @@ from .chainparams import ( chainparams, ) from .basicswap_util import ( - BidStates, - SwapTypes, - DebugTypes, strBidState, strTxState, strAddressType, @@ -37,25 +33,20 @@ from .js_server import ( js_url_to_function, ) from .ui.util import ( - PAGE_LIMIT, - describeBid, getCoinName, - listBidStates, get_data_entry, have_data_entry, - listOldBidStates, - get_data_entry_or, listAvailableCoins, - set_pagination_filters, ) -from .ui.page_tor import page_tor -from .ui.page_offers import page_offers, page_offer, page_newoffer -from .ui.page_wallet import page_wallets, page_wallet from .ui.page_automation import ( page_automation_strategies, page_automation_strategy, page_automation_strategy_new, ) +from .ui.page_bids import page_bids, page_bid +from .ui.page_offers import page_offers, page_offer, page_newoffer +from .ui.page_tor import page_tor +from .ui.page_wallet import page_wallets, page_wallet env = Environment(loader=PackageLoader('basicswap', 'templates')) @@ -344,148 +335,6 @@ class HttpHandler(BaseHTTPRequestHandler): 'chains': chains_formatted, }) - def page_bid(self, url_split, post_string): - ensure(len(url_split) > 2, 'Bid ID not specified') - try: - bid_id = bytes.fromhex(url_split[2]) - assert len(bid_id) == 28 - except Exception: - raise ValueError('Bad bid ID') - swap_client = self.server.swap_client - - messages = [] - err_messages = [] - show_txns = False - show_offerer_seq_diagram = False - show_bidder_seq_diagram = False - show_lock_transfers = False - edit_bid = False - view_tx_ind = None - form_data = self.checkForm(post_string, 'bid', err_messages) - if form_data: - if b'abandon_bid' in form_data: - try: - swap_client.abandonBid(bid_id) - messages.append('Bid abandoned') - except Exception as ex: - err_messages.append('Abandon failed ' + str(ex)) - elif b'accept_bid' in form_data: - try: - swap_client.acceptBid(bid_id) - messages.append('Bid accepted') - except Exception as ex: - err_messages.append('Accept failed ' + str(ex)) - elif b'show_txns' in form_data: - show_txns = True - elif b'show_offerer_seq_diagram' in form_data: - show_offerer_seq_diagram = True - elif b'show_bidder_seq_diagram' in form_data: - show_bidder_seq_diagram = True - elif b'edit_bid' in form_data: - edit_bid = True - elif b'edit_bid_submit' in form_data: - data = { - 'bid_state': int(form_data[b'new_state'][0]), - 'debug_ind': int(get_data_entry_or(form_data, 'debugind', -1)), - 'kbs_other': get_data_entry_or(form_data, 'kbs_other', None), - } - try: - swap_client.manualBidUpdate(bid_id, data) - messages.append('Bid edited') - except Exception as ex: - err_messages.append('Edit failed ' + str(ex)) - elif b'view_tx_submit' in form_data: - show_txns = True - view_tx_ind = form_data[b'view_tx'][0].decode('utf-8') - if len(view_tx_ind) != 64: - err_messages.append('Invalid transaction selected.') - view_tx_ind = None - elif b'view_lock_transfers' in form_data: - show_txns = True - show_lock_transfers = True - - bid, xmr_swap, offer, xmr_offer, events = swap_client.getXmrBidAndOffer(bid_id) - ensure(bid, 'Unknown bid ID') - - data = describeBid(swap_client, bid, xmr_swap, offer, xmr_offer, events, edit_bid, show_txns, view_tx_ind, show_lock_transfers=show_lock_transfers) - - if bid.debug_ind is not None and bid.debug_ind > 0: - messages.append('Debug flag set: {}, {}'.format(bid.debug_ind, DebugTypes(bid.debug_ind).name)) - - data['show_bidder_seq_diagram'] = show_bidder_seq_diagram - data['show_offerer_seq_diagram'] = show_offerer_seq_diagram - - old_states = listOldBidStates(bid) - - if len(data['addr_from_label']) > 0: - data['addr_from_label'] = '(' + data['addr_from_label'] + ')' - - template = env.get_template('bid_xmr.html') if offer.swap_type == SwapTypes.XMR_SWAP else env.get_template('bid.html') - return self.render_template(template, { - 'bid_id': bid_id.hex(), - 'messages': messages, - 'err_messages': err_messages, - 'data': data, - 'edit_bid': edit_bid, - 'old_states': old_states, - }) - - def page_bids(self, url_split, post_string, sent=False, available=False): - swap_client = self.server.swap_client - - filters = { - 'page_no': 1, - 'bid_state_ind': -1, - 'with_expired': True, - 'limit': PAGE_LIMIT, - 'sort_by': 'created_at', - 'sort_dir': 'desc', - } - if available: - filters['bid_state_ind'] = BidStates.BID_RECEIVED - filters['with_expired'] = False - - messages = [] - form_data = self.checkForm(post_string, 'bids', messages) - if form_data and have_data_entry(form_data, 'applyfilters'): - if have_data_entry(form_data, 'sort_by'): - sort_by = get_data_entry(form_data, 'sort_by') - ensure(sort_by in ['created_at', ], 'Invalid sort by') - filters['sort_by'] = sort_by - if have_data_entry(form_data, 'sort_dir'): - sort_dir = get_data_entry(form_data, 'sort_dir') - ensure(sort_dir in ['asc', 'desc'], 'Invalid sort dir') - filters['sort_dir'] = sort_dir - if have_data_entry(form_data, 'state'): - state_ind = int(get_data_entry(form_data, 'state')) - if state_ind != -1: - try: - state = BidStates(state_ind) - except Exception: - raise ValueError('Invalid state') - filters['bid_state_ind'] = state_ind - if have_data_entry(form_data, 'with_expired'): - with_expired = toBool(get_data_entry(form_data, 'with_expired')) - filters['with_expired'] = with_expired - - set_pagination_filters(form_data, filters) - - bids = swap_client.listBids(sent=sent, filters=filters) - - page_data = { - 'bid_states': listBidStates() - } - - template = env.get_template('bids.html') - return self.render_template(template, { - 'page_type': 'Sent' if sent else 'Received', - 'messages': messages, - 'filters': filters, - 'data': page_data, - 'bids': [(format_timestamp(b[0]), - b[2].hex(), b[3].hex(), strBidState(b[5]), strTxState(b[7]), strTxState(b[8]), b[11]) for b in bids], - }) - def page_watched(self, url_split, post_string): swap_client = self.server.swap_client watched_outputs, last_scanned = swap_client.listWatchedOutputs() @@ -735,13 +584,13 @@ class HttpHandler(BaseHTTPRequestHandler): if page == 'sentoffers': return page_offers(self, url_split, post_string, sent=True) if page == 'bid': - return self.page_bid(url_split, post_string) + return page_bid(self, url_split, post_string) if page == 'bids': - return self.page_bids(url_split, post_string) + return page_bids(self, url_split, post_string) if page == 'sentbids': - return self.page_bids(url_split, post_string, sent=True) + return page_bids(self, url_split, post_string, sent=True) if page == 'availablebids': - return self.page_bids(url_split, post_string, available=True) + return page_bids(self, url_split, post_string, available=True) if page == 'watched': return self.page_watched(url_split, post_string) if page == 'smsgaddresses': diff --git a/basicswap/ui/page_bids.py b/basicswap/ui/page_bids.py new file mode 100644 index 0000000..7b772a9 --- /dev/null +++ b/basicswap/ui/page_bids.py @@ -0,0 +1,174 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2022 tecnovert +# Distributed under the MIT software license, see the accompanying +# file LICENSE or http://www.opensource.org/licenses/mit-license.php. + +from .util import ( + PAGE_LIMIT, + describeBid, + get_data_entry, + have_data_entry, + get_data_entry_or, + listBidStates, + listOldBidStates, + set_pagination_filters, +) +from basicswap.util import ( + ensure, + toBool, + format_timestamp, +) +from basicswap.basicswap_util import ( + BidStates, + SwapTypes, + DebugTypes, + strTxState, + strBidState, +) + + +def page_bid(self, url_split, post_string): + ensure(len(url_split) > 2, 'Bid ID not specified') + try: + bid_id = bytes.fromhex(url_split[2]) + assert len(bid_id) == 28 + except Exception: + raise ValueError('Bad bid ID') + server = self.server + swap_client = server.swap_client + + messages = [] + err_messages = [] + show_txns = False + show_offerer_seq_diagram = False + show_bidder_seq_diagram = False + show_lock_transfers = False + edit_bid = False + view_tx_ind = None + form_data = self.checkForm(post_string, 'bid', err_messages) + if form_data: + if b'abandon_bid' in form_data: + try: + swap_client.abandonBid(bid_id) + messages.append('Bid abandoned') + except Exception as ex: + err_messages.append('Abandon failed ' + str(ex)) + elif b'accept_bid' in form_data: + try: + swap_client.acceptBid(bid_id) + messages.append('Bid accepted') + except Exception as ex: + err_messages.append('Accept failed ' + str(ex)) + elif b'show_txns' in form_data: + show_txns = True + elif b'show_offerer_seq_diagram' in form_data: + show_offerer_seq_diagram = True + elif b'show_bidder_seq_diagram' in form_data: + show_bidder_seq_diagram = True + elif b'edit_bid' in form_data: + edit_bid = True + elif b'edit_bid_submit' in form_data: + data = { + 'bid_state': int(form_data[b'new_state'][0]), + 'debug_ind': int(get_data_entry_or(form_data, 'debugind', -1)), + 'kbs_other': get_data_entry_or(form_data, 'kbs_other', None), + } + try: + swap_client.manualBidUpdate(bid_id, data) + messages.append('Bid edited') + except Exception as ex: + err_messages.append('Edit failed ' + str(ex)) + elif b'view_tx_submit' in form_data: + show_txns = True + view_tx_ind = form_data[b'view_tx'][0].decode('utf-8') + if len(view_tx_ind) != 64: + err_messages.append('Invalid transaction selected.') + view_tx_ind = None + elif b'view_lock_transfers' in form_data: + show_txns = True + show_lock_transfers = True + + bid, xmr_swap, offer, xmr_offer, events = swap_client.getXmrBidAndOffer(bid_id) + ensure(bid, 'Unknown bid ID') + + data = describeBid(swap_client, bid, xmr_swap, offer, xmr_offer, events, edit_bid, show_txns, view_tx_ind, show_lock_transfers=show_lock_transfers) + + if bid.debug_ind is not None and bid.debug_ind > 0: + messages.append('Debug flag set: {}, {}'.format(bid.debug_ind, DebugTypes(bid.debug_ind).name)) + + data['show_bidder_seq_diagram'] = show_bidder_seq_diagram + data['show_offerer_seq_diagram'] = show_offerer_seq_diagram + + old_states = listOldBidStates(bid) + + if len(data['addr_from_label']) > 0: + data['addr_from_label'] = '(' + data['addr_from_label'] + ')' + + template = server.env.get_template('bid_xmr.html') if offer.swap_type == SwapTypes.XMR_SWAP else server.env.get_template('bid.html') + return self.render_template(template, { + 'bid_id': bid_id.hex(), + 'messages': messages, + 'err_messages': err_messages, + 'data': data, + 'edit_bid': edit_bid, + 'old_states': old_states, + }) + + +def page_bids(self, url_split, post_string, sent=False, available=False): + server = self.server + swap_client = server.swap_client + + filters = { + 'page_no': 1, + 'bid_state_ind': -1, + 'with_expired': True, + 'limit': PAGE_LIMIT, + 'sort_by': 'created_at', + 'sort_dir': 'desc', + } + if available: + filters['bid_state_ind'] = BidStates.BID_RECEIVED + filters['with_expired'] = False + + messages = [] + form_data = self.checkForm(post_string, 'bids', messages) + if form_data and have_data_entry(form_data, 'applyfilters'): + if have_data_entry(form_data, 'sort_by'): + sort_by = get_data_entry(form_data, 'sort_by') + ensure(sort_by in ['created_at', ], 'Invalid sort by') + filters['sort_by'] = sort_by + if have_data_entry(form_data, 'sort_dir'): + sort_dir = get_data_entry(form_data, 'sort_dir') + ensure(sort_dir in ['asc', 'desc'], 'Invalid sort dir') + filters['sort_dir'] = sort_dir + if have_data_entry(form_data, 'state'): + state_ind = int(get_data_entry(form_data, 'state')) + if state_ind != -1: + try: + state = BidStates(state_ind) + except Exception: + raise ValueError('Invalid state') + filters['bid_state_ind'] = state_ind + if have_data_entry(form_data, 'with_expired'): + with_expired = toBool(get_data_entry(form_data, 'with_expired')) + filters['with_expired'] = with_expired + + set_pagination_filters(form_data, filters) + + bids = swap_client.listBids(sent=sent, filters=filters) + + page_data = { + 'bid_states': listBidStates() + } + + template = server.env.get_template('bids.html') + return self.render_template(template, { + 'page_type': 'Sent' if sent else 'Received', + 'messages': messages, + 'filters': filters, + 'data': page_data, + 'bids': [(format_timestamp(b[0]), + b[2].hex(), b[3].hex(), strBidState(b[5]), strTxState(b[7]), strTxState(b[8]), b[11]) for b in bids], + }) diff --git a/basicswap/ui/page_offers.py b/basicswap/ui/page_offers.py index 0844b87..b05ddb9 100644 --- a/basicswap/ui/page_offers.py +++ b/basicswap/ui/page_offers.py @@ -32,7 +32,6 @@ from basicswap.basicswap_util import ( strBidState, TxLockTypes, strOfferState, - ) from basicswap.chainparams import ( Coins,