Esempio n. 1
0
class Definition(Element):
    """
    definition base class
    """
    name: DefinitionName = None
    is_a: Optional[DefinitionName] = None
    mixin: bool = False
    mixins: List[DefinitionName] = empty_list()
    abstract: bool = False
    local_names: List[str] = empty_list()
    union_of: List[DefinitionName] = empty_list()
    subclass_of: Optional[str] = None
    values_from: List[str] = empty_list()
    symmetric: bool = False

    def _fix_elements(self):
        super()._fix_elements()
        if self.is_a and not isinstance(self.is_a, DefinitionName):
            self.is_a = DefinitionName(self.is_a)
        self.mixins = [
            v if isinstance(v, DefinitionName) else DefinitionName(v)
            for v in self.mixins
        ]
        self.union_of = [
            v if isinstance(v, DefinitionName) else DefinitionName(v)
            for v in self.union_of
        ]
Esempio n. 2
0
class SchemaDefinition(Definition):
    """
    A collection of definitions
    """
    name: SchemaDefinitionName = None
    id: SchemaDefinitionId = None
    version: Optional[str] = None
    imports: List[str] = empty_list()
    license: Optional[str] = None
    prefixes: Dict[PrefixLocalName, Union[str, Prefix]] = empty_dict()
    default_prefix: Optional[str] = None
    default_type: Optional[TypeDefinitionName] = None
    default_curi_maps: List[str] = empty_list()
    types: Dict[TypeDefinitionName, Union[dict, TypeDefinition]] = empty_dict()
    slots: Dict[SlotDefinitionName, Union[dict, SlotDefinition]] = empty_dict()
    classes: Dict[ClassDefinitionName, Union[dict,
                                             ClassDefinition]] = empty_dict()
    metamodel_version: Optional[str] = None
    source_file: Optional[str] = None
    source_file_size: Optional[int] = None
    source_file_date: Optional[str] = None
    generation_date: Optional[datetime.date] = None

    def _fix_elements(self):
        super()._fix_elements()
        if self.name is None:
            raise ValueError(f"name must be supplied")
        if not isinstance(self.name, SchemaDefinitionName):
            self.name = SchemaDefinitionName(self.name)
        if self.id is None:
            raise ValueError(f"id must be supplied")
        if not isinstance(self.id, SchemaDefinitionId):
            self.id = SchemaDefinitionId(self.id)
        for k, v in self.prefixes.items():
            if not isinstance(v, Prefix):
                self.prefixes[k] = Prefix(k, v)
        if self.default_type and not isinstance(self.default_type,
                                                TypeDefinitionName):
            self.default_type = TypeDefinitionName(self.default_type)
        for k, v in self.types.items():
            if not isinstance(v, TypeDefinition):
                self.types[k] = TypeDefinition(name=k,
                                               **({} if v is None else v))
        for k, v in self.slots.items():
            if not isinstance(v, SlotDefinition):
                self.slots[k] = SlotDefinition(name=k,
                                               **({} if v is None else v))
        for k, v in self.classes.items():
            if not isinstance(v, ClassDefinition):
                self.classes[k] = ClassDefinition(name=k,
                                                  **({} if v is None else v))
Esempio n. 3
0
class SlotDefinition(Definition):
    """
    A property or slot
    """
    name: SlotDefinitionName = None
    multivalued: bool = False
    domain: Optional[ClassDefinitionName] = None
    range: Optional[Any] = None
    required: bool = False
    object_property: bool = False
    inlined: bool = False
    primary_key: bool = False
    identifier: bool = False
    definitional: bool = False
    alias: Optional[str] = None
    path: Optional[str] = None
    subproperty_of: Optional[SlotDefinitionName] = None
    inverse: Optional[SlotDefinitionName] = None
    is_class_field: bool = False
    role: Optional[str] = None
    inherited: bool = False
    is_a: Optional[SlotDefinitionName] = None
    mixins: List[SlotDefinitionName] = empty_list()
    union_of: List[SlotDefinitionName] = empty_list()

    def _fix_elements(self):
        super()._fix_elements()
        if self.name is None:
            raise ValueError(f"name must be supplied")
        if not isinstance(self.name, SlotDefinitionName):
            self.name = SlotDefinitionName(self.name)
        if self.domain and not isinstance(self.domain, ClassDefinitionName):
            self.domain = ClassDefinitionName(self.domain)
        if self.subproperty_of and not isinstance(self.subproperty_of,
                                                  SlotDefinitionName):
            self.subproperty_of = SlotDefinitionName(self.subproperty_of)
        if self.inverse and not isinstance(self.inverse, SlotDefinitionName):
            self.inverse = SlotDefinitionName(self.inverse)
        if self.is_a and not isinstance(self.is_a, SlotDefinitionName):
            self.is_a = SlotDefinitionName(self.is_a)
        self.mixins = [
            v if isinstance(v, SlotDefinitionName) else SlotDefinitionName(v)
            for v in self.mixins
        ]
        self.union_of = [
            v if isinstance(v, SlotDefinitionName) else SlotDefinitionName(v)
            for v in self.union_of
        ]
