Revision 5ce3ce4f snf-astakos-app/astakos/im/api/__init__.py
b/snf-astakos-app/astakos/im/api/__init__.py | ||
---|---|---|
51 | 51 |
|
52 | 52 |
absolute = lambda request, url: request.build_absolute_uri(url) |
53 | 53 |
|
54 |
|
|
54 | 55 |
def render_fault(request, fault): |
55 | 56 |
if isinstance(fault, InternalServerError) and settings.DEBUG: |
56 | 57 |
fault.details = format_exc(fault) |
... | ... | |
63 | 64 |
response['Content-Length'] = len(response.content) |
64 | 65 |
return response |
65 | 66 |
|
67 |
|
|
66 | 68 |
def api_method(http_method=None): |
67 | 69 |
"""Decorator function for views that implement an API method.""" |
68 | 70 |
def decorator(func): |
... | ... | |
82 | 84 |
return wrapper |
83 | 85 |
return decorator |
84 | 86 |
|
87 |
|
|
85 | 88 |
def _get_user_by_username(user_id): |
86 | 89 |
try: |
87 |
user = AstakosUser.objects.get(username = user_id)
|
|
90 |
user = AstakosUser.objects.get(username=user_id)
|
|
88 | 91 |
except AstakosUser.DoesNotExist: |
89 | 92 |
raise ItemNotFound('Invalid userid') |
90 | 93 |
else: |
91 | 94 |
response = HttpResponse() |
92 |
response.status=200
|
|
93 |
user_info = {'id':user.id, |
|
94 |
'username':user.username, |
|
95 |
'email':[user.email], |
|
96 |
'name':user.realname, |
|
97 |
'auth_token_created':user.auth_token_created.strftime(format), |
|
98 |
'auth_token_expires':user.auth_token_expires.strftime(format), |
|
99 |
'has_credits':user.has_credits, |
|
100 |
'enabled':user.is_active, |
|
101 |
'groups':[g.name for g in user.groups.all()]} |
|
95 |
response.status = 200
|
|
96 |
user_info = {'id': user.id,
|
|
97 |
'username': user.username,
|
|
98 |
'email': [user.email],
|
|
99 |
'name': user.realname,
|
|
100 |
'auth_token_created': user.auth_token_created.strftime(format),
|
|
101 |
'auth_token_expires': user.auth_token_expires.strftime(format),
|
|
102 |
'has_credits': user.has_credits,
|
|
103 |
'enabled': user.is_active,
|
|
104 |
'groups': [g.name for g in user.groups.all()]}
|
|
102 | 105 |
response.content = json.dumps(user_info) |
103 | 106 |
response['Content-Type'] = 'application/json; charset=UTF-8' |
104 | 107 |
response['Content-Length'] = len(response.content) |
105 | 108 |
return response |
106 | 109 |
|
110 |
|
|
107 | 111 |
def _get_user_by_email(email): |
108 | 112 |
if not email: |
109 | 113 |
raise BadRequest('Email missing') |
110 | 114 |
try: |
111 |
user = AstakosUser.objects.get(email = email)
|
|
115 |
user = AstakosUser.objects.get(email=email)
|
|
112 | 116 |
except AstakosUser.DoesNotExist: |
113 | 117 |
raise ItemNotFound('Invalid email') |
114 |
|
|
118 |
|
|
115 | 119 |
if not user.is_active: |
116 | 120 |
raise ItemNotFound('Inactive user') |
117 | 121 |
else: |
118 | 122 |
response = HttpResponse() |
119 |
response.status=200
|
|
120 |
user_info = {'id':user.id, |
|
121 |
'username':user.username, |
|
122 |
'email':[user.email], |
|
123 |
'enabled':user.is_active, |
|
124 |
'name':user.realname, |
|
125 |
'auth_token_created':user.auth_token_created.strftime(format), |
|
126 |
'auth_token_expires':user.auth_token_expires.strftime(format), |
|
127 |
'has_credits':user.has_credits, |
|
128 |
'groups':[g.name for g in user.groups.all()], |
|
129 |
'user_permissions':[p.codename for p in user.user_permissions.all()]} |
|
123 |
response.status = 200
|
|
124 |
user_info = {'id': user.id,
|
|
125 |
'username': user.username,
|
|
126 |
'email': [user.email],
|
|
127 |
'enabled': user.is_active,
|
|
128 |
'name': user.realname,
|
|
129 |
'auth_token_created': user.auth_token_created.strftime(format),
|
|
130 |
'auth_token_expires': user.auth_token_expires.strftime(format),
|
|
131 |
'has_credits': user.has_credits,
|
|
132 |
'groups': [g.name for g in user.groups.all()],
|
|
133 |
'user_permissions': [p.codename for p in user.user_permissions.all()]}
|
|
130 | 134 |
response.content = json.dumps(user_info) |
131 | 135 |
response['Content-Type'] = 'application/json; charset=UTF-8' |
132 | 136 |
response['Content-Length'] = len(response.content) |
133 | 137 |
return response |
134 | 138 |
|
139 |
|
|
135 | 140 |
@api_method(http_method='GET') |
136 | 141 |
def get_services(request): |
137 | 142 |
callback = request.GET.get('callback', None) |
138 | 143 |
services = Service.objects.all() |
139 |
data = tuple({'id':s.pk, 'name':s.name, 'url':s.url, 'icon':s.icon} for s in services) |
|
144 |
data = tuple({'id': s.pk, 'name': s.name, 'url': s.url, 'icon': |
|
145 |
s.icon} for s in services) |
|
140 | 146 |
data = json.dumps(data) |
141 | 147 |
mimetype = 'application/json' |
142 | 148 |
|
... | ... | |
146 | 152 |
|
147 | 153 |
return HttpResponse(content=data, mimetype=mimetype) |
148 | 154 |
|
155 |
|
|
149 | 156 |
@api_method() |
150 | 157 |
def get_menu(request, with_extra_links=False, with_signout=True): |
151 | 158 |
user = request.user |
... | ... | |
159 | 166 |
pass |
160 | 167 |
if not isinstance(user, AstakosUser): |
161 | 168 |
index_url = reverse('index') |
162 |
l = [{ 'url': absolute(request, index_url), 'name': "Sign in"}]
|
|
169 |
l = [{'url': absolute(request, index_url), 'name': "Sign in"}] |
|
163 | 170 |
else: |
164 | 171 |
l = [] |
165 | 172 |
append = l.append |
... | ... | |
216 | 223 |
), |
217 | 224 |
item( |
218 | 225 |
url=absolute(request, |
219 |
reverse('group_create_list') |
|
220 |
), |
|
226 |
reverse('group_create_list')
|
|
227 |
),
|
|
221 | 228 |
name="Create" |
222 | 229 |
), |
223 | 230 |
item( |
... | ... | |
246 | 253 |
name="Sign out" |
247 | 254 |
) |
248 | 255 |
) |
249 |
|
|
256 |
|
|
250 | 257 |
callback = request.GET.get('callback', None) |
251 | 258 |
data = json.dumps(tuple(l)) |
252 | 259 |
mimetype = 'application/json' |
... | ... | |
257 | 264 |
|
258 | 265 |
return HttpResponse(content=data, mimetype=mimetype) |
259 | 266 |
|
267 |
|
|
260 | 268 |
class MenuItem(dict): |
261 | 269 |
current_path = '' |
262 |
|
|
270 |
|
|
263 | 271 |
def __init__(self, *args, **kwargs): |
264 | 272 |
super(MenuItem, self).__init__(*args, **kwargs) |
265 | 273 |
if kwargs.get('url') or kwargs.get('submenu'): |
266 | 274 |
self.__set_is_active__() |
267 |
|
|
275 |
|
|
268 | 276 |
def __setitem__(self, key, value): |
269 | 277 |
super(MenuItem, self).__setitem__(key, value) |
270 | 278 |
if key in ('url', 'submenu'): |
271 | 279 |
self.__set_is_active__() |
272 |
|
|
280 |
|
|
273 | 281 |
def __set_is_active__(self): |
274 | 282 |
if self.get('is_active'): |
275 | 283 |
return |
... | ... | |
285 | 293 |
self.__setitem__('is_active', True) |
286 | 294 |
except StopIteration: |
287 | 295 |
return |
288 |
|
|
296 |
|
|
289 | 297 |
def __setattribute__(self, name, value): |
290 | 298 |
super(MenuItem, self).__setattribute__(name, value) |
291 | 299 |
if name == 'current_path': |
292 |
self.__set_is_active__() |
|
300 |
self.__set_is_active__() |
Also available in: Unified diff