Skip to content

Instantly share code, notes, and snippets.

@kmkmjhyiiiu
Created August 7, 2019 11:34
Show Gist options
  • Save kmkmjhyiiiu/a90e0e67ea41fcf98f8cbcf6fffca252 to your computer and use it in GitHub Desktop.
Save kmkmjhyiiiu/a90e0e67ea41fcf98f8cbcf6fffca252 to your computer and use it in GitHub Desktop.
Gender Api module for python
from urllib.parse import urljoin
from requests import Session, Response
class InvalidGenderApiResponse(Exception):
"""
Exception class if in cause response is not ok from gender api.
"""
def __init__(self, message: str, response: Response):
super().__init__(message)
self.error_response = response
class GenderApiResponse:
"""
Gender Api Response.
"""
def __init__(self, json_res: dict):
self._res = json_res
@property
def name(self):
return self._res.get('name')
@property
def name_sanitized(self):
return self._res.get('name_sanitized')
@property
def country(self):
return self._res.get('country')
@property
def gender(self):
return self._res.get('gender')
@property
def samples(self):
return self._res.get('samples')
@property
def accuracy(self):
return self._res.get('accuracy')
@property
def duration(self):
duration = self._res.get('duration')
return duration
@property
def credits_used(self):
return self._res.get('credits_used')
class GenderApi(Session):
domain = "https://gender-api.com"
def __init__(self, api_key):
super().__init__()
self._key = api_key
def request(self, method, url,
params=None, data=None, headers=None, cookies=None, files=None,
auth=None, timeout=None, allow_redirects=True, proxies=None,
hooks=None, stream=None, verify=None, cert=None, json=None):
if params is None:
params = {}
url = urljoin(self.domain, url)
params.update({
'key': self._key
})
# check response and decode it.
res = super().request(method, url, params, data, headers, cookies, files, auth, timeout,
allow_redirects, proxies, hooks, stream, verify, cert, json)
if not res.ok:
raise InvalidGenderApiResponse("Response from Gender Api is not OK", res)
api_res = res.json()
return GenderApiResponse(api_res)
def name(self, name: str, _uri: str = 'get', **kwargs):
return self.get(_uri, params={**{
'name': name
}, **kwargs})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment