コンテンツにスキップ

stbkit.api.experimental.repository

repository

バージョンごとのリポジトリ

リポジトリは、読み込んだST-Bridgeの参照解決や検索を行うクラスです。 型注釈を利用したい場合に利用します。 インスタンスはstbkit.api.experimental.get_repositoryを使って取得できます。 モデルのバージョンに対応する型を選ぶため、バージョンごとの分岐が不要になります。

※このモジュール内のAPIは暫定的なものであり、今後変更される可能性があります。 仕様が固まったものはstbkit.apiへ移し、このモジュールからは段階的に外します。 継続的に利用するコードから使う場合は、この点を了解したうえで、バージョンを固定して使用してください。 互換性に関する方針は、GitHubリポジトリのCOMPATIBILITY.mdを参照してください。

RepositoryV2_0_2

RepositoryV2_0_2(stb: StBridgeElement)

Bases: RepositoryBase

ST-Bridge v2.0.2用のリポジトリ。

インスタンスの生成はget_repositoryの利用を推奨します。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
65
66
67
68
69
70
71
72
73
74
75
76
def __init__(self, stb: StBridgeElement) -> None:
    self._stb: StBridgeElement = stb
    self._storage: dict[
        type[StBridgeElement], dict[int | str, StBridgeElement]
    ] = {}
    self._guid_storage: dict[UUID, StBridgeElement] = {}
    self._name_keyed_types: tuple[type[StBridgeElement], ...] = tuple(
        ItemType
        for ItemType, key_field_name in self._key_field_names.items()
        if key_field_name == "name"
    )
    self._set_storage(stb)

refresh

refresh() -> None

モデルを編集した場合に、索引を作り直します。

リポジトリ構築後に要素を追加・削除したりid,name,guid等の属性を変更した場合に呼び出します。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
112
113
114
115
116
117
118
119
def refresh(self) -> None:
    """モデルを編集した場合に、索引を作り直します。

    リポジトリ構築後に要素を追加・削除したりid,name,guid等の属性を変更した場合に呼び出します。
    """
    self._storage.clear()
    self._guid_storage.clear()
    self._set_storage(self._stb)

get

get(ItemType: type[T], key: int | str) -> T

指定した型とキーで要素を1つ取得します。

キーは一般的にはid、鋼材断面はnameです。

引数:

名前 タイプ デスクリプション デフォルト
ItemType type[T]

取得する要素の型。

必須
key int | str

キーの値。

必須

戻り値:

名前 タイプ デスクリプション
T T

見つかった要素。

発生:

タイプ デスクリプション
TypeError

ItemTypeが参照定義されていない場合、 または索引の要素がItemTypeのインスタンスでない場合。

ReferenceElementNotFoundError

参照先が見つからなかった場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
def get[T: StBridgeElement](self, ItemType: type[T], key: int | str) -> T:
    """
    指定した型とキーで要素を1つ取得します。

    キーは一般的にはid、鋼材断面はnameです。

    Args:
        ItemType (type[T]): 取得する要素の型。
        key (int | str): キーの値。

    Returns:
        T: 見つかった要素。

    Raises:
        TypeError: ItemTypeが参照定義されていない場合、
            または索引の要素がItemTypeのインスタンスでない場合。
        ReferenceElementNotFoundError: 参照先が見つからなかった場合。
    """
    key_field_name: str | None = self._key_field_names.get(ItemType)
    if key_field_name is None:
        raise TypeError(
            f"{ItemType.__name__}は参照定義されていないため取得できません。"
        )
    children_dict: dict[int | str, StBridgeElement] | None = self._storage.get(
        ItemType
    )
    if not children_dict:
        raise ReferenceElementNotFoundError(
            f"[{ItemType.__name__}]の要素は存在しません。"
        )
    item: StBridgeElement | None = children_dict.get(key)
    if item is None:
        raise ReferenceElementNotFoundError(
            f"[{ItemType.__name__}].{key_field_name}={key}が見つかりません。"
        )
    if not isinstance(item, ItemType):
        raise TypeError(
            f"型が異なります。expect:{ItemType.__name__}, "
            f"actual:{type(item).__name__}"
        )
    return item

get_or_none

get_or_none(ItemType: type[T], key: int | str) -> T | None

get()と同じですが、要素が見つからない場合はNoneを返します。

TypeErrorは、Noneにはせずそのまま投げます。

引数:

名前 タイプ デスクリプション デフォルト
ItemType type[T]

取得する要素の型。

必須
key int | str

キーの値。

必須

戻り値:

タイプ デスクリプション
T | None

T | None: 見つかった要素。見つからない場合はNone。

発生:

タイプ デスクリプション
TypeError

ItemTypeが参照定義されていない場合、 または索引の要素がItemTypeのインスタンスでない場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
def get_or_none[T: StBridgeElement](
    self, ItemType: type[T], key: int | str
) -> T | None:
    """
    get()と同じですが、要素が見つからない場合はNoneを返します。

    TypeErrorは、Noneにはせずそのまま投げます。

    Args:
        ItemType (type[T]): 取得する要素の型。
        key (int | str): キーの値。

    Returns:
        T | None: 見つかった要素。見つからない場合はNone。

    Raises:
        TypeError: ItemTypeが参照定義されていない場合、
            または索引の要素がItemTypeのインスタンスでない場合。
    """
    try:
        return self.get(ItemType, key)
    except ReferenceElementNotFoundError:
        return None

find_equivalent

find_equivalent(instance: T, *, exclude_fields: Iterable[str] | None = None) -> T | None

指定された要素と同等(属性が等価)の要素を検索します。 exclude_fieldsで指定された属性は比較から除外されます。

※現在、子要素は比較に含まれません。含めるかどうかは要協議。

用途としては、同じ形状の鋼材断面などを検索する場合です。

引数:

名前 タイプ デスクリプション デフォルト
instance T

比較対象要素。

必須
exclude_fields Iterable[str]

比較から除外する フィールド名のリスト。デフォルトはNone。

None

戻り値:

名前 タイプ デスクリプション
T | None

