Exemple #1
0
    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))
Exemple #2
0
    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))
Exemple #3
0
    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
Exemple #4
0
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()
Exemple #5
0
 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)']))
Exemple #6
0
 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)']))
Exemple #7
0
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()