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
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
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
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