Files
novafarma/gcloud auth application-default login/google-cloud-sdk/platform/bq/bq.py

163 lines
5.0 KiB
Python
Executable File

#!/usr/bin/env python
#
# Copyright 2012 Google Inc. All Rights Reserved.
"""Python script for interacting with BigQuery."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import pdb
import sys
import traceback
# Add to path dependencies if present.
_THIRD_PARTY_DIR = os.path.join(os.path.dirname(__file__), 'third_party')
if os.path.isdir(_THIRD_PARTY_DIR) and _THIRD_PARTY_DIR not in sys.path:
sys.path.insert(0, _THIRD_PARTY_DIR)
# This strange import below ensures that the correct 'google' is imported.
# We reload after sys.path is updated, so we know if we'll find our google
# before any other.
# pylint:disable=g-import-not-at-top
if 'google' in sys.modules:
import google
try:
reload(google)
except NameError:
import importlib
importlib.reload(google)
from absl import flags
from pyglib import appcommands
# pylint: disable=g-bad-import-order
import bq_flags
import bq_utils
import credential_loader
from frontend import bigquery_command
from frontend import bq_cached_client
from frontend import commands_iam
from frontend import command_cancel
from frontend import command_copy
from frontend import command_delete
from frontend import command_extract
from frontend import command_head
from frontend import command_info
from frontend import command_init
from frontend import command_insert
from frontend import command_list
from frontend import command_load
from frontend import command_make
from frontend import command_mkdef
from frontend import command_partition
from frontend import command_query
from frontend import command_repl
from frontend import command_show
from frontend import command_truncate
from frontend import command_undelete
from frontend import command_update
from frontend import command_version
from frontend import command_wait
from frontend import utils as frontend_utils
flags.adopt_module_key_flags(bq_flags)
FLAGS = flags.FLAGS
# pylint: enable=g-bad-name
def main(unused_argv):
# Avoid using global flags in main(). In this command line:
# bq <global flags> <command> <global and local flags> <command args>,
# only "<global flags>" will parse before main, not "<global and local flags>"
try:
frontend_utils.ValidateGlobalFlags()
bq_commands = {
# Keep the commands alphabetical.
'add-iam-policy-binding': commands_iam.AddIamPolicyBinding,
'cancel': command_cancel.Cancel,
'cp': command_copy.Copy,
'extract': command_extract.Extract,
'get-iam-policy': commands_iam.GetIamPolicy,
'head': command_head.Head,
'info': command_info.Info,
'init': command_init.Init,
'insert': command_insert.Insert,
'load': command_load.Load,
'ls': command_list.ListCmd,
'mk': command_make.Make,
'mkdef': command_mkdef.MakeExternalTableDefinition,
'partition': command_partition.Partition,
'query': command_query.Query,
'remove-iam-policy-binding': commands_iam.RemoveIamPolicyBinding,
'rm': command_delete.Delete,
'set-iam-policy': commands_iam.SetIamPolicy,
'shell': command_repl.Repl,
'show': command_show.Show,
'truncate': command_truncate.Truncate,
'undelete': command_undelete.Undelete,
'update': command_update.Update,
'version': command_version.Version,
'wait': command_wait.Wait,
}
for command, function in bq_commands.items():
if command not in appcommands.GetCommandList():
appcommands.AddCmd(command, function)
except KeyboardInterrupt as e:
print('Control-C pressed, exiting.')
sys.exit(1)
except BaseException as e: # pylint: disable=broad-except
print('Error initializing bq client: %s' % (e,))
# Use global flags if they're available, but we're exitting so we can't
# count on global flag parsing anyways.
if FLAGS.debug_mode or FLAGS.headless:
traceback.print_exc()
if not FLAGS.headless:
pdb.post_mortem()
sys.exit(1)
# pylint: disable=g-bad-name
def run_main():
"""Function to be used as setuptools script entry point.
Appcommands assumes that it always runs as __main__, but launching
via a setuptools-generated entry_point breaks this rule. We do some
trickery here to make sure that appcommands and flags find their
state where they expect to by faking ourselves as __main__.
"""
# Put the flags for this module somewhere the flags module will look
# for them.
new_name = sys.argv[0]
sys.modules[new_name] = sys.modules['__main__']
for flag in FLAGS.flags_by_module_dict().get(__name__, []):
FLAGS.register_flag_by_module(new_name, flag)
for key_flag in FLAGS.key_flags_by_module_dict().get(__name__, []):
FLAGS.register_key_flag_for_module(new_name, key_flag)
# Now set __main__ appropriately so that appcommands will be
# happy.
sys.modules['__main__'] = sys.modules[__name__]
appcommands.Run()
sys.modules['__main__'] = sys.modules.pop(new_name)
if __name__ == '__main__':
appcommands.Run()