Esempio n. 4
0
class ClassDefinition(Definition):
    """
    A class or interface
    """
    name: ClassDefinitionName = None
    defining_slots: List[SlotDefinitionName] = empty_list()
    slots: List[SlotDefinitionName] = empty_list()
    slot_usage: Dict[SlotDefinitionName, Union[dict,
                                               SlotDefinition]] = empty_dict()
    apply_to: Optional[ClassDefinitionName] = None
    entity: bool = False
    is_a: Optional[ClassDefinitionName] = None
    mixins: List[ClassDefinitionName] = empty_list()
    union_of: List[ClassDefinitionName] = empty_list()

    def _fix_elements(self):
        super()._fix_elements()
        if self.name is None:
            raise ValueError(f"name must be supplied")
        if not isinstance(self.name, ClassDefinitionName):
            self.name = ClassDefinitionName(self.name)
        self.defining_slots = [
            v if isinstance(v, SlotDefinitionName) else SlotDefinitionName(v)
            for v in self.defining_slots
        ]
        self.slots = [
            v if isinstance(v, SlotDefinitionName) else SlotDefinitionName(v)
            for v in self.slots
        ]
        for k, v in self.slot_usage.items():
            if not isinstance(v, SlotDefinition):
                self.slot_usage[k] = SlotDefinition(name=k,
                                                    **({} if v is None else v))
        if self.apply_to and not isinstance(self.apply_to,
                                            ClassDefinitionName):
            self.apply_to = ClassDefinitionName(self.apply_to)
        if self.is_a and not isinstance(self.is_a, ClassDefinitionName):
            self.is_a = ClassDefinitionName(self.is_a)
        self.mixins = [
            v if isinstance(v, ClassDefinitionName) else ClassDefinitionName(v)
            for v in self.mixins
        ]
        self.union_of = [
            v if isinstance(v, ClassDefinitionName) else ClassDefinitionName(v)
            for v in self.union_of
        ]
Esempio n. 5
0
class GOLRClass(YAMLRoot):
    id: str
    schema_generating: bool
    description: str
    display_name: str
    document_category: str
    weight: int
    fields: List[GOLRField] = empty_list()
Esempio n. 6
0
class Element(YAMLRoot):
    """
    root of all described things
    """
    name: ElementName
    singular_name: Optional[str] = None
    description: Optional[str] = None
    note: Optional[str] = None
    comment: Optional[str] = None
    examples: List[Union[dict, Example]] = empty_list()
    see_also: Optional[str] = None
    flags: List[str] = empty_list()
    aliases: List[str] = empty_list()
    mappings: List[str] = empty_list()
    id_prefixes: List[str] = empty_list()
    in_subset: List[str] = empty_list()
    from_schema: Optional[str] = None
    alt_descriptions: List[AltDescription] = empty_list()

    def _fix_elements(self):
        super()._fix_elements()
        self.alt_descriptions = [
            v if isinstance(v, AltDescription) else AltDescription(v)
            for v in self.alt_descriptions
        ]
Esempio n. 7
0
class Element(YAMLRoot):
    """
    root of all described things
    """
    name: ElementName
    singular_name: Optional[str] = None
    description: Optional[str] = None
    note: Optional[str] = None
    comment: Optional[str] = None
    examples: List[Union[dict, Example]] = empty_list()
    see_also: Optional[str] = None
    flags: List[str] = empty_list()
    aliases: List[str] = empty_list()
    mappings: List[str] = empty_list()
    id_prefixes: List[str] = empty_list()
    in_subset: List[str] = empty_list()
    from_schema: Optional[str] = None
    alt_descriptions: List[str] = empty_list()
Esempio n. 8
0
class GOLRField(YAMLRoot):
    id: str
    description: str
    display_name: str
    property: List = empty_list()
    cardinality: Optional[str] = None