1 from django
.shortcuts
import render
, redirect
2 from sf_t3d
.decorators
import login_required
3 from django
.http
import HttpResponse
6 import authosm
.utils
as osmutils
7 from lib
.osm
.osmclient
.clientv2
import Client
9 logging
.basicConfig(level
=logging
.DEBUG
)
10 log
= logging
.getLogger(__name__
)
14 def user_list(request
):
15 user
= osmutils
.get_user(request
)
17 result
= client
.user_list(user
.get_token())
19 'users': result
['data'] if result
and result
['error'] is False else []
21 return __response_handler(request
, result
, 'user_list.html')
26 user
= osmutils
.get_user(request
)
29 "username": request
.POST
['username'],
30 "password": request
.POST
['password'],
31 "projects": request
.POST
.getlist('projects')
34 result
= client
.user_create(user
.get_token(), user_data
)
36 return __response_handler(request
, result
, 'users:list', to_redirect
=True)
40 def delete(request
, user_id
=None):
41 user
= osmutils
.get_user(request
)
44 del_res
= client
.user_delete(user
.get_token(), user_id
)
45 except Exception as e
:
47 return __response_handler(request
, {}, 'users:list', to_redirect
=True, )
50 def update(request
, user_id
=None):
51 user
= osmutils
.get_user(request
)
54 projects_old
= request
.POST
.get('projects_old').split(',')
55 projects_new
= request
.POST
.getlist('projects')
56 default_project
= request
.POST
.get('default_project')
57 projects_new
.append(default_project
)
58 projects_to_add
= list(set(projects_new
) - set(projects_old
))
59 projects_to_remove
= list(set(projects_old
) - set(projects_new
))
63 for p
in projects_to_remove
:
64 payload
["$"+str(p
)] = None
65 for p
in projects_to_add
:
66 if p
not in projects_old
:
67 payload
["$+"+str(p
)] = str(p
)
68 payload
["$" + default_project
] = None
69 payload
["$+[0]"] = default_project
71 update_res
= client
.user_update(user
.get_token(), user_id
, {"projects": payload
})
72 except Exception as e
:
74 return __response_handler(request
, {}, 'users:list', to_redirect
=True, )
77 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
78 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
79 if 'application/json' in raw_content_types
or url
is None:
80 return HttpResponse(json
.dumps(data_res
), content_type
="application/json", *args
, **kwargs
)
82 return redirect(url
, *args
, **kwargs
)
84 return render(request
, url
, data_res
)