323 lines
11 KiB
Python
323 lines
11 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', data=None):
|
|
"""
|
|
Build response
|
|
:param controller: controller à utiliser
|
|
:param fields: champ à passer
|
|
"""
|
|
url = self.domain + self.endpoint + controller
|
|
if request_type == 'get':
|
|
response = requests.get(url, auth=self.auth, params=fields)
|
|
elif request_type == 'post':
|
|
if data is not None:
|
|
response = requests.post(url, auth=self.auth, params=fields, json=data)
|
|
else:
|
|
response = requests.post(url, auth=self.auth, params=fields)
|
|
elif request_type == 'put':
|
|
if data is not None:
|
|
response = requests.put(url, auth=self.auth, params=fields, json=data)
|
|
else:
|
|
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:
|
|
print('error:', response.text)
|
|
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 tokens
|
|
: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 dossiers de recherche
|
|
: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 règles d'indexage
|
|
: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('film', fields, 'post')
|
|
|
|
def post_file(self, **params):
|
|
"""
|
|
Ajoute un fichier
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request(['path', 'name', 'type', 'type_id'], ['path', 'name', 'type', 'type_id'], **params)
|
|
return self._get_response('file', fields, 'post')
|
|
|
|
def post_file_language(self, file, **params):
|
|
"""
|
|
Ajoute une langue à un fichier
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request(['value'], ['value'], **params)
|
|
return self._get_response('languages/' + str(file) + '/attach', fields, 'post')
|
|
|
|
def post_file_subtitle(self, file, **params):
|
|
"""
|
|
Ajoute une langue de sous-titre à un fichier
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request(['value'], ['value'], **params)
|
|
return self._get_response('subtitle-languages/' + str(file) + '/attach', fields, 'post')
|
|
|
|
def post_file_qualities(self, file, **params):
|
|
"""
|
|
Ajoute une qualitée à un fichier
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request(['value'], ['value'], **params)
|
|
return self._get_response('qualities/' + str(file) + '/attach', 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('serie', 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('episode', fields, 'post')
|
|
|
|
def put_file(self, id, **params):
|
|
"""
|
|
Edite un fichier
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request(['path', 'name', 'filable_type', 'filable_id', 'quality', 'lang', 'subtitles'], [],
|
|
**params)
|
|
return self._get_response('file/' + str(id), fields, 'put')
|
|
|
|
def delete_file(self, id, **params):
|
|
"""
|
|
Supprime un fichier
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request([], [], **params)
|
|
return self._get_response('file/' + str(id), fields, 'delete')
|
|
|
|
def get_index(self, **params):
|
|
"""
|
|
Récupère les fichiers indexés
|
|
:param params: paramètres à passer
|
|
"""
|
|
fields = self._get_request(['id', 'path', 'name', 'limit', 'first', 'is_referenced', 'like'], [], **params)
|
|
return self._get_response('index', fields)
|
|
|
|
def post_index(self, params):
|
|
"""
|
|
Ajoute un fichier
|
|
:param params: paramètres à passer
|
|
"""
|
|
return self._get_response('index', {}, 'post', params)
|
|
|
|
def delete_index(self, id):
|
|
"""
|
|
Supprime un fichier indéxé
|
|
:param id: id du fichier à supprimer
|
|
"""
|
|
return self._get_response('index/' + str(id), {}, 'delete')
|
|
|
|
def put_audio_codec(self, id, codec):
|
|
"""
|
|
Ajoute le codec audio
|
|
:param id: identifiant du fichier
|
|
:param codec: nom du codec
|
|
"""
|
|
fields = self._get_request(['codec', "is_video"], ["codec"], name=codec, is_video=False)
|
|
return self._get_response('file/' + str(id) + '/codec', fields, 'put')
|
|
|
|
def put_video_codec(self, id, codec):
|
|
"""
|
|
Ajoute le codec video
|
|
:param id: identifiant du fichier
|
|
:param codec: nom du codec
|
|
"""
|
|
fields = self._get_request(['codec', "is_video"], ["codec"], name=codec, is_video=True)
|
|
return self._get_response('file/' + str(id) + '/codec', fields, 'put')
|
|
|
|
def put_audio_container(self, id, container):
|
|
"""
|
|
Ajoute le container audio
|
|
:param id: identifiant du fichier
|
|
:param container: nom du container
|
|
"""
|
|
fields = self._get_request(['container', "is_video"], ["container"], name=container, is_video=False)
|
|
return self._get_response('file/' + str(id) + '/container', fields, 'put')
|
|
|
|
def put_video_container(self, id, container):
|
|
"""
|
|
Ajoute le container video
|
|
:param id: identifiant du fichier
|
|
:param container: nom du container
|
|
"""
|
|
fields = self._get_request(['container', "is_video"], ["container"], name=container, is_video=True)
|
|
return self._get_response('file/' + str(id) + '/container', fields, 'put')
|
|
|
|
def delete_audio_codec(self, file_id):
|
|
"""
|
|
Supprime le codec audio
|
|
:param file_id: identifiant du fichier
|
|
"""
|
|
fields = self._get_request(["is_video"], ["is_video"], is_video=False)
|
|
return self._get_response('file/' + str(file_id) + "/codec", fields, 'delete')
|
|
|
|
def delete_video_codec(self, file_id):
|
|
"""
|
|
Supprime le codec video
|
|
:param file_id: identifiant du fichier
|
|
"""
|
|
fields = self._get_request(["is_video"], ["is_video"], is_video=True)
|
|
return self._get_response('file/' + str(file_id) + "/codec", fields, 'delete')
|
|
|
|
def delete_audio_container(self, file_id):
|
|
"""
|
|
Supprime le container audio
|
|
:param file_id: identifiant du fichier
|
|
"""
|
|
fields = self._get_request(["is_video"], ["is_video"], is_video=False)
|
|
return self._get_response('file/' + str(file_id) + "/container", fields, 'delete')
|
|
|
|
def delete_video_container(self, file_id):
|
|
"""
|
|
Supprime le container video
|
|
:param file_id: identifiant du fichier
|
|
"""
|
|
fields = self._get_request(["is_video"], ["is_video"], is_video=True)
|
|
return self._get_response('file/' + str(file_id) + "/container", fields, 'delete')
|
|
|