T | None: 同等の要素が見つかった場合はその要素。見つからない場合はNone。

T | None

索引に入っている型だけが対象のため、現状では参照解決に使われない型の場合常にNoneになります。

TODO T | None

全要素を対象にするか協議

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
def find_equivalent[T: StBridgeElement](
    self, instance: T, *, exclude_fields: Iterable[str] | None = None
) -> T | None:
    """
    指定された要素と同等(属性が等価)の要素を検索します。
    exclude_fieldsで指定された属性は比較から除外されます。

    ※現在、子要素は比較に含まれません。含めるかどうかは要協議。

    用途としては、同じ形状の鋼材断面などを検索する場合です。

    Args:
        instance (T): 比較対象要素。
        exclude_fields (Iterable[str], optional): 比較から除外する
            フィールド名のリスト。デフォルトはNone。

    Returns:
        T | None: 同等の要素が見つかった場合はその要素。見つからない場合はNone。
        索引に入っている型だけが対象のため、現状では参照解決に使われない型の場合常にNoneになります。
        TODO: 全要素を対象にするか協議
    """
    if exclude_fields is None:
        exclude_fields = []

    for item in self._storage.get(type(instance), {}).values():
        if all(
            getattr(item, private_field_name(field_name))
            == getattr(instance, private_field_name(field_name))
            for field_name, field_info in item._fields.items()
            if field_name not in exclude_fields
            and field_info.kind == _FieldKind.ATTRIBUTE
        ) and isinstance(item, type(instance)):
            return item
    return None

get_by_guid

get_by_guid(guid: UUID) -> StBridgeElement

guidで検索します。

guidはキーによる取得、型の宣言は不要です。guid属性を持つすべての要素が対象になります。

引数:

名前 タイプ デスクリプション デフォルト
guid UUID

取得する要素のguid。

必須

戻り値:

名前 タイプ デスクリプション
StBridgeElement StBridgeElement

見つかった要素。

発生:

タイプ デスクリプション
ReferenceElementNotFoundError

要素が見つからない場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
def get_by_guid(self, guid: UUID) -> StBridgeElement:
    """
    guidで検索します。

    guidはキーによる取得、型の宣言は不要です。guid属性を持つすべての要素が対象になります。

    Args:
        guid: 取得する要素のguid。

    Returns:
        StBridgeElement: 見つかった要素。

    Raises:
        ReferenceElementNotFoundError: 要素が見つからない場合。
    """
    item = self._guid_storage.get(guid)
    if item is None:
        raise ReferenceElementNotFoundError(f"guid={guid} が見つかりません。")
    return item

get_by_guid_or_none

get_by_guid_or_none(guid: UUID) -> StBridgeElement | None

get_by_guid()と同じですが、見つからない場合はNoneを返します。

引数:

名前 タイプ デスクリプション デフォルト
guid UUID

取得する要素のguid。

必須

戻り値:

タイプ デスクリプション
StBridgeElement | None

StBridgeElement | None: 見つかった要素。見つからない場合はNone。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
279
280
281
282
283
284
285
286
287
288
def get_by_guid_or_none(self, guid: UUID) -> StBridgeElement | None:
    """get_by_guid()と同じですが、見つからない場合はNoneを返します。

    Args:
        guid: 取得する要素のguid。

    Returns:
        StBridgeElement | None: 見つかった要素。見つからない場合はNone。
    """
    return self._guid_storage.get(guid)

deref

deref(element: StbColumn) -> _StbColumnDeref
deref(element: StbPost) -> _StbPostDeref
deref(element: StbGirder) -> _StbGirderDeref
deref(element: StbBeam) -> _StbBeamDeref
deref(element: StbBrace) -> _StbBraceDeref
deref(element: StbSlab) -> _StbSlabDeref
deref(element: StbWall) -> _StbWallDeref
deref(element: StbFooting) -> _StbFootingDeref
deref(element: StbStripFooting) -> _StbStripFootingDeref
deref(element: StbPile) -> _StbPileDeref
deref(element: StbFoundationColumn) -> _StbFoundationColumnDeref
deref(element: StbParapet) -> _StbParapetDeref
deref(element: StBridgeElement) -> _DerefAccessor

要素の参照解決をするアクセサを返します。

deref(element)の後に、データモデルで参照を表す属性と同じ属性にアクセスすると参照先の要素が取得できます。 末尾に_or_noneを付けると、参照を解決できない場合にNoneを返します。 属性名と参照先の具体的な型は、スタブで定義します。

引数:

名前 タイプ デスクリプション デフォルト
element StBridgeElement

参照を解決する要素。

必須

戻り値:

名前 タイプ デスクリプション
_DerefAccessor _DerefAccessor

参照解決アクセサ。

発生:

タイプ デスクリプション
AttributeError

属性アクセス時に属性が定義されていない場合。

ReferenceElementNotFoundError

属性アクセス時に、参照値がNoneの場合、 または参照先の要素が存在しない場合。 _or_none付きの属性では投げず、Noneを返します。

SchemaError

属性アクセス時に、属性の値が不正で 参照先の型が確定できない場合。 _or_none付きの属性でも投げます。

TypeError

属性アクセス時に型が対応したキーの型でない場合。

例:

>>> section = repo.deref(girder).id_section
>>> node = repo.deref(girder).id_node_start_or_none
ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_v2_0_2.py
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
def deref(self, element: StBridgeElement) -> _DerefAccessor:
    """要素の参照解決をするアクセサを返します。

    deref(element)の後に、データモデルで参照を表す属性と同じ属性にアクセスすると参照先の要素が取得できます。
    末尾に`_or_none`を付けると、参照を解決できない場合にNoneを返します。
    属性名と参照先の具体的な型は、スタブで定義します。

    Args:
        element: 参照を解決する要素。

    Returns:
        _DerefAccessor: 参照解決アクセサ。

    Raises:
        AttributeError: 属性アクセス時に属性が定義されていない場合。
        ReferenceElementNotFoundError: 属性アクセス時に、参照値がNoneの場合、
            または参照先の要素が存在しない場合。
            `_or_none`付きの属性では投げず、Noneを返します。
        SchemaError: 属性アクセス時に、属性の値が不正で
            参照先の型が確定できない場合。
            `_or_none`付きの属性でも投げます。
        TypeError: 属性アクセス時に型が対応したキーの型でない場合。

    Examples:
        >>> section = repo.deref(girder).id_section
        >>> node = repo.deref(girder).id_node_start_or_none
    """
    return _DerefAccessor(self, element)

