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