FIX: conflict in My Account view. Thanks to thierry for making the code more efficient
[myslice.git] / portal / views.py
index d4fa22e..f2d4aed 100644 (file)
@@ -609,33 +609,57 @@ class AccountView(TemplateView):
     def get_context_data(self, **kwargs):
         #page = Page(self.request)
 
-        user_query  = Query().get('local:user').select('config')
-        user_accounts = execute_query(self.request, user_query)
+        user_query  = Query().get('local:user').select('config','email')
+        user_details = execute_query(self.request, user_query)
         
-        for user_account in user_accounts:
-            config = json.loads(user_account['config'])
-
-        #print "THis is a test"
-        #print config['firstname'] 
+        # not always found in user_details...
+        config={}
+        for user_detail in user_details:
+            #email = user_detail['email']
+            if user_detail['config']:
+                config = json.loads(user_detail['config'])
+
+        platform_query  = Query().get('local:platform').select('platform_id','platform')
+        account_query  = Query().get('local:account').select('user_id','platform_id','auth_type','config')
+        platform_details = execute_query(self.request, platform_query)
+        account_details = execute_query(self.request, account_query)
+       
+        # initial assignment needed for users having no account  
+        platform_name = ''
+        account_type = ''
+        account_usr_hrn = ''
+        account_pub_key = ''
+        platform_name_list = []
+        account_type_list = []
+        usr_hrn_list = []
+        pub_key_list = []          
+        for account_detail in account_details:
+            for platform_detail in platform_details:
+                if platform_detail['platform_id'] == account_detail['platform_id']:
+                    platform_name = platform_detail['platform']
+                    account_type = account_detail['auth_type']
+                    account_config = json.loads(account_detail['config'])
+                    # a bit more pythonic
+                    account_usr_hrn = account_config.get('user_hrn','N/A')
+                    account_pub_key = account_config.get('user_public_key','N/A')
+                    
+                    platform_name_list.append(platform_name)
+                    account_type_list.append(account_type)
+                    usr_hrn_list.append(account_usr_hrn)
+                    pub_key_list.append(account_pub_key)
         
-        #page.enqueue_query(network_query)
-
-        #page.expose_js_metadata()
-        #page.expose_queries()
-
-        #userlist = SimpleList(
-        #    title = None,
-        #    page  = page,
-        #    key   = 'user_id',
-        #    query = network_query,
-        #)
+        # combining 4 lists into 1 [to render in the template] 
+        lst = [{'platform_name': t[0], 'account_type': t[1], 'usr_hrn':t[2], 'usr_pubkey':t[3]} for t in zip(platform_name_list, account_type_list, usr_hrn_list, pub_key_list)]    
+        #print "test"
+        #print lst
 
         context = super(AccountView, self).get_context_data(**kwargs)
+        context['data'] = lst
         context['person']   = self.request.user
-        context ['fullname'] = config['firstname'] +' '+ config['lastname']    
-        context ['firstname'] = config['firstname']
-        context ['lastname'] = config['lastname']
-        context ['affiliation'] = config['affiliation']
+        context ['firstname'] = config.get('firstname',"?")
+        context ['lastname'] = config.get('lastname',"?")
+        context ['fullname'] = context['firstname'] +' '+ context['lastname']
+        context ['affiliation'] = config.get('affiliation',"Unknown Affiliation")
         #context['users'] = userlist.render(self.request)
         
         # XXX This is repeated in all pages
@@ -645,7 +669,7 @@ class AccountView(TemplateView):
         context['topmenu_items'] = topmenu_items('My Account', self.request)
         # so we can sho who is logged
         context['username'] = the_user(self.request)
-        context ['firstname'] = config['firstname']
+#        context ['firstname'] = config['firstname']
         #context.update(page.prelude_env())
         return context