Coverage for klayout_pex/plugin/importer_registry.py: 100%

15 statements  

« prev     ^ index     » next       coverage.py v7.17.2, created at 2026-11-06 13:14 +0000

1# 

2# -------------------------------------------------------------------------------- 

3# SPDX-FileCopyrightText: 2024-2026 Martin Jan Köhler and Harald Pretl 

4# Johannes Kepler University, Institute for Integrated Circuits. 

5# 

6# This file is part of KPEX 

7# (see https://github.com/iic-jku/klayout-pex). 

8# 

9# This program is free software: you can redistribute it and/or modify 

10# it under the terms of the GNU General Public License as published by 

11# the Free Software Foundation, either version 3 of the License, or 

12# (at your option) any later version. 

13# 

14# This program is distributed in the hope that it will be useful, 

15# but WITHOUT ANY WARRANTY; without even the implied warranty of 

16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

17# GNU General Public License for more details. 

18# 

19# You should have received a copy of the GNU General Public License 

20# along with this program. If not, see <http://www.gnu.org/licenses/>. 

21# SPDX-License-Identifier: GPL-3.0-or-later 

22# -------------------------------------------------------------------------------- 

23# 

24 

25"""Lazy discovery and selection of PEX25D importer plugins.""" 

26 

27from __future__ import annotations 

28 

29from typing import Tuple 

30 

31from ..plugin_api.v1 import ( 

32 IMPORTER_ENTRY_POINT_GROUP, 

33 ImporterError, 

34 ImporterUnavailable, 

35 PEX25DImporter, 

36) 

37from .registry import PluginInfo, PluginRegistry 

38 

39 

40class ImporterRegistry(PluginRegistry): 

41 """Importers from ``klayout_pex.importers.v1`` and the built-in factories.""" 

42 

43 kind = 'importer' 

44 group = IMPORTER_ENTRY_POINT_GROUP 

45 method = 'import_file' 

46 error = ImporterError 

47 unavailable = ImporterUnavailable 

48 

49 @property 

50 def importers(self) -> Tuple[PluginInfo, ...]: 

51 """List all registrations, including ambiguous or unavailable ones.""" 

52 return self.plugins 

53 

54 def load(self, selector: str) -> PEX25DImporter: 

55 """Load a name or ``distribution:name``.""" 

56 return super().load(selector)