Esempio n. 1
0
    def postProcessReferences(self):
        """
        Examines the list of objects in the model for instances that conform
        to the OME XML Schema referential object naming conventions and
        injects properties into referenced objects to provide back links.
        """
        references = dict()
        for o in self.objects.values():
            if o.isSettings and not o.isAbstract:
                shortName = o.name.replace('Settings', '')
                ref = '%sRef' % (shortName)
                delegate = ReferenceDelegate(ref, ref, None)
                # Override back reference naming and default cardinality. Also
                # set the namespace to be the same
                delegate.name = ref
                delegate.minOccurs = 1
                delegate.maxOccurs = 1
                delegate.namespace = o.namespace
                prop = OMEModelProperty.fromReference(delegate, o, self)
                o.properties[ref] = prop
        for o in self.objects.values():
            for prop in o.properties.values():
                if not prop.isReference and (prop.isAttribute or prop.maxOccurs == 1 \
                        or o.name == 'OME' or o.isAbstractProprietary):
                    continue
                shortName = config.REF_REGEX.sub('', prop.type)
                try:
                    if o.name in config.BACK_REFERENCE_OVERRIDE[shortName]:
                        continue
                except KeyError:
                    pass
                if shortName not in references:
                    references[shortName] = list()
                v = {'data_type': o.name, 'property_name': prop.methodName,
                     'plural': prop.plural,
                     'maxOccurs': self.calculateMaxOccurs(o, prop),
                     'minOccurs': self.calculateMinOccurs(o, prop),
                     'isOrdered': prop.isOrdered,
                     'isChildOrdered': prop.isChildOrdered,
                     'isParentOrdered': prop.isParentOrdered,
                     'isInjected': prop.isInjected}
                references[shortName].append(v)
        logging.debug("Model references: %s" % references)

        for o in self.objects.values():
            if o.name not in references:
                continue
            for ref in references[o.name]:
                key = '%s.%s' % (ref['data_type'], ref['property_name'])
                delegate = ReferenceDelegate(
                        ref['data_type'], ref['data_type'], ref['plural'])
                delegate.minOccurs = ref['minOccurs']
                delegate.maxOccurs = ref['maxOccurs']
                prop = OMEModelProperty.fromReference(delegate, o, self)
                prop.key = key
                prop.isChildOrdered = ref['isChildOrdered']
                prop.isParentOrdered = ref['isParentOrdered']
                prop.isOrdered = ref['isOrdered']
                prop.isInjected = ref['isInjected']
                o.properties[key] = prop
Esempio n. 2
0
 def addBaseAttribute(self, delegate, namespace):
     prop = OMEModelProperty.fromReference(delegate, self, self.model)
     prop.hasBaseAttribute = True
     self.hasPrimitiveBase = True
     prop.isBackReference = False
     prop.isAttribute = True
     self.properties[delegate.name] = prop
