def __init__(self, service_name, name, procedures, documentation, sort): super(Class, self).__init__() self.service_name = service_name self.name = name self.fullname = service_name + '.' + name self.documentation = documentation self.cref = 'T:%s.%s' % (service_name, name) members = [] properties = defaultdict(dict) for pname, pinfo in procedures.iteritems(): if Attributes.is_a_class_method(pinfo['attributes']): members.append(ClassMethod(service_name, name, pname, **pinfo)) elif Attributes.is_a_class_static_method(pinfo['attributes']): members.append( ClassStaticMethod(service_name, name, pname, **pinfo)) elif Attributes.is_a_class_property_accessor(pinfo['attributes']): propname = Attributes.get_class_property_name( pinfo['attributes']) proc = Procedure(service_name, pname, **pinfo) if Attributes.is_a_class_property_getter(pinfo['attributes']): properties[propname]['getter'] = proc else: properties[propname]['setter'] = proc for propname, prop in properties.iteritems(): members.append(ClassProperty(service_name, name, propname, **prop)) self.members = OrderedDict( (member.name, member) for member in sorted(members, key=sort))
def __init__(self, service_name, name, procedures, documentation, sort): super(Class, self).__init__() self.service_name = service_name self.name = name self.fullname = service_name+'.'+name self.documentation = documentation self.cref = 'T:%s.%s' % (service_name, name) members = [] properties = defaultdict(lambda: dict()) for pname,pinfo in procedures.iteritems(): #assert(Attributes.is_a_class_member(pinfo['attributes'])) #assert(Attributes.get_class_name(pinfo['attributes']) == name) if Attributes.is_a_class_method(pinfo['attributes']): members.append(ClassMethod(service_name, name, pname, **pinfo)) elif Attributes.is_a_class_static_method(pinfo['attributes']): members.append(ClassStaticMethod(service_name, name, pname, **pinfo)) elif Attributes.is_a_class_property_accessor(pinfo['attributes']): propname = Attributes.get_class_property_name(pinfo['attributes']) proc = Procedure(service_name, pname, **pinfo) if Attributes.is_a_class_property_getter(pinfo['attributes']): properties[propname]['getter'] = proc else: properties[propname]['setter'] = proc for propname,prop in properties.iteritems(): members.append(ClassProperty(service_name, name, propname, **prop)) self.members = OrderedDict((member.name, member) for member in sorted(members, key=sort))
def __init__(self, service_name, name, procedures, documentation): super(Class, self).__init__() self.service_name = service_name self.name = name self.fullname = service_name+'.'+name self.documentation = documentation self.cref = 'T:%s.%s' % (service_name, name) self.members = {} for pname,pinfo in procedures.items(): if Attributes.is_a_class_member(pinfo['attributes']) and \ Attributes.get_class_name(pinfo['attributes']) == name: if Attributes.is_a_class_method(pinfo['attributes']): member = ClassMethod(service_name, name, pname, **pinfo) elif Attributes.is_a_class_static_method(pinfo['attributes']): member = ClassStaticMethod(service_name, name, pname, **pinfo) else: continue self.members[member.name] = member properties = {} for pname,pinfo in procedures.items(): if Attributes.is_a_class_property_accessor(pinfo['attributes']): propname = Attributes.get_class_property_name(pinfo['attributes']) if propname not in properties: properties[propname] = {} if Attributes.is_a_class_property_getter(pinfo['attributes']): properties[propname]['getter'] = Procedure(service_name, pname, **pinfo) else: properties[propname]['setter'] = Procedure(service_name, pname, **pinfo) for propname,prop in properties.items(): prop = ClassProperty(service_name, name, propname, **prop) self.members[prop.name] = prop
def create_service(client, service): """ Create a new service type """ cls = type(str(service.name), (ServiceBase,), {'_client': client, '_name': service.name}) # Add class types to service for cls2 in service.classes: cls._add_service_class(cls2) # Add enumeration types to service for enum in service.enumerations: cls._add_service_enumeration(enum) # Add procedures for procedure in service.procedures: if Attributes.is_a_procedure(procedure.attributes): cls._add_service_procedure(procedure) # Add properties properties = defaultdict(lambda: [None,None]) for procedure in service.procedures: if Attributes.is_a_property_accessor(procedure.attributes): name = Attributes.get_property_name(procedure.attributes) if Attributes.is_a_property_getter(procedure.attributes): properties[name][0] = procedure else: properties[name][1] = procedure for name, procedures in properties.items(): cls._add_service_property(name, procedures[0], procedures[1]) # Add class methods for procedure in service.procedures: if Attributes.is_a_class_method(procedure.attributes): class_name = Attributes.get_class_name(procedure.attributes) method_name = Attributes.get_class_method_name(procedure.attributes) cls._add_service_class_method(class_name, method_name, procedure) # Add static class methods for procedure in service.procedures: if Attributes.is_a_class_static_method(procedure.attributes): class_name = Attributes.get_class_name(procedure.attributes) method_name = Attributes.get_class_method_name(procedure.attributes) cls._add_service_class_static_method(class_name, method_name, procedure) # Add class properties properties = defaultdict(lambda: [None,None]) for procedure in service.procedures: if Attributes.is_a_class_property_accessor(procedure.attributes): class_name = Attributes.get_class_name(procedure.attributes) property_name = Attributes.get_class_property_name(procedure.attributes) key = (class_name, property_name) if Attributes.is_a_class_property_getter(procedure.attributes): properties[key][0] = procedure else: properties[key][1] = procedure for (class_name, property_name), procedures in properties.items(): cls._add_service_class_property(class_name, property_name, procedures[0], procedures[1]) return cls()
def test_is_a_class_property_accessor(self): self.assertFalse(Attributes.is_a_class_property_accessor([])) self.assertFalse(Attributes.is_a_class_property_accessor(['Property.Get(PropertyName)'])) self.assertFalse(Attributes.is_a_class_property_accessor(['Property.Set(PropertyName)'])) self.assertFalse(Attributes.is_a_class_property_accessor(['Class.Method(ServiceName.ClassName,MethodName)'])) self.assertFalse(Attributes.is_a_class_property_accessor(['Class.StaticMethod(ServiceName.ClassName,MethodName)'])) self.assertTrue(Attributes.is_a_class_property_accessor(['Class.Property.Get(ServiceName.ClassName,PropertyName)'])) self.assertTrue(Attributes.is_a_class_property_accessor(['Class.Property.Set(ServiceName.ClassName,PropertyName)']))
def test_is_a_class_property_accessor(self): self.assertFalse(Attributes.is_a_class_property_accessor([])) self.assertFalse(Attributes.is_a_class_property_accessor( ['Property.Get(PropertyName)'])) self.assertFalse(Attributes.is_a_class_property_accessor( ['Property.Set(PropertyName)'])) self.assertFalse(Attributes.is_a_class_property_accessor( ['Class.Method(ServiceName.ClassName,MethodName)'])) self.assertFalse(Attributes.is_a_class_property_accessor( ['Class.StaticMethod(ServiceName.ClassName,MethodName)'])) self.assertTrue(Attributes.is_a_class_property_accessor( ['Class.Property.Get(ServiceName.ClassName,PropertyName)'])) self.assertTrue(Attributes.is_a_class_property_accessor( ['Class.Property.Set(ServiceName.ClassName,PropertyName)']))
def create_service(client, service): """ Create a new service type """ cls = type( str(service.name), (ServiceBase,), { '_client': client, '_name': service.name, '__doc__': _parse_documentation(service.documentation) } ) # Add class types to service for cls2 in service.classes: cls._add_service_class(cls2) # Add enumeration types to service for enum in service.enumerations: cls._add_service_enumeration(enum) # Add procedures for procedure in service.procedures: if Attributes.is_a_procedure(procedure.attributes): cls._add_service_procedure(procedure) # Add properties properties = defaultdict(lambda: [None, None]) for procedure in service.procedures: if Attributes.is_a_property_accessor(procedure.attributes): name = Attributes.get_property_name(procedure.attributes) if Attributes.is_a_property_getter(procedure.attributes): properties[name][0] = procedure else: properties[name][1] = procedure for name, procedures in properties.items(): cls._add_service_property(name, procedures[0], procedures[1]) # Add class methods for procedure in service.procedures: if Attributes.is_a_class_method(procedure.attributes): class_name = Attributes.get_class_name(procedure.attributes) method_name = Attributes.get_class_method_name(procedure.attributes) cls._add_service_class_method(class_name, method_name, procedure) # Add static class methods for procedure in service.procedures: if Attributes.is_a_class_static_method(procedure.attributes): class_name = Attributes.get_class_name(procedure.attributes) method_name = Attributes.get_class_method_name(procedure.attributes) cls._add_service_class_static_method(class_name, method_name, procedure) # Add class properties properties = defaultdict(lambda: [None, None]) for procedure in service.procedures: if Attributes.is_a_class_property_accessor(procedure.attributes): class_name = Attributes.get_class_name(procedure.attributes) property_name = Attributes.get_class_property_name(procedure.attributes) key = (class_name, property_name) if Attributes.is_a_class_property_getter(procedure.attributes): properties[key][0] = procedure else: properties[key][1] = procedure for (class_name, property_name), procedures in properties.items(): cls._add_service_class_property(class_name, property_name, procedures[0], procedures[1]) return cls()