2020-01-23 10:34:57 +00:00
|
|
|
import requests
|
|
|
|
|
|
|
|
REFRESH_URL = 'https://openapi-login.planday.com/connect/token'
|
|
|
|
SHIFTS_URL= "https://openapi.planday.com/scheduling/v1/shifts"
|
|
|
|
|
|
|
|
class Planday(object):
|
|
|
|
def __init__(self, client_id, refresh_token):
|
|
|
|
self.client_id = client_id
|
|
|
|
self.refresh_token = refresh_token
|
|
|
|
self.access_token = None
|
|
|
|
|
|
|
|
def refresh_access_token(self):
|
|
|
|
data = {'client_id': self.client_id,
|
|
|
|
'grant_type': 'refresh_token',
|
|
|
|
'refresh_token': self.refresh_token}
|
|
|
|
response = requests.post(REFRESH_URL, data=data)
|
|
|
|
if response.status_code == 200:
|
|
|
|
token_data = response.json()
|
|
|
|
self.access_token = token_data['access_token']
|
|
|
|
else:
|
|
|
|
print("Error refreshing access_token", response.status_code, response.text)
|
|
|
|
|
|
|
|
def __get(self, url, params={}):
|
|
|
|
response = requests.get(url, headers=self.get_headers(), params=params)
|
|
|
|
if response.status_code == 401:
|
|
|
|
self.refresh_access_token()
|
|
|
|
response = requests.get(url, headers=self.get_headers(), params=params)
|
|
|
|
return response
|
|
|
|
|
2020-02-06 12:32:32 +00:00
|
|
|
def __get_json(self, url, params={}):
|
|
|
|
response = self.__get(url, params=params)
|
|
|
|
if response.status_code == 200:
|
|
|
|
json = response.json()
|
|
|
|
if 'paging' not in json:
|
|
|
|
return json['data']
|
|
|
|
paging = json['paging']
|
|
|
|
if 'limit' in paging and 'total' in paging and \
|
|
|
|
paging['limit'] + (paging['offset'] if 'offset' in paging else 0) < paging['total']:
|
|
|
|
params['offset'] = paging['limit'] + (paging['offset'] if 'offset' in paging else 0)
|
|
|
|
return json['data'] + self.__get_json(url, params)
|
|
|
|
return json['data']
|
|
|
|
print(response.json())
|
|
|
|
raise response
|
|
|
|
|
2020-01-23 10:34:57 +00:00
|
|
|
def get_headers(self):
|
|
|
|
return {'X-ClientId': self.client_id, 'Authorization': 'Bearer {0}'.format(self.access_token)}
|
|
|
|
|
|
|
|
def get_shifts(self, to=None, from_=None):
|
|
|
|
params={}
|
|
|
|
if to != None:
|
|
|
|
params['to'] = to
|
|
|
|
if from_ != None:
|
|
|
|
params['from'] = from_
|
2020-02-06 12:32:32 +00:00
|
|
|
return self.__get_json(SHIFTS_URL, params=params)
|
2020-01-23 10:34:57 +00:00
|
|
|
|
|
|
|
def get_employee(self, employee_id):
|
|
|
|
url = "https://openapi.planday.com/hr/v1/employees/{0}".format(employee_id)
|
2020-02-06 12:32:32 +00:00
|
|
|
return self.__get_json(url)
|
2020-01-23 10:34:57 +00:00
|
|
|
|
|
|
|
def get_employees(self):
|
2020-02-06 12:32:32 +00:00
|
|
|
return self.__get_json("https://openapi.planday.com/hr/v1/employees/")
|