diff --git a/dirkules/manager/driveManager.py b/dirkules/manager/driveManager.py index 0efd760..1412967 100644 --- a/dirkules/manager/driveManager.py +++ b/dirkules/manager/driveManager.py @@ -135,3 +135,33 @@ def get_pool_health(drive_list): if db_drive.smart is not True: return False return True + + +def delete_drive(drive): + """ + removes a given drive object (including cascades) from db + :param drive: The drive + :type drive: Drive + :return: nothing + :rtype: + """ + try: + db.session.delete(drive) + db.session.commit() + except: + db.session.rollback() + + +def get_drive_by_id(drive_id): + """ + returns drive object for given id + :param drive_id: id of drive (primary key) + :type drive_id: int + :return: Drive object + :rtype: Drive + """ + drive = Drive.query.get(drive_id) + if drive is not None: + return drive + else: + raise LookupError diff --git a/dirkules/models.py b/dirkules/models.py index 9c0d151..fe5a95d 100644 --- a/dirkules/models.py +++ b/dirkules/models.py @@ -1,10 +1,8 @@ import datetime - from dirkules import db class Drive(db.Model): - __tablename__ = 'drive' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String) model = db.Column(db.String) @@ -47,9 +45,8 @@ class Drive(db.Model): class Partitions(db.Model): - __tablename__ = 'partitions' id = db.Column(db.Integer, primary_key=True) - drive_id = db.Column(db.Integer, db.ForeignKey('drive.id'), nullable=False) + drive_id = db.Column(db.Integer, db.ForeignKey('drive.id')) name = db.Column(db.String) fs = db.Column(db.String) size = db.Column(db.Integer) @@ -68,7 +65,6 @@ class Partitions(db.Model): class Pool(db.Model): - __tablename__ = 'pool' id = db.Column(db.Integer, primary_key=True) label = db.Column(db.String) size = db.Column(db.Integer) @@ -100,7 +96,6 @@ class Pool(db.Model): class Time(db.Model): - __tablename__ = 'time' id = db.Column(db.Integer, primary_key=True) desc = db.Column(db.String) time = db.Column(db.Integer, default=0, onupdate=1) @@ -110,7 +105,6 @@ class Time(db.Model): class Cleaning(db.Model): - __tablename__ = 'cleaning' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String) path = db.Column(db.String) @@ -126,7 +120,6 @@ class Cleaning(db.Model): class SambaShare(db.Model): - __tablename__ = 'samba_share' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String, nullable=False) writeable = db.Column(db.Boolean) @@ -142,7 +135,6 @@ class SambaShare(db.Model): class SambaOptions(db.Model): - __tablename__ = 'samba_options' id = db.Column(db.Integer, primary_key=True) option = db.Column(db.String, nullable=False) value = db.Column(db.String, nullable=False) diff --git a/dirkules/templates/drives.html b/dirkules/templates/drives.html index 3954fbd..574bf58 100644 --- a/dirkules/templates/drives.html +++ b/dirkules/templates/drives.html @@ -36,10 +36,15 @@ {% endif %} + class="ui primary basic button"> Partitionen + +
+ Aus Datenbank löschen +
+
{% endfor %} diff --git a/dirkules/views.py b/dirkules/views.py index 1aea162..d755e04 100644 --- a/dirkules/views.py +++ b/dirkules/views.py @@ -4,6 +4,7 @@ from time import sleep from flask import render_template, redirect, request, url_for, flash, abort from dirkules import app, db, scheduler import dirkules.manager.serviceManager as servMan +import dirkules.manager.driveManager as driveMan import dirkules.manager.cleaning as cleaningMan from dirkules.models import Drive, Cleaning, SambaShare, Pool import dirkules.manager.viewManager as viewManager @@ -28,6 +29,16 @@ def index(): @app.route('/drives', methods=['GET']) def drives(): + delete = request.args.get('delete') + if delete is not None: + try: + drive = driveMan.get_drive_by_id(int(delete)) + driveMan.delete_drive(drive) + except ValueError: + abort(500, description="Expected int, but got {}.".format(delete)) + except LookupError: + abort(500, description="Invalid drive id {}".format(delete)) + return render_template('drives.html', drives=Drive.query.all())