Joining json API calls together
pip install api_bridgeAPI(url: str,
method: Method = Method.GET,
result_filter: Optional[Callable[[Dict[str, Any]], Dict[str, Any]]] = None,
validate: Optional[Callable[[Dict[str, Any]], bool]] = None,
post_data: Optional[Dict[str, Any]] = None
)url The url to run a request with
method The Enum from api_bridge.methods.Method [either Method.GET or .POST; defaults to .GET]
result_filter A filter for the retrieved json data api_bridge.filter.Filter [defaults to None]
Filter(**out: str)out The items of the filtered data
examples:
Filter(lat='latitude', long='longitude') # {'lat': data['latitude'], 'long': data['longitude']}
Filter(sunrise='results sunrise') # spaces represent {'sunrise': data['results]['sunrise']}validate An additional test based on the received data in addition to the http-status-code [defaults to None]
example:
validate=lambda data: data['status'] == 'successful'post_data Data if Method.POST was provided
There are two ways to run a request
from api_bridge.api import API
from api_bridge.filter import Filter
from api_bridge.container import Container
LOCATION_URL = 'https://ipapi.co/json/'
TIME_URL = 'https://api.sunrise-sunset.org/json?lat={lat}&lng={long}&date=today'The chain-method
result = API.chain(
API(LOCATION_URL, result_filter=Filter(lat='latitude', long='longitude')),
API(TIME_URL, validate=lambda response: response['status'] == 'OK', result_filter=Filter(sunrise='results sunrise'))
)
result == {'sunrise': '4:08:10 AM'}The (esoteric) operator-method > or >>
result = API('https://ipapi.co/json/', result_filter=Filter(lat='latitude', long='longitude')) > \
API('https://api.sunrise-sunset.org/json?lat={lat}&lng={long}&date=today', validate=lambda response:
response['status'] == 'OK', result_filter=Filter(sunrise='results sunrise')) > \
Container()
result == {'sunrise': '4:08:10 AM'}
Important the gt and rshift operator mehtod must terminate with an
Operator(), which can be treated a dict afterwards