class TypeSelectionValue(Parsable): """ Selection value element :type name : unicode :type description : unicode :type parent : Parsable """ __fields__ = [ Field('name'), Field('description'), ] def __init__(self): super(TypeSelectionValue, self).__init__() self.name = None self.description = None @property def href_id(self): if self.parent: parent_id = str(self.parent.href_id) if FormatMode.format_mode == FormatMode.LATEX_MODE: if parent_id.startswith('IT::'): return '{}::{}'.format(parent_id[4:], TexList.name_mode(self.name)) return '{}::{}'.format(parent_id, TexList.name_mode(self.name)) return '{self.parent.href_id}:{self.name}'.format(self=self) return self.name @property def href_name(self): return self.name
class TypeArray(Parsable): """ Class defining "Array" type in IST :type id : unicode :type range : ist.extras.TypeRange :type subtype : ist.extras.TypeReference :type name : unicode :type input_type : InputType :type attributes : ist.extras.TypeAttributes :type parameters : list[TypeAttributeParameter] :type generic_type : ist.extras.TypeReference """ __fields__ = simple_fields + [ Field("range", t=TypeRange), Field("subtype", t=TypeReference), ] def __init__(self): super(TypeArray, self).__init__() self.id = None self.range = None self.subtype = None self.name = None self.input_type = None self.attributes = None self.parameters = None self.generic_type = None
class TypeAbstract(Parsable): """ Class defining "Abstract" type in IST :type id : unicode :type name : unicode :type input_type : InputType :type attributes : ist.extras.TypeAttributes :type description : unicode :type implementations : List[ist.extras.TypeReference] :type default_descendant : ist.extras.TypeReference :type parameters : list[TypeAttributeParameter] :type generic_type : ist.extras.TypeReference """ __fields__ = base_fields + [ Field(["name", "type_name"], index=True), Field("description"), Field("implementations", t=List, subtype=TypeReference, default=[]), Field("default_descendant", t=TypeReference), ] def __init__(self): super(TypeAbstract, self).__init__() self.id = None self.name = None self.input_type = None self.attributes = None self.description = None self.implementations = None self.default_descendant = None self.parameters = None self.generic_type = None
class TypeRecordKeyDefault(Parsable): """ Default in record value :type type : unicode :type value : unicode """ __fields__ = [ Field('type'), Field('value'), ] def __init__(self): super(TypeRecordKeyDefault, self).__init__() self.type = None self.value = None
class TypeRecordKey(Parsable): """ Key in record :type key : unicode :type type : ist.extras.TypeReference :type default : ist.extras.TypeRecordKeyDefault :type description : unicode """ __fields__ = [ Field('key'), Field('type', t=TypeReference), Field('default', t=TypeRecordKeyDefault, link_to_parent=True), Field('description'), ] def __init__(self): super(TypeRecordKey, self).__init__() self.key = None self.type = None self.default = None self.description = None def include_in_format(self): if self.key.find('TYPE') != -1: Logger.instance().info(' - item starts with TYPE') return False return True @property def href_id(self): if self.parent: parent_id = str(self.parent.href_id) if FormatMode.format_mode == FormatMode.LATEX_MODE: if parent_id.startswith('IT::'): return '{}::{}'.format(parent_id[4:], TexList.name_mode(self.key)) return '{}::{}'.format(parent_id, TexList.name_mode(self.key)) return '{self.parent.href_id}:{self.key}'.format(self=self) return self.key @property def href_name(self): return htmltree.secure(self.key)
class TypeSelection(Parsable): """ Class defining "Selection" type in IST :type id : unicode :type values : list[ist.extras.TypeSelectionValue] :type name : unicode :type input_type : InputType :type attributes : ist.extras.TypeAttributes :type description : unicode :type parameters : list[TypeAttributeParameter] :type generic_type : ist.extras.TypeReference """ __fields__ = base_fields + [ Field("values", t=List, subtype=TypeSelectionValue, link_to_parent=True, default=[]), Field(["name", "type_name"], index=True), Field("description"), ] def __init__(self): super(TypeSelection, self).__init__() self.id = None self.values = None self.name = None self.input_type = None self.attributes = None self.description = None self.parameters = None self.generic_type = None def include_in_format(self): if self.name.find('TYPE') != -1: Logger.instance().info(' - item starts with TYPE') return False return True def get_fields(self, *args): for arg in args: for sub_item in self.values: if sub_item.name.lower() == arg.lower(): return sub_item
class TypeAttributes(Parsable): """ Attributes element :type obsolete : unicode :type link_name : unicode :type input_type : InputType :type generic_parameters : list :type root_of_generic_subtree : bool :type field_value_shape : list """ __fields__ = [ Field('obsolete', t=str), Field('link_name', index=True), Field(['generic_parameters', '_generic_parameters'], t=list, default=list()), Field(['root_of_generic_subtree', '_root_of_generic_subtree'], t=bool), Field('field_value_shape', t=list), ] def __init__(self): super(TypeAttributes, self).__init__() self.obsolete = None self.link_name = None self.input_type = InputType().parse('') self.generic_parameters = None self.root_of_generic_subtree = None self.field_value_shape = None def __repr__(self): if self.obsolete is None and self.link_name is None: return '{}' return super(TypeAttributes, self).__repr__() def get_parameters_dict(self): """ :rtype : Dict """ # TODO compatibility return Dict()
class TypeRecord(Parsable): """ Class defining "Record" type in IST :type id : unicode :type keys : List[ist.extras.TypeRecordKey] :type name : unicode :type implements : List[ist.extras.TypeReference] :type input_type : InputType :type attributes : ist.extras.TypeAttributes :type description : unicode :type reducible_to_key : Unicode :type parameters : list[TypeAttributeParameter] :type generic_type : ist.extras.TypeReference """ __fields__ = base_fields + [ Field("keys", t=List, subtype=TypeRecordKey, link_to_parent=True), Field(["name", "type_name"], index=True), Field("implements", t=List, subtype=TypeReference, default=[]), Field("description"), Field("reducible_to_key", t=Unicode, link_to_parent=True), ] def __init__(self): super(TypeRecord, self).__init__() self.id = None self.keys = [] self.name = None self.implements = [] self.input_type = None self.attributes = TypeAttributes() self.description = None self.reducible_to_key = None self.parameters = None self.generic_type = None def get_fields(self, *args): for arg in args: for sub_item in self.keys: if sub_item.key.lower() == arg.lower(): return sub_item
class TypeFilename(Parsable): """ Class defining "FileName" type in IST :type id : unicode :type name : unicode :type file_mode : unicode :type attributes : ist.extras.TypeAttributes :type input_type : InputType :type parameters : list[TypeAttributeParameter] :type generic_type : ist.extras.TypeReference """ __fields__ = simple_fields + [ Field("file_mode"), ] def __init__(self): super(TypeFilename, self).__init__() self.id = None self.name = None self.file_mode = None self.attributes = None self.input_type = None self.parameters = None self.generic_type = None
#!/usr/bin/python # -*- coding: utf-8 -*- # author: Jan Hybs from ist.extras import TypeSelectionValue, TypeReference, TypeRecordKey, TypeRange, TypeAttributes, \ TypeAttributeParameter from ist.base import Field, Parsable, InputType, List, Unicode, SmartList # used in all node types from utils.logger import Logger base_fields = [ Field("id", index=True), Field("attributes", t=TypeAttributes, default=TypeAttributes()), Field('parameters', t=SmartList, subtype=TypeAttributeParameter), Field('generic_type', t=TypeReference), Field("input_type", t=InputType), ] # used in primitive node types (int, double, str, ...) where name is not part of index simple_fields = base_fields + [Field(["name", "type_name"])] class TypeSelection(Parsable): """ Class defining "Selection" type in IST :type id : unicode :type values : list[ist.extras.TypeSelectionValue] :type name : unicode :type input_type : InputType :type attributes : ist.extras.TypeAttributes