Skip to content

Conversation

zrgt
Copy link
Contributor

@zrgt zrgt commented Aug 29, 2025

This PR introduces several utility methods and refactorings for Referable objects and Key handling.

Changes

  • idShortPath Utility Functions

    • Added Referable.get_identifiable_root() to retrieve the root Identifiable object of a referable.
    • Added Referable.get_id_short_path() to generate an idShortPath, useful in client/server contexts.
    • Added Referable.parse_id_short_path to handle idShortPath strings
    • Added Referable.build_id_short_path to generate idShortPath string from list[str]
    • Added Referable.validate_id_short_path to check if the idShortPath is correct
    • Refactored get_referable, so that now it can accept id_short_path as a string
  • Key Handling

    • Added find_registered_referable_type_in_key_types_classes() to encapsulate usage of KEY_TYPES_CLASSES.
    • Refactored Key.from_referable to leverage the new method.
  • Tests

    • Added unit tests for the new Referable methods.
    • Fixed minor typos in test_base.py.

fixes #414

Frosty2500 and others added 25 commits April 23, 2025 14:38
…asyx#363)

We add a missing import statement of `basyx.aas.adapter.json`. 

Fixes eclipse-basyx#352
…syx#356)

Currently, there are several wrong imports and
outdated unittests in the `compliance-tool` 
package.

This fixes these issues.