RepositoryV2_1_0

RepositoryV2_1_0(stb: StBridgeElement)

Bases: RepositoryBase

ST-Bridge v2.1.0用のリポジトリ。

インスタンスの生成はget_repositoryの利用を推奨します。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
65
66
67
68
69
70
71
72
73
74
75
76
def __init__(self, stb: StBridgeElement) -> None:
    self._stb: StBridgeElement = stb
    self._storage: dict[
        type[StBridgeElement], dict[int | str, StBridgeElement]
    ] = {}
    self._guid_storage: dict[UUID, StBridgeElement] = {}
    self._name_keyed_types: tuple[type[StBridgeElement], ...] = tuple(
        ItemType
        for ItemType, key_field_name in self._key_field_names.items()
        if key_field_name == "name"
    )
    self._set_storage(stb)

refresh

refresh() -> None

モデルを編集した場合に、索引を作り直します。

リポジトリ構築後に要素を追加・削除したりid,name,guid等の属性を変更した場合に呼び出します。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
112
113
114
115
116
117
118
119
def refresh(self) -> None:
    """モデルを編集した場合に、索引を作り直します。

    リポジトリ構築後に要素を追加・削除したりid,name,guid等の属性を変更した場合に呼び出します。
    """
    self._storage.clear()
    self._guid_storage.clear()
    self._set_storage(self._stb)

get

get(ItemType: type[T], key: int | str) -> T

指定した型とキーで要素を1つ取得します。

キーは一般的にはid、鋼材断面はnameです。

引数:

名前 タイプ デスクリプション デフォルト
ItemType type[T]

取得する要素の型。

必須
key int | str

キーの値。

必須

戻り値:

名前 タイプ デスクリプション
T T

見つかった要素。

発生:

タイプ デスクリプション
TypeError

ItemTypeが参照定義されていない場合、 または索引の要素がItemTypeのインスタンスでない場合。

ReferenceElementNotFoundError

参照先が見つからなかった場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
def get[T: StBridgeElement](self, ItemType: type[T], key: int | str) -> T:
    """
    指定した型とキーで要素を1つ取得します。

    キーは一般的にはid、鋼材断面はnameです。

    Args:
        ItemType (type[T]): 取得する要素の型。
        key (int | str): キーの値。

    Returns:
        T: 見つかった要素。

    Raises:
        TypeError: ItemTypeが参照定義されていない場合、
            または索引の要素がItemTypeのインスタンスでない場合。
        ReferenceElementNotFoundError: 参照先が見つからなかった場合。
    """
    key_field_name: str | None = self._key_field_names.get(ItemType)
    if key_field_name is None:
        raise TypeError(
            f"{ItemType.__name__}は参照定義されていないため取得できません。"
        )
    children_dict: dict[int | str, StBridgeElement] | None = self._storage.get(
        ItemType
    )
    if not children_dict:
        raise ReferenceElementNotFoundError(
            f"[{ItemType.__name__}]の要素は存在しません。"
        )
    item: StBridgeElement | None = children_dict.get(key)
    if item is None:
        raise ReferenceElementNotFoundError(
            f"[{ItemType.__name__}].{key_field_name}={key}が見つかりません。"
        )
    if not isinstance(item, ItemType):
        raise TypeError(
            f"型が異なります。expect:{ItemType.__name__}, "
            f"actual:{type(item).__name__}"
        )
    return item

get_or_none

get_or_none(ItemType: type[T], key: int | str) -> T | None

get()と同じですが、要素が見つからない場合はNoneを返します。

TypeErrorは、Noneにはせずそのまま投げます。

引数:

名前 タイプ デスクリプション デフォルト
ItemType type[T]

取得する要素の型。

必須
key int | str

キーの値。

必須

戻り値:

タイプ デスクリプション
T | None

T | None: 見つかった要素。見つからない場合はNone。

発生:

タイプ デスクリプション
TypeError

ItemTypeが参照定義されていない場合、 または索引の要素がItemTypeのインスタンスでない場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
def get_or_none[T: StBridgeElement](
    self, ItemType: type[T], key: int | str
) -> T | None:
    """
    get()と同じですが、要素が見つからない場合はNoneを返します。

    TypeErrorは、Noneにはせずそのまま投げます。

    Args:
        ItemType (type[T]): 取得する要素の型。
        key (int | str): キーの値。

    Returns:
        T | None: 見つかった要素。見つからない場合はNone。

    Raises:
        TypeError: ItemTypeが参照定義されていない場合、
            または索引の要素がItemTypeのインスタンスでない場合。
    """
    try:
        return self.get(ItemType, key)
    except ReferenceElementNotFoundError:
        return None

find_equivalent

find_equivalent(instance: T, *, exclude_fields: Iterable[str] | None = None) -> T | None

指定された要素と同等(属性が等価)の要素を検索します。 exclude_fieldsで指定された属性は比較から除外されます。

※現在、子要素は比較に含まれません。含めるかどうかは要協議。

用途としては、同じ形状の鋼材断面などを検索する場合です。

引数:

名前 タイプ デスクリプション デフォルト
instance T

比較対象要素。

必須
exclude_fields Iterable[str]

比較から除外する フィールド名のリスト。デフォルトはNone。

None

戻り値:

名前 タイプ デスクリプション
T | None

T | None: 同等の要素が見つかった場合はその要素。見つからない場合はNone。

T | None

索引に入っている型だけが対象のため、現状では参照解決に使われない型の場合常にNoneになります。

TODO T | None

