| """ |
| This file can be used to generate a new version of the TCLIService package |
| using a TCLIService.thrift URL. |
| |
| If no URL is specified, the file for Hive 2.3 will be downloaded. |
| |
| Usage: |
| |
| python generate.py THRIFT_URL |
| |
| or |
| |
| python generate.py |
| """ |
| import shutil |
| import sys |
| from os import path |
| from urllib.request import urlopen |
| import subprocess |
| |
| here = path.abspath(path.dirname(__file__)) |
| |
| PACKAGE = 'TCLIService' |
| GENERATED = 'gen-py' |
| |
| HIVE_SERVER2_URL = \ |
| 'https://raw.githubusercontent.com/apache/hive/branch-2.3/service-rpc/if/TCLIService.thrift' |
| |
| |
| def save_url(url): |
| data = urlopen(url).read() |
| file_path = path.join(here, url.rsplit('/', 1)[-1]) |
| with open(file_path, 'wb') as f: |
| f.write(data) |
| |
| |
| def main(hive_server2_url): |
| save_url(hive_server2_url) |
| hive_server2_path = path.join(here, hive_server2_url.rsplit('/', 1)[-1]) |
| |
| subprocess.call(['thrift', '-r', '--gen', 'py', hive_server2_path]) |
| shutil.move(path.join(here, PACKAGE), path.join(here, PACKAGE + '.old')) |
| shutil.move(path.join(here, GENERATED, PACKAGE), path.join(here, PACKAGE)) |
| shutil.rmtree(path.join(here, PACKAGE + '.old')) |
| |
| |
| if __name__ == '__main__': |
| if len(sys.argv) > 1: |
| url = sys.argv[1] |
| else: |
| url = HIVE_SERVER2_URL |
| main(url) |