#!/usr/bin/env python3.4 # # Copyright 2016 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Tool to interactively call methods of code snippets. Mobly Code Snippet Lib (https://github.com/google/mobly-snippet-lib/) is a library for triggering custom actions on Android devices by means of an RPC service. Usage: $ snippet_shell com.my.package.snippets >>> s.mySnippet('example') u'You said: example' """ import argparse import logging import sys from mobly.controllers import android_device from mobly.controllers.android_device_lib import jsonrpc_shell_base class SnippetShell(jsonrpc_shell_base.JsonRpcShellBase): def __init__(self, package): self._package = package def _start_services(self, console_env): """Overrides superclass.""" self._ad.load_snippet(name='snippet', package=self._package) console_env['snippet'] = self._ad.snippet console_env['s'] = self._ad.snippet def _get_banner(self, serial): lines = [ 'Connected to %s.' % serial, 'Call methods against:', ' ad (android_device.AndroidDevice)', ' snippet or s (Snippet)' ] return '\n'.join(lines) if __name__ == '__main__': parser = argparse.ArgumentParser( description='Interactive client for Mobly code snippets.') parser.add_argument( '-s', '--serial', help='Device serial to connect to (if more than one device is connected)') parser.add_argument('package', metavar='PACKAGE_NAME', type=str, nargs='?', help='The package name of the snippet to use.') parser.add_argument('--mbs', help='Whether to connect to Mobly Bundled Snippets', action='store_true') args = parser.parse_args() if args.package and args.mbs: print('Cannot specify both --package and --mbs', file=sys.stderr) sys.exit(1) if args.mbs: package = android_device.MBS_PACKAGE else: package = args.package logging.basicConfig(level=logging.INFO) SnippetShell(package).main(args.serial)