Coverage for pygeoapi/formatter/base.py: 81%

21 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 08:15 +0000

1# ================================================================= 

2# 

3# Authors: Tom Kralidis <tomkralidis@gmail.com> 

4# 

5# Copyright (c) 2026 Tom Kralidis 

6# 

7# Permission is hereby granted, free of charge, to any person 

8# obtaining a copy of this software and associated documentation 

9# files (the "Software"), to deal in the Software without 

10# restriction, including without limitation the rights to use, 

11# copy, modify, merge, publish, distribute, sublicense, and/or sell 

12# copies of the Software, and to permit persons to whom the 

13# Software is furnished to do so, subject to the following 

14# conditions: 

15# 

16# The above copyright notice and this permission notice shall be 

17# included in all copies or substantial portions of the Software. 

18# 

19# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 

20# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 

21# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 

22# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 

23# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 

24# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 

25# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 

26# OTHER DEALINGS IN THE SOFTWARE. 

27# 

28# ================================================================= 

29 

30import logging 

31 

32LOGGER = logging.getLogger(__name__) 

33 

34 

35class BaseFormatter: 

36 """generic Formatter ABC""" 

37 

38 def __init__(self, formatter_def: dict): 

39 """ 

40 Initialize object 

41 

42 param formatter_def: formatter definition 

43 

44 :returns: pygeoapi.formatter.base.BaseFormatter 

45 """ 

46 

47 self.extension = None 

48 self.f = None 

49 self.mimetype = None 

50 

51 try: 

52 self.name = formatter_def['name'] 

53 except KeyError: 

54 raise RuntimeError('name is required') 

55 

56 self.geom = formatter_def.get('geom', False) 

57 self.attachment = formatter_def.get('attachment', False) 

58 

59 def write(self, options: dict = {}, data: dict | None = None) -> str: 

60 """ 

61 Generate data in specified format 

62 

63 :param options: formatting options 

64 :param data: dict representation of GeoJSON object 

65 

66 :returns: string representation of format 

67 """ 

68 

69 raise NotImplementedError() 

70 

71 def __repr__(self): 

72 return f'<BaseFormatter> {self.name}' 

73 

74 

75class FormatterGenericError(Exception): 

76 """formatter generic error""" 

77 pass 

78 

79 

80class FormatterSerializationError(FormatterGenericError): 

81 """formatter serialization error""" 

82 pass