Commentaires

This commit is contained in:
redstorm45 2017-12-11 09:04:37 +01:00
parent 45f97936f0
commit 036a432b48
5 changed files with 63 additions and 75 deletions

View file

@ -1,10 +1,10 @@
[api]
# Valeur app à transmettre à l'API
# Identifiant de connexion à transmettre à l'API
app = ''
# Token à transmettre à l'API
# Token de connexion à transmettre à l'API
token = ''
# Formats à reconnaitre
# Extensions à reconnaître comme extensions vidéos valides
extensions = 'avi','mkv','mp4','m2ts','rmvb'
# Serveur où appeler l'API
server = 'http://piexel.rez'

18
file.py
View file

@ -16,19 +16,28 @@ class File:
self.fileable_type = {None: None, 'App\\Film':'film', 'App\\Episode':'episode'}[api_fileable_type]
def get_ext(self):
"""
Donne l'extension du fichier
"""
_, ext = posixpath.splitext(self.name)
return ext
def without_ext(self):
"""
Donne le nom du fichier sans extension
"""
n, ext = posixpath.splitext(self.name)
return n
def extract_title(self, tok):
# extrait un titre de film depuis la variable #TITLE#
"""
extrait un titre de film depuis la variable #TITLE#
"""
# récupère le titre
if 'TITLE' in self.info:
fname = self.info['TITLE']
else:
fname, ext = posixpath.splitext(self.name)
fname = self.without_ext()
# 1) séparateurs
fname = fname.replace('.', ' ')
fname = fname.replace('_', ' ')
@ -70,8 +79,9 @@ class File:
self.fileable_type = 'film'
def filename_same(self, other):
# Compare les noms de fichiers de self et de other
# En supprimant les espaces, la date, et les marques de qualitée
"""
Vérifie si les deux noms de fichiers sont les mêmes
"""
return self.name == other.name
def __eq__(self, other):

30
main.py
View file

@ -45,8 +45,10 @@ def ftpwalk(directory, ftp):
def visit_folder(domain, api, rules, tok):
"""
Visite un dossier sur un serveur,
et ajoute les fichiers trouvés à l'API
Visite un dossier sur un serveur, spécifié par <domain>,
et ajoute les fichiers qui vérifient les règles <rules>,
à l'API par l'interface <api>, tout en filtrant les tokens
trouvés dans le nom des fichiers avec l'interface <tok>
"""
# Connection au serveur
print('connect to:', domain['server'])
@ -100,6 +102,10 @@ def visit_folder(domain, api, rules, tok):
print('visit finished ',domain['server']+domain['path'])
def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
"""
Utilise les listes des fichiers locaux Lfilm_loc et des fichiers de l'API Lfilm_api
pour mettre à jour la liste des films de l'api sur le domaine <domain>
"""
Lloc = Lfilm_loc
Lapi = Lfilm_api
@ -277,6 +283,10 @@ def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
# TODO: traiter les films non postés (Lcannot_post)
def handle_episodes(Lepisode_loc, Lepisode_api, domain, api, rules, tok):
"""
Utilise les listes des fichiers locaux Lepisode_loc et des fichiers de l'API Lepisode_api
pour mettre à jour la liste des episodes et des series de l'api sur le domaine <domain>
"""
Lloc = Lepisode_loc
Lapi = Lepisode_api
@ -383,20 +393,30 @@ def handle_episodes(Lepisode_loc, Lepisode_api, domain, api, rules, tok):
def post_markers(api, file_, fileid):
"""
Poste sur l'api par l'interface <api> tout les marqueurs
du fichier <file_>, indexé à l'ID <fileid>
"""
for lang in file_.markers['lang']:
api.post_file_language(fileid, lang)
time.sleep(0.5)
time.sleep(1)
for qual in file_.markers['quality']:
api.post_file_qualities(fileid, qual)
time.sleep(0.5)
time.sleep(1)
for sub in file_.markers['subtitle']:
api.post_file_subtitle(fileid, sub)
time.sleep(0.5)
time.sleep(1)
def main():
"""
Fonction principale du programme, réalise toute les opérations
de chargement des configurations, d'initialisation des interfaces,
et parcours tout les dossiers cherchables.
"""
conf = config.Config()
api = piexel.Piexel(conf.server, conf.app, conf.token)
tokens = tokenizer.Tokenizer(conf, api)
folders = api.get_folders()
rules = api.get_paths()

View file

@ -89,7 +89,7 @@ class Piexel:
def get_tokens(self, **params):
"""
Récupère les fichiers
Récupère les tokens
:param params: paramètres à passer
"""
fields = self._get_request([], [], **params)
@ -97,7 +97,7 @@ class Piexel:
def get_folders(self, **params):
"""
Récupère les fichiers
Récupère les dossiers de recherche
:param params: paramètres à passer
"""
fields = self._get_request([], [], **params)
@ -105,7 +105,7 @@ class Piexel:
def get_paths(self, **params):
"""
Récupère les fichiers
Récupère les règles d'indexage
:param params: paramètres à passer
"""
fields = self._get_request([], [], **params)
@ -161,7 +161,7 @@ class Piexel:
def post_file_subtitle(self, file, **params):
"""
Ajoute une langue à un fichier
Ajoute une langue de sous-titre à un fichier
:param params: paramètres à passer
"""
fields = self._get_request(['value'], ['value'], **params)
@ -169,7 +169,7 @@ class Piexel:
def post_file_qualities(self, file, **params):
"""
Ajoute une langue à un fichier
Ajoute une qualitée à un fichier
:param params: paramètres à passer
"""
fields = self._get_request(['value'], ['value'], **params)
@ -199,22 +199,6 @@ class Piexel:
fields = self._get_request(['season', 'episode', 'serie_id'], ['season', 'episode', 'serie_id'], **params)
return self._get_response('episode', 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, id, **params):
"""
Edite un fichier
@ -223,48 +207,11 @@ class Piexel:
fields = self._get_request(['path', 'name', 'filable_type', 'filable_id', 'quality', 'lang', 'subtitles'], [], **params)
return self._get_response('file/'+str(id), 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_file(self, id, **params):
"""
Edite un lien mort
Supprime un fichier
:param params: paramètres à passer
"""
fields = self._get_request([], [], **params)
return self._get_response('file/'+str(id), fields, 'delete')
if __name__ == '__main__':
piexel = Piexel('http://piexel.rez', 'app', 'token')
film = piexel.get_films(title='test')
print(film)

View file

@ -5,18 +5,29 @@ import re
class Tokenizer:
def __init__(self, conf, api):
self.conf = conf
self.api = api
self.reload_tokens()
self.reload_tokens(api)
def reload_tokens(self):
self.tk = self.api.get_tokens()
def reload_tokens(self, api):
"""
Charge les tokens depuis l'API,
et initialise la liste des étapes
"""
self.tk = api.get_tokens()
self.steps = list(set(t['step'] for t in self.tk))
self.steps.sort()
def get_tokens_step(self, step):
"""
Retourne tout les tokens de l'étape <step>
"""
return [t for t in self.tk if t['step'] == step]
def tokenize(self, filename):
"""
Analyse <filename> pour trouver tous ses marqueurs.
Les marqueurs sont enlevés, et rangés dans des listes.
retourne le nom privé des marqueurs, ainsi que le dictionnaire des marqueurs
"""
found = {'lang':[], 'quality':[], 'subtitle':[]}
for step in self.steps:
for tok in self.get_tokens_step(step):