From 94da61c57e2af6d6aaf38d2af1477a6e3e42e2e3 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 5 Jul 2021 18:55:54 +0200 Subject: [PATCH] Basic Metadata mechanism in python --- cps/__init__.py | 2 + cps/metadata_provider/toogle.py | 31 +++++++++++++ cps/search_metadata.py | 77 +++++++++++++++++++++++++++++++++ cps/services/Metadata.py | 32 ++++++++++++++ cps/services/worker.py | 11 +++-- 5 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 cps/metadata_provider/toogle.py create mode 100644 cps/search_metadata.py create mode 100644 cps/services/Metadata.py diff --git a/cps/__init__.py b/cps/__init__.py index 3266a4e9..7f067665 100644 --- a/cps/__init__.py +++ b/cps/__init__.py @@ -148,6 +148,8 @@ def get_timezone(): user = getattr(g, 'user', None) return user.timezone if user else None +from . import search_metadata + from .updater import Updater updater_thread = Updater() updater_thread.start() diff --git a/cps/metadata_provider/toogle.py b/cps/metadata_provider/toogle.py new file mode 100644 index 00000000..b205e62b --- /dev/null +++ b/cps/metadata_provider/toogle.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2021 OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +import requests +from cps.services.Metadata import Metadata + +class Toogle(Metadata): + __name__ = "Google" + + def search(self, query): + if self.active: + return [1] + return [] + + diff --git a/cps/search_metadata.py b/cps/search_metadata.py new file mode 100644 index 00000000..bb924dba --- /dev/null +++ b/cps/search_metadata.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- + +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2021 OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from __future__ import division, print_function, unicode_literals +import sys +import datetime +from functools import wraps +import os + +from flask import Blueprint, request, render_template, Response, g, make_response, abort +from flask_login import login_required +from flask_login import current_user +from sqlalchemy.sql.expression import func, text, or_, and_, true +from werkzeug.security import check_password_hash + +from . import constants, logger, config, db, calibre_db, ub, services, get_locale, isoLanguages +# from .metadata_provider + +opds = Blueprint('metadata', __name__) + +log = logger.create() + + +#for module in os.listdir(os.join(constants.BASE_DIR, "metadata_provider")): +# if module == '__init__.py' or module[-3:] != '.py': +# continue +# __import__(module[:-3], locals(), globals()) +#del module + +from os.path import basename, isfile +# import glob +meta_dir = os.path.join(constants.BASE_DIR, "cps", "metadata_provider") +modules = os.listdir(os.path.join(constants.BASE_DIR, "cps", "metadata_provider")) #glob.glob(join(dirname(__file__), "*.py")) +__all__ = [ basename(f)[:-3] for f in modules if isfile(os.path.join(meta_dir, f)) and not f.endswith('__init__.py')] + +import importlib +for a in __all__: + importlib.import_module("cps.metadata_provider." + a) + +import sys, inspect +def print_classes(): + for a in __all__: + for name, obj in inspect.getmembers(sys.modules["cps.metadata_provider." + a]): + if inspect.isclass(obj): + print(obj) + +print_classes() + +@opds.route("/metadata/provider") +@login_required +def metadata_provider(): + return "" + +@opds.route("/metadata/search") +@login_required +def metadata_search(): + return "" + +@opds.route("/metadata/replace/") +@login_required +def metadata_provider(id): + return "" diff --git a/cps/services/Metadata.py b/cps/services/Metadata.py new file mode 100644 index 00000000..05778c25 --- /dev/null +++ b/cps/services/Metadata.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2021 OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +class Metadata(): + __name__ = "Generic" + + def __init__(self): + self.active = True + + def set_status(self, state): + self.active = state + + def search(self, query): + if self.active: + return [1] + return [] diff --git a/cps/services/worker.py b/cps/services/worker.py index 1baf25fe..238c8dbf 100644 --- a/cps/services/worker.py +++ b/cps/services/worker.py @@ -205,10 +205,13 @@ class CalibreTask: # By default, we're good to clean a task if it's "Done" return self.stat in (STAT_FINISH_SUCCESS, STAT_FAIL) - @progress.setter - def progress(self, x): - # todo: throw error if outside of [0,1] - self._progress = x + '''@progress.setter + def progress(self, x): + if x > 1: + x = 1 + if x < 0: + x = 0 + self._progress = x''' def _handleError(self, error_message): self.stat = STAT_FAIL