diff --git a/hiboo/application/__init__.py b/hiboo/application/__init__.py index c6916ebc302df3b9c6ff171ba45b91123fe47be3..b2de80b5a1bbeaf8e41b0212266a6725050ea4b1 100644 --- a/hiboo/application/__init__.py +++ b/hiboo/application/__init__.py @@ -5,8 +5,11 @@ blueprint = flask.Blueprint("application", __name__, template_folder="templates" from hiboo.application import base +from hiboo import models register = base.BaseApplication.register registry = base.BaseApplication.registry +setattr(models.Service, "application", + property(lambda self: registry.get(self.application_id))) from hiboo.application import sso, infrastructure, social, storage \ No newline at end of file diff --git a/hiboo/application/base.py b/hiboo/application/base.py index c20ae1b6f6237e418624106b6d53dadf18623b41..eb5b64d417ce978d64b97752239219dbfe7036a4 100644 --- a/hiboo/application/base.py +++ b/hiboo/application/base.py @@ -1,7 +1,34 @@ -from hiboo import sso -from hiboo.service.forms import ServiceForm as BaseForm +from hiboo import sso, models, format +from wtforms import validators, fields, widgets +from flask_babel import lazy_gettext as _ import flask +import flask_wtf + + +class BaseForm(flask_wtf.FlaskForm): + """ Base class for service forms, used in applications + """ + name = fields.StringField(_('Service name'), [validators.DataRequired()]) + provider = fields.StringField(_('Provider'), [validators.DataRequired()]) + description = fields.StringField(_('Description')) + policy = fields.SelectField(_('Profile policy'), + choices=list(models.Service.POLICIES.items())) + max_profiles = fields.IntegerField(_('Maximum profile count'), + [validators.NumberRange(1, 1000)]) + profile_format = fields.SelectField(_('Profile username format'), + choices=( + [("", _("Default ({})".format( + format.ProfileFormat.registry[None].message)) + )] + + [(name, format.message.capitalize()) + for name, format in format.ProfileFormat.registry.items() + if name is not None + ] + ) + ) + single_profile = fields.BooleanField(_('Enable single-profile behavior (no custom username, no additional profile)')) + submit = fields.SubmitField(_('Submit')) class BaseApplication(object): diff --git a/hiboo/profile/__init__.py b/hiboo/profile/__init__.py index 487311ddf354dac37ec105804ad24d881b533030..85382bf7d0809b22158e12f25545dc3867075287 100644 --- a/hiboo/profile/__init__.py +++ b/hiboo/profile/__init__.py @@ -4,7 +4,7 @@ import flask blueprint = flask.Blueprint("profile", __name__, template_folder="templates") import flask_login -from hiboo import models, utils, application +from hiboo import models, utils from hiboo.profile import forms @@ -47,7 +47,7 @@ def transition(profile, current, target, done=False): [] ), } - app = application.registry.get(profile.service.application_id) + app = profile.service.application index = 1 if done else 0 empty = ([], []) functions = ( diff --git a/hiboo/service/admin.py b/hiboo/service/admin.py index 780e59834ae740ac2d63f331f73e91869516bdd4..e5e97b53fed4210a6961fea80d51e8c29f2b56eb 100644 --- a/hiboo/service/admin.py +++ b/hiboo/service/admin.py @@ -1,5 +1,5 @@ from hiboo import models, utils, security, application -from hiboo.service import blueprint, forms +from hiboo.service import blueprint from flask_babel import lazy_gettext as _ import flask @@ -49,7 +49,7 @@ def create(application_id): @security.admin_required() def edit(service_uuid): service = models.Service.query.get(service_uuid) or flask.abort(404) - app = application.registry.get(service.application_id) or flask.abort(404) + app = service.application or flask.abort(404) form = app.Form() if form.validate_on_submit(): form.populate_obj(service) @@ -65,7 +65,7 @@ def edit(service_uuid): @security.admin_required() def details(service_uuid): service = models.Service.query.get(service_uuid) or flask.abort(404) - app = application.registry.get(service.application_id) or flask.abort(404) + app = service.application or flask.abort(404) return flask.render_template("service_details.html", service=service, application=app) @@ -83,7 +83,7 @@ def delete(service_uuid): @security.admin_required() def action(service_uuid, action): service = models.Service.query.get(service_uuid) or flask.abort(404) - app = application.registry.get(service.application_id) or flask.abort(404) + app = service.application or flask.abort(404) label, profile, quick = app.actions.get(action) or flask.abort(404) if profile: flask.abort(404) diff --git a/hiboo/service/forms.py b/hiboo/service/forms.py deleted file mode 100644 index cc21824335d1afa6f59897251e257e392e2e2215..0000000000000000000000000000000000000000 --- a/hiboo/service/forms.py +++ /dev/null @@ -1,29 +0,0 @@ -from wtforms import validators, fields, widgets -from flask_babel import lazy_gettext as _ - -from hiboo import models, application, format - -import flask_wtf - - -class ServiceForm(flask_wtf.FlaskForm): - name = fields.StringField(_('Service name'), [validators.DataRequired()]) - provider = fields.StringField(_('Provider'), [validators.DataRequired()]) - description = fields.StringField(_('Description')) - policy = fields.SelectField(_('Profile policy'), - choices=list(models.Service.POLICIES.items())) - max_profiles = fields.IntegerField(_('Maximum profile count'), - [validators.NumberRange(1, 1000)]) - profile_format = fields.SelectField(_('Profile username format'), - choices=( - [("", _("Default ({})".format( - format.ProfileFormat.registry[None].message)) - )] + - [(name, format.message.capitalize()) - for name, format in format.ProfileFormat.registry.items() - if name is not None - ] - ) - ) - single_profile = fields.BooleanField(_('Enable single-profile behavior (no custom username, no additional profile)')) - submit = fields.SubmitField(_('Submit'))