-
Notifications
You must be signed in to change notification settings - Fork 13
/
__init__.py
125 lines (103 loc) · 4.13 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division, print_function,
unicode_literals)
from horus.schemas import LoginSchema
from horus.schemas import RegisterSchema
from horus.schemas import ForgotPasswordSchema
from horus.schemas import ResetPasswordSchema
from horus.schemas import ProfileSchema
from horus.forms import SubmitForm
from horus.resources import RootFactory
from horus.interfaces import IUIStrings
from horus.interfaces import IUserClass
from horus.interfaces import IActivationClass
from horus.interfaces import ILoginForm
from horus.interfaces import ILoginSchema
from horus.interfaces import IRegisterForm
from horus.interfaces import IRegisterSchema
from horus.interfaces import IForgotPasswordForm
from horus.interfaces import IForgotPasswordSchema
from horus.interfaces import IResetPasswordForm
from horus.interfaces import IResetPasswordSchema
from horus.interfaces import IProfileForm
from horus.interfaces import IProfileSchema
from horus.lib import get_user
from horus.lib import render_flash_messages_from_queues
from horus import models
from horus.strings import UIStringsBase
from pyramid.events import BeforeRender
from pyramid.path import DottedNameResolver
from hem.config import get_class_from_config
import inspect
def groupfinder(userid, request):
user = request.user
groups = None
if user:
groups = []
for group in user.groups:
groups.append('group:%s' % group.name)
groups.append('user:%s' % user.id_value)
return groups
def scan(config, module):
r = DottedNameResolver()
module = r.maybe_resolve(module)
module = inspect.getmodule(module)
model_mappings = {
models.UserMixin: IUserClass,
models.ActivationMixin: IActivationClass,
}
for name, obj in inspect.getmembers(module):
if inspect.isclass(obj):
# don't register the horus mixins
if obj.__module__ == 'horus.models':
continue
for mixin, interface in model_mappings.items():
if isinstance(obj, type) and issubclass(obj, mixin):
config.registry.registerUtility(obj, interface)
def includeme(config):
settings = config.registry.settings
# str('user') returns a bytestring under Python 2 and a
# unicode string under Python 3, which is what we need:
config.add_request_method(get_user, str('user'), reify=True)
config.set_root_factory(RootFactory)
config.add_directive('scan_horus', scan)
if not config.registry.queryUtility(IUserClass):
try:
user_class = get_class_from_config(settings, 'horus.user_class')
config.registry.registerUtility(user_class, IUserClass)
except:
# maybe they are using scan?
pass
if not config.registry.queryUtility(IActivationClass):
try:
activation_class = get_class_from_config(settings,
'horus.activation_class')
config.registry.registerUtility(activation_class,
IActivationClass)
except:
# maybe they are using scan?
pass
defaults = [
(IUIStrings, UIStringsBase),
(ILoginSchema, LoginSchema),
(IRegisterSchema, RegisterSchema),
(IForgotPasswordSchema, ForgotPasswordSchema),
(IResetPasswordSchema, ResetPasswordSchema),
(IProfileSchema, ProfileSchema)
]
forms = [
ILoginForm, IRegisterForm, IForgotPasswordForm,
IResetPasswordForm, IProfileForm
]
for iface, default in defaults:
if not config.registry.queryUtility(iface):
config.registry.registerUtility(default, iface)
for form in forms:
if not config.registry.queryUtility(form):
config.registry.registerUtility(SubmitForm, form)
def on_before_render(event):
fn = render_flash_messages_from_queues
event['render_flash_messages'] = lambda: fn(event['request'])
config.add_subscriber(on_before_render, BeforeRender)
config.include('horus.routes')
config.scan(ignore=str('horus.tests'))