diff --git a/docs/reference/models_classic.rst b/docs/reference/models_classic.rst index c2753d2..4c66526 100644 --- a/docs/reference/models_classic.rst +++ b/docs/reference/models_classic.rst @@ -79,3 +79,15 @@ Computer Groups ClassicComputerGroupMember ClassicComputerGroupCriterion ClassicComputerGroupCriterionSearchType + +Network Segments +---------------- + +.. currentmodule:: jamf_pro_sdk.models.classic.network_segments + +.. autosummary:: + :toctree: _autosummary + :nosignatures: + + ClassicNetworkSegment + ClassicNetworkSegmentsItem diff --git a/src/jamf_pro_sdk/models/classic/network_segments.py b/src/jamf_pro_sdk/models/classic/network_segments.py new file mode 100644 index 0000000..10b122c --- /dev/null +++ b/src/jamf_pro_sdk/models/classic/network_segments.py @@ -0,0 +1,54 @@ +from typing import Optional + +from pydantic import Extra + +from .. import BaseModel +from . import ClassicApiModel + +_XML_ARRAY_ITEM_NAMES = {} + + +class ClassicNetworkSegmentItem(BaseModel, extra=Extra.allow): + """Represents a network_segment record returned by the + :meth:`~jamf_pro_sdk.clients.classic_api.ClassicApi.list_network_segments` operation. + """ + + id: Optional[int] + name: Optional[str] + starting_address: Optional[str] + ending_address: Optional[str] + + +class ClassicNetworkSegment(ClassicApiModel): + """Represents a network_segment record returned by the + :meth:`~jamf_pro_sdk.clients.classic_api.ClassicApi.get_network_segment_by_id` operation. + """ + + _xml_root_name = "network_segment" + _xml_array_item_names = _XML_ARRAY_ITEM_NAMES + _xml_write_fields = { + "name", + "starting_address", + "ending_address", + "distribution_server", + "distribution_point", + "url", + "swu_server", + "building", + "department", + "override_buildings", + "override_departments", + } + + id: Optional[int] + name: Optional[str] + starting_address: Optional[str] + ending_address: Optional[str] + distribution_server: Optional[str] + distribution_point: Optional[str] + url: Optional[str] + swu_server: Optional[str] + building: Optional[str] + department: Optional[str] + override_buildings: Optional[bool] + override_departments: Optional[bool] diff --git a/tests/models/test_models_classic_network_segments b/tests/models/test_models_classic_network_segments new file mode 100644 index 0000000..40cd9b0 --- /dev/null +++ b/tests/models/test_models_classic_network_segments @@ -0,0 +1,44 @@ +import json + +from deepdiff import DeepDiff +from src.jamf_pro_sdk.models.classic.network_segments import ClassicNetworkSegment + +NETWORK_SEGMENT_JSON = { + "network_segment": { + "id": 1, + "name": "Test Network", + "starting_address": "192.168.1.31", + "ending_address": "192.168.7.255", + "distribution_point": "Cloud Distribution Point", + "url": "https://use1-jcds.services.jamfcloud.com/download/66d8960449b44a668c38e4dddbe094d7", + "building": "Test Building", + "department": "Test Department", + } +} + + +def test_network_segment_model_parsings(): + """Verify select attributes across the NetworkSegment model.""" + network_segment = ClassicNetworkSegment(**NETWORK_SEGMENT_JSON["network_segment"]) + + assert network_segment is not None # mypy + assert network_segment.name == "Test Network" + assert network_segment.starting_address == "192.168.1.31" + assert network_segment.ending_address == "192.168.7.255" + assert network_segment.id == 1 + assert network_segment.distribution_point == "Cloud Distribution Point" + assert ( + network_segment.url + == "https://use1-jcds.services.jamfcloud.com/download/66d8960449b44a668c38e4dddbe094d7" + ) + assert network_segment.building == "Test Building" + assert network_segment.department == "Test Department" + + +def test_network_segment_model_json_output_matches_input(): + network_segment = ClassicNetworkSegment(**NETWORK_SEGMENT_JSON["network_segment"]) + serialized_output = json.loads(network_segment.json(exclude_none=True)) + + diff = DeepDiff(NETWORK_SEGMENT_JSON["network_segment"], serialized_output, ignore_order=True) + + assert not diff