全要素を対象にするか協議

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
def find_equivalent[T: StBridgeElement](
    self, instance: T, *, exclude_fields: Iterable[str] | None = None
) -> T | None:
    """
    指定された要素と同等(属性が等価)の要素を検索します。
    exclude_fieldsで指定された属性は比較から除外されます。

    ※現在、子要素は比較に含まれません。含めるかどうかは要協議。

    用途としては、同じ形状の鋼材断面などを検索する場合です。

    Args:
        instance (T): 比較対象要素。
        exclude_fields (Iterable[str], optional): 比較から除外する
            フィールド名のリスト。デフォルトはNone。

    Returns:
        T | None: 同等の要素が見つかった場合はその要素。見つからない場合はNone。
        索引に入っている型だけが対象のため、現状では参照解決に使われない型の場合常にNoneになります。
        TODO: 全要素を対象にするか協議
    """
    if exclude_fields is None:
        exclude_fields = []

    for item in self._storage.get(type(instance), {}).values():
        if all(
            getattr(item, private_field_name(field_name))
            == getattr(instance, private_field_name(field_name))
            for field_name, field_info in item._fields.items()
            if field_name not in exclude_fields
            and field_info.kind == _FieldKind.ATTRIBUTE
        ) and isinstance(item, type(instance)):
            return item
    return None

get_by_guid

get_by_guid(guid: UUID) -> StBridgeElement

guidで検索します。

guidはキーによる取得、型の宣言は不要です。guid属性を持つすべての要素が対象になります。

引数:

名前 タイプ デスクリプション デフォルト
guid UUID

取得する要素のguid。

必須

戻り値:

名前 タイプ デスクリプション
StBridgeElement StBridgeElement

見つかった要素。

発生:

タイプ デスクリプション
ReferenceElementNotFoundError

要素が見つからない場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
def get_by_guid(self, guid: UUID) -> StBridgeElement:
    """
    guidで検索します。

    guidはキーによる取得、型の宣言は不要です。guid属性を持つすべての要素が対象になります。

    Args:
        guid: 取得する要素のguid。

    Returns:
        StBridgeElement: 見つかった要素。

    Raises:
        ReferenceElementNotFoundError: 要素が見つからない場合。
    """
    item = self._guid_storage.get(guid)
    if item is None:
        raise ReferenceElementNotFoundError(f"guid={guid} が見つかりません。")
    return item

get_by_guid_or_none

get_by_guid_or_none(guid: UUID) -> StBridgeElement | None

get_by_guid()と同じですが、見つからない場合はNoneを返します。

引数:

名前 タイプ デスクリプション デフォルト
guid UUID

取得する要素のguid。

必須

戻り値:

タイプ デスクリプション
StBridgeElement | None

StBridgeElement | None: 見つかった要素。見つからない場合はNone。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
279
280
281
282
283
284
285
286
287
288
def get_by_guid_or_none(self, guid: UUID) -> StBridgeElement | None:
    """get_by_guid()と同じですが、見つからない場合はNoneを返します。

    Args:
        guid: 取得する要素のguid。

    Returns:
        StBridgeElement | None: 見つかった要素。見つからない場合はNone。
    """
    return self._guid_storage.get(guid)

deref

deref(element: StbColumn) -> _StbColumnDeref
deref(element: StbPost) -> _StbPostDeref
deref(element: StbGirder) -> _StbGirderDeref
deref(element: StbBeam) -> _StbBeamDeref
deref(element: StbBrace) -> _StbBraceDeref
deref(element: StbSlab) -> _StbSlabDeref
deref(element: StbWall) -> _StbWallDeref
deref(element: StbFooting) -> _StbFootingDeref
deref(element: StbStripFooting) -> _StbStripFootingDeref
deref(element: StbPile) -> _StbPileDeref
deref(element: StbFoundationColumn) -> _StbFoundationColumnDeref
deref(element: StbParapet) -> _StbParapetDeref
deref(element: StBridgeElement) -> _DerefAccessor

要素の参照解決をするアクセサを返します。

deref(element)の後に、データモデルで参照を表す属性と同じ属性にアクセスすると参照先の要素が取得できます。 末尾に_or_noneを付けると、参照を解決できない場合にNoneを返します。 属性名と参照先の具体的な型は、スタブで定義します。

引数:

名前 タイプ デスクリプション デフォルト
element StBridgeElement

参照を解決する要素。

必須

戻り値:

名前 タイプ デスクリプション
_DerefAccessor _DerefAccessor

参照解決アクセサ。

発生:

タイプ デスクリプション
AttributeError

属性アクセス時に属性が定義されていない場合。

ReferenceElementNotFoundError

属性アクセス時に、参照値がNoneの場合、 または参照先の要素が存在しない場合。 _or_none付きの属性では投げず、Noneを返します。

SchemaError

属性アクセス時に、属性の値が不正で 参照先の型が確定できない場合。 _or_none付きの属性でも投げます。

TypeError

属性アクセス時に型が対応したキーの型でない場合。

例:

>>> section = repo.deref(girder).id_section
>>> node = repo.deref(girder).id_node_start_or_none
ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_v2_1_0.py
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
def deref(self, element: StBridgeElement) -> _DerefAccessor:
    """要素の参照解決をするアクセサを返します。

    deref(element)の後に、データモデルで参照を表す属性と同じ属性にアクセスすると参照先の要素が取得できます。
    末尾に`_or_none`を付けると、参照を解決できない場合にNoneを返します。
    属性名と参照先の具体的な型は、スタブで定義します。

    Args:
        element: 参照を解決する要素。

    Returns:
        _DerefAccessor: 参照解決アクセサ。

    Raises:
        AttributeError: 属性アクセス時に属性が定義されていない場合。
        ReferenceElementNotFoundError: 属性アクセス時に、参照値がNoneの場合、
            または参照先の要素が存在しない場合。
            `_or_none`付きの属性では投げず、Noneを返します。
        SchemaError: 属性アクセス時に、属性の値が不正で
            参照先の型が確定できない場合。
            `_or_none`付きの属性でも投げます。
        TypeError: 属性アクセス時に型が対応したキーの型でない場合。

    Examples:
        >>> section = repo.deref(girder).id_section
        >>> node = repo.deref(girder).id_node_start_or_none
    """
    return _DerefAccessor(self, element)

