From f3394c636ba44216bc47c74b4513122b4ff1d349 Mon Sep 17 00:00:00 2001 From: wobrschalek Date: Thu, 25 Jun 2026 17:49:59 -0700 Subject: [PATCH] delete unused code --- src/flexo_syside_lib/api_expand.py | 208 ----------------------------- tests/test_api_expand.py | 73 ---------- 2 files changed, 281 deletions(-) delete mode 100644 src/flexo_syside_lib/api_expand.py delete mode 100644 tests/test_api_expand.py diff --git a/src/flexo_syside_lib/api_expand.py b/src/flexo_syside_lib/api_expand.py deleted file mode 100644 index 339a8e8..0000000 --- a/src/flexo_syside_lib/api_expand.py +++ /dev/null @@ -1,208 +0,0 @@ -""" -Merge SysIDE-expanded elements into Flexo sysmlv2-service API responses. - -Flexo GET /elements returns a backend-specific JSON projection. Re-serializing -the whole model through SysIDE changes field names and breaks TS/sysmlviz. -This module preserves every backend element verbatim and appends only net-new -implied elements, projected to the same key shape Flexo uses per @type. -""" - -from __future__ import annotations - -from collections import defaultdict -from typing import Any - -# SysIDE JSON keys that do not appear on Flexo GET /elements responses. -_SYSIDE_ONLY_KEYS = frozenset( - { - "isImpliedIncluded", - "isLibraryElement", - "owningFeature", - "owningNamespace", - "owningType", - "qualifiedName", - "relatedElement", - "source", - "target", - "owningFeatureOfType", - "member", - "membership", - "ownedElement", - "ownedMember", - "ownedMemberElement", - "ownedMemberFeature", - "ownedMemberElementId", - "referencingFeature", - } -) - -# Default Flexo-like keys for implied types that may not exist in the backend yet. -_DEFAULT_TYPE_KEYS: dict[str, frozenset[str]] = { - "Subsetting": frozenset( - { - "@id", - "@type", - "elementId", - "general", - "owningRelatedElement", - "specific", - "subsettedFeature", - "subsettingFeature", - } - ), - "Redefinition": frozenset( - { - "@id", - "@type", - "elementId", - "general", - "owningRelatedElement", - "redefinedFeature", - "redefiningFeature", - "specific", - "subsettedFeature", - "subsettingFeature", - } - ), - "FeatureTyping": frozenset( - { - "@id", - "@type", - "elementId", - "general", - "owningRelatedElement", - "specific", - "type", - "typedFeature", - } - ), - "ReferenceSubsetting": frozenset( - { - "@id", - "@type", - "elementId", - "general", - "owningRelatedElement", - "referencedFeature", - "specific", - "subsettedFeature", - "subsettingFeature", - } - ), - "FeatureMembership": frozenset( - { - "@id", - "@type", - "elementId", - "memberElement", - "ownedRelatedElement", - "owningRelatedElement", - } - ), - "OwningMembership": frozenset( - { - "@id", - "@type", - "elementId", - "memberElement", - "ownedRelatedElement", - "owningRelatedElement", - } - ), - "TypeFeaturing": frozenset( - { - "@id", - "@type", - "elementId", - "featureOfType", - "featuringType", - "owningFeatureOfType", - "owningRelatedElement", - } - ), - "Specialization": frozenset( - { - "@id", - "@type", - "elementId", - "general", - "owningRelatedElement", - "specific", - } - ), - "Subclassification": frozenset( - { - "@id", - "@type", - "elementId", - "general", - "owningRelatedElement", - "specific", - "subclassifier", - } - ), -} - - -def _build_type_key_templates(backend_elements: list[dict[str, Any]]) -> dict[str, set[str]]: - templates: dict[str, set[str]] = defaultdict(set) - for element in backend_elements: - element_type = element.get("@type") - if element_type: - templates[element_type].update(element.keys()) - return templates - - -def syside_element_to_flexo_api( - element: dict[str, Any], - type_templates: dict[str, set[str]], -) -> dict[str, Any]: - """Project one SysIDE element onto Flexo GET /elements field names.""" - element_type = element.get("@type") - if not element_type: - return dict(element) - - allowed = type_templates.get(element_type) or _DEFAULT_TYPE_KEYS.get(element_type) - if allowed: - projected = {key: element[key] for key in allowed if key in element} - if "@id" in element: - projected.setdefault("@id", element["@id"]) - if "@type" in element: - projected.setdefault("@type", element["@type"]) - return projected - - return { - key: value - for key, value in element.items() - if key in ("@id", "@type") or key not in _SYSIDE_ONLY_KEYS - } - - -def merge_expanded_elements_for_api( - backend_elements: list[dict[str, Any]], - expanded_elements: list[dict[str, Any]], -) -> list[dict[str, Any]]: - """ - Preserve backend Flexo JSON exactly and append only net-new implied elements. - - Order: - 1. All backend elements in original order (unchanged object contents) - 2. New implied elements from expansion, projected to Flexo API shape - """ - if not backend_elements: - return list(expanded_elements) - if not expanded_elements: - return list(backend_elements) - - backend_ids = {element["@id"] for element in backend_elements if element.get("@id")} - type_templates = _build_type_key_templates(backend_elements) - merged = list(backend_elements) - - for element in expanded_elements: - element_id = element.get("@id") - if not element_id or element_id in backend_ids: - continue - merged.append(syside_element_to_flexo_api(element, type_templates)) - backend_ids.add(element_id) - - return merged diff --git a/tests/test_api_expand.py b/tests/test_api_expand.py deleted file mode 100644 index cb0415a..0000000 --- a/tests/test_api_expand.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -Tests for Flexo API merge expansion helpers. -""" - -import copy -import json - -from flexo_syside_lib.api_expand import ( - merge_expanded_elements_for_api, - syside_element_to_flexo_api, -) - - -def _backend_subsetting(): - return { - "@id": "existing-1", - "@type": "Subsetting", - "elementId": "existing-1", - "general": {"@id": "g1"}, - "owningRelatedElement": {"@id": "o1"}, - "specific": {"@id": "s1"}, - "subsettedFeature": {"@id": "sf1"}, - "subsettingFeature": {"@id": "ssf1"}, - } - - -def test_merge_preserves_backend_objects_verbatim(): - backend = [_backend_subsetting()] - backend_copy = copy.deepcopy(backend) - expanded = [ - dict(backend[0]), - { - "@id": "new-1", - "@type": "Subsetting", - "elementId": "new-1", - "general": {"@id": "g2"}, - "owningRelatedElement": {"@id": "o2"}, - "specific": {"@id": "s2"}, - "subsettedFeature": {"@id": "sf2"}, - "subsettingFeature": {"@id": "ssf2"}, - "qualifiedName": "should-be-stripped", - "source": [{"@id": "x"}], - }, - ] - - merged = merge_expanded_elements_for_api(backend, expanded) - - assert merged[0] == backend_copy[0] - assert merged[0] is backend[0] - assert len(merged) == 2 - assert merged[1]["@id"] == "new-1" - assert "qualifiedName" not in merged[1] - assert "source" not in merged[1] - - -def test_syside_element_projects_to_backend_key_template(): - templates = {"Subsetting": set(_backend_subsetting().keys())} - projected = syside_element_to_flexo_api( - { - "@id": "new-2", - "@type": "Subsetting", - "elementId": "new-2", - "general": {"@id": "g3"}, - "owningRelatedElement": {"@id": "o3"}, - "specific": {"@id": "s3"}, - "subsettedFeature": {"@id": "sf3"}, - "subsettingFeature": {"@id": "ssf3"}, - "qualifiedName": "noise", - "isImpliedIncluded": True, - }, - templates, - ) - assert set(projected.keys()) == set(_backend_subsetting().keys())