commands.py revision 3c02dbac644d951bc264158d3f4efea577345b84
14f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta# Copyright 2014 The Chromium OS Authors. All rights reserved. 2e83b0cadc67882c1ba7f430d16dab80c9b3a0228Dan Handley# Use of this source code is governed by a BSD-style license that can be 34f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta# found in the LICENSE file. 44f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 54f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta"""Module contains a simple client lib to the registration RPC.""" 64f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 74f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Guptaimport json 84f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Guptaimport logging 94f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Guptaimport urllib2 104f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 114f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Guptaimport common 124f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Guptafrom fake_device_server.client_lib import common_client 134f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Guptafrom fake_device_server import commands as s_commands 144f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 154f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 164f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Guptaclass CommandsClient(common_client.CommonClient): 174f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta """Client library for commands method.""" 184f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 194f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta def __init__(self, *args, **kwargs): 204f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta common_client.CommonClient.__init__( 214f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta self, s_commands.COMMANDS_PATH, *args, **kwargs) 224f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 234f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 244f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta def get_command(self, command_id): 254f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta """Returns info about the given command using |command_id|. 264f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 274f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta @param command_id: valid id for a command. 284f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta """ 294f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta request = urllib2.Request(self.get_url([command_id]), 304f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta headers=self.add_auth_headers()) 314f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta url_h = urllib2.urlopen(request) 324f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta return json.loads(url_h.read()) 334f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 344f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 354f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta def list_commands(self, device_id): 364f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta """Returns the list of commands for the given |device_id|. 374f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 384f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta @param command_id: valid id for a command. 394f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta """ 40b739f22a99c96d5a295f083125505b5b5ec2f8b6Achin Gupta request = urllib2.Request(self.get_url(params={'deviceId':device_id}), 41b739f22a99c96d5a295f083125505b5b5ec2f8b6Achin Gupta headers=self.add_auth_headers()) 424f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta url_h = urllib2.urlopen(request) 434f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta return json.loads(url_h.read()) 444f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 454f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 464f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta def update_command(self, command_id, data, replace=False): 474f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta """Updates the command with |data|. 484f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 494f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta @param command_id: id of the command to update. 504f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta @param data: data to update command with. 514f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta @param replace: If True, replace all data with the given data using the 524f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta PUT operation. 534f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta """ 544f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta if not data: 554f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta return 564f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 574f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta headers = self.add_auth_headers({'Content-Type': 'application/json'}) 584f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta request = urllib2.Request(self.get_url([command_id]), json.dumps(data), 594f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta headers=headers) 604f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta if replace: 614f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta request.get_method = lambda: 'PUT' 624f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta else: 634f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta request.get_method = lambda: 'PATCH' 644f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 654f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta url_h = urllib2.urlopen(request) 664f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta return json.loads(url_h.read()) 674f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 684f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 694f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta def create_command(self, device_id, data): 704f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta """Creates a new command. 714f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta 724f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta @device_id: ID of device to send command to. 734f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta @param data: command. 744f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta """ 754f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta headers = self.add_auth_headers({'Content-Type': 'application/json'}) 764f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta data['deviceId'] = device_id 774f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta request = urllib2.Request(self.get_url(), 784f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta json.dumps(data), 794f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta headers=headers) 804f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta url_h = urllib2.urlopen(request) 814f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta return json.loads(url_h.read()) 824f6ad66ae9fcc8bcb3b0fcee10b7ab1ffcaf1a5Achin Gupta