get_steel

get_steel(name: str) -> StbSecRollH | StbSecBuildH | StbSecBuildHAssymmetric | StbSecRollBox | StbSecBuildBox | StbSecPipe | StbSecRollT | StbSecBuildT | StbSecRollC | StbSecRoll2c | StbSecRollL | StbSecRoll2l | StbSecLipC | StbSecLip2c | StbSecFlatBar | StbSecRoundBar | StbSecSteelProduct | StbSecSteelUndefined

RepositoryLatest

RepositoryLatest(stb: StBridgeElement)

Bases: RepositoryBase

ST-Bridge v2.1.1用のリポジトリ。

インスタンスの生成はget_repositoryの利用を推奨します。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
65
66
67
68
69
70
71
72
73
74
75
76
def __init__(self, stb: StBridgeElement) -> None:
    self._stb: StBridgeElement = stb
    self._storage: dict[
        type[StBridgeElement], dict[int | str, StBridgeElement]
    ] = {}
    self._guid_storage: dict[UUID, StBridgeElement] = {}
    self._name_keyed_types: tuple[type[StBridgeElement], ...] = tuple(
        ItemType
        for ItemType, key_field_name in self._key_field_names.items()
        if key_field_name == "name"
    )
    self._set_storage(stb)

refresh

refresh() -> None

モデルを編集した場合に、索引を作り直します。

リポジトリ構築後に要素を追加・削除したりid,name,guid等の属性を変更した場合に呼び出します。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
112
113
114
115
116
117
118
119
def refresh(self) -> None:
    """モデルを編集した場合に、索引を作り直します。

    リポジトリ構築後に要素を追加・削除したりid,name,guid等の属性を変更した場合に呼び出します。
    """
    self._storage.clear()
    self._guid_storage.clear()
    self._set_storage(self._stb)

get

get(ItemType: type[T], key: int | str) -> T

指定した型とキーで要素を1つ取得します。

キーは一般的にはid、鋼材断面はnameです。

引数:

名前 タイプ デスクリプション デフォルト
ItemType type[T]

取得する要素の型。

必須
key int | str

キーの値。

必須

戻り値:

名前 タイプ デスクリプション
T T

見つかった要素。

発生:

タイプ デスクリプション
TypeError

ItemTypeが参照定義されていない場合、 または索引の要素がItemTypeのインスタンスでない場合。

ReferenceElementNotFoundError

参照先が見つからなかった場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
def get[T: StBridgeElement](self, ItemType: type[T], key: int | str) -> T:
    """
    指定した型とキーで要素を1つ取得します。

    キーは一般的にはid、鋼材断面はnameです。

    Args:
        ItemType (type[T]): 取得する要素の型。
        key (int | str): キーの値。

    Returns:
        T: 見つかった要素。

    Raises:
        TypeError: ItemTypeが参照定義されていない場合、
            または索引の要素がItemTypeのインスタンスでない場合。
        ReferenceElementNotFoundError: 参照先が見つからなかった場合。
    """
    key_field_name: str | None = self._key_field_names.get(ItemType)
    if key_field_name is None:
        raise TypeError(
            f"{ItemType.__name__}は参照定義されていないため取得できません。"
        )
    children_dict: dict[int | str, StBridgeElement] | None = self._storage.get(
        ItemType
    )
    if not children_dict:
        raise ReferenceElementNotFoundError(
            f"[{ItemType.__name__}]の要素は存在しません。"
        )
    item: StBridgeElement | None = children_dict.get(key)
    if item is None:
        raise ReferenceElementNotFoundError(
            f"[{ItemType.__name__}].{key_field_name}={key}が見つかりません。"
        )
    if not isinstance(item, ItemType):
        raise TypeError(
            f"型が異なります。expect:{ItemType.__name__}, "
            f"actual:{type(item).__name__}"
        )
    return item

get_or_none

get_or_none(ItemType: type[T], key: int | str) -> T | None

get()と同じですが、要素が見つからない場合はNoneを返します。

TypeErrorは、Noneにはせずそのまま投げます。

引数:

名前 タイプ デスクリプション デフォルト
ItemType type[T]

取得する要素の型。

必須
key int | str

キーの値。

必須

戻り値:

タイプ デスクリプション
T | None

T | None: 見つかった要素。見つからない場合はNone。

発生:

タイプ デスクリプション
TypeError

ItemTypeが参照定義されていない場合、 または索引の要素がItemTypeのインスタンスでない場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
def get_or_none[T: StBridgeElement](
    self, ItemType: type[T], key: int | str
) -> T | None:
    """
    get()と同じですが、要素が見つからない場合はNoneを返します。

    TypeErrorは、Noneにはせずそのまま投げます。

    Args:
        ItemType (type[T]): 取得する要素の型。
        key (int | str): キーの値。

    Returns:
        T | None: 見つかった要素。見つからない場合はNone。

    Raises:
        TypeError: ItemTypeが参照定義されていない場合、
            または索引の要素がItemTypeのインスタンスでない場合。
    """
    try:
        return self.get(ItemType, key)
    except ReferenceElementNotFoundError:
        return None

find_equivalent

find_equivalent(instance: T, *, exclude_fields: Iterable[str] | None = None) -> T | None

指定された要素と同等(属性が等価)の要素を検索します。 exclude_fieldsで指定された属性は比較から除外されます。

※現在、子要素は比較に含まれません。含めるかどうかは要協議。

用途としては、同じ形状の鋼材断面などを検索する場合です。

引数:

名前 タイプ デスクリプション デフォルト
instance T

比較対象要素。

必須
exclude_fields Iterable[str]

比較から除外する フィールド名のリスト。デフォルトはNone。

None

戻り値:

名前 タイプ デスクリプション
T | None

T | None: 同等の要素が見つかった場合はその要素。見つからない場合はNone。

T | None

索引に入っている型だけが対象のため、現状では参照解決に使われない型の場合常にNoneになります。

TODO T | None

