From 28f8b233fc64ade102200358412d5de35f703637 Mon Sep 17 00:00:00 2001 From: Timur Sufiev Date: Fri, 22 Nov 2013 15:03:08 +0400 Subject: [PATCH] Remove update_service call and change create_service. No need to have 2 different api calls doing one task - creating/updating service definition with PUT-method. Change-Id: I5b1c2bc460e0033c5f44435c654e2a1527e134b2 --- muranorepository/api/utils.py | 14 +++++++++++--- muranorepository/api/v1.py | 22 +++------------------- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/muranorepository/api/utils.py b/muranorepository/api/utils.py index 1249239..dacfa13 100644 --- a/muranorepository/api/utils.py +++ b/muranorepository/api/utils.py @@ -211,7 +211,7 @@ def save_archive(request): return path_to_archive -def create_service(data): +def create_service(service_id, data): required = ['full_service_name', 'service_display_name'] optional = {'enabled': True, 'version': 0.1, @@ -227,15 +227,23 @@ def create_service(data): if not data.get(parameter): data[parameter] = optional[parameter] - service_id = data.get('full_service_name') path_to_manifest = os.path.join(CONF.manifests, service_id + '-manifest.yaml') + + backup_done = False + with tempfile.NamedTemporaryFile() as backup: + # make a backup + if os.path.exists(path_to_manifest): + backup_done = True + shutil.copy(path_to_manifest, backup.name) try: with open(path_to_manifest, 'w') as service_manifest: service_manifest.write(serialize(data)) except Exception as e: log.exception(e) - if os.path.exists(path_to_manifest): + if backup_done: + shutil.move(backup.name, path_to_manifest) + elif os.path.exists(path_to_manifest): os.remove(path_to_manifest) return make_response('Error during service manifest creation', 500) return jsonify(result='success') diff --git a/muranorepository/api/v1.py b/muranorepository/api/v1.py index 43b50e6..fc35b98 100644 --- a/muranorepository/api/v1.py +++ b/muranorepository/api/v1.py @@ -217,28 +217,12 @@ def reset_caches(): return jsonify(result='success') -@v1_api.route('/admin/services/create', methods=['PUT']) -def create_service(): +@v1_api.route('/admin/services/', methods=['PUT']) +def create_service(service_name): try: service_data = json.loads(request.data) except: return make_response('Unable to load json data', 500) - resp = api.create_service(service_data) + resp = api.create_service(service_name, service_data) api.reset_cache() return resp - - -@v1_api.route('/admin/services/', methods=['POST']) -def update_service(service_name): - api.check_service_name(service_name) - parser = ManifestParser() - try: - service_data = json.loads(request.data) - except: - return make_response('Unable to load json data', 500) - result = parser.update_service(service_name, service_data) - if result: - api.reset_cache() - return jsonify(result='success') - else: - return make_response('Unable to update service', 500)