Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/dns/rdtypes/ANY/SOA.py: 36%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

42 statements  

1# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license 

2 

3# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. 

4# 

5# Permission to use, copy, modify, and distribute this software and its 

6# documentation for any purpose with or without fee is hereby granted, 

7# provided that the above copyright notice and this permission notice 

8# appear in all copies. 

9# 

10# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES 

11# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 

12# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR 

13# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 

14# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 

15# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 

16# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 

17 

18import struct 

19 

20import dns.exception 

21import dns.immutable 

22import dns.name 

23import dns.rdata 

24 

25 

26@dns.immutable.immutable 

27class SOA(dns.rdata.Rdata): 

28 """SOA record""" 

29 

30 # see: RFC 1035 

31 

32 __slots__ = ["mname", "rname", "serial", "refresh", "retry", "expire", "minimum"] 

33 

34 def __init__( 

35 self, rdclass, rdtype, mname, rname, serial, refresh, retry, expire, minimum 

36 ): 

37 super().__init__(rdclass, rdtype) 

38 self.mname: dns.name.Name = self._as_name(mname) 

39 self.rname: dns.name.Name = self._as_name(rname) 

40 self.serial: int = self._as_uint32(serial) 

41 self.refresh: int = self._as_ttl(refresh) 

42 self.retry: int = self._as_ttl(retry) 

43 self.expire: int = self._as_ttl(expire) 

44 self.minimum: int = self._as_ttl(minimum) 

45 

46 def to_styled_text(self, style: dns.rdata.RdataStyle) -> str: 

47 mname = self.mname.to_styled_text(style) 

48 rname = self.rname.to_styled_text(style) 

49 return f"{mname} {rname} {self.serial} {self.refresh} {self.retry} {self.expire} {self.minimum}" 

50 

51 @classmethod 

52 def from_text( 

53 cls, rdclass, rdtype, tok, origin=None, relativize=True, relativize_to=None 

54 ) -> "SOA": 

55 mname = tok.get_name(origin, relativize, relativize_to) 

56 rname = tok.get_name(origin, relativize, relativize_to) 

57 serial = tok.get_uint32() 

58 refresh = tok.get_ttl() 

59 retry = tok.get_ttl() 

60 expire = tok.get_ttl() 

61 minimum = tok.get_ttl() 

62 return cls( 

63 rdclass, rdtype, mname, rname, serial, refresh, retry, expire, minimum 

64 ) 

65 

66 def _to_wire(self, file, compress=None, origin=None, canonicalize=False): 

67 self.mname.to_wire(file, compress, origin, canonicalize) 

68 self.rname.to_wire(file, compress, origin, canonicalize) 

69 five_ints = struct.pack( 

70 "!IIIII", self.serial, self.refresh, self.retry, self.expire, self.minimum 

71 ) 

72 file.write(five_ints) 

73 

74 @classmethod 

75 def from_wire_parser(cls, rdclass, rdtype, parser, origin=None) -> "SOA": 

76 mname = parser.get_name(origin) 

77 rname = parser.get_name(origin) 

78 return cls(rdclass, rdtype, mname, rname, *parser.get_struct("!IIIII"))