@@ -101,91 +101,84 @@ def get(self, option, output_format="json"):
101101class ZipCodeApiV2 :
102102 host : str = "www.zipcodeapi.com"
103103
104- def __init__ (self , api_key : str ):
104+ def __init__ (
105+ self ,
106+ api_key : str ,
107+ f : FormatEnum = FormatEnum .JSON ,
108+ country : CountryEnum = CountryEnum .US ,
109+ ):
105110 self .api_key = api_key
111+ self .format = f
112+ self .country = country
106113 self .con = HTTPSConnection (host = self .host )
107114
108115 def _api_call (
109116 self ,
110117 option : str ,
111- f : FormatEnum ,
112118 path : str ,
113119 data_class : type | None = None ,
114- country : CountryEnum = CountryEnum .US ,
115120 method : str = "GET" ,
116121 body : str | None = None ,
117122 ) -> DictReader | bytes | type | Element | Error :
118- base_url = f"rest/v2/CA" if country == CountryEnum .CA else f"rest"
123+ base_url = f"rest/v2/CA" if self . country == CountryEnum .CA else f"rest"
119124 headers = {}
120125 if method != "GET" :
121126 headers = {"Content-type" : "application/x-www-form-urlencoded" }
122127 self .con .request (
123- method , f"/{ base_url } /{ self .api_key } /{ option } .{ f } /{ path } " , body , headers
128+ method = method ,
129+ url = f"/{ base_url } /{ self .api_key } /{ option } .{ self .format } /{ path } " ,
130+ body = body ,
131+ headers = headers ,
124132 )
125133 response = self .con .getresponse ()
126134 success = response .status == 200
127135 data = response .read ()
128- if f == FormatEnum .JSON :
136+ if self . format == FormatEnum .JSON :
129137 data = loads (data )
130138 if success :
131139 return data_class (** data ) if data_class else data
132140 return Error (** data )
133- elif f == FormatEnum .CSV :
141+ elif self . format == FormatEnum .CSV :
134142 return DictReader (StringIO (data .decode ()), delimiter = "," )
135- elif f == FormatEnum .XML :
143+ elif self . format == FormatEnum .XML :
136144 if success :
137145 return fromstring (data .decode ())
138146 return data
139147
140148 def distance (
141- self ,
142- zip_code1 : str ,
143- zip_code2 : str ,
144- units : UnitEnum = UnitEnum .KM ,
145- f : FormatEnum | None = FormatEnum .JSON ,
146- country : CountryEnum = CountryEnum .US ,
149+ self , zip_code1 : str , zip_code2 : str , units : UnitEnum = UnitEnum .KM
147150 ) -> Distance | DictReader | Element :
148151 """distance.<format>/<zip_code1>/<zip_code2>/<units>"""
149152 path = f"{ zip_code1 } /{ zip_code2 } /{ units } "
150- dc = Distance
151- return self ._api_call ("distance" , f , path , dc , country = country )
153+ return self ._api_call ("distance" , path , data_class = Distance )
152154
153155 def multi_distance (
154- self ,
155- zip_code : str ,
156- zip_codes : list [str ],
157- units : UnitEnum = UnitEnum .KM ,
158- f : FormatEnum | None = FormatEnum .JSON ,
156+ self , zip_code : str , zip_codes : list [str ], units : UnitEnum = UnitEnum .KM
159157 ) -> MultiDistance | DictReader | Element :
160158 """multi-distance.<format>/<zip_code>/<other_zip_codes>/<units>"""
161159 assert len (zip_codes ) <= 100
162160 path = f"{ zip_code } /{ ',' .join (zip_codes )} /{ units } "
163- dc = MultiDistance
164- return self ._api_call ("multi-distance" , f , path , dc )
161+ return self ._api_call ("multi-distance" , path , data_class = MultiDistance )
165162
166163 def radius (
167164 self ,
168165 zip_code : str ,
169166 distance : int ,
170167 minimal : bool = False ,
171168 units : UnitEnum = UnitEnum .KM ,
172- f : FormatEnum | None = FormatEnum .JSON ,
173- country : CountryEnum = CountryEnum .US ,
174169 ) -> Radius | DictReader | Element :
175170 """radius.<format>/<zip_code>/<distance>/<units>"""
176171 path = f"{ zip_code } /{ distance } /{ units } "
177- dc = Radius
178172 if minimal :
179173 path = f"{ path } ?minimal"
180- return self ._api_call ("radius" , f , path , dc , country = country )
174+ return self ._api_call ("radius" , path , data_class = Radius )
181175
182176 def multi_radius (
183177 self ,
184178 distance : int ,
185179 zip_codes : list [str ] | None = None ,
186180 addresses : list [str ] | None = None ,
187181 units : UnitEnum = UnitEnum .KM ,
188- f : FormatEnum | None = FormatEnum .JSON ,
189182 ) -> MultiRadius | DictReader | Element :
190183 """multi-radius.<format>/<distance>/<units>"""
191184 if zip_codes is None and addresses is None :
@@ -200,4 +193,4 @@ def multi_radius(
200193 assert len (addresses ) <= 100
201194 params ["addrs" ] = "\n " .join (addresses )
202195 body = urlencode (params )
203- return self ._api_call ("multi-radius" , f , path , dc , method = "POST" , body = body )
196+ return self ._api_call ("multi-radius" , path , dc , method = "POST" , body = body )
0 commit comments