全要素を対象にするか協議

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
def find_equivalent[T: StBridgeElement](
    self, instance: T, *, exclude_fields: Iterable[str] | None = None
) -> T | None:
    """
    指定された要素と同等(属性が等価)の要素を検索します。
    exclude_fieldsで指定された属性は比較から除外されます。

    ※現在、子要素は比較に含まれません。含めるかどうかは要協議。

    用途としては、同じ形状の鋼材断面などを検索する場合です。

    Args:
        instance (T): 比較対象要素。
        exclude_fields (Iterable[str], optional): 比較から除外する
            フィールド名のリスト。デフォルトはNone。

    Returns:
        T | None: 同等の要素が見つかった場合はその要素。見つからない場合はNone。
        索引に入っている型だけが対象のため、現状では参照解決に使われない型の場合常にNoneになります。
        TODO: 全要素を対象にするか協議
    """
    if exclude_fields is None:
        exclude_fields = []

    for item in self._storage.get(type(instance), {}).values():
        if all(
            getattr(item, private_field_name(field_name))
            == getattr(instance, private_field_name(field_name))
            for field_name, field_info in item._fields.items()
            if field_name not in exclude_fields
            and field_info.kind == _FieldKind.ATTRIBUTE
        ) and isinstance(item, type(instance)):
            return item
    return None

get_by_guid

get_by_guid(guid: UUID) -> StBridgeElement

guidで検索します。

guidはキーによる取得、型の宣言は不要です。guid属性を持つすべての要素が対象になります。

引数:

名前 タイプ デスクリプション デフォルト
guid UUID

取得する要素のguid。

必須

戻り値:

名前 タイプ デスクリプション
StBridgeElement StBridgeElement

見つかった要素。

発生:

タイプ デスクリプション
ReferenceElementNotFoundError

要素が見つからない場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
def get_by_guid(self, guid: UUID) -> StBridgeElement:
    """
    guidで検索します。

    guidはキーによる取得、型の宣言は不要です。guid属性を持つすべての要素が対象になります。

    Args:
        guid: 取得する要素のguid。

    Returns:
        StBridgeElement: 見つかった要素。

    Raises:
        ReferenceElementNotFoundError: 要素が見つからない場合。
    """
    item = self._guid_storage.get(guid)
    if item is None:
        raise ReferenceElementNotFoundError(f"guid={guid} が見つかりません。")
    return item

get_by_guid_or_none

get_by_guid_or_none(guid: UUID) -> StBridgeElement | None

get_by_guid()と同じですが、見つからない場合はNoneを返します。

引数:

名前 タイプ デスクリプション デフォルト
guid UUID

取得する要素のguid。

必須

戻り値:

タイプ デスクリプション
StBridgeElement | None

StBridgeElement | None: 見つかった要素。見つからない場合はNone。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
279
280
281
282
283
284
285
286
287
288
def get_by_guid_or_none(self, guid: UUID) -> StBridgeElement | None:
    """get_by_guid()と同じですが、見つからない場合はNoneを返します。

    Args:
        guid: 取得する要素のguid。

    Returns:
        StBridgeElement | None: 見つかった要素。見つからない場合はNone。
    """
    return self._guid_storage.get(guid)

deref

deref(element: StbColumn) -> _StbColumnDeref
deref(element: StbPost) -> _StbPostDeref
deref(element: StbGirder) -> _StbGirderDeref
deref(element: StbBeam) -> _StbBeamDeref
deref(element: StbBrace) -> _StbBraceDeref
deref(element: StbSlab) -> _StbSlabDeref
deref(element: StbWall) -> _StbWallDeref
deref(element: StbFooting) -> _StbFootingDeref
deref(element: StbStripFooting) -> _StbStripFootingDeref
deref(element: StbPile) -> _StbPileDeref
deref(element: StbFoundationColumn) -> _StbFoundationColumnDeref
deref(element: StbParapet) -> _StbParapetDeref
deref(element: StBridgeElement) -> _DerefAccessor

要素の参照解決をするアクセサを返します。

deref(element)の後に、データモデルで参照を表す属性と同じ属性にアクセスすると参照先の要素が取得できます。 末尾に_or_noneを付けると、参照を解決できない場合にNoneを返します。 属性名と参照先の具体的な型は、スタブで定義します。

引数:

名前 タイプ デスクリプション デフォルト
element StBridgeElement

参照を解決する要素。

必須

戻り値:

名前 タイプ デスクリプション
_DerefAccessor _DerefAccessor

参照解決アクセサ。

発生:

タイプ デスクリプション
AttributeError

属性アクセス時に属性が定義されていない場合。

ReferenceElementNotFoundError

属性アクセス時に、参照値がNoneの場合、 または参照先の要素が存在しない場合。 _or_none付きの属性では投げず、Noneを返します。

SchemaError

属性アクセス時に、属性の値が不正で 参照先の型が確定できない場合。 _or_none付きの属性でも投げます。

TypeError

属性アクセス時に型が対応したキーの型でない場合。

例:

>>> section = repo.deref(girder).id_section
>>> node = repo.deref(girder).id_node_start_or_none
ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_v2_1_1.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def deref(self, element: StBridgeElement) -> _DerefAccessor:
    """要素の参照解決をするアクセサを返します。

    deref(element)の後に、データモデルで参照を表す属性と同じ属性にアクセスすると参照先の要素が取得できます。
    末尾に`_or_none`を付けると、参照を解決できない場合にNoneを返します。
    属性名と参照先の具体的な型は、スタブで定義します。

    Args:
        element: 参照を解決する要素。

    Returns:
        _DerefAccessor: 参照解決アクセサ。

    Raises:
        AttributeError: 属性アクセス時に属性が定義されていない場合。
        ReferenceElementNotFoundError: 属性アクセス時に、参照値がNoneの場合、
            または参照先の要素が存在しない場合。
            `_or_none`付きの属性では投げず、Noneを返します。
        SchemaError: 属性アクセス時に、属性の値が不正で
            参照先の型が確定できない場合。
            `_or_none`付きの属性でも投げます。
        TypeError: 属性アクセス時に型が対応したキーの型でない場合。

    Examples:
        >>> section = repo.deref(girder).id_section
        >>> node = repo.deref(girder).id_node_start_or_none
    """
    return _DerefAccessor(self, element)