Fixes eclipse-basyx#354
…ce` (eclipse-basyx#337)

Previously, if the `semantic_id` was a 
`ModelReference`, it very often had the generic 
`type` "`model.Referable`" instead of the actual
type of the object it points to. This lead to a 
bug in the AASX writer, where 
`ConceptDescription`s were not written to the 
AASX, even though they existed in the 
`ObjectStore`.

This fixes this problem by tackling three separate
points: 

1. In `json_deserialization.py`, we now infer the
`type` of the `ModelReference` via the Reference's
last `Key`. This is more of a hotfix and issue 
eclipse-basyx#367 tracks the creation of a better solution. 

2. In `aasx.py`, an unneccessary `logger.info` 
call is removed, that previously cluttered the 
output of the writer if a `semantic_id` was not 
pointing to a `ConceptDescription`, which is not
something worth noting. Furthermore, we improve
other log messages. 

3. In `examples.data._helper`, we improve the test
for `semantic_id` equality, namely by comparing
the `ModelReference`'s attributes explicitly, when
it happens to be one, instead of relying on simple
string comparision.
This updates the minimum version of the dependency `pyecma376` in the `pyproject.toml`, ensuring that our AASX files allow for spaces in file names. 

Fixes eclipse-basyx#236
…-basyx#369)

Previously, some `sdk` dependencies, that are only 
necessary for testing were included in the 
mandatory dependencies.

For improving package footprint, these are moved 
into the `[dev]` section of optional dependencies
in the `pyproject.toml`.

---------

Co-authored-by: s-heppner <[email protected]>
This adds a new `SetObjectStore` that is backed by 
a set. Its main advantage is that it does not have 
the problem with not updated `Identifier`s
that the `DictObjectStore` has (See eclipse-basyx#216).

We make sure to document the differences between
`DictObjectStore` and `SetObjectStore` in their
respective class docstrings.
… updated (eclipse-basyx#344)

Previously, there was no check if the copyright
statement on top of each file (due to the MIT
license) was up to date. 

This adapts our `update_copyright_year.sh` script
with a checking mode to determine if any file
needs adapting and then adds this check to the CI.

At the same time, this also updates all necessary
files to the year 2025.

Fixes eclipse-basyx#260
Fixes eclipse-basyx#331

---------

Co-authored-by: s-heppner <[email protected]>
…pse-basyx#359)

Previously, we were accidentally still trying to 
install dependencies from the already deleted 
`requirements.txt` when generating the 
documentation.

This fixes this and installs them instead from 
the `pyproject.toml`.

Co-authored-by: s-heppner <[email protected]>
This refactors away from `setup.py` and towards
`pyproject.toml` for the `compliance_tool` 
package.

At the same step, we also update the relevant CI 
checks as well.
This fixes the redirects from the AAS repository 
paths to the Submodel repository paths to work
properly.

Furthermore, the installation of dependencies 
inside the server Docker image was previously 
using the latest release of the SDK. This means,
that we could not ensure that each commit in the
`main` branch of our monorepo would be 
interoperable between SDK and server, as a PR 
would have to be closed in order for the server CI
would not report any errors. In order to fix this,
issue in the development process, the server 
Docker image now installs the SDK from the local
repository, rather than from GitHub.

Lastly, this fixes a wrong status code reported
when specifing a model that is malformed or 
missing information. The specification expects a
400 (Bad Request) response, but the server sent a 
422 (Unprocessable Content). 

Fixes eclipse-basyx#315
…#376)

Previously, the section "Codestyle and Testing"
was outdated, still from the time where there was
only the SDK inside this repository.

This greatly extends the section, renaming it to
"Code Quality" and introducing subsections for
"Codestyle" and "Testing", where we describe how
to run the necessary tests locally on the
developer's machine for each of the packages
inside this monorepository.

Fixes eclipse-basyx#353
We previously refactored the compliance_tool from
`setup.py` to `pyproject.toml` (See eclipse-basyx#361).
However, somehow the `setup.py` slipped through
and is still in the `compliance_tool` directory.

This removes the `setup.py` from the
`compliance_tool` completely.
This adds a job `compliance-tool-publish` to the `release.yml` that
automatically publishes the compliance-tool package to PyPI upon
release. It is simply copied from the SDK job, with adapted paths.
…#392)

* sdk: Update lxml dependency in pyproject.toml

Previously, the `lxml` dependency in the `pyproject.toml` was pinned to
versions `>=4.2,<5`. This caused a faulty installation via `pip` on
Windows due to missing binary wheels.

This updates the `lxml` dependency to versions `>=5.3` to resolve the
issue.

Additionally, the `mypy` dependency in the `pyproject.toml` was unpinned,
leading to the installation of the latest version. The recent release of
`mypy 1.16.0` introduced changes not yet supported by our codebase,
resulting in CI pipeline failures.

This restricts the `mypy` dependency to version `1.15.0` until we have
proper support for `1.16.0` and its new features.

Fixes eclipse-basyx#391
- The method is added to refactor the usage
of KEY_TYPES_CLASSES
- Refactor `Key.from_referable`
- Added methods in class `Referable` for
getting `identifiable` root object
and for getting idShortPath, which can be used
e.g. when working with servers/clients
- Added tests for new methods
- Fixed small typos in `test_base.py`
@s-heppner
Copy link
Contributor

@moritzsommer: These new methods should be mentioned in the new tutorial navigation. Depending on which PR (this one or #411) gets closed first, I would adapt the other respectively.

zrgt added 3 commits September 5, 2025 17:12
- Refactored and fixed `get_id_short_path`, so that
 now it can find out the id_short_path
 of an SE inside SEList
- Added class methods in `Referable`
  - `parse_id_short_path`
  - `build_id_short_path`
  - `validate_id_short_path`
- Refactored `IdShortPathConverter` to use
the above methods.

fixes eclipse-basyx#414
- Renamed id_short to id_short_path, as
id_short_path also can be a single id_short

- Before the `get_referable` could only accept
a single id_short or id_short_path in form of a list.
In this commit we added parsing of `id_short_path`,
so now it is possible to handover `id_short_path`
as a string
e.g. "SomeList[3].SomeCollection.SomeProperty"
@zrgt
Copy link
Contributor Author

zrgt commented Sep 5, 2025

So, I found some issues and fixed it. I also refactored some methods and introduced new ones for id short path handling.

Now it's ready to be reviewed and merged

zrgt added 8 commits October 13, 2025 14:15
raise TypeError if no matching type found
Previously we used custom Referable class
to test the Reference generation. Actually,
it is not allowed, as there is no matching
key type for such a class. So we use now
custom SubmodelElement class. In this case
SubmodelElement will be used for key type.
@zrgt zrgt requested a review from s-heppner October 13, 2025 15:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants