diff --git a/ereuse_devicehub/inventory/views.py b/ereuse_devicehub/inventory/views.py index fde885d7..0267db00 100644 --- a/ereuse_devicehub/inventory/views.py +++ b/ereuse_devicehub/inventory/views.py @@ -296,6 +296,8 @@ class BindingView(GenericMixin): self.real_phid = self.new_placeholder.phid self.abstract_dhid = self.old_device.devicehub_id self.abstract_phid = self.old_placeholder.phid + if self.old_placeholder.kangaroo: + self.new_placeholder.kangaroo = True # to do a backup of abstract_dhid and abstract_phid in # workbench device @@ -383,6 +385,9 @@ class UnBindingView(GenericMixin): if device.binding.is_abstract: return + kangaroo = device.binding.kangaroo + device.binding.kangaroo = False + dict_device = copy.copy(device.__dict__) dict_device.pop('_sa_instance_state') dict_device.pop('id', None) @@ -402,7 +407,10 @@ class UnBindingView(GenericMixin): if c.binding: c.binding.device.parent = new_device - placeholder = Placeholder(device=new_device, binding=device, is_abstract=True) + placeholder = Placeholder( + device=new_device, binding=device, is_abstract=True, kangaroo=kangaroo + ) + if ( device.dhid_bk and not Device.query.filter_by(devicehub_id=device.dhid_bk).first() diff --git a/ereuse_devicehub/migrations/versions/a13ed6ad0e3e_add_kangaroo_in_placeholder.py b/ereuse_devicehub/migrations/versions/a13ed6ad0e3e_add_kangaroo_in_placeholder.py new file mode 100644 index 00000000..bc3b6790 --- /dev/null +++ b/ereuse_devicehub/migrations/versions/a13ed6ad0e3e_add_kangaroo_in_placeholder.py @@ -0,0 +1,34 @@ +"""add kangaroo in placeholder + +Revision ID: a13ed6ad0e3e +Revises: 626c17026ca7 +Create Date: 2022-10-13 11:56:15.303218 + +""" +import sqlalchemy as sa +from alembic import context, op + +# revision identifiers, used by Alembic. +revision = 'a13ed6ad0e3e' +down_revision = '626c17026ca7' +branch_labels = None +depends_on = None + + +def get_inv(): + INV = context.get_x_argument(as_dictionary=True).get('inventory') + if not INV: + raise ValueError("Inventory value is not specified") + return INV + + +def upgrade(): + op.add_column( + 'placeholder', + sa.Column('kangaroo', sa.Boolean(), nullable=True), + schema=f'{get_inv()}', + ) + + +def downgrade(): + op.drop_column('placeholder', 'kangaroo', schema=f'{get_inv()}') diff --git a/ereuse_devicehub/resources/device/models.py b/ereuse_devicehub/resources/device/models.py index 5f1ccb20..86d8c834 100644 --- a/ereuse_devicehub/resources/device/models.py +++ b/ereuse_devicehub/resources/device/models.py @@ -932,6 +932,7 @@ class Placeholder(Thing): ) id_device_internal = db.Column(CIText()) id_device_internal.comment = "Identification used internaly for the user" + kangaroo = db.Column(Boolean, default=False, nullable=True) device_id = db.Column( BigInteger, diff --git a/ereuse_devicehub/templates/workbench/settings.html b/ereuse_devicehub/templates/workbench/settings.html index 4cf2e1cc..f1644d3e 100644 --- a/ereuse_devicehub/templates/workbench/settings.html +++ b/ereuse_devicehub/templates/workbench/settings.html @@ -11,6 +11,62 @@
+
+
+ +
+
+ +
+
+
+
+ + + + + + + + + {% for host in form.kangaroos %} + + + + + {% endfor %} + + + + + +
PHIDErasure Host
{{ host.phid }} + +
+ {% for f in form %} + {{ f }} + {% if f == form.phid and f.errors %} +

+ {% for error in f.errors %} + {{ error }}
+ {% endfor %} +

+ {% endif %} + {% endfor %} +
+ +
+
+
+
+
+ +
+
+ +
+
+
diff --git a/ereuse_devicehub/workbench/views.py b/ereuse_devicehub/workbench/views.py index 3640ab5b..60c34fd3 100644 --- a/ereuse_devicehub/workbench/views.py +++ b/ereuse_devicehub/workbench/views.py @@ -3,34 +3,43 @@ import time import flask from flask import Blueprint from flask import current_app as app -from flask import g, make_response, request +from flask import g, make_response, request, url_for +from flask.views import View from flask_login import login_required from ereuse_devicehub import auth from ereuse_devicehub.db import db +from ereuse_devicehub.resources.device.models import Placeholder from ereuse_devicehub.resources.enums import SessionType from ereuse_devicehub.resources.user.models import Session from ereuse_devicehub.views import GenericMixin from ereuse_devicehub.workbench import isos +from ereuse_devicehub.workbench.forms import KangarooForm workbench = Blueprint('workbench', __name__, url_prefix='/workbench') class SettingsView(GenericMixin): decorators = [login_required] + methods = ['GET', 'POST'] template_name = 'workbench/settings.html' page_title = "Workbench" def dispatch_request(self): self.get_context() + form_kangaroo = KangarooForm() self.context.update( { 'page_title': self.page_title, 'demo': g.user.email == app.config['EMAIL_DEMO'], 'iso': isos, + 'form': form_kangaroo, } ) + if form_kangaroo.validate_on_submit(): + form_kangaroo.save() + self.opt = request.values.get('opt') if self.opt in ['register', 'erease_basic', 'erease_sectors']: return self.download() @@ -86,4 +95,24 @@ class SettingsView(GenericMixin): return token +class ErasureHostView(View): + decorators = [login_required] + methods = ['GET'] + + def dispatch_request(self, id): + self.placeholder = ( + Placeholder.query.filter(Placeholder.id == id) + .filter(Placeholder.kangaroo.is_(True)) + .filter(Placeholder.owner_id == g.user.id) + .one() + ) + self.placeholder.kangaroo = False + db.session.commit() + + return flask.redirect(url_for('workbench.settings')) + + workbench.add_url_rule('/', view_func=SettingsView.as_view('settings')) +workbench.add_url_rule( + '/erasure_host//', view_func=ErasureHostView.as_view('erasure_host') +)