Get rid of msettings, replace with a convenient singleton class that also wraps prompt and display

This commit is contained in:
Alexandre Aubin 2021-07-09 21:39:07 +02:00
parent ebdb1e22ee
commit 67d9c9cdd1
10 changed files with 35 additions and 38 deletions

View file

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from os import environ
from moulinette.core import (
MoulinetteError,
Moulinette18n,
@ -30,22 +31,34 @@ __all__ = [
"api",
"cli",
"m18n",
"env",
"init_interface",
"MoulinetteError",
"Moulinette"
]
msettings = dict()
m18n = Moulinette18n()
class classproperty(object):
def __init__(self, f):
self.f = f
def __get__(self, obj, owner):
return self.f(owner)
def prompt(**kwargs):
return msettings["interface"].prompt(**kwargs)
class Moulinette():
_interface = None
def prompt(*args, **kwargs):
return Moulinette.interface.prompt(*args, **kwargs)
def display(**kwargs):
return msettings["interface"].display(**kwargs)
def display(*args, **kwargs):
return Moulinette.interface.display(*args, **kwargs)
@classproperty
def interface(cls):
return cls._interface
# Package functions
@ -127,8 +140,3 @@ def cli(args, top_parser, output_as=None, timeout=None):
logging.getLogger("moulinette").error(e.strerror)
return 1
return 0
def env():
"""Initialise moulinette specific configuration."""
return init_moulinette_env()

View file

@ -11,9 +11,9 @@ from time import time
from collections import OrderedDict
from importlib import import_module
from moulinette import m18n, msettings
from moulinette.cache import open_cachefile
from moulinette import m18n, Moulinette
from moulinette.globals import init_moulinette_env
from moulinette.cache import open_cachefile
from moulinette.core import (
MoulinetteError,
MoulinetteLock,
@ -97,7 +97,7 @@ class CommentParameter(_ExtraParameter):
def __call__(self, message, arg_name, arg_value):
if arg_value is None:
return
return msettings['interface'].display(m18n.n(message))
return Moulinette.display(m18n.n(message))
@classmethod
def validate(klass, value, arg_name):
@ -134,7 +134,7 @@ class AskParameter(_ExtraParameter):
try:
# Ask for the argument value
return msettings['interface'].prompt(m18n.n(message))
return Moulinette.prompt(m18n.n(message))
except NotImplementedError:
return arg_value
@ -172,7 +172,7 @@ class PasswordParameter(AskParameter):
try:
# Ask for the password
return msettings['interface'].prompt(m18n.n(message), True, True)
return Moulinette.prompt(m18n.n(message), True, True)
except NotImplementedError:
return arg_value
@ -499,7 +499,7 @@ class ActionsMap(object):
return
authenticator = self.get_authenticator(auth_method)
msettings['interface'].authenticate(authenticator)
Moulinette.interface.authenticate(authenticator)
def process(self, args, timeout=None, **kwargs):
"""

View file

@ -6,7 +6,6 @@ import hashlib
import hmac
from moulinette.utils.text import random_ascii
from moulinette.cache import open_cachefile, get_cachedir, cachefile_exists
from moulinette.core import MoulinetteError, MoulinetteAuthenticationError
logger = logging.getLogger("moulinette.authenticator")

View file

@ -42,10 +42,3 @@ def open_cachefile(filename, mode="r", subdir=""):
cache_dir = get_cachedir(subdir, make_dir=True if mode[0] == "w" else False)
file_path = os.path.join(cache_dir, filename)
return open(file_path, mode)
def cachefile_exists(filename, subdir=""):
cache_dir = get_cachedir(subdir, make_dir=False)
file_path = os.path.join(cache_dir, filename)
return os.path.exists(file_path)

View file

@ -6,7 +6,7 @@ import argparse
import copy
from collections import deque, OrderedDict
from moulinette import msettings, m18n
from moulinette import Moulinette, m18n
from moulinette.core import MoulinetteError
logger = logging.getLogger("moulinette.interface")

View file

@ -13,7 +13,7 @@ from geventwebsocket import WebSocketError
from bottle import request, response, Bottle, HTTPResponse
from bottle import abort
from moulinette import m18n, env, msettings
from moulinette import m18n, Moulinette
from moulinette.actionsmap import ActionsMap
from moulinette.core import MoulinetteError, MoulinetteValidationError
from moulinette.interfaces import (
@ -734,7 +734,7 @@ class Interface:
self._app = app
msettings["interface"] = self
Moulinette._interface = self
def run(self, host="localhost", port=80):
"""Run the moulinette

View file

@ -11,7 +11,7 @@ from datetime import date, datetime
import argcomplete
from moulinette import m18n, msettings
from moulinette import m18n, Moulinette
from moulinette.actionsmap import ActionsMap
from moulinette.core import MoulinetteError, MoulinetteValidationError
from moulinette.interfaces import (
@ -473,7 +473,7 @@ class Interface:
load_only_category=load_only_category,
)
msettings["interface"] = self
Moulinette._interface = self
def run(self, args, output_as=None, timeout=None):
"""Run the moulinette

View file

@ -3,7 +3,7 @@
import os
import sys
from setuptools import setup, find_packages
from moulinette.globals import init_moulinette_env
from moulinette import init_moulinette_env
LOCALES_DIR = init_moulinette_env()['LOCALES_DIR']

View file

@ -11,7 +11,7 @@ from moulinette.actionsmap import (
)
from moulinette.core import MoulinetteError
from moulinette import m18n, msettings
from moulinette import m18n, Moulinette
@pytest.fixture
@ -73,7 +73,7 @@ def test_ask_parameter(iface, mocker):
from moulinette.core import Moulinette18n
msettings["interface"] = iface
Moulinette._interface = iface
mocker.patch.object(Moulinette18n, "n", return_value="awesome_test")
mocker.patch.object(iface, "prompt", return_value="awesome_test")
arg = ask("foobar", "a", None)
@ -87,7 +87,7 @@ def test_password_parameter(iface, mocker):
from moulinette.core import Moulinette18n
msettings["interface"] = iface
Moulinette._interface = iface
mocker.patch.object(Moulinette18n, "n", return_value="awesome_test")
mocker.patch.object(iface, "prompt", return_value="awesome_test")
arg = ask("foobar", "a", None)

View file

@ -100,9 +100,6 @@ class TestAuthAPI:
self.login(moulinette_webapi)
assert "session.moulitest" in moulinette_webapi.cookies
print("====================cookie")
print(moulinette_webapi.cookiejar)
print(moulinette_webapi.cookies)
assert (
moulinette_webapi.get("/test-auth/default", status=200).text