#!/usr/bin/env python3 import os import ovh import xdg.BaseDirectory import urllib.request from pprint import pprint import json import logging import coloredlogs import argparse coloredlogs.install(level='DEBUG', fmt='%(levelname)s %(message)s') log = logging.getLogger() debug = None class OvhCli(): ROOT = "https://api.ovh.com/1.0?null" def __init__(self): self.cacheDir = os.path.join(xdg.BaseDirectory.xdg_cache_home, 'ovhcli') # TODO Corner cases: links, cache dir not done, configurable cache if not os.path.isdir(self.cacheDir): assert not os.path.exists(self.cacheDir) os.makedirs(self.cacheDir) def updateCache(self): log.info("Downloading the API description") rootJsonPath = os.path.join(self.cacheDir, 'root.json') log.debug(f"{self.ROOT} -> {rootJsonPath}") urllib.request.urlretrieve(self.ROOT, rootJsonPath) with open(rootJsonPath, 'rt') as rootJson: root = json.load(rootJson) basePath = root['basePath'] for apiRoot in root['apis']: fmt = 'json' assert fmt in apiRoot['format'] path = apiRoot['path'] schema = apiRoot['schema'].format(format=fmt, path=path) apiJsonPath = os.path.join(self.cacheDir, schema[1:]) apiJsonUrl = basePath + schema log.debug(f"{apiJsonUrl} -> {apiJsonPath}") apiJsonPathDir = os.path.dirname(apiJsonPath) if not os.path.isdir(apiJsonPathDir): os.makedirs(apiJsonPathDir) urllib.request.urlretrieve(apiJsonUrl, apiJsonPath) def createParser(self): parser = argparse.ArgumentParser(description='Access the OVH API') return parser if __name__ == '__main__': cli = OvhCli() # cli.updateCache() parser = cli.createParser() args = parser.parse_args() print(args)