Source code for ogstools.ogs6py.geo
# SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
# SPDX-License-Identifier: BSD-3-Clause
from pathlib import Path
from lxml import etree as ET
from ogstools.ogs6py.referenced_file import ReferencedFile
[docs]
class Geo(ReferencedFile):
"""
Class managing the geometry file (.gml) for an OGS project.
Tracks both the XML reference to the geometry and the actual file,
enabling proper save/copy operations.
"""
__hash__ = None
_NAME = "Geo"
_EXT = "gml"
_XPATH = "geometry"
[docs]
def __init__(self, tree: ET.ElementTree) -> None:
ReferencedFile.__init__(self, tree)
self.populate_tree(self.root, "geometry", overwrite=True)
@property
def has_geometry(self) -> bool:
"""Check if geometry is defined (either as file or inline in XML)."""
return self.root.find("geometry") is not None
[docs]
def add_geometry(self, filename: str | Path) -> None:
"""
Add/set a geometry file.
:param filename: The file path and name of the gml file
"""
filename = Path(filename)
self._bind_to_path(filename)
self.populate_tree(
self.root,
"geometry",
text=str(filename.name),
overwrite=True,
)
def __eq__(self, other: object) -> bool:
if not isinstance(other, Geo):
return NotImplemented
return self.filename == other.filename
def __repr__(self) -> str:
return f"Geo(filename={self.filename!r}, is_saved={self.is_saved})"
def __str__(self) -> str:
if not self.has_geometry:
return "Geo: (no geometry defined)"
return f"Geo: {self.filename})"