FIX: required imports
[myslice.git] / portal / accountview.py
1 from portal.templateviews            import LoginRequiredAutoLogoutView
2 #
3 from manifold.core.query             import Query
4 from manifold.manifoldapi            import execute_query
5 #
6 from myslice.viewutils               import topmenu_items, the_user
7 #
8 import json
9
10 # requires login
11 class AccountView(LoginRequiredAutoLogoutView):
12     template_name = "my_account.html"
13     
14     def dispatch(self, *args, **kwargs):
15         return super(AccountView, self).dispatch(*args, **kwargs)
16
17
18     def get_context_data(self, **kwargs):
19
20         user_query  = Query().get('local:user').select('config','email')
21         user_details = execute_query(self.request, user_query)
22         
23         # not always found in user_details...
24         config={}
25         for user_detail in user_details:
26             #email = user_detail['email']
27             if user_detail['config']:
28                 config = json.loads(user_detail['config'])
29
30         platform_query  = Query().get('local:platform').select('platform_id','platform')
31         account_query  = Query().get('local:account').select('user_id','platform_id','auth_type','config')
32         platform_details = execute_query(self.request, platform_query)
33         account_details = execute_query(self.request, account_query)
34        
35         # initial assignment needed for users having no account  
36         platform_name = ''
37         account_type = ''
38         account_usr_hrn = ''
39         account_pub_key = ''
40         platform_name_list = []
41         account_type_list = []
42         usr_hrn_list = []
43         pub_key_list = []          
44         for account_detail in account_details:
45             for platform_detail in platform_details:
46                 if platform_detail['platform_id'] == account_detail['platform_id']:
47                     platform_name = platform_detail['platform']
48                     account_type = account_detail['auth_type']
49                     account_config = json.loads(account_detail['config'])
50                     # a bit more pythonic
51                     account_usr_hrn = account_config.get('user_hrn','N/A')
52                     account_pub_key = account_config.get('user_public_key','N/A')
53                     
54                     platform_name_list.append(platform_name)
55                     account_type_list.append(account_type)
56                     usr_hrn_list.append(account_usr_hrn)
57                     pub_key_list.append(account_pub_key)
58         
59         # combining 4 lists into 1 [to render in the template] 
60         lst = [{'platform_name': t[0], 'account_type': t[1], 'usr_hrn':t[2], 'usr_pubkey':t[3]} 
61                for t in zip(platform_name_list, account_type_list, usr_hrn_list, pub_key_list)]
62         #print "test"
63         #print lst
64
65         context = super(AccountView, self).get_context_data(**kwargs)
66         context['data'] = lst
67         context['person']   = self.request.user
68         context ['firstname'] = config.get('firstname',"?")
69         context ['lastname'] = config.get('lastname',"?")
70         context ['fullname'] = context['firstname'] +' '+ context['lastname']
71         context ['authority'] = config.get('authority',"Unknown Authority")
72         #context['users'] = userlist.render(self.request)
73         
74         # XXX This is repeated in all pages
75         # more general variables expected in the template
76         context['title'] = 'Platforms connected to MySlice'
77         # the menu items on the top
78         context['topmenu_items'] = topmenu_items('My Account', self.request)
79         # so we can sho who is logged
80         context['username'] = the_user(self.request)
81 #        context ['firstname'] = config['firstname']
82         #context.update(page.prelude_env())
83         return context
84