X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fconstraints.py;h=c5518837faf645a6bde740f2e2af57ee0525a6ed;hb=c41ac81a29cb6357a6ba4a25a70232a46d322e70;hp=d7137742ccd703929d05ec45348af883fb2a678d;hpb=b87114e40c5f095103be4a9339b38552333d0190;p=osm%2FN2VC.git diff --git a/juju/constraints.py b/juju/constraints.py index d713774..c551883 100644 --- a/juju/constraints.py +++ b/juju/constraints.py @@ -1,5 +1,5 @@ # -# Library to parse constraints +# Module that parses constraints # # The current version of juju core expects the client to take # constraints given in the form "mem=10G foo=bar" and parse them into @@ -11,6 +11,9 @@ # constraints keys are valid, and that we can successfully dump the # constraints dict to json. # +# Once https://bugs.launchpad.net/juju/+bug/1645402 is addressed, this +# module should be deprecated. +# import re @@ -18,6 +21,7 @@ import re MEM = re.compile('^[1-9][0-9]*[MGTP]$') # Multiplication factors to get Megabytes +# https://github.com/juju/juju/blob/master/constraints/constraints.go#L666 FACTORS = { "M": 1, "G": 1024, @@ -25,6 +29,10 @@ FACTORS = { "P": 1024 * 1024 * 1024 } +SNAKE1 = re.compile(r'(.)([A-Z][a-z]+)') +SNAKE2 = re.compile('([a-z0-9])([A-Z])') + + def parse(constraints): """ Constraints must be expressed as a string containing only spaces @@ -34,6 +42,13 @@ def parse(constraints): if constraints is None: return None + if constraints == "": + return None + + if type(constraints) is dict: + # Fowards compatibilty: already parsed + return constraints + constraints = { normalize_key(k): normalize_value(v) for k, v in [ s.split("=") for s in constraints.split(" ")]} @@ -45,6 +60,11 @@ def normalize_key(key): key = key.strip() key = key.replace("-", "_") # Our _client lib wants "_" in place of "-" + + # Convert camelCase to snake_case + key = SNAKE1.sub(r'\1_\2', key) + key = SNAKE2.sub(r'\1_\2', key).lower() + return key @@ -61,4 +81,7 @@ def normalize_value(value): values = [normalize_value(v) for v in values] return values + if value.isdigit(): + return int(value) + return value