1616]
1717
1818
19- @dataclass (frozen = True )
19+ @dataclass (frozen = True , slots = True )
2020class UserAgent :
2121 """Browser ("user agent" aka the software responsible for the request)
2222 information parsed from the user agent string.
2323 """
2424
25- __slots__ = ("family" , "major" , "minor" , "patch" , "patch_minor" )
26- family : str
27- major : Optional [str ]
28- minor : Optional [str ]
29- patch : Optional [str ]
30- patch_minor : Optional [str ]
31-
32- def __init__ (
33- self ,
34- family : str = "Other" ,
35- major : Optional [str ] = None ,
36- minor : Optional [str ] = None ,
37- patch : Optional [str ] = None ,
38- patch_minor : Optional [str ] = None ,
39- ) -> None :
40- object .__setattr__ (self , "family" , family )
41- object .__setattr__ (self , "major" , major )
42- object .__setattr__ (self , "minor" , minor )
43- object .__setattr__ (self , "patch" , patch )
44- object .__setattr__ (self , "patch_minor" , patch_minor )
45-
46-
47- @dataclass (frozen = True )
25+ family : str = "Other"
26+ major : Optional [str ] = None
27+ minor : Optional [str ] = None
28+ patch : Optional [str ] = None
29+ patch_minor : Optional [str ] = None
30+
31+
32+ @dataclass (frozen = True , slots = True )
4833class OS :
4934 """OS information parsed from the user agent string."""
5035
51- __slots__ = ("family" , "major" , "minor" , "patch" , "patch_minor" )
52- family : str
53- major : Optional [str ]
54- minor : Optional [str ]
55- patch : Optional [str ]
56- patch_minor : Optional [str ]
57-
58- def __init__ (
59- self ,
60- family : str = "Other" ,
61- major : Optional [str ] = None ,
62- minor : Optional [str ] = None ,
63- patch : Optional [str ] = None ,
64- patch_minor : Optional [str ] = None ,
65- ) -> None :
66- object .__setattr__ (self , "family" , family )
67- object .__setattr__ (self , "major" , major )
68- object .__setattr__ (self , "minor" , minor )
69- object .__setattr__ (self , "patch" , patch )
70- object .__setattr__ (self , "patch_minor" , patch_minor )
71-
72-
73- @dataclass (frozen = True )
36+ family : str = "Other"
37+ major : Optional [str ] = None
38+ minor : Optional [str ] = None
39+ patch : Optional [str ] = None
40+ patch_minor : Optional [str ] = None
41+
42+
43+ @dataclass (frozen = True , slots = True )
7444class Device :
7545 """Device information parsed from the user agent string."""
7646
77- __slots__ = ("brand" , "family" , "model" )
78- family : str
79- brand : Optional [str ]
80- model : Optional [str ]
81-
82- def __init__ (
83- self ,
84- family : str = "Other" ,
85- brand : Optional [str ] = None ,
86- model : Optional [str ] = None ,
87- ) -> None :
88- object .__setattr__ (self , "family" , family )
89- object .__setattr__ (self , "brand" , brand )
90- object .__setattr__ (self , "model" , model )
47+ family : str = "Other"
48+ brand : Optional [str ] = None
49+ model : Optional [str ] = None
9150
9251
9352class Domain (Flag ):
@@ -105,7 +64,7 @@ class Domain(Flag):
10564 ALL = USER_AGENT | OS | DEVICE
10665
10766
108- @dataclass (frozen = True )
67+ @dataclass (frozen = True , slots = True )
10968class DefaultedResult :
11069 """Variant of :class:`Result` where attributes are set
11170 to a default value if their resolution failed.
@@ -120,7 +79,7 @@ class DefaultedResult:
12079 string : str
12180
12281
123- @dataclass (frozen = True )
82+ @dataclass (frozen = True , slots = True )
12483class Result :
12584 """Complete result.
12685
@@ -152,7 +111,7 @@ def with_defaults(self) -> DefaultedResult:
152111 )
153112
154113
155- @dataclass (frozen = True )
114+ @dataclass (frozen = True , slots = True )
156115class PartialResult :
157116 """Potentially partial (incomplete) result.
158117
@@ -172,7 +131,6 @@ class PartialResult:
172131
173132 """
174133
175- __slots__ = ("device" , "domains" , "os" , "string" , "user_agent" )
176134 domains : Domain
177135 user_agent : Optional [UserAgent ]
178136 os : Optional [OS ]
0 commit comments