288 lines
9.9 KiB
Python
288 lines
9.9 KiB
Python
#coding:utf-8
|
|
import requests
|
|
from requests.auth import HTTPBasicAuth
|
|
|
|
class PiexelErrors(Exception):
|
|
pass
|
|
|
|
class InvalidToken(PiexelErrors):
|
|
pass
|
|
|
|
class ParameterError(PiexelErrors):
|
|
pass
|
|
|
|
class InvalidResponse(PiexelErrors):
|
|
pass
|
|
|
|
class Piexel:
|
|
def __init__(self, domain, app='', token='', endpoint='/api/'):
|
|
#self.app = app
|
|
#self.token = token
|
|
self.auth = HTTPBasicAuth(app, token)
|
|
self.domain = domain
|
|
self.endpoint = endpoint
|
|
|
|
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
|
|
#fields['auth'] = self.auth
|
|
url = self.domain + self.endpoint + controller
|
|
if request_type == 'get':
|
|
response = requests.get(url, auth=self.auth, params=fields)
|
|
elif request_type == 'post':
|
|
response = requests.post(url, auth=self.auth, params=fields)
|
|
elif request_type == 'put':
|
|
response = requests.put(url, auth=self.auth, params=fields)
|
|
elif request_type == 'delete':
|
|
response = requests.delete(url, auth=self.auth, data=fields)
|
|
response.encoding = 'utf-8'
|
|
code = response.status_code
|
|
try:
|
|
data = response.json()
|
|
except:
|
|
raise InvalidResponse(url, fields, response.text)
|
|
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_tokens(self, **params):
|
|
"""
|
|
Récupère les fichiers
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request([], [], **params)
|
|
return self._get_response('indexer/tokens', fields)
|
|
|
|
def get_folders(self, **params):
|
|
"""
|
|
Récupère les fichiers
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request([], [], **params)
|
|
return self._get_response('indexer/folders', fields)
|
|
|
|
def get_paths(self, **params):
|
|
"""
|
|
Récupère les fichiers
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request([], [], **params)
|
|
return self._get_response('indexer/paths', 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_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_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_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)
|