import requests class PiexelErrors(Exception): pass class InvalidToken(PiexelErrors): pass class ParameterError(PiexelErrors): pass class Piexel: def __init__(self, domain, app='', token='', endpoint='/api/'): self.app = app self.token = token self.domain = domain self.endpoint = endpoint self.debug_print = False def _get_response(self, controller, fields, request_type='get'): """ Build response :param controller: controller à utiliser :param fields: champ à passer """ fields['app'] = self.app fields['token'] = self.token url = self.domain + self.endpoint + controller if request_type == 'get': response = requests.get(url, fields) elif request_type == 'post': response = requests.post(url, fields) elif request_type == 'put': response = requests.put(url, fields) elif request_type == 'delete': response = requests.delete(url, data=fields) if self.debug_print: print('resp:',response.text) response.encoding = 'utf-8' code = response.status_code data = response.json() if code == 403: # FORBIDDEN raise InvalidToken(data['message']) elif code == 400: raise ParameterError(data['message']) return data def _get_request(self, allowed, mandatory=[], **params): """ Créé la requète """ fields = {} for key, val in params.items(): if key in allowed: fields[key] = val for m in mandatory: if m not in fields.keys(): raise ParameterError('The parameter ' + m + ' is required.') return fields def get_films(self, **params): """ Récupère les films :param params: paramètres à passer """ fields = self._get_request(['id', 'title', 'title_vo', 'imdb_id', 'limit', 'first', 'first', 'files'], [], **params) return self._get_response('films', fields) def get_series(self, **params): """ Récupère les séries :param params: paramètres à passer """ fields = self._get_request(['id', 'title', 'imdb_id', 'limit', 'first', 'first', 'episodes'], [], **params) return self._get_response('series', fields) def get_episodes(self, **params): """ Récupère les épisodes :param params: paramètres à passer """ fields = self._get_request(['id', 'serie_id', 'title', 'imdb_id', 'limit', 'first', 'first', 'episodes'], [], **params) return self._get_response('episodes', fields) def get_files(self, **params): """ Récupère les fichiers :param params: paramètres à passer """ fields = self._get_request(['id', 'path', 'name', 'limit', 'first', 'filable'], [], **params) return self._get_response('files', fields) def get_actors(self, **params): """ Récupère les acteurs :param params: paramètres à passer """ fields = self._get_request(['id', 'name', 'imdb_id', 'tmdb_id', 'limit', 'first', 'films', 'series'], [], **params) return self._get_response('files', fields) def get_files(self, **params): """ Récupère les fichiers :param params: paramètres à passer """ fields = self._get_request(['id', 'path', 'name', 'limit', 'first', 'filable', 'like'], [], **params) return self._get_response('files', fields) def get_subtitles(self, **params): """ Récupère les sous-titres :param params: paramètres à passer """ fields = self._get_request(['id', 'path', 'name', 'limit', 'first', 'subtitlable'], [], **params) return self._get_response('subtitles', fields) def get_broken(self, **params): """ Récupère les liens morts :param params: paramètres à passer """ fields = self._get_request(['id', 'type'], [], **params) return self._get_response('broken', fields) def post_film(self, **params): """ Ajoute un film :param params: paramètres à passer """ fields = self._get_request(['title', 'year'], ['title'], **params) return self._get_response('films', fields, 'post') def post_file(self, **params): """ Ajoute un fichier :param params: paramètres à passer """ fields = self._get_request(['path', 'name', 'type', 'type_id', 'quality', 'lang', 'subtitles'], ['path', 'name', 'type', 'type_id'], **params) return self._get_response('files', fields, 'post') def post_subtitle(self, **params): """ Ajoute un sous-titre :param params: paramètres à passer """ fields = self._get_request(['path', 'name', 'type', 'type_id', 'quality', 'lang'], ['path', 'name', 'type', 'type_id'], **params) return self._get_response('subtitles', fields, 'post') def post_serie(self, **params): """ Ajoute une série :param params: paramètres à passer """ fields = self._get_request(['title'], ['title'], **params) return self._get_response('series', fields, 'post') def post_episode(self, **params): """ Ajoute un épisode d'une série :param params: paramètres à passer """ fields = self._get_request(['season', 'episode', 'serie_id'], ['season', 'episode', 'serie_id'], **params) return self._get_response('episodes', fields, 'post') def post_actor(self, **params): """ Ajoute un acteur :param params: paramètres à passer """ fields = self._get_request(['name'], ['name'], **params) return self._get_response('episodes', fields, 'post') def post_broken(self, **params): """ Ajoute un lien mort :param params: paramètres à passer """ fields = self._get_request(['id', 'type'], ['id', 'type'], **params) return self._get_response('broken', fields, 'post') def put_film(self, **params): """ Edite un film :param params: paramètres à passer """ fields = self._get_request(['id', 'title', 'title_vo', 'tmdb_id', 'summary', 'cover_img', 'rating', 'runtime', 'release_date', 'autoFill'], ['id'], **params) return self._get_response('films', fields, 'put') def put_file(self, **params): """ Edite un fichier :param params: paramètres à passer """ fields = self._get_request(['id', 'path', 'name', 'filable_type', 'filable_id', 'quality', 'lang', 'subtitles'], ['id'], **params) return self._get_response('files', fields, 'put') def put_subtitle(self, **params): """ Edite un sous-titre :param params: paramètres à passer """ fields = self._get_request(['id', 'path', 'name', 'subtitlable_type', 'subtitlable_id', 'quality', 'lang'], ['id'], **params) return self._get_response('subtitles', fields, 'put') def put_serie(self, **params): """ Edite une série :param params: paramètres à passer """ fields = self._get_request(['id', 'title', 'status', 'imdb_id', 'tmdb_id', 'summary', 'cover_img', 'rating', 'release_date', 'autoFill'], ['id'], **params) return self._get_response('series', fields, 'put') def put_episode(self, **params): """ Edite un épisode d'une série :param params: paramètres à passer """ fields = self._get_request(['id', 'title', 'serid_id', 'tmdb_id', 'summary', 'cover_img', 'season', 'episode', 'rating', 'release_date'], ['id'], **params) return self._get_response('episodes', fields, 'put') def put_actor(self, **params): """ Edite un acteur :param params: paramètres à passer """ fields = self._get_request(['id', 'name', 'imdb_id', 'tmdb_id', 'cover_img'], ['id'], **params) return self._get_response('actors', fields, 'put') def put_broken(self, **params): """ Edite un lien mort :param params: paramètres à passer """ fields = self._get_request(['id', 'treated'], ['id', 'treated'], **params) return self._get_response('broken', fields, 'put') def delete_film(self, **params): """ Supprime un film :param params: paramètres à passer """ fields = self._get_request(['id'], ['id'], **params) return self._get_response('films', fields, 'delete') def delete_file(self, **params): """ Supprime un fichier :param params: paramètres à passer """ fields = self._get_request(['id'], ['id'], **params) return self._get_response('files', fields, 'delete') def delete_subtitle(self, **params): """ Supprime un sous-titre :param params: paramètres à passer """ fields = self._get_request(['id'], ['id'], **params) return self._get_response('subtitles', fields, 'delete') def delete_serie(self, **params): """ Supprime une série :param params: paramètres à passer """ fields = self._get_request(['id'], ['id'], **params) return self._get_response('series', fields, 'delete') def delete_episode(self, **params): """ Supprime un épisode d'une série :param params: paramètres à passer """ fields = self._get_request(['id'], ['id'], **params) return self._get_response('episodes', fields, 'delete') def delete_actor(self, **params): """ Supprime un acteur :param params: paramètres à passer """ fields = self._get_request(['id'], ['id'], **params) return self._get_response('actors', fields, 'delete') def delete_broken(self, **params): """ Supprime un lien mort :param params: paramètres à passer """ fields = self._get_request(['id'], ['id'], **params) return self._get_response('broken', fields, 'delete') if __name__ == '__main__': piexel = Piexel('http://piexel.rez', 'app', 'token') film = piexel.get_films(title='test') print(film)