Add Cache-Control headers to output #1
							
								
								
									
										27
									
								
								app/main.py
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								app/main.py
									
									
									
									
									
								
							| @ -15,11 +15,13 @@ app = FastAPI() | |||||||
| GEOLITE2_ASN_DB = '/usr/local/share/GeoIP/GeoLite2-ASN.mmdb' | GEOLITE2_ASN_DB = '/usr/local/share/GeoIP/GeoLite2-ASN.mmdb' | ||||||
| GEOLITE2_CITY_DB = '/usr/local/share/GeoIP/GeoLite2-City.mmdb' | GEOLITE2_CITY_DB = '/usr/local/share/GeoIP/GeoLite2-City.mmdb' | ||||||
|  |  | ||||||
|  |  | ||||||
| class IPAddressParam(BaseModel): | class IPAddressParam(BaseModel): | ||||||
|     ''' |     ''' | ||||||
|     Payload entry as used in POST |     Payload entry as used in POST | ||||||
|     ''' |     ''' | ||||||
|     ip: Union[IPv6Address,IPv4Address] |     ip: Union[IPv6Address, IPv4Address] | ||||||
|  |  | ||||||
|  |  | ||||||
| class Locality(BaseModel): | class Locality(BaseModel): | ||||||
|     ''' |     ''' | ||||||
| @ -30,21 +32,24 @@ class Locality(BaseModel): | |||||||
|     continent: Optional[str] = None |     continent: Optional[str] = None | ||||||
|     is_eu: bool = False |     is_eu: bool = False | ||||||
|  |  | ||||||
|  |  | ||||||
| class GeoLocation(BaseModel): | class GeoLocation(BaseModel): | ||||||
|     ''' |     ''' | ||||||
|     Geolocation data model |     Geolocation data model | ||||||
|     ''' |     ''' | ||||||
|     ip: Optional[Union[IPv6Address,IPv4Address]] = None |     ip: Optional[Union[IPv6Address, IPv4Address]] = None | ||||||
|     asn: Optional[int] = None |     asn: Optional[int] = None | ||||||
|     asn_org: Optional[str] = None |     asn_org: Optional[str] = None | ||||||
|     network: Optional[Union[IPv6Network,IPv4Network]] = None |     network: Optional[Union[IPv6Network, IPv4Network]] = None | ||||||
|     locality: Locality = Locality() |     locality: Locality = Locality() | ||||||
|  |  | ||||||
|  |  | ||||||
| @app.post("/") | @app.post("/") | ||||||
| async def root_post(ipaddresses: Annotated[list[IPAddressParam], | async def root_post(ipaddresses: Annotated[ | ||||||
|                                     Body(title="The IPAddresses to geolocate")], |     list[IPAddressParam], | ||||||
|  |     Body(title="The IPAddresses to geolocate")], | ||||||
|                     response: Response |                     response: Response | ||||||
|                ) -> list[GeoLocation]: |                     ) -> list[GeoLocation]: | ||||||
|     ''' |     ''' | ||||||
|     Return GeoLocation item(s) for a list of IPAddressParam objects |     Return GeoLocation item(s) for a list of IPAddressParam objects | ||||||
|     ''' |     ''' | ||||||
| @ -79,10 +84,11 @@ async def root_post(ipaddresses: Annotated[list[IPAddressParam], | |||||||
|  |  | ||||||
|  |  | ||||||
| @app.get("/{ipaddress}") | @app.get("/{ipaddress}") | ||||||
| async def root_get(ipaddress: Annotated[Union[IPv4Address,IPv6Address], | async def root_get(ipaddress: Annotated[ | ||||||
|                                     Path(title="The IPAddress to geolocate")], |     Union[IPv4Address, IPv6Address], | ||||||
|  |     Path(title="The IPAddress to geolocate")], | ||||||
|                    response: Response |                    response: Response | ||||||
|                ) -> GeoLocation: |                    ) -> GeoLocation: | ||||||
|     ''' |     ''' | ||||||
|     Look up geolocation for ip in path parameter |     Look up geolocation for ip in path parameter | ||||||
|     ''' |     ''' | ||||||
| @ -93,9 +99,10 @@ async def root_get(ipaddress: Annotated[Union[IPv4Address,IPv6Address], | |||||||
|     response.status_code = status.HTTP_404_NOT_FOUND |     response.status_code = status.HTTP_404_NOT_FOUND | ||||||
|     return GeoLocation() |     return GeoLocation() | ||||||
|  |  | ||||||
|  |  | ||||||
| @app.get("/") | @app.get("/") | ||||||
| def root_redirect(req: Request) -> RedirectResponse: | def root_redirect(req: Request) -> RedirectResponse: | ||||||
|     ''' |     ''' | ||||||
|     Redirect empty request using REMOTE_ADDR |     Redirect empty request using REMOTE_ADDR | ||||||
|     ''' |     ''' | ||||||
|     return RedirectResponse(url= str(req.url) + str(req.client.host)) |     return RedirectResponse(url=str(req.url) + str(req.client.host)) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user