Legal Notice Data Protection

pnb.mcl.metamodel.standard module

Standard implementation of pnb.mcl.metamodel.

class pnb.mcl.metamodel.standard.AbstractClass(name: str, superTypes: Iterable[Class] = (), members=())

Bases: Class

isAbstract = True
class pnb.mcl.metamodel.standard.AbstractDataType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: DataType

isAbstract = True
class pnb.mcl.metamodel.standard.AggregatedDataType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: DataType

ownedAttributes

A MembersProperty that can be directly modified. It does not depend on any other MembersProperty.

class pnb.mcl.metamodel.standard.BooleanType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: PrimitiveType

class pnb.mcl.metamodel.standard.Class(name: str, superTypes: Iterable[Class] = (), members=())

Bases: Type

This class is abstract.

add(element)
property attributes
ownedAttributes

A MembersProperty that can be directly modified. It does not depend on any other MembersProperty.

class pnb.mcl.metamodel.standard.CompositionProperty(name: str, type_: Class, lower: int, upper: int | None, isOrdered: bool, redefines: Iterable[ObjectProperty] = ())

Bases: ObjectProperty

property isUnique
property oppositeLower
property oppositeUpper
class pnb.mcl.metamodel.standard.ConcreteClass(name: str, superTypes: Iterable[Class] = (), members=())

Bases: Class

isAbstract = False
class pnb.mcl.metamodel.standard.DataProperty(name: str, type_: CDataType, lower: int = 1, upper: T.Optional[int | str] = 'lower', isOrdered: bool = False, isUnique: bool = False, redefines: T.Iterable[ReferenceProperty] = ())

Bases: Property

property isUnique
class pnb.mcl.metamodel.standard.DataType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: Type

This class is abstract.

isAbstract = False
class pnb.mcl.metamodel.standard.DateTimeType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: PrimitiveType

class pnb.mcl.metamodel.standard.DerivedMembersProperty(slots: list[str], member_type: type[MemberType], sorting: Literal['alpha', 'none'] = 'alpha', derived_properties: Iterable[DerivedMembersProperty] = (), base_properties: Iterable[MembersProperty] = ())

Bases: Generic[MemberType], MembersProperty[MemberType]

A MembersProperty that depends on a single other MembersProperty.

class pnb.mcl.metamodel.standard.DoubleType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: PrimitiveType

class pnb.mcl.metamodel.standard.Element(**kwargs)

Bases: object

This class is abstract.

__repr__()

Return repr(self).

