Skip to content

Commit

Permalink
feat: Export Capella
Browse files Browse the repository at this point in the history
  • Loading branch information
huyenngn committed Jan 9, 2024
1 parent a77eba8 commit 74d5e4a
Show file tree
Hide file tree
Showing 7 changed files with 155 additions and 20 deletions.
27 changes: 18 additions & 9 deletions capella_ros_tools/modules/capella/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,27 @@ def get_enums(self, package: t.Any) -> list[EnumDef]:
"""Get enums in Capella model."""
enums = []
for enum in package.enumerations:
values = []
for literal in enum.owned_literals:
try:
type_name = literal.value.type.name
literal_value = literal.value.value
except AttributeError:
type_name = ""
literal_value = ""

values.append(
EnumValue(
type_name,
literal.name,
literal_value,
literal.description,
)
)
enums.append(
EnumDef(
enum.name,
[
EnumValue(
literal.value.type.name,
literal.name,
literal.value.value,
literal.description,
)
for literal in enum.owned_literals
],
values,
enum.description,
)
)
Expand Down
7 changes: 4 additions & 3 deletions capella_ros_tools/scripts/capella2msg.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,14 @@ def _add_package(self, current_root: t.Any) -> MessagePkgDef:
[
ConstantDef(
BaseTypeDef(
CAPELLA_TYPE_TO_MSG[value.type]
CAPELLA_TYPE_TO_MSG.get(value.type)
or "uint8"
),
value.name,
str(value.value),
value.value or str(i),
value.description.split("\n"),
)
for value in enum.values
for i, value in enumerate(enum.values)
],
[],
)
Expand Down
13 changes: 6 additions & 7 deletions docs/source/examples/Export capella.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,28 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import capellambse\n",
"from capella_ros_tools.scripts import capella2msg\n",
"from pathlib import Path"
]
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"msg_path = Path(\"data/coffee_msgs\")\n",
"capella_path = capellambse.filehandler.get_filehandler(\"git+https://github.com/DSD-DBS/coffee-machine\")\n",
"msg_path = Path(\"data/test\")\n",
"capella_path = Path(\"data/melody_model_60\")\n",
"layer = \"la\""
]
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 3,
"metadata": {},
"outputs": [
{
Expand All @@ -49,7 +48,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
Expand Down
122 changes: 122 additions & 0 deletions docs/source/examples/Parse capella.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Parse Capella"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from capella_ros_tools.modules.capella.parser import CapellaModel\n",
"from pathlib import Path"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Cannot load PVMT extension: ValueError: Provided model does not have a PropertyValuePkg\n",
"Property values are not available in this model\n"
]
}
],
"source": [
"model = CapellaModel(Path(\"data/melody_model_60\"), \"la\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Wand Objects'}"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.get_packages(model.data)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[ClassDef(name='Wand', properties=[ClassProperty(type_name='String', type_pkg_name=None, name='owner', min_card='1', max_card='1', description=''), ClassProperty(type_name='Wand Core', type_pkg_name=None, name='core', min_card='1', max_card='1', description=''), ClassProperty(type_name='Wand Wood', type_pkg_name=None, name='wood', min_card='1', max_card='1', description='')], description=''),\n",
" ClassDef(name='Class 2', properties=[], description='')]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.get_classes(model.data)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[EnumDef(name='Wand Core', values=[EnumValue(type='', name='Unicorn Hair', value='', description=''), EnumValue(type='', name='Dragon Heartstring', value='', description=''), EnumValue(type='', name='Pheonix Feather', value='', description=''), EnumValue(type='', name='Thestral Tail-Hair', value='', description='')], description=''),\n",
" EnumDef(name='Wand Wood', values=[EnumValue(type='', name='Apple', value='', description=''), EnumValue(type='', name='Cedar', value='', description=''), EnumValue(type='', name='Ebony', value='', description=''), EnumValue(type='', name='Elder', value='', description=''), EnumValue(type='', name='Holly', value='', description='')], description='')]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.get_enums(model.data)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".capella_venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
2 changes: 2 additions & 0 deletions docs/source/examples/Parse capella.ipynb.license
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Copyright DB InfraGO AG and contributors
# SPDX-License-Identifier: CC0-1.0
2 changes: 1 addition & 1 deletion docs/source/examples/Parse messages.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"source": [
"from capella_ros_tools.modules.messages.parser import MessageDef\n",
"from pathlib import Path\n",
"from IPython.display import display\n"
"from IPython.display import display"
]
},
{
Expand Down
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ Documentation = "https://dsd-dbs.github.io/capella-ros-tools"
[project.optional-dependencies]
docs = [
"furo",
"ipython",
"nbsphinx",
"sphinx",
"sphinx-copybutton",
"tomli; python_version<'3.11'",
Expand Down

0 comments on commit 74d5e4a

Please sign in to comment.