def star(list, delete, repo): '''List, star, or unstar repositories''' if CTX['config']['auth']['token'] is None or CTX['config']['auth'][ 'username'] is None: click.echo('Please login with username and password: tentacle login') sys.exit(1) if list is True: res = Hub().list_starred_repos(CTX['config']['auth']['username'], CTX['config']['auth']['token']) click.echo('Count:{}'.format(res['count'])) click.echo( pretty_table( res['results'], filters=CTX['config']['table']['star']['filters'], locations=CTX['config']['table']['star']['locations'], sort_keys=CTX['config']['table']['star']['sort']['keys'], sort_reverse=CTX['config']['table']['star']['sort']['reverse'], ), ) sys.exit(0) if not repo: click.echo("Please enter the repo argument") sys.exit(1) if delete is True: Hub().unstar(repo, CTX['config']['auth']['token']) click.echo('UnStar {} success'.format(repo)) sys.exit(0) Hub().star(repo, CTX['config']['auth']['token']) click.echo('Star {} success'.format(repo))
def test_hub_plug_setup(self): watcher = HubWatcher() hub = Hub(rpc_port=0, watcher=watcher) hub.start() self.assertTrue(hub.running) # assemble a component from a server and a client plug = HubPlug("test_component") plug.connect(hub.rpc_uri) components = plug.hub_rpc_client.client.query_components() self.assertEqual(len(components), 1) components = plug.hub_rpc_client.client.query_components("test_component") self.assertEqual(len(components), 1) publishers = plug.hub_rpc_client.client.query_publishers() self.assertEqual(len(publishers), 1) msgtype = plug.msgtype publishers = plug.hub_rpc_client.client.query_publishers(msgtype) self.assertEqual(len(publishers), 1) # disconnect from hub, stop server, close sockets plug.stop() # hub needs time to cleanup gevent.sleep(0.01) client = BaseClient(hub.rpc_server.uri) # make sure component record was released components = client.client.query_components("test_component") self.assertEqual(len(components), 0) # make sure publisher record was released publishers = client.client.query_publishers() self.assertEqual(len(publishers), 0) self.assertEqual(len(watcher.component_changes), 2) self.assertEqual(len(watcher.publisher_changes), 2) self.assertEqual(len(watcher.component_loses), 0) hub.stop()
def test_good_hub_setup(self): hub = Hub(rpc_port=0) hub.start() gevent.sleep(0.001) self.assertTrue(hub.running) # make sure calling run again does no harm hub.start() gevent.sleep(0.001) self.assertTrue(hub.running) # assemble a component from a server and a client api = TestAPI1() svr = BaseServer(api_object=api, api_name="test_api1", api_version="1.0.0", port=0) svr.run() client = BaseClient(hub.rpc_uri) res = client.client.register_component({'rpc_uri': svr.uri}, "foo") gevent.sleep(0.001) # check to see that hub connected back to us and send ping self.assertEquals(len(api.got_list), 1) svr.stop() hub.stop() client.close()
def tag(repo): '''List tags of repository''' res = Hub().tag(repo, CTX['config']['auth']['token']) click.echo('Count:{}'.format(res['count'])) click.echo( pretty_table( res['results'], filters=CTX['config']['table']['tag']['filters'], locations=CTX['config']['table']['tag']['locations'], sort_keys=CTX['config']['table']['tag']['sort']['keys'], sort_reverse=CTX['config']['table']['tag']['sort']['reverse'], ), )
def search(query): '''Search for repositories from Docker Hub by key word''' if CTX['config']['auth']['token'] is None: click.echo('Please login with username and password: tentacle login') sys.exit(1) res = Hub().search(CTX['config']['auth']['token'], query) click.echo('Count:{}'.format(res['count'])) click.echo( pretty_table( res['results'], filters=CTX['config']['table']['search']['filters'], locations=CTX['config']['table']['search']['locations'], sort_keys=CTX['config']['table']['search']['sort']['keys'], sort_reverse=CTX['config']['table']['search']['sort']['reverse'], ), )
def repo(): '''List repositories''' if CTX['config']['auth']['token'] is None or CTX['config']['auth'][ 'username'] is None: click.echo('Please login with username and password: tentacle login') sys.exit(1) res = Hub().list_repos(CTX['config']['auth']['username'], CTX['config']['auth']['token']) click.echo( pretty_table( res, filters=CTX['config']['table']['repo']['filters'], locations=CTX['config']['table']['repo']['locations'], sort_keys=CTX['config']['table']['repo']['sort']['keys'], sort_reverse=CTX['config']['table']['repo']['sort']['reverse'], ), )
def login(): '''Use username and password to obtain an access token''' username = click.prompt('Username', type=str) password = click.prompt('Password', type=str) token = Hub().login(username, password)['token'] with open(CONFIG, 'r+') as fd: config = json.load(fd) config['auth'] = { 'username': username, 'password': password, 'token': token } fd.seek(0) json.dump(config, fd, indent=4) click.echo('Login success')
def show(repo): '''Show detailed information of repository''' res = Hub().show(repo, CTX['config']['auth']['token']) click.echo('Name: {}'.format(res['name'])) click.echo('Starred: {}'.format(res['has_starred'])) click.echo('User: {}'.format(res['user'])) click.echo('Namespace: {}'.format(res['namespace'])) click.echo('Repository Type: {}'.format(res['repository_type'])) click.echo('Private: {}'.format(res['is_private'])) click.echo('Automated: {}'.format(res['is_automated'])) click.echo('Star Count: {}'.format(res['star_count'])) click.echo('Pull Count: {}'.format(res['pull_count'])) click.echo('Last Updated: {}'.format(res['last_updated'])) click.echo('Permissions: {}'.format(res['permissions'])) if res['description']: click.echo('Description: {}'.format(res['description'])) if res['full_description']: click.echo('Full Description: \n{}'.format(res['full_description']))
HALLWAY_MOTION_SENSOR_LIGHTS = [ Light(name=HUE_PLAY_TV, logger=log), Light(name=HUE_PLAY_BOOKCASE, logger=log), Light(name=LIVING_ROOM_LAMP, logger=log), Light(name=HALLWAY_SPOT_ONE, logger=log), Light(name=HALLWAY_SPOT_TWO, logger=log) ] # Grouping of the lights the kitchen motion sensor controls KITCHEN_MOTION_SENSOR_LIGHTS = [ Light(name=KITCHEN_COUNTER_SPOT, logger=log), Light(name=KITCHEN_SINK_SPOT, logger=log) ] # Create the Hub and Motion Sensor objects we need, from the config file values hub = Hub(logger=log, found_at_ip=HUE_HUB_IP) hallway_motion_sensor = MotionSensor( logger=log, motion_sensor_name=HALLWAY_MOTION_SENSOR, connected_to_hub=hub, lights=HALLWAY_MOTION_SENSOR_LIGHTS) kitchen_motion_sensor = MotionSensor( logger=log, motion_sensor_name=KITCHEN_MOTION_SENSOR, connected_to_hub=hub, lights=KITCHEN_MOTION_SENSOR_LIGHTS) # Start a thread to ping the Hue hub, if these pings stop working, then perhaps the hub has gone down? hub_heartbeat_thread = Thread(name="hub_heartbeat_thread", target=hub.heartbeat) hub_heartbeat_thread.start()