Esempio n. 3
0
    def postProcessReferences(self):
        """
        Examines the list of objects in the model for instances that conform
        to the OME XML Schema referential object naming conventions and
        injects properties into referenced objects to provide back links.
        """
        references = dict()
        for o in self.objects.values():
            if o.isSettings and not o.isAbstract:
                shortName = o.name.replace("Settings", "")
                ref = "%sRef" % (shortName)
                delegate = ReferenceDelegate(ref, ref, None)
                # Override back reference naming and default cardinality. Also
                # set the namespace to be the same
                delegate.name = ref
                delegate.minOccurs = 1
                delegate.maxOccurs = 1
                delegate.namespace = o.namespace
                prop = OMEModelProperty.fromReference(delegate, o, self)
                o.properties[ref] = prop
        for o in self.objects.values():
            for prop in o.properties.values():
                if self.opts.lang.hasAbstractType(prop.name):
                    abstractName = self.opts.lang.abstractType(prop.name)
                    prop.delegate.name = abstractName
                    prop.delegate.type = abstractName
                    prop.delegate.unmappedCleanName = abstractName
                    prop.delegate.cleanName = abstractName
                if not prop.isReference and (
                    prop.isAttribute or prop.maxOccurs == 1 or o.name == "OME" or o.isAbstract
                ):
                    continue
                shortName = config.REF_REGEX.sub("", prop.type)
                try:
                    if o.name in config.BACK_REFERENCE_OVERRIDE[shortName]:
                        continue
                except KeyError:
                    pass
                if shortName not in references:
                    references[shortName] = list()
                v = {
                    "data_type": o.name,
                    "property_name": prop.methodName,
                    "plural": prop.plural,
                    "maxOccurs": self.calculateMaxOccurs(o, prop),
                    "minOccurs": self.calculateMinOccurs(o, prop),
                    "isOrdered": prop.isOrdered,
                    "isChildOrdered": prop.isChildOrdered,
                    "isParentOrdered": prop.isParentOrdered,
                    "isInjected": prop.isInjected,
                }
                references[shortName].append(v)
        logging.debug("Model references: %s" % references)

        for o in self.objects.values():
            if o.name not in references:
                continue
            for ref in references[o.name]:
                key = "%s.%s" % (ref["data_type"], ref["property_name"])
                delegate = ReferenceDelegate(ref["data_type"], ref["data_type"], ref["plural"])
                delegate.minOccurs = ref["minOccurs"]
                delegate.maxOccurs = ref["maxOccurs"]
                prop = OMEModelProperty.fromReference(delegate, o, self)
                prop.key = key
                prop.isChildOrdered = ref["isChildOrdered"]
                prop.isParentOrdered = ref["isParentOrdered"]
                prop.isOrdered = ref["isOrdered"]
                prop.isInjected = ref["isInjected"]
                o.properties[key] = prop
Esempio n. 4
0
    def postProcessReferences(self):
        """
        Examines the list of objects in the model for instances that conform
        to the OME XML Schema referential object naming conventions and
        injects properties into referenced objects to provide back links.
        """
        references = dict()
        for o in self.objects.values():
            if o.isSettings and not o.isAbstract:
                shortName = o.name.replace('Settings', '')
                ref = '%sRef' % (shortName)
                delegate = ReferenceDelegate(ref, ref, None)
                # Override back reference naming and default cardinality. Also
                # set the namespace to be the same
                delegate.name = ref
                delegate.minOccurs = 1
                delegate.maxOccurs = 1
                delegate.namespace = o.namespace
                prop = OMEModelProperty.fromReference(delegate, o, self)
                o.properties[ref] = prop
        for o in self.objects.values():
            for prop in o.properties.values():
                if self.opts.lang.hasAbstractType(prop.name):
                    abstractName = self.opts.lang.abstractType(prop.name)
                    prop.delegate.name = abstractName
                    prop.delegate.type = abstractName
                    prop.delegate.unmappedCleanName = abstractName
                    prop.delegate.cleanName = abstractName
                if not prop.isReference and (prop.isAttribute or prop.maxOccurs
                                             == 1 or o.name == 'OME'
                                             or o.isAbstract):
                    continue
                shortName = config.REF_REGEX.sub('', prop.type)
                try:
                    if o.name in config.BACK_REFERENCE_OVERRIDE[shortName]:
                        continue
                except KeyError:
                    pass
                if shortName not in references:
                    references[shortName] = list()
                v = {
                    'data_type': o.name,
                    'property_name': prop.methodName,
                    'plural': prop.plural,
                    'maxOccurs': self.calculateMaxOccurs(o, prop),
                    'minOccurs': self.calculateMinOccurs(o, prop),
                    'isOrdered': prop.isOrdered,
                    'isChildOrdered': prop.isChildOrdered,
                    'isParentOrdered': prop.isParentOrdered,
                    'isInjected': prop.isInjected
                }
                references[shortName].append(v)
        logging.debug("Model references: %s" % references)

        for o in self.objects.values():
            if o.name not in references:
                continue
            for ref in references[o.name]:
                key = '%s.%s' % (ref['data_type'], ref['property_name'])
                delegate = ReferenceDelegate(ref['data_type'],
                                             ref['data_type'], ref['plural'])
                delegate.minOccurs = ref['minOccurs']
                delegate.maxOccurs = ref['maxOccurs']
                prop = OMEModelProperty.fromReference(delegate, o, self)
                prop.key = key
                prop.isChildOrdered = ref['isChildOrdered']
                prop.isParentOrdered = ref['isParentOrdered']
                prop.isOrdered = ref['isOrdered']
                prop.isInjected = ref['isInjected']
                o.properties[key] = prop