From 9020701a7b08379cd24c4fde724529a6b6aa7788 Mon Sep 17 00:00:00 2001 From: Kurt Garloff Date: Fri, 8 Dec 2023 09:01:06 +0100 Subject: [PATCH] Parsing of generator form mostly works. RODO: Handle booleans. Signed-off-by: Kurt Garloff --- Tests/iaas/flavor-naming/flavor-form.py | 44 ++++++++++++++++--------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/Tests/iaas/flavor-naming/flavor-form.py b/Tests/iaas/flavor-naming/flavor-form.py index 6c331eb78..32795f05b 100755 --- a/Tests/iaas/flavor-naming/flavor-form.py +++ b/Tests/iaas/flavor-naming/flavor-form.py @@ -60,7 +60,7 @@ def output_parse(): def find_spec(lst, key): for i in range(0, len(lst)): - if type(lst[i].type) == key: + if type(lst[i]).type == key: return i return -1 @@ -71,26 +71,39 @@ def find_attr(cls, key): return i return -1 + def generate_name(form): "Parse submitted form with flavor properties" - global ERROR - flavor_spec = (fnmck.Main(), fnmck.Disk(), fnmck.Hype(), fnmck.HWVirt(), - fnmck.CPUBrand(), fnmck.GPU(), fnmck.IB()) - for (key, val) in enumerate(form): + global ERROR, FLAVOR_SPEC, FLAVOR_NAME + ERROR = "" + FLAVOR_SPEC = (fnmck.Main("0L-0"), fnmck.Disk(""), fnmck.Hype(""), fnmck.HWVirt(""), + fnmck.CPUBrand(""), fnmck.GPU(""), fnmck.IB("")) + for key, val in form.items(): + val = val[0] + print(f'{key}={val}', file=sys.stderr) keypair = key.split(':') - idx = find_spec(flavor_spec, keypair[0]) + idx = find_spec(FLAVOR_SPEC, keypair[0]) if idx < 0: ERROR = f"Unknown key {keypair[0]}" return None - idx2 = find_attr(flavor_spec[idx], keypair[1]) + idx2 = find_attr(FLAVOR_SPEC[idx], keypair[1]) if idx2 < 0: ERROR = f"Can not find attribute {keypair[1]} in {keypair[1]}" - fdesc = flavor_spec[idx].pnames[idx2] + fdesc = FLAVOR_SPEC[idx].pnames[idx2] # Now parse fdesc to get the right value - ## FIXME - flavor_spec[idx].__setattribute(keypair[1], val) + if val != "NN": + if fdesc[0:2] == '##': + setattr(FLAVOR_SPEC[idx], keypair[1], float(val)) + elif fdesc[0] == '#': + setattr(FLAVOR_SPEC[idx], keypair[1], int(val)) + # TODO: Handle boolean + else: + setattr(FLAVOR_SPEC[idx], keypair[1], val) + FLAVOR_NAME = fnmck.outname(*FLAVOR_SPEC) + return FLAVOR_SPEC + -def input_mthod(self): +def input_method(self): print(self.type) for i in range(0, len(self.pnames)): tbl = None @@ -176,13 +189,13 @@ def form_attr(attr, tblopt = True): # print(fname, fdesc) value = None try: - value = attr.__getattribute__(fname) + value = getattr(attr, fname) except AttributeError: pass # FIXME: Handle leading . qualifier # Table => READIO if hasattr(spec, f"tbl_{fname}"): - tbl = attr.__getattribute__(f"tbl_{fname}") + tbl = getattr(attr, f"tbl_{fname}") if tbl: print(f'\t
') value_set = False @@ -227,12 +240,13 @@ def output_generate(): if FLAVOR_SPEC: cpu, disk, hype, hvirt, cpubrand, gpu, ibd = FLAVOR_SPEC else: + print(f'\tERROR: {html.escape(ERROR, quote=True)}') return # print("\tNot implemented yet as webform, use") # print('\tflavor-name-check.py -i') print('\t
\n\t
') form_attr(cpu, False) - print('\t
The following settings are all optional and meant for highly specialized / differentiated offerings.
') + print('\t
The following settings are all optional and (except for disk) meant for highly specialized / differentiated offerings.
') print('\t') form_attr(disk) form_attr(hype) @@ -241,7 +255,7 @@ def output_generate(): form_attr(gpu) form_attr(ibd) print('\t
') - print('\t
') + print('\t
') print('\t
') # TODO: Submission print('\tRemember that you are allowed to understate performance.')