summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonah BrĂ¼chert <jbb@kaidan.im>2024-03-28 18:37:13 +0100
committerJonah BrĂ¼chert <jbb@kaidan.im>2024-03-28 18:37:13 +0100
commitef416856fd87d37e93ce172a43c9ef85beab308d (patch)
tree9cd7ccd99477d2de960d87e311972713fbd44024
parentc387b99654ab37257441dab9927c14f07c05e219 (diff)
downloadweb-ef416856fd87d37e93ce172a43c9ef85beab308d.tar.gz
web-ef416856fd87d37e93ce172a43c9ef85beab308d.tar.bz2
web-ef416856fd87d37e93ce172a43c9ef85beab308d.zip
Port away from flask-script
-rw-r--r--accounts/backend/mail/dummy.py2
-rw-r--r--accounts/utils/console.py20
-rwxr-xr-xmanage.py85
-rw-r--r--requirements.txt1
4 files changed, 45 insertions, 63 deletions
diff --git a/accounts/backend/mail/dummy.py b/accounts/backend/mail/dummy.py
index 3de3dbe..049df7a 100644
--- a/accounts/backend/mail/dummy.py
+++ b/accounts/backend/mail/dummy.py
@@ -40,8 +40,6 @@ class DummyBackend(Backend):
self.format = format
def _send(self, recipient: str, content: TemplateModule):
- print(type(content))
-
# we can't typecheck things defined in templates
body = content.body() # type: ignore
if not self.plain:
diff --git a/accounts/utils/console.py b/accounts/utils/console.py
index ef8b4fd..c63480a 100644
--- a/accounts/utils/console.py
+++ b/accounts/utils/console.py
@@ -1,22 +1,4 @@
# -*- coding: utf-8 -*-
-import flask_script as script
-
-
-class Command(script.Command):
- """
- This changes the Command class from Flask-Script in such way,
- that url_for will generate correct urls.
- """
-
- def __call__(self, app=None, *args, **kwargs):
- base_url = '%s://%s%s' % (
- app.config.get('PREFERRED_URL_SCHEME') or 'http',
- app.config.get('SERVER_NAME') or 'localhost',
- app.config.get('APPLICATION_ROOT') or '/')
-
- with app.test_request_context(base_url=base_url):
- return self.run(*args, **kwargs)
-
class TablePrinter(object):
@@ -80,7 +62,7 @@ class ConsoleForm(object):
_ready = False
def __init__(self, formcls, **kwargs):
- self.form = formcls()
+ self.form = formcls(meta={'csrf': False})
self._fill(kwargs)
self._ready = True
diff --git a/manage.py b/manage.py
index c1abbe3..1e5d8cb 100755
--- a/manage.py
+++ b/manage.py
@@ -1,16 +1,17 @@
#!/usr/bin/env python
from flask import current_app
-from flask_script import Manager, Server, Shell, Option, prompt_bool
-from accounts import create_app
+from argparse import ArgumentParser
+
from accounts.forms import RegisterForm
-from accounts.utils.console import Command, ConsoleForm, TablePrinter
+from accounts.utils.console import ConsoleForm, TablePrinter
from accounts.backend.mail.dummy import DummyBackend as DummyMailBackend
+from accounts import create_app
-class ListServices(Command):
+
+class ListServices():
"""List the configured services."""
- name = 'list-services'
def run(self):
table = TablePrinter(['Name', 'URL'])
@@ -18,16 +19,8 @@ class ListServices(Command):
for service in current_app.all_services])
-class ListUsers(Command):
+class ListUsers():
"""List registered users."""
- name = 'list-users'
-
- option_list = (
- Option('--locked', '-l', action='store_true', dest='locked',
- help='Include locked users.'),
- Option('--only-locked', '-L', action='store_true', dest='only_locked',
- help='Show ONLY locked users.'),
- )
def _get_users(self, locked, only_locked):
for user in current_app.user_backend.find():
@@ -45,27 +38,15 @@ class ListUsers(Command):
for user in self._get_users(locked, only_locked)])
-class CreateUser(Command):
+class CreateUser():
"""Register a user."""
- name = 'create-user'
-
- option_list = (
- Option('--ignore-blacklist', action='store_true',
- dest='ignore_blacklist', help='Ignore blackisted user names.'),
- Option('--print', '-p', action='store_true', dest='print_only',
- help='Do not send the activation link via mail, only print it.'),
- Option(dest='username', metavar='USERNAME',
- help='Username that should be registered.'),
- Option(dest='mail', metavar='MAIL',
- help='Mail address of the new user.'),
- )
def run(self, username, mail, ignore_blacklist=False, print_only=False):
form = ConsoleForm(RegisterForm, username=username, mail=mail)
form.csrf_enabled = False
del form.question
- if ignore_blacklist and prompt_bool('Blacklist wirklich ignorieren?'):
+ if ignore_blacklist:
current_app.username_blacklist = []
if not form.validate():
@@ -83,19 +64,41 @@ class CreateUser(Command):
def main():
- manager = Manager(create_app)
- manager.add_option('-c', '--config', dest='config', required=False)
-
- manager.add_command(
- 'runserver', Server(host='::', use_debugger=False))
- manager.add_command(
- 'debug', Server(host='::', use_debugger=True))
- manager.add_command(
- 'shell', Shell())
- manager.add_command(ListServices)
- manager.add_command(ListUsers)
- manager.add_command(CreateUser)
- manager.run()
+ parser = ArgumentParser(description="Spline Accounts")
+ parser.add_argument('-c', '--config', dest='config', required=False)
+
+ subparsers = parser.add_subparsers(dest="subcommand")
+ subparsers.add_parser("list-services")
+
+ list_users = subparsers.add_parser("list-users")
+ list_users.add_argument('--locked', '-l', action='store_true',
+ dest='locked', help='Include locked users.')
+ list_users.add_argument('--only-locked', '-L', action='store_true',
+ dest='only_locked', help='Show ONLY locked users.')
+
+ create_user = subparsers.add_parser("create-user")
+ create_user.add_argument('--ignore-blacklist', action='store_true',
+ dest='ignore_blacklist',
+ help='Ignore blackisted user names.')
+ create_user.add_argument('--print', '-p', action='store_true', dest='print_only',
+ help='Do not send the activation link via mail, only print it.'),
+ create_user.add_argument(dest='username', metavar='USERNAME',
+ help='Username that should be registered.'),
+ create_user.add_argument(dest='mail', metavar='MAIL',
+ help='Mail address of the new user.'),
+
+ args = parser.parse_args()
+
+ app = create_app()
+ with app.app_context():
+ if args.subcommand == "list-services":
+ ListServices().run()
+ elif args.subcommand == "list-users":
+ ListUsers().run(args.locked, args.only_locked)
+ elif args.subcommand == "create-user":
+ with app.test_request_context("/cli/create-user"):
+ CreateUser().run(args.username, args.mail, args.ignore_blacklist,
+ args.print_only)
if __name__ == '__main__':
diff --git a/requirements.txt b/requirements.txt
index bec8fbb..fe08567 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,5 @@
Flask==2.2.2 # >=0.10
Flask-WTF==1.2.1 # none
-Flask-Script==2.0.6 # none
Flask-Login==0.6.3 # none
Werkzeug==2.2.2 # >=0.6
Jinja2==3.1.3 # >=2.4