aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/resources/scripts/sdcBePy/common/normative/main.py
blob: ad8338cee47f3ded347b1bf231c65cabc7848a22 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import time
from datetime import datetime

from sdcBePy.common.bColors import BColors
from sdcBePy.common.logger import print_and_exit
from sdcBePy.common.normative.toscaElements import process_and_create_normative_element
from sdcBePy.common.normative.toscaTypes import process_and_create_normative_types
from sdcBePy.common.errors import ResourceCreationError
from sdcBePy import properties

colors = BColors()


def process_element_list(normative_elements_list, sdc_be_proxy):
    attempt = 0
    for normative_element in normative_elements_list:
        while True:
            attempt += 1
            try:
                process_and_create_normative_element(normative_element,
                                                     sdc_be_proxy=sdc_be_proxy)
                break
            except ResourceCreationError as e:
                _check_and_retry(attempt, e.error_code, e.message)
            except Exception as e:
                _check_and_retry(attempt, 1, str(e))


def process_type_list(normative_type_list, sdc_be_proxy, update_version):
    attempt = 0
    for normative_type in normative_type_list:
        while True:
            attempt += 1
            try:
                process_and_create_normative_types(normative_type,
                                                   sdc_be_proxy=sdc_be_proxy,
                                                   update_version=update_version)
                break
            except ResourceCreationError as e:
                _check_and_retry(attempt, e.error_code, e.message)
                normative_type.normative_types_list = _reduce(normative_type.normative_types_list, e.resource_name)
            except Exception as e:
                _check_and_retry(attempt, 1, str(e))


def _check_and_retry(attempt, code, message):
    if attempt == properties.retry_attempts + 1:
        print_and_exit(code, message)

    print(colors.FAIL + '[WARRING]: ' + datetime.now().strftime('%Y/%m/%d %H:%M:%S')
          + ' ' + message + ", try again: #" + str(attempt) + colors.END_C)
    time.sleep(properties.retry_time)


def _reduce(_list, element):
    return _list[_list.index(element)::]