its now possible to remove drives

This commit is contained in:
Daniel 2019-09-21 19:10:43 +02:00
parent 8b51d97ab2
commit 692da36775
4 changed files with 48 additions and 10 deletions

View file

@ -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

View file

@ -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)

View file

@ -36,10 +36,15 @@
{% endif %}
<td>
<a href="{{ url_for('partitions', part=(drive.name | replace("/", "_"))) }}"
class="ui blue button">
class="ui primary basic button">
<i class="server icon"></i>
Partitionen
</a>
<a href="{{ url_for('drives', delete=drive.id) }}">
<div class="ui orange basic button" data-tooltip="Use this, if drive doesn't exist anymore." data-position="top left">
<i class="trash icon"></i> Aus Datenbank löschen
</div>
</a>
</td>
</tr>
{% endfor %}

View file

@ -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())