From 62bf109f476f284ece9a945b45cdc5448ae9141e Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 28 Nov 2019 12:01:15 +0100 Subject: [PATCH] more cleaning blueprint --- dirkules/__init__.py | 1 + dirkules/cleaning/manager.py | 9 +++++ dirkules/cleaning/models.py | 18 +++++++++ dirkules/cleaning/views.py | 65 +++++++++++++++++++++++++++++++ dirkules/manager/cleaning.py | 2 +- dirkules/manager/viewManager.py | 9 +---- dirkules/models.py | 17 -------- dirkules/views.py | 69 ++------------------------------- 8 files changed, 99 insertions(+), 91 deletions(-) create mode 100644 dirkules/cleaning/manager.py create mode 100644 dirkules/cleaning/models.py create mode 100644 dirkules/cleaning/views.py diff --git a/dirkules/__init__.py b/dirkules/__init__.py index 1057222..46b6566 100644 --- a/dirkules/__init__.py +++ b/dirkules/__init__.py @@ -15,6 +15,7 @@ app_version = app.config["VERSION"] import dirkules.models import dirkules.samba.models +import dirkules.cleaning.models # create db if not exists db.create_all() diff --git a/dirkules/cleaning/manager.py b/dirkules/cleaning/manager.py new file mode 100644 index 0000000..6a40c9a --- /dev/null +++ b/dirkules/cleaning/manager.py @@ -0,0 +1,9 @@ +from dirkules import db + +from dirkules.cleaning.models import Cleaning + + +def create_cleaning_obj(jobname, path, active): + job = Cleaning(jobname, path, active) + db.session.add(job) + db.session.commit() diff --git a/dirkules/cleaning/models.py b/dirkules/cleaning/models.py new file mode 100644 index 0000000..a7c0230 --- /dev/null +++ b/dirkules/cleaning/models.py @@ -0,0 +1,18 @@ +import datetime + +from dirkules import db + + +class Cleaning(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String) + path = db.Column(db.String) + # state 0 means inactive - do not execute + state = db.Column(db.Boolean) + # time means last execution + time = db.Column(db.DateTime(timezone=True), default=datetime.datetime.now) + + def __init__(self, name, path, state): + self.name = name + self.path = path + self.state = state diff --git a/dirkules/cleaning/views.py b/dirkules/cleaning/views.py new file mode 100644 index 0000000..334efc7 --- /dev/null +++ b/dirkules/cleaning/views.py @@ -0,0 +1,65 @@ +from flask import request, redirect, flash, render_template, url_for + +from dirkules import app, db +from dirkules.cleaning.manager import create_cleaning_obj +from dirkules.cleaning.models import Cleaning + + +@app.route('/cleaning', methods=['GET']) +def cleaning(): + remove = request.args.get('remove') + changestate = request.args.get('changestate') + service = request.args.get('service') + if not (remove is not None and changestate is not None): + if remove is not None: + try: + remove = int(remove) + Cleaning.query.filter(Cleaning.id == remove).delete() + db.session.commit() + return redirect(request.path, code=302) + except ValueError: + flash("Value Error: remove") + elif changestate is not None: + try: + changestate = int(changestate) + job = Cleaning.query.get(changestate) + if job.state == 0: + job.state = 1 + else: + job.state = 0 + db.session.commit() + return redirect(request.path, code=302) + except ValueError: + flash("Value Error: changestate") + else: + flash("Value Error: remove and changestate set") + if service is not None: + try: + service = str(service) + if service == "start": + if not cleaningMan.running(): + cleaningMan.enable() + return redirect(request.path, code=302) + else: + flash("Error: Cleaning Service already running.") + elif service == "pause": + if cleaningMan.running(): + cleaningMan.disable() + return redirect(request.path, code=302) + else: + flash("Error: Cleaning Service already paused.") + else: + raise ValueError + except ValueError: + flash("Value Error: service") + elements = Cleaning.query.order_by(db.asc(db.collate(Cleaning.name, 'NOCASE'))).all() + return render_template('cleaning.html', elements=elements, task_running=cleaningMan.running()) + + +@app.route('/add_cleaning', methods=['GET', 'POST']) +def add_cleaning(): + form = CleaningForm(request.form) + if request.method == 'POST' and form.validate(): + create_cleaning_obj(form.jobname.data, form.path.data, form.active.data) + return redirect(url_for('cleaning')) + return render_template('add_cleaning.html', form=form) diff --git a/dirkules/manager/cleaning.py b/dirkules/manager/cleaning.py index 27d2227..353ba1c 100644 --- a/dirkules/manager/cleaning.py +++ b/dirkules/manager/cleaning.py @@ -1,6 +1,6 @@ import datetime import os -from dirkules.models import Cleaning +from dirkules.cleaning.models import Cleaning from dirkules.hardware import autoclean from dirkules import db, app, scheduler diff --git a/dirkules/manager/viewManager.py b/dirkules/manager/viewManager.py index d987e6d..bdcf3e2 100644 --- a/dirkules/manager/viewManager.py +++ b/dirkules/manager/viewManager.py @@ -1,13 +1,6 @@ # -*- coding: utf-8 -*- -from dirkules import db from dirkules.hardware.btrfsTools import create_pool -from dirkules.models import Cleaning, Drive - - -def create_cleaning_obj(jobname, path, active): - job = Cleaning(jobname, path, active) - db.session.add(job) - db.session.commit() +from dirkules.models import Drive def get_empty_drives(): diff --git a/dirkules/models.py b/dirkules/models.py index be9fac0..b78fac3 100644 --- a/dirkules/models.py +++ b/dirkules/models.py @@ -1,4 +1,3 @@ -import datetime from dirkules import db @@ -104,19 +103,3 @@ class Time(db.Model): def __init__(self, desc): self.desc = desc - - -class Cleaning(db.Model): - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String) - path = db.Column(db.String) - # state 0 means inactive - do not execute - state = db.Column(db.Boolean) - # time means last execution - time = db.Column(db.DateTime(timezone=True), default=datetime.datetime.now) - - def __init__(self, name, path, state): - self.name = name - self.path = path - self.state = state - diff --git a/dirkules/views.py b/dirkules/views.py index 1ff6d5b..5cdfafa 100644 --- a/dirkules/views.py +++ b/dirkules/views.py @@ -1,14 +1,13 @@ import datetime import subprocess from time import sleep -from flask import render_template, redirect, request, url_for, flash, abort -from dirkules import app, db, scheduler, app_version +from flask import render_template, redirect, request, url_for, abort +from dirkules import app, scheduler, app_version import dirkules.manager.serviceManager as servMan import dirkules.manager.driveManager as driveMan -import dirkules.manager.cleaning as cleaningMan -from dirkules.models import Drive, Cleaning, Pool +from dirkules.models import Drive, Pool import dirkules.manager.viewManager as viewManager -from dirkules.validation.validators import CleaningForm, PoolAddForm +from dirkules.validation.validators import PoolAddForm @app.errorhandler(404) @@ -85,63 +84,3 @@ def partitions(part): except LookupError: abort(500, description="Invalid drive id {}".format(part)) return render_template('partitions.html', parts=drive.partitions) - - -@app.route('/cleaning', methods=['GET']) -def cleaning(): - remove = request.args.get('remove') - changestate = request.args.get('changestate') - service = request.args.get('service') - if not (remove is not None and changestate is not None): - if remove is not None: - try: - remove = int(remove) - Cleaning.query.filter(Cleaning.id == remove).delete() - db.session.commit() - return redirect(request.path, code=302) - except ValueError: - flash("Value Error: remove") - elif changestate is not None: - try: - changestate = int(changestate) - job = Cleaning.query.get(changestate) - if job.state == 0: - job.state = 1 - else: - job.state = 0 - db.session.commit() - return redirect(request.path, code=302) - except ValueError: - flash("Value Error: changestate") - else: - flash("Value Error: remove and changestate set") - if service is not None: - try: - service = str(service) - if service == "start": - if not cleaningMan.running(): - cleaningMan.enable() - return redirect(request.path, code=302) - else: - flash("Error: Cleaning Service already running.") - elif service == "pause": - if cleaningMan.running(): - cleaningMan.disable() - return redirect(request.path, code=302) - else: - flash("Error: Cleaning Service already paused.") - else: - raise ValueError - except ValueError: - flash("Value Error: service") - elements = Cleaning.query.order_by(db.asc(db.collate(Cleaning.name, 'NOCASE'))).all() - return render_template('cleaning.html', elements=elements, task_running=cleaningMan.running()) - - -@app.route('/add_cleaning', methods=['GET', 'POST']) -def add_cleaning(): - form = CleaningForm(request.form) - if request.method == 'POST' and form.validate(): - viewManager.create_cleaning_obj(form.jobname.data, form.path.data, form.active.data) - return redirect(url_for('cleaning')) - return render_template('add_cleaning.html', form=form)