X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fclient%2Ffacade.py;h=be5f23b325806cc89622a76d6701fd950c6f03b1;hb=01df4afcb5ff210724d9e8702539aee811a36092;hp=59163a978bd84189a99baec0a187887ba70ee2fe;hpb=173b900fcd95b2436af55df2618302146f4a2f40;p=osm%2FN2VC.git diff --git a/juju/client/facade.py b/juju/client/facade.py index 59163a9..be5f23b 100644 --- a/juju/client/facade.py +++ b/juju/client/facade.py @@ -124,7 +124,7 @@ class Args(list): self.append((name, rtype)) def do_explode(self, kind): - if kind in basic_types: + if kind in basic_types or type(kind) is typing.TypeVar: return False if not issubclass(kind, (typing.Sequence, typing.Mapping)): @@ -188,9 +188,9 @@ def buildTypes(schema, capture): for kind in sorted((k for k in _types if not isinstance(k, str)), key=lambda x: str(x)): name = _types[kind] - args = Args(kind) if name in classes: continue + args = Args(kind) source = [""" class {}(Type): _toSchema = {} @@ -218,14 +218,22 @@ class {}(Type): if arg_type in basic_types: source.append("{}self.{} = {}".format(INDENT * 2, arg_name, arg_name)) elif issubclass(arg_type, typing.Sequence): - value_type = arg_type_name.__parameters__[0] + value_type = ( + arg_type_name.__parameters__[0] + if len(arg_type_name.__parameters__) + else None + ) if type(value_type) is typing.TypeVar: source.append("{}self.{} = [{}.from_json(o) for o in {} or []]".format( INDENT * 2, arg_name, strcast(value_type), arg_name)) else: source.append("{}self.{} = {}".format(INDENT * 2, arg_name, arg_name)) elif issubclass(arg_type, typing.Mapping): - value_type = arg_type_name.__parameters__[1] + value_type = ( + arg_type_name.__parameters__[1] + if len(arg_type_name.__parameters__) > 1 + else None + ) if type(value_type) is typing.TypeVar: source.append("{}self.{} = {{k: {}.from_json(v) for k, v in ({} or dict()).items()}}".format( INDENT * 2, arg_name, strcast(value_type), arg_name)) @@ -315,6 +323,13 @@ def ReturnMapping(cls): item_cls = cls.__parameters__[0] for item in reply: result.append(item_cls.from_json(item)) + """ + if 'error' in item: + cls = classes['Error'] + else: + cls = item_cls + result.append(cls.from_json(item)) + """ else: result = cls.from_json(reply['response']) @@ -344,7 +359,7 @@ def makeFunc(cls, name, params, result, async=True): ''' # map input types to rpc msg params = dict() - msg = dict(Type='{cls.name}', Request='{name}', Version={cls.version}, Params=params) + msg = dict(type='{cls.name}', request='{name}', version={cls.version}, params=params) {assignments} reply = {await}self.rpc(msg) return reply @@ -431,7 +446,6 @@ class Type: try: return cls(**d) except TypeError: - print(cls) raise def serialize(self):