classmethod get_meta_class_name() str
property info
property model
property owner: Element | None
class pnb.mcl.metamodel.standard.Enumeration(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: DataType

orderedOwnedLiterals
ownedLiterals
class pnb.mcl.metamodel.standard.EnumerationLiteral(name: str, enumeration: Enumeration)

Bases: NamedElement

property type
class pnb.mcl.metamodel.standard.InstanceSpecification(name: str | None, **kwargs)

Bases: NamedElement

This class is abstract.

class pnb.mcl.metamodel.standard.IntType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: PrimitiveType

class pnb.mcl.metamodel.standard.Members(*args, **kwargs)

Bases: Generic[MemberType], Sized, Iterable[MemberType]

A container for the members of Namespace objects.

Members objects cannot be created from user code; they are rather retrieved from a Namespace object.

Example

1from pnb.mcl.metamodel import standard as metamodel
2
3spam = metamodel.Model('spam', 'http://www.spam.org')
4spam.packagedElements.add(metamodel.Package('SubSpam'))
5for member in spam.members:
6    print(member)
↳  <Package 'spam.SubSpam'>
  • spam.packagedElements is a MutableMembers object that contains the packagedElements of Model spam. We call its add() method to add a Package to the packagedElements.

  • spam.members is a (non-mutable) Members object that contains all members of Model spam, including the packagedElements. Here, we iterate over spam.members (cf. __iter__) and retrieve the Package we have just added.

__contains__(name_or_element: str | NamedElement) bool

Check if the Members object contains a name or an element.

  • If name_or_element is a str, returns True if the Members object contains an element with that name.

  • If name_or_element is an Element, returns True if the Members object contains the Element.

__getattr__(name: str) MemberType

Get a member by its name.

__getattr__ is overwritten in order to provide a more concise alternative for at(). For instance, assume that spam is some Model object. Then

spam.packagedElements.foo

is the same as

spam.packagedElements.at('foo')

(except that the former code would raise a AttributeError, whereas the latter would raise a KeyError if spam has no packaged element named foo).

Warning

  • Be aware that __getattr__ will only be called by Python as a last resort when ‘normal’ attribute access has failed. For example, spam.packagedElements.info will never retrieve a member element, but rather the value of the info property defined in the Members class.

  • Syntax restrictions may also prevent member access via __getattr__. For example, "class" is a valid name, but it happens to be a Python keyword, and spam.packagedElements.class will raise a SyntaxError.

  • __getattr__ is not intended for dynamic member retrieval, i.e., when the member name is not a hard-typed literal. Do not write

    getattr(spam.packagedElements, some_variable)
    

    or even

    spam.packagedElements.__getattr__(some_variable)
    

    Instead, use at() or get().

__iter__() Iterator[MemberType]

Iterate over the contained members.

If not mentioned otherwise, iteration is in alphanumeric order w.r.t. the members’ names. If applicable, unnamed members (i.e., NamedElements with name == None) are yielded after the named members in arbitrary order.

__len__() int

Get the number of contained members.

__repr__()

A short description of the Members object that includes the names of the underlying MembersProperty and Namespace object.

from pnb.mcl.metamodel import standard as metamodel
spam = metamodel.Model('spam', 'http://www.spam.org')
print(repr(spam.packagedElements))
↳  <Model.packagedElements of Model 'spam' (http://www.spam.org)>
at(name: str) MemberType

Get the member with the given name.

Raises:

KeyError – if there is no member with the given name

get(name: str) MemberType | None
get(name: str, default: DefaultType) MemberType | DefaultType

Get the member with the given name, or default if there is no such member.

property info: str

A short description of the Members object that includes the names of the underlying MembersProperty and Namespace object.

from pnb.mcl.metamodel import standard as metamodel
spam = metamodel.Model('spam', 'http://www.spam.org')
print(spam.packagedElements.info)
↳  Model.packagedElements of Model 'spam' (http://www.spam.org)
property names: Iterator[str]

Iterator over the names of the contained members. If not mentioned otherwise, iteration is in alphanumeric order.

class pnb.mcl.metamodel.standard.MembersProperty(member_type: type[MemberType], sorting: Literal['alpha', 'none'], derived_properties: Iterable[DerivedMembersProperty[NamedElement]])

Bases: Generic[MemberType], ABC

__get__(obj: MemberType, objtype: type[MemberType]) Members[MemberType]
__get__(obj: None, objtype: type[MemberType]) MembersProperty[MemberType]
__repr__()

Return repr(self).

property info: str
property member_type: type[MemberType]
property owner_type: type[Namespace]
class pnb.mcl.metamodel.standard.MetaData

Bases: object

get(element, prop, default=<object object>)
static read(path, model_by_name)
set(element, prop, value)
write(path)
class pnb.mcl.metamodel.standard.Model(name: str, uri: str, members=())

Bases: Namespace

add(element)
property info
ownedTypes: Members[Type]
packagedElements

A MembersProperty that can be directly modified. It does not depend on any other MembersProperty.

property unnamedObjects
property uri
class pnb.mcl.metamodel.standard.MutableMembers(*args, **kwargs)

Bases: Generic[MemberType], Members[MemberType]

A container for the members of Namespace objects that can be directly modified by client code (see add()).

add(member: MemberType) MemberType

Add a member to the MutableMembers container.

This method returns the added member:

1from pnb.mcl.metamodel import standard as metamodel
2
3spam = metamodel.Model('spam', 'http://www.spam.org')
4foo = spam.packagedElements.add(metamodel.Package('SubSpam'))
5print(foo)
↳  <Package 'spam.SubSpam'>
class pnb.mcl.metamodel.standard.MutableMembersProperty(slots: list[str], member_type: type[MemberType], is_composition: bool, sorting: Literal['alpha', 'none'] = 'alpha', derived_properties: Iterable[DerivedMembersProperty] = ())

Bases: Generic[MemberType], MembersProperty[MemberType]

A MembersProperty that can be directly modified. It does not depend on any other MembersProperty.

__get__(obj: MemberType, objtype: type[MemberType]) MutableMembers[MemberType]
__get__(obj: None, objtype: type[MemberType]) MutableMembersProperty[MemberType]
class pnb.mcl.metamodel.standard.NamedElement(name: str | None, **kwargs)

Bases: Element

This class is abstract.

get_model_and_qname() tuple[Model, str]
property info
property name: str | None
property qualifiedName: str | None
class pnb.mcl.metamodel.standard.Namespace(members=(), **kwargs)

Bases: NamedElement

This class is abstract.

members

All members of the Namespace.

ownedMembers

The owned members of the Namespace.

importedMembers

The imported members of the Namespace.

__getattr__(name) NamedElement
__iter__() Iterator[NamedElement]
importedMembers
members
ownedMembers
class pnb.mcl.metamodel.standard.Object(type_: ConcreteClass, name=None, **kwargs)

Bases: PackageableElement

__getattr__(name)
property type: ConcreteClass
class pnb.mcl.metamodel.standard.ObjectProperty(lower: int, upper: int | None, type_: ~pnb.mcl.metamodel.standard.Type, isOrdered=<class 'bool'>, **kwargs)

Bases: Property

This class is abstract.

class pnb.mcl.metamodel.standard.Package(name: str, members=())

Bases: Namespace, PackageableElement

add(element)
ownedTypes: Members[Type]
packagedElements

A MembersProperty that can be directly modified. It does not depend on any other MembersProperty.

class pnb.mcl.metamodel.standard.PackageableElement(name: str | None, **kwargs)

Bases: NamedElement

This class is abstract.

class pnb.mcl.metamodel.standard.PrimitiveType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: DataType

This class is abstract.

class pnb.mcl.metamodel.standard.Property(lower: int, upper: int | None, type_: ~pnb.mcl.metamodel.standard.Type, isOrdered=<class 'bool'>, **kwargs)

Bases: TypedElement

This class is abstract.

class pnb.mcl.metamodel.standard.ReferenceProperty(name: str, type_: Class, lower: int, upper: int | None, isOrdered: bool, isUnique: bool, oppositeLower: int = 0, oppositeUpper: int | None = None, redefines: Iterable[ReferenceProperty] = ())

Bases: ObjectProperty

property isUnique
property oppositeLower
property oppositeUpper
class pnb.mcl.metamodel.standard.SingletonType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: DataType

property value
class pnb.mcl.metamodel.standard.SingletonValue(name, type_: SingletonType)

Bases: PackageableElement

property type
class pnb.mcl.metamodel.standard.StringType(name: str, superTypes: Iterable[AbstractDataType] = ())

Bases: PrimitiveType

class pnb.mcl.metamodel.standard.Type(name: str, superTypes: Iterable[Type], **kwargs)

Bases: Namespace, PackageableElement

This class is abstract.

cf. Classifier 7.5.3.1 All Types in UML are Classifiers

property allSubTypes
property allSuperTypes: frozenset[Type]
property isAbstract
ownedAttributes = []
property subTypes
property superTypes: tuple[Type, ...]
class pnb.mcl.metamodel.standard.TypedElement(lower: int, upper: int | None, type_: ~pnb.mcl.metamodel.standard.Type, isOrdered=<class 'bool'>, **kwargs)

Bases: NamedElement

This class is abstract.

merged with UML MultiplicityElement

property isOrdered: bool
abstract property isUnique: bool
property lower: int
property type: Type
property upper: int | None
class pnb.mcl.metamodel.standard.UnionMembersProperty(slots: list[str], member_type: type[MemberType], sorting: Literal['alpha', 'none'] = 'alpha', derived_properties: Iterable[DerivedMembersProperty] = (), base_properties: Iterable[MembersProperty] = ())

Bases: Generic[MemberType], DerivedMembersProperty[MemberType]