def process_metadata_type(self, type_string, spec_version): runtime_type = RuntimeType.query(self.db_session).filter_by(type_string=type_string, spec_version=spec_version).first() if not runtime_type: # Get current Runtime configuration try: # TODO move logic to RuntimeConfiguration.get_decoder_class # TODO FIX ScaleBytes('0x00') does not process Option<*> properly decoder_obj = ScaleDecoder.get_decoder_class(type_string, ScaleBytes('0x00')) if decoder_obj.sub_type: # Also process sub type if ',' in decoder_obj.sub_type and decoder_obj.sub_type[-1:] not in ['>', ')']: for sub_type in decoder_obj.sub_type.split(','): self.process_metadata_type(sub_type.strip(), spec_version) else: self.process_metadata_type(decoder_obj.sub_type, spec_version) decoder_class_name = decoder_obj.__class__.__name__ except NotImplementedError: decoder_class_name = '[not implemented]' runtime_type = RuntimeType( spec_version=spec_version, type_string=type_string, decoder_class=decoder_class_name, ) runtime_type.save(self.db_session)
def get_relationships(self, include_list, item): relationships = {} if 'modules' in include_list: relationships['modules'] = RuntimeModule.query( self.session).filter_by( spec_version=item.spec_version).order_by('lookup', 'id') if 'types' in include_list: relationships['types'] = RuntimeType.query(self.session).filter_by( spec_version=item.spec_version).order_by('type_string') return relationships
def get_query(self): return RuntimeType.query(self.session).order_by( 'spec_version', 'type_string')