1+ from predicthq .endpoints .base import UserBaseEndpoint
2+ from predicthq .endpoints .base import BaseEndpoint
3+ from predicthq .endpoints .decorators import accepts , returns
4+ from typing import overload , List , Optional , TextIO , Union
5+ from pydantic import BaseModel
6+ from predicthq .endpoints .decorators import accepts , returns
7+ from .schemas import (
8+ SavedLocation ,
9+ SavedLocationResultSet ,
10+ CreateSavedLocationResponse ,
11+ PostSharingEnableResponse ,
12+ SuggestedRadiusResponse ,Location
13+ )
14+ from ..events .schemas import EventResultSet
15+
16+
17+ from typing import Optional , List
18+
19+ # Python < 3.11 does not have StrEnum in the enum module
20+ import sys
21+ if sys .version_info < (3 , 11 ):
22+ import enum
23+
24+ class StrEnum (str , enum .Enum ):
25+ pass
26+ else :
27+ from enum import StrEnum
28+
29+ # Python < 3.9 does not have Annotated
30+ if sys .version_info < (3 , 9 ):
31+ from typing_extensions import Annotated
32+ else :
33+ from typing import Annotated
34+
35+ # Python < 3.8 does not have Literal
36+ if sys .version_info < (3 , 8 ):
37+ from typing_extensions import Literal
38+ else :
39+ from typing import Literal
40+
41+
42+ class SavedLocationsEndpoint (UserBaseEndpoint ):
43+
44+ @overload
45+ def search (
46+ self ,
47+ location_id : Optional [List [str ]] = None ,
48+ location_code : Optional [List [str ]] = None ,
49+ labels : Optional [List [str ]] = None ,
50+ user_id : Optional [List [str ]] = None ,
51+ subscription_valid_types : Optional [List [str ]] = None ,
52+ q : Optional [str ] = None ,
53+ sort : Optional [List [str ]] = None ,
54+ offset : Optional [int ] = None ,
55+ limit : Optional [int ] = None ,
56+ ** params ,
57+ ): ...
58+ @accepts ()
59+ @returns (SavedLocationResultSet )
60+ def search (self , ** params ):
61+ verify_ssl = params .pop ("config.verify_ssl" , True )
62+ result = self .client .get (
63+ self .build_url ("v1" , "saved-locations" ),
64+ params = params ,
65+ verify = verify_ssl ,
66+ )
67+ return result
68+
69+
70+ @overload
71+ def create (
72+ self ,
73+ name : str ,
74+ geojson : dict ,
75+ labels : Optional [List [str ]] = None ,
76+ location_code : Optional [str ] = None ,
77+ formatted_address : Optional [str ] = None ,
78+ description : Optional [str ] = None ,
79+ place_ids : Optional [List [str ]] = None ,
80+ ** params ,
81+ ): ...
82+ @accepts (query_string = False )
83+ @returns (CreateSavedLocationResponse )
84+ def create (self , ** params ):
85+ verify_ssl = params .pop ("config.verify_ssl" , True )
86+
87+ result = self .client .post (
88+ f"{ self .build_url ('v1' , 'saved-locations' )} " ,
89+ json = params ,
90+ verify = verify_ssl ,
91+ )
92+ return result
93+
94+
95+ @accepts ()
96+ @returns (SavedLocation )
97+ def get (self , location_id , ** params ):
98+ verify_ssl = params .pop ("config.verify_ssl" , True )
99+ return self .client .get (
100+ f"{ self .build_url ('v1' , 'saved-locations' )} { location_id } " ,
101+ params = params ,
102+ verify = verify_ssl ,
103+ )
104+
105+
106+ @overload
107+ def search_event_result_set (
108+ location_id : str ,
109+ date_range_type : Optional [str ] = None ,
110+ offset : Optional [int ] = None ,
111+ limit : Optional [int ] = None ,
112+ ** params ,
113+ ):...
114+ @returns (EventResultSet )
115+ def search_event_result_set (self , location_id , ** params ):
116+ """
117+ Search for events for a saved location.
118+
119+ Args:
120+ location_id (str): The ID of the location.
121+ date_range_type (str, optional): The date range type filter.
122+ offset (int, optional): Pagination offset.
123+ limit (int, optional): Pagination limit.
124+ ... (other query params)
125+
126+ Returns:
127+ EventResultSet: The result set of events.
128+ """
129+ verify_ssl = params .pop ("config.verify_ssl" , True )
130+ url = f"{ self .build_url ('v1' , 'saved-locations' )} { location_id } /insights/events"
131+ response = self .client .get (
132+ url ,
133+ params = params ,
134+ verify = verify_ssl ,
135+ )
136+ return response
137+
138+
139+ @accepts ()
140+ def refresh_location_insights (self , location_id : str , ** params ):
141+ verify_ssl = params .pop ("config.verify_ssl" , True )
142+ return self .client .post (
143+ f"{ self .build_url ('v1' , 'saved-locations' )} { location_id } /insights/refresh/" ,
144+ params = params ,
145+ verify = verify_ssl ,
146+ )
147+
148+
149+ @overload
150+ def replace_location_data (
151+ self ,
152+ location_id : str ,
153+ name : str ,
154+ geojson : dict ,
155+ labels : Optional [List [str ]] = None ,
156+ location_code : Optional [str ] = None ,
157+ formatted_address : Optional [str ] = None ,
158+ description : Optional [str ] = None ,
159+ place_ids : Optional [List [str ]] = None ,
160+ external_id : Optional [str ] = None ,
161+ ** params ,
162+ ):...
163+ @accepts (query_string = False )
164+ def replace_location_data (self , location_id : str , ** params ):
165+ verify_ssl = params .pop ("config.verify_ssl" , True )
166+ params .pop ("location_id" , None ) # Remove location_id from payload
167+ response = self .client .put (
168+ f"{ self .build_url ('v1' , 'saved-locations' )} { location_id } " ,
169+ json = params ,
170+ verify = verify_ssl ,
171+ )
172+ return response
173+
174+
175+ @accepts ()
176+ def delete_location (self , location_id : str , ** params ):
177+ verify_ssl = params .pop ("config.verify_ssl" , True )
178+ return self .client .delete (
179+ f"{ self .build_url ('v1' , 'saved-locations' )} { location_id } " ,
180+ params = params ,
181+ verify = verify_ssl ,
182+ )
183+ #
184+ #
185+ @accepts ()
186+ @returns (PostSharingEnableResponse )
187+ def sharing_enable (self , location_id : str , ** params ):
188+ verify_ssl = params .pop ("config.verify_ssl" , True )
189+ return self .client .post (
190+ f"{ self .build_url ('v1' , 'saved-locations' )} { location_id } /sharing/enable" ,
191+ params = params ,
192+ verify = verify_ssl ,
193+ )
194+
195+
196+ @overload
197+ def suggested_radius (
198+ self ,
199+ location_origin : Location ,
200+ radius_unit : str ,
201+ industry : str ,
202+ ** params ,
203+ ):...
204+ @accepts (query_string = False )
205+ @returns (SuggestedRadiusResponse )
206+ def suggested_radius (self , ** params ):
207+ verify_ssl = params .pop ("config.verify_ssl" , True )
208+ loc = params .pop ("location_origin" , None )
209+ if isinstance (loc , Location ):
210+ params ["location.origin" ] = loc .as_geopoint ()
211+ elif isinstance (loc , str ):
212+ params ["location.origin" ] = loc
213+ return self .client .get (
214+ f"{ self .build_url ('v1' , 'suggested-radius' )} " ,
215+ params = params ,
216+ verify = verify_ssl ,
217+ )
0 commit comments