RepositoryV2_1_1

RepositoryV2_1_1(stb: StBridgeElement)

Bases: RepositoryBase

ST-Bridge v2.1.1用のリポジトリ。

インスタンスの生成はget_repositoryの利用を推奨します。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
65
66
67
68
69
70
71
72
73
74
75
76
def __init__(self, stb: StBridgeElement) -> None:
    self._stb: StBridgeElement = stb
    self._storage: dict[
        type[StBridgeElement], dict[int | str, StBridgeElement]
    ] = {}
    self._guid_storage: dict[UUID, StBridgeElement] = {}
    self._name_keyed_types: tuple[type[StBridgeElement], ...] = tuple(
        ItemType
        for ItemType, key_field_name in self._key_field_names.items()
        if key_field_name == "name"
    )
    self._set_storage(stb)

refresh

refresh() -> None

モデルを編集した場合に、索引を作り直します。

リポジトリ構築後に要素を追加・削除したりid,name,guid等の属性を変更した場合に呼び出します。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
112
113
114
115
116
117
118
119
def refresh(self) -> None:
    """モデルを編集した場合に、索引を作り直します。

    リポジトリ構築後に要素を追加・削除したりid,name,guid等の属性を変更した場合に呼び出します。
    """
    self._storage.clear()
    self._guid_storage.clear()
    self._set_storage(self._stb)

get

get(ItemType: type[T], key: int | str) -> T

指定した型とキーで要素を1つ取得します。

キーは一般的にはid、鋼材断面はnameです。

引数:

名前 タイプ デスクリプション デフォルト
ItemType type[T]

取得する要素の型。

必須
key int | str

キーの値。

必須

戻り値:

名前 タイプ デスクリプション
T T

見つかった要素。

発生:

タイプ デスクリプション
TypeError

ItemTypeが参照定義されていない場合、 または索引の要素がItemTypeのインスタンスでない場合。

ReferenceElementNotFoundError

参照先が見つからなかった場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
def get[T: StBridgeElement](self, ItemType: type[T], key: int | str) -> T:
    """
    指定した型とキーで要素を1つ取得します。

    キーは一般的にはid、鋼材断面はnameです。

    Args:
        ItemType (type[T]): 取得する要素の型。
        key (int | str): キーの値。

    Returns:
        T: 見つかった要素。

    Raises:
        TypeError: ItemTypeが参照定義されていない場合、
            または索引の要素がItemTypeのインスタンスでない場合。
        ReferenceElementNotFoundError: 参照先が見つからなかった場合。
    """
    key_field_name: str | None = self._key_field_names.get(ItemType)
    if key_field_name is None:
        raise TypeError(
            f"{ItemType.__name__}は参照定義されていないため取得できません。"
        )
    children_dict: dict[int | str, StBridgeElement] | None = self._storage.get(
        ItemType
    )
    if not children_dict:
        raise ReferenceElementNotFoundError(
            f"[{ItemType.__name__}]の要素は存在しません。"
        )
    item: StBridgeElement | None = children_dict.get(key)
    if item is None:
        raise ReferenceElementNotFoundError(
            f"[{ItemType.__name__}].{key_field_name}={key}が見つかりません。"
        )
    if not isinstance(item, ItemType):
        raise TypeError(
            f"型が異なります。expect:{ItemType.__name__}, "
            f"actual:{type(item).__name__}"
        )
    return item

get_or_none

get_or_none(ItemType: type[T], key: int | str) -> T | None

get()と同じですが、要素が見つからない場合はNoneを返します。

TypeErrorは、Noneにはせずそのまま投げます。

引数:

名前 タイプ デスクリプション デフォルト
ItemType type[T]

取得する要素の型。

必須
key int | str

キーの値。

必須

戻り値:

タイプ デスクリプション
T | None

T | None: 見つかった要素。見つからない場合はNone。

発生:

タイプ デスクリプション
TypeError

ItemTypeが参照定義されていない場合、 または索引の要素がItemTypeのインスタンスでない場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
def get_or_none[T: StBridgeElement](
    self, ItemType: type[T], key: int | str
) -> T | None:
    """
    get()と同じですが、要素が見つからない場合はNoneを返します。

    TypeErrorは、Noneにはせずそのまま投げます。

    Args:
        ItemType (type[T]): 取得する要素の型。
        key (int | str): キーの値。

    Returns:
        T | None: 見つかった要素。見つからない場合はNone。

    Raises:
        TypeError: ItemTypeが参照定義されていない場合、
            または索引の要素がItemTypeのインスタンスでない場合。
    """
    try:
        return self.get(ItemType, key)
    except ReferenceElementNotFoundError:
        return None

find_equivalent

find_equivalent(instance: T, *, exclude_fields: Iterable[str] | None = None) -> T | None

指定された要素と同等(属性が等価)の要素を検索します。 exclude_fieldsで指定された属性は比較から除外されます。

※現在、子要素は比較に含まれません。含めるかどうかは要協議。

用途としては、同じ形状の鋼材断面などを検索する場合です。

引数:

名前 タイプ デスクリプション デフォルト
instance T

比較対象要素。

必須
exclude_fields Iterable[str]

比較から除外する フィールド名のリスト。デフォルトはNone。

None

戻り値:

名前 タイプ デスクリプション
T | None

T | None: 同等の要素が見つかった場合はその要素。見つからない場合はNone。

T | None

索引に入っている型だけが対象のため、現状では参照解決に使われない型の場合常にNoneになります。

TODO T | None

