from collections import defaultdict from .base import AutoAPIBase from .settings import env class DotNetBase(AutoAPIBase): language = 'dotnet' def __init__(self, obj): super(DotNetBase, self).__init__(obj) # Always exist self.id = obj['id'] self.type = obj['type'] # Use name or id try: self.name = obj['qualifiedName']['CSharp'] except: self.name = self.id self.short_name = self.name.split('.')[-1] self.namespace = self.name.split('.')[0] # Optional self.summary = obj.get('summary', '') # Syntax example and parameter list syntax = obj.get('syntax', None) self.example = '' if syntax is not None: # Code example try: self.example = syntax['content']['CSharp'] except KeyError: pass self.parameters = [] for param in syntax.get('parameters', []): if 'id' in param: self.parameters.append({ 'name': param.get('id'), 'type': param.get('type', {}).get('id', None), 'desc': param.get('description', '') }) self.children = obj.get('items', []) if self.children: self.item_map = defaultdict(list) self.sort() @property def ref_type(self): return self.type.lower().replace('class', 'cls').replace('interface', 'iface').replace('delegate', 'del') def to_ref_type(self, _type): return _type.lower().replace('class', 'cls').replace('interface', 'iface').replace('delegate', 'del') def sort(self): from .utils import classify for item in self.children: if 'type' not in item: print "Missing Type: %s" % item continue classified = classify(item, 'dotnet') self.item_map[item['type']].append(classified) class DotNetNamespace(DotNetBase): type = 'namespace' class DotNetMethod(DotNetBase): type = 'method' class DotNetProperty(DotNetBase): type = 'property' class DotNetEnum(DotNetBase): type = 'enum' class DotNetStruct(DotNetBase): type = 'struct' class DotNetConstructor(DotNetBase): type = 'constructor' class DotNetInterface(DotNetBase): type = 'interface' class DotNetDelegate(DotNetBase): type = 'delegate' class DotNetClass(DotNetBase): type = 'class' class DotNetField(DotNetBase): type = 'field' class DotNetEvent(DotNetBase): type = 'event' class VirtualNamespace(AutoAPIBase): language = 'dotnet' type = 'namespace' def __init__(self, name, objs): self.name = self.short_name = name self.children = [] self.type = 'namespace' for obj in objs: self.children.append(obj.obj)