Cloning a job now also clones the one-time hosts correctly.

Risk: low
Visibility: medium (UI bug fix)

Signed-off-by: James Ren <jamesren@google.com>



git-svn-id: http://test.kernel.org/svn/autotest/trunk@1937 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/afe/rpc_interface.py b/frontend/afe/rpc_interface.py
index 0971696..fa13e50 100644
--- a/frontend/afe/rpc_interface.py
+++ b/frontend/afe/rpc_interface.py
@@ -420,13 +420,31 @@
              in query if queue_entry.host and not queue_entry.meta_host]
     meta_hosts = [queue_entry.meta_host.name for queue_entry
                   in query if queue_entry.meta_host]
-    host_info = get_hosts(hostname__in=[host.hostname for host in hosts])
+    host_dicts = []
 
-    for host in host_info:
-        platform = host['platform']
-        if platform is not None and platform in host['labels']:
-            host['labels'].remove(platform)
-        host['other_labels'] = ', '.join(host['labels'])
+    for host in hosts:
+        host_dict = {}
+        host_dict['hostname'] = host.hostname
+        host_dict['id'] = host.id
+
+        # one-time host
+        if host.invalid:
+            host_dict['platform'] = '(one-time host)'
+            host_dict['locked_text'] = ''
+
+        else:
+            platform = host.platform()
+            if platform:
+                host_dict['platform'] = platform.name
+            else:
+                host_dict['platform'] = None
+            labels = [label.name for label in host.labels.all()]
+            if platform and platform.name in labels:
+                labels.remove(platform.name)
+            host_dict['other_labels'] = ', '.join(labels)
+            host_dict['status'] = host.status
+            host_dict['locked'] = host.locked
+        host_dicts.append(host_dict)
 
     meta_host_counts = {}
     for meta_host in meta_hosts:
@@ -435,7 +453,7 @@
 
     info['job'] = job.get_object_dict()
     info['meta_host_counts'] = meta_host_counts
-    info['hosts'] = host_info
+    info['hosts'] = host_dicts
 
     return rpc_utils.prepare_for_serialization(info)