全要素を対象にするか協議

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
def find_equivalent[T: StBridgeElement](
    self, instance: T, *, exclude_fields: Iterable[str] | None = None
) -> T | None:
    """
    指定された要素と同等(属性が等価)の要素を検索します。
    exclude_fieldsで指定された属性は比較から除外されます。

    ※現在、子要素は比較に含まれません。含めるかどうかは要協議。

    用途としては、同じ形状の鋼材断面などを検索する場合です。

    Args:
        instance (T): 比較対象要素。
        exclude_fields (Iterable[str], optional): 比較から除外する
            フィールド名のリスト。デフォルトはNone。

    Returns:
        T | None: 同等の要素が見つかった場合はその要素。見つからない場合はNone。
        索引に入っている型だけが対象のため、現状では参照解決に使われない型の場合常にNoneになります。
        TODO: 全要素を対象にするか協議
    """
    if exclude_fields is None:
        exclude_fields = []

    for item in self._storage.get(type(instance), {}).values():
        if all(
            getattr(item, private_field_name(field_name))
            == getattr(instance, private_field_name(field_name))
            for field_name, field_info in item._fields.items()
            if field_name not in exclude_fields
            and field_info.kind == _FieldKind.ATTRIBUTE
        ) and isinstance(item, type(instance)):
            return item
    return None

get_by_guid

get_by_guid(guid: UUID) -> StBridgeElement

guidで検索します。

guidはキーによる取得、型の宣言は不要です。guid属性を持つすべての要素が対象になります。

引数:

名前 タイプ デスクリプション デフォルト
guid UUID

取得する要素のguid。

必須

戻り値:

名前 タイプ デスクリプション
StBridgeElement StBridgeElement

見つかった要素。

発生:

タイプ デスクリプション
ReferenceElementNotFoundError

要素が見つからない場合。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
def get_by_guid(self, guid: UUID) -> StBridgeElement:
    """
    guidで検索します。

    guidはキーによる取得、型の宣言は不要です。guid属性を持つすべての要素が対象になります。

    Args:
        guid: 取得する要素のguid。

    Returns:
        StBridgeElement: 見つかった要素。

    Raises:
        ReferenceElementNotFoundError: 要素が見つからない場合。
    """
    item = self._guid_storage.get(guid)
    if item is None:
        raise ReferenceElementNotFoundError(f"guid={guid} が見つかりません。")
    return item

get_by_guid_or_none

get_by_guid_or_none(guid: UUID) -> StBridgeElement | None

get_by_guid()と同じですが、見つからない場合はNoneを返します。

引数:

名前 タイプ デスクリプション デフォルト
guid UUID

取得する要素のguid。

必須

戻り値:

タイプ デスクリプション
StBridgeElement | None

StBridgeElement | None: 見つかった要素。見つからない場合はNone。

ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_common.py
279
280
281
282
283
284
285
286
287
288
def get_by_guid_or_none(self, guid: UUID) -> StBridgeElement | None:
    """get_by_guid()と同じですが、見つからない場合はNoneを返します。

    Args:
        guid: 取得する要素のguid。

    Returns:
        StBridgeElement | None: 見つかった要素。見つからない場合はNone。
    """
    return self._guid_storage.get(guid)

deref

deref(element: StbColumn) -> _StbColumnDeref
deref(element: StbPost) -> _StbPostDeref
deref(element: StbGirder) -> _StbGirderDeref
deref(element: StbBeam) -> _StbBeamDeref
deref(element: StbBrace) -> _StbBraceDeref
deref(element: StbSlab) -> _StbSlabDeref
deref(element: StbWall) -> _StbWallDeref
deref(element: StbFooting) -> _StbFootingDeref
deref(element: StbStripFooting) -> _StbStripFootingDeref
deref(element: StbPile) -> _StbPileDeref
deref(element: StbFoundationColumn) -> _StbFoundationColumnDeref
deref(element: StbParapet) -> _StbParapetDeref
deref(element: StBridgeElement) -> _DerefAccessor

要素の参照解決をするアクセサを返します。

deref(element)の後に、データモデルで参照を表す属性と同じ属性にアクセスすると参照先の要素が取得できます。 末尾に_or_noneを付けると、参照を解決できない場合にNoneを返します。 属性名と参照先の具体的な型は、スタブで定義します。

引数:

名前 タイプ デスクリプション デフォルト
element StBridgeElement

参照を解決する要素。

必須

戻り値:

名前 タイプ デスクリプション
_DerefAccessor _DerefAccessor

参照解決アクセサ。

発生:

タイプ デスクリプション
AttributeError

属性アクセス時に属性が定義されていない場合。

ReferenceElementNotFoundError

属性アクセス時に、参照値がNoneの場合、 または参照先の要素が存在しない場合。 _or_none付きの属性では投げず、Noneを返します。

SchemaError

属性アクセス時に、属性の値が不正で 参照先の型が確定できない場合。 _or_none付きの属性でも投げます。

TypeError

属性アクセス時に型が対応したキーの型でない場合。

例:

>>> section = repo.deref(girder).id_section
>>> node = repo.deref(girder).id_node_start_or_none
ソースコード位置: python/stbkit-core/src/stbkit/core/repository/repo_v2_1_1.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def deref(self, element: StBridgeElement) -> _DerefAccessor:
    """要素の参照解決をするアクセサを返します。

    deref(element)の後に、データモデルで参照を表す属性と同じ属性にアクセスすると参照先の要素が取得できます。
    末尾に`_or_none`を付けると、参照を解決できない場合にNoneを返します。
    属性名と参照先の具体的な型は、スタブで定義します。

    Args:
        element: 参照を解決する要素。

    Returns:
        _DerefAccessor: 参照解決アクセサ。

    Raises:
        AttributeError: 属性アクセス時に属性が定義されていない場合。
        ReferenceElementNotFoundError: 属性アクセス時に、参照値がNoneの場合、
            または参照先の要素が存在しない場合。
            `_or_none`付きの属性では投げず、Noneを返します。
        SchemaError: 属性アクセス時に、属性の値が不正で
            参照先の型が確定できない場合。
            `_or_none`付きの属性でも投げます。
        TypeError: 属性アクセス時に型が対応したキーの型でない場合。

    Examples:
        >>> section = repo.deref(girder).id_section
        >>> node = repo.deref(girder).id_node_start_or_none
    """
    return _DerefAccessor(self, element)