Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions bos_mint/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,10 @@ def fill(self, selectedObject):
self.name.fill(selectedObject['name'])


class DeleteForm(FlaskForm):
cancel = SubmitField("Cancel")
submit = SubmitField("Delete")

class NewEventGroupForm(FlaskForm):
sport = SelectField("Sport", validators=[DataRequired()],
choices=None)
Expand Down
54 changes: 44 additions & 10 deletions bos_mint/node.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
from . import wrapper

from functools import wraps

from bookied_sync.lookup import Lookup
from peerplays.account import Account
from peerplays.sport import Sport, Sports
from peerplays.eventgroup import EventGroups, EventGroup
from peerplays.event import Events, Event
from peerplays.bettingmarketgroup import BettingMarketGroup, BettingMarketGroups
from peerplays.asset import Asset
from peerplays.bettingmarket import BettingMarkets, BettingMarket
from peerplays.rule import Rules, Rule
from peerplays.bettingmarketgroup import BettingMarketGroup, BettingMarketGroups
from peerplays.event import Events, Event
from peerplays.eventgroup import EventGroups, EventGroup
from peerplays.instance import shared_peerplays_instance
from peerplays.proposal import Proposals
from peerplays.rule import Rules, Rule
from peerplays.sport import Sport, Sports

from peerplays.instance import shared_peerplays_instance
from peerplays.asset import Asset
from bookied_sync.lookup import Lookup
from . import wrapper


class NodeException(Exception):
Expand Down Expand Up @@ -368,6 +368,29 @@ def createSport(self, istrings):
except Exception as ex:
raise NodeException(ex.__class__.__name__ + ": " + str(ex))

@proposedOperation
def deleteSport(self, sportId):
try:
return self.get_node().sport_delete(
sport_id=sportId,
account=self.getSelectedAccountName(),
append_to=self.getPendingProposal()
)
except Exception as ex:
raise NodeException(ex.__class__.__name__ + ": " + str(ex))

@proposedOperation
def deleteEventgroup(self, event_group_id):

try:
return self.get_node().eventgroup_delete(
event_group_id=event_group_id,
account=self.getSelectedAccountName(),
append_to=self.getPendingProposal()
)
except Exception as ex:
raise NodeException(ex.__class__.__name__ + ": " + str(ex))

@proposedOperation
def createEventGroup(self, istrings, sportId):
try:
Expand Down Expand Up @@ -522,6 +545,17 @@ def rejectProposal(self, proposalId):
except Exception as ex:
raise NodeException(ex.__class__.__name__ + ": " + str(ex))

@proposedOperation
def deleteProposal(self, proposalId):
try:
return self.get_node().deleteproposal(
proposalId,
"witness-account",
append_to=self.getPendingProposal()
)
except Exception as ex:
raise NodeException(ex.__class__.__name__ + ": " + str(ex))

@proposedOperation
def resolveBettingMarketGroup(self, bettingMarketGroupId, resultList):
try:
Expand Down
23 changes: 17 additions & 6 deletions bos_mint/templates/widgets/operationContainer.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
{% else %}
<p class="transition hidden">
{% endif %}

<table class="ui very basic collapsing celled table">
<tbody>
{% for item in listItems %}
Expand Down Expand Up @@ -40,36 +40,47 @@
<tbody>
<tr>
<td><div class="ui relaxed divided list">
{% for operation in operations %}
{% for operation in operations %}
{{ operation|safe }}
{% endfor %}</div></td>
</tr>
{% if buttonPositive or buttonNegative %}
<tr>
<td>
<div class="ui right floated buttons">
{% if advanced_user %}
<div class="ui floated buttons">
<form action="{{ buttonDeleteURL }}" id="buttonDelete" method="POST">
<button class="ui labeled secondary icon button">
<i class="trash icon"></i>{{ buttonDelete }}
</button>
</form>
</div>
{% endif %}

{% if buttonNegative %}
<form action="{{ buttonNegativeURL }}" id="buttonNegative" method="POST">
<button class="ui labeled negative icon button">
<i class="thumbs down icon"></i>{{ buttonNegative }}
</button>
</form>
{% endif %}
{% if buttonPositive and buttonNegative %}
{% if buttonPositive and buttonNegative and not advanced_user %}
<div class="or"></div>
{% endif %}
{% if buttonPositive %}
<form action="{{ buttonPositiveURL }}" id="buttonPositive" method="POST">
<button class="ui right labeled positive icon button">
<button class="ui labeled positive icon button">
<i class="thumbs up icon"></i>{{ buttonPositive }}
</button>
</form>
{% endif %}
</div>
</td>
</td>
{% endif %}
</tbody>

</table>

</p>
</div>
</div>
12 changes: 12 additions & 0 deletions bos_mint/templates/widgets/operation_event_group_delete.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{% from "_macros.html" import render_int_string %}
<div class="item">
<i class="trash icon"></i>
<div class="content">
<div class="header">Event group deletion {{ operationId }}</div>
<div class="description">
Event group ID: {{ data['event_group_id']}}

<p></p>
</div>
</div>
</div>
10 changes: 10 additions & 0 deletions bos_mint/templates/widgets/operation_sport_delete.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{% from "_macros.html" import render_int_string %}
<div class="item">
<i class="trash icon"></i>
<div class="content">
<div class="header">Sport deletion {{ operationId }}</div>
<div class="description">
Sport ID: {{ data['sport_id'] }}
</div>
</div>
</div>
41 changes: 12 additions & 29 deletions bos_mint/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,36 +95,24 @@
'bet': 'bettingmarket'
}

TYPENAME_TO_NEWOP_MAP = {
'sport': 'sport_create',
'eventgroup': 'event_group_create',
'event': 'event_create',
'event_status': None,
'bettingmarketgroup': 'betting_market_group_create',
'bettingmarketgrouprule': 'betting_market_rules_create',
'bettingmarket': 'betting_market_create',
'bet': 'bet_create',
}

TYPENAME_TO_UPDATEOP_MAP = {
'sport': 'sport_update',
'eventgroup': 'event_group_update',
'event': 'event_update',
'event_status': 'event_update_status',
'bettingmarketgroup': 'betting_market_group_update',
'bettingmarketgrouprule': 'betting_market_rules_update',
'bettingmarket': 'betting_market_update'
}

UPDATEOP_TO_TYPENAME_MAP = {
OP_TO_TYPENAME_MAP = {
'sport_create': 'sport',
'sport_delete': 'sport',
'sport_update': 'sport',
'event_group_create': 'eventgroup',
'event_group_delete': 'eventgroup',
'event_group_update': 'eventgroup',
'event_create': 'event',
'event_update': 'event',
'event_update_status': 'event_status',
'betting_market_group_create': 'bettingmarketgroup',
'betting_market_group_update': 'bettingmarketgroup',
'betting_market_rules_create': 'bettingmarketgrouprule',
'betting_market_rules_update': 'bettingmarketgrouprule',
'betting_market_create': 'bettingmarket',
'betting_market_update': 'bettingmarket',
'betting_market_group_resolve': 'bettingmarketgroup'
'betting_market_group_resolve': 'bettingmarketgroup',
'bet_create': 'bet',
}


Expand Down Expand Up @@ -340,12 +328,7 @@ def getProposalOperations(tx):
operation = operation['op']
operationName = getOperationNameForId(operation[0])
typeName = 'unknown'
for tmpTypeName, newOpName in TYPENAME_TO_NEWOP_MAP.items():
if newOpName == operationName:
typeName = tmpTypeName

typeName = UPDATEOP_TO_TYPENAME_MAP.get(operationName, typeName)

typeName = OP_TO_TYPENAME_MAP.get(operationName, typeName)
if typeName == 'unknown':
raise Exception
# this is a hack. proper id construction __must__ be
Expand Down
80 changes: 77 additions & 3 deletions bos_mint/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

from flask import (
redirect,
request,
Expand All @@ -22,7 +23,8 @@
ReplayForm,
ApprovalForm,
BettingMarketGroupResolveForm,
SynchronizationForm
SynchronizationForm,
DeleteForm
)
from .models import (
LocalProposal,
Expand Down Expand Up @@ -54,6 +56,8 @@
from threading import Thread
from datetime import datetime
from peerplays.event import Events
from peerplays.eventgroup import EventGroup
from peerplays.sport import Sport
from bos_mint.datestring import string_to_date
from pprint import pformat, pprint
import json
Expand Down Expand Up @@ -610,7 +614,19 @@ def overview(typeName=None, identifier=None):
def buildListElements(tmpList):
tmpList = sorted(tmpList, key=lambda k: k['toString'])
for entry in tmpList:
if entry['typeName'] == 'event':
if entry['typeName'] == 'sport':
entry['extraLink'] = [{
'title': 'Delete',
'link': 'sport_delete',
'icon': 'trash alternate outline'
}]
elif entry['typeName'] == 'eventgroup':
entry['extraLink'] = [{
'title': 'Delete',
'link': 'eventgroup_delete',
'icon': 'trash alternate outline'
}]
elif entry['typeName'] == 'event':
entry['extraLink'] = [{
'title': 'Show incidents',
'link': 'event_incidents',
Expand Down Expand Up @@ -836,7 +852,8 @@ def votable_proposals():
if proposals:
accountId = Node().getSelectedAccount()['id']

containerList = widgets.prepareProposalsDataForRendering(proposals)
advanced_user = Config.get("advanced_features", default=False)
containerList = widgets.prepareProposalsDataForRendering(proposals, accountId=accountId, advanced_user=advanced_user)
containerReview = {}
reviewedProposals = LocalProposal.getAllAsList()

Expand Down Expand Up @@ -876,6 +893,18 @@ def votable_proposals_reject(proposalId):
return redirect(url_for('votable_proposals'))


@app.route("/proposals/delete/<proposalId>", methods=['post', 'get'])
@unlocked_wallet_required
def proposal_delete(proposalId):
try:
Node().deleteProposal(proposalId)
flash('Added Proposal delete proposal to Pending operations')
except Exception as e:
flash(e.__repr__(), category="error")

return redirect(url_for('votable_proposals'))


def findAndProcessTranslatons(form):
for field in form._fields.values():
if isinstance(field, FormField) and isinstance(field.form, TranslatedFieldForm) and field.addLanguage.data:
Expand Down Expand Up @@ -926,6 +955,7 @@ def sport_new():
return genericNewForm(forms.NewSportForm)



@app.route("/eventgroup/new", methods=['post', 'get'])
@app.route("/eventgroup/new/<parentId>", methods=['post', 'get'])
@unlocked_wallet_required
Expand Down Expand Up @@ -964,7 +994,51 @@ def bet_new():
return render_template_menuinfo('index.html', **locals())


@app.route("/sport/delete/", methods=['post', 'get'])
@app.route("/sport/delete/<selectId>", methods=['post', 'get'])
@unlocked_wallet_required
def sport_delete(selectId=None):
"""If this button is pressed a form will be opened to delete the Sport with a given selectId"""
form = DeleteForm(sport_id=selectId)
sport = Sport(selectId)
formTitle = "Are you sure that you want do delete {0} ({1})?".format(sport['name'][0][1], sport['id'])
flash('All related Eventgroups will be cancelled and deleted as well', category='warning')

if form.validate_on_submit():
if form.cancel.data: # cancel button has been pressed
return redirect(url_for('overview'))

try:
Node().deleteSport(selectId)
return redirect(url_for('overview'))
except Exception as e:
flash(e.__repr__(), category='error')

return render_template_menuinfo("generic.html", **locals())


@app.route("/eventgroup/delete/", methods=['post', 'get'])
@app.route("/eventgroup/delete/<selectId>", methods=['post', 'get'])
@unlocked_wallet_required
def eventgroup_delete(selectId=None):
form = DeleteForm()
eventgroup = EventGroup(selectId)
print(eventgroup)
formTitle = "Are you sure that you want to delete {0} ({1})?".format(eventgroup['name'][0][1], eventgroup['id'])
flash("All related Events will be cancelled and deleted as well", category='warning')
if form.validate_on_submit():
if form.cancel.data:
return redirect(url_for('overview'))
try:
Node().deleteEventgroup(event_group_id=selectId)
return redirect(url_for('overview'))
except Exception as e:
flash(e.__repr__(), category="error")

return render_template_menuinfo("generic.html", **locals())

def genericUpdate(formClass, selectId, removeSubmits=False, details=False):

typeName = formClass.getTypeName()

selectFunction = utils.getTypeGetter(typeName)
Expand Down
7 changes: 5 additions & 2 deletions bos_mint/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ def addOperation(self, operationId, data):
self.template_args['operations'].append(ow)


def prepareProposalsDataForRendering(proposals, accountId=None):
def prepareProposalsDataForRendering(proposals, accountId=None, advanced_user=False):
tmpList = []
for proposal in proposals:
# ensure the parent expiration time is the shortest time
Expand Down Expand Up @@ -151,7 +151,10 @@ def prepareProposalsDataForRendering(proposals, accountId=None):
buttonNegativeURL=url_for('votable_proposals_reject',
proposalId=proposal['id']),
buttonPositiveURL=url_for('votable_proposals_accept',
proposalId=proposal['id'])
proposalId=proposal['id']),
buttonDelete="Delete",
buttonDeleteURL=url_for("proposal_delete", proposalId=proposal['id']),
advanced_user=advanced_user
)

for operation in proposal['proposed_transaction']['operations']:
Expand Down
Loading