126 lines
4.2 KiB
Python
Executable File
126 lines
4.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import json
|
|
import os
|
|
import os.path
|
|
import logging
|
|
import pprint
|
|
import sys
|
|
|
|
import httplib
|
|
import argparse
|
|
|
|
|
|
console = logging.StreamHandler()
|
|
formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
|
|
console.setFormatter(formatter)
|
|
logger = logging.getLogger()
|
|
logger.setLevel(logging.DEBUG)
|
|
logger.addHandler(console)
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("-n", "--dry-run", dest="dry_run",
|
|
action='store_true', default=False,
|
|
help="Do not really create release")
|
|
parser.add_argument("-H", "--host", dest="host",
|
|
action='store', type=str, default="127.0.0.1",
|
|
help="API host")
|
|
parser.add_argument("-P", "--port", dest="port",
|
|
action='store', type=int, default=8000,
|
|
help="API port")
|
|
parser.add_argument("-f", "--file", dest="release_file",
|
|
action='store', type=str, required=True,
|
|
help="Release file")
|
|
params = parser.parse_args()
|
|
|
|
if not params.release_file:
|
|
parser.error("Release file is not set. Use -f option.")
|
|
|
|
|
|
def main():
|
|
|
|
logger.info("=== Creating release ===")
|
|
with open(params.release_file, "r") as f:
|
|
logger.debug("Trying to parse release file")
|
|
data = json.load(f)
|
|
|
|
httpconn = httplib.HTTPConnection(host=params.host, port=params.port)
|
|
httpheaders = {"Content-Type": "application/json"}
|
|
|
|
httpdata = {}
|
|
for field in ('name', 'version', 'description', 'networks_metadata'):
|
|
httpdata[field] = data[field]
|
|
|
|
logger.info("Request url: %s, data: %s" % \
|
|
('/api/releases', json.dumps(httpdata)))
|
|
|
|
if params.dry_run:
|
|
release_dict = {'id': '1'}
|
|
else:
|
|
release_dict = {}
|
|
logger.debug("Sending request")
|
|
try:
|
|
httpconn.request(method="POST",
|
|
url="/api/releases",
|
|
body=json.dumps(httpdata),
|
|
headers=httpheaders)
|
|
except Exception as e:
|
|
logger.error("Error: %s" % str(e))
|
|
sys.exit(1)
|
|
else:
|
|
response = httpconn.getresponse()
|
|
response_body = response.read()
|
|
logger.debug("Response status: %s" % response.status)
|
|
logger.debug("Response body: %s" % response_body)
|
|
|
|
if response.status == 201:
|
|
logger.info("Release '%s' has been successfully added" % \
|
|
httpdata['name'])
|
|
release_dict = json.loads(response_body)
|
|
logger.info("Release id: %s" % release_dict['id'])
|
|
elif response.status == 409:
|
|
logger.error("Release '%s' already exists" % httpdata['name'])
|
|
sys.exit(0)
|
|
elif response.status < 201 or response.status >= 300:
|
|
logger.error("Error in creating release: %s" % response.read())
|
|
sys.exit(1)
|
|
|
|
|
|
def add_item(httpconn, handler_url, release,
|
|
item_collection, item_fields):
|
|
|
|
for item in item_collection:
|
|
httpdata = {}
|
|
for field in item_fields:
|
|
httpdata[field] = item[field]
|
|
|
|
if params.dry_run:
|
|
httpdata['release'] = '1'
|
|
else:
|
|
httpdata['release'] = release
|
|
|
|
logger.debug("Request: url: %s, data: %s" % \
|
|
(handler_url, json.dumps(httpdata)))
|
|
|
|
if not params.dry_run:
|
|
logger.debug("Sending request")
|
|
try:
|
|
httpconn.request(method="POST",
|
|
url=handler_url,
|
|
body=json.dumps(httpdata),
|
|
headers=httpheaders)
|
|
|
|
except Exception as e:
|
|
logger.error("Error: %s" % str(e))
|
|
raise e
|
|
else:
|
|
response = httpconn.getresponse()
|
|
response_body = response.read()
|
|
logger.debug("Response status: %s" % response.status)
|
|
logger.debug("Response body: %